Встроенный язык
Встроенный язык является важной частью технологической платформы «1С:Предприятия 8», поскольку позволяет разработчику описывать собственные алгоритмы функционирования прикладного решения.
Встроенный язык имеет много общих черт с другими языками, такими как Pascal, Java Script, Basic, что облегчает его освоение начинающими разработчиками. Однако он не является прямым аналогом какого-либо из перечисленных языков.
Вот лишь некоторые, наиболее значимые особенности встроенного языка:
- предварительная компиляция — перед исполнением модули, содержащие текст на встроенном языке, преобразуются во внутренний код;
- кэширование скомпилированных модулей в памяти;
- мягкая типизация — тип переменной определяется типом значения, которое она содержит, и может изменяться в процессе работы;
- отсутствие программного описания объектов конфигурации — разработчик может использовать либо встроенные в платформу объекты, либо объекты, созданные системой в результате визуального конструирования прикладного решения.
Событийная ориентированность встроенного языка
Назначение встроенного языка в системе 1С:Предприятие определяется идеологией создания прикладных решений. Прикладные решения в 1С:Предприятии 8 не кодируются целиком. Большая часть прикладного решения создается разработчиком путем визуального конструирования — создания новых объектов конфигурации, задания их свойств, форм представления, взаимосвязей и пр. Встроенный язык используется лишь для того, чтобы определить поведение объектов прикладного решения, отличное от типового, и создать собственные алгоритмы обработки данных.
По этой причине модули, содержащие текст на встроенном языке, используются системой в конкретных, заранее известных ситуациях, которые могут возникнуть в процессе работы прикладного решения. Такие ситуации называются событиями. События могут быть связаны с функционированием объектов прикладного решения или с самим прикладным решением, как таковым.
Например, с функционированием объекта прикладного решения Справочник связан ряд событий, среди которых есть событие ПередЗаписью:
Это событие возникает непосредственно перед тем, как данные элемента справочника должны быть записаны в базу данных. Разработчик, используя встроенный язык, может описать алгоритм, который, например, будет проверять корректность данных, введенных пользователем. Разместив этот алгоритм в соответствующем модуле, разработчик обеспечит то, что каждый раз, как пользователь будет выполнять запись элемента справочника, система будет выполнять созданный разработчиком алгоритм и проверять, не забыл ли пользователь заполнить обязательные реквизиты справочника.
Таким образом можно сказать, что встроенный язык является скриптовым языком для программирования бизнес-логики, а использование модулей на встроенном языке является событийно-зависимым, т. е. выполнение модулей происходит при возникновении определенных событий в процессе функционирования прикладного решения.
Универсальные коллекции значений
Встроенный язык поддерживает работу с большим количеством разнообразных объектов. Безусловно, основную группу объектов составляют прикладные объекты, позволяющие описывать алгоритмы функционирования бизнес-логики.
Однако не менее важной группой являются объекты, предназначенные для хранения временных наборов данных в течение сеанса работы пользователя. Как правило, они служат для вспомогательного сбора, группировки, анализа и обработки информации:
Перечислим кратко их возможности:
Массив
Представляет собой пронумерованную коллекцию значений произвольного типа. К элементу массива можно обращаться по его индексу. В качестве элементов массива могут выступать, в частности, другие массивы. Это позволяет создавать многомерные массивы.
Структура
Представляет собой поименованную коллекцию, состоящую из пар ключ — значение. Ключ может быть только строковым, значение — произвольного типа. К элементу структуры можно обращаться по значению его ключа, т. е. по имени. Обычно используется для хранения небольшого количества значений, каждое из которых имеет некоторое уникальное имя.
Соответствие
Также как и структура, представляет собой коллекцию пар ключ — значение. Однако, в отличие от структуры, ключ может быть практически любого типа.
Список значений
Используется, как правило, для решения интерфейсных задач. Позволяет строить динамические наборы значений и манипулировать ими (добавлять, редактировать, удалять элементы, сортировать). Он может содержать значения любого типа, кроме того, в одном списке типы хранимых значений могут быть разными.
Например, список значений может использоваться для выбора конкретного документа из списка возможных документов, сформированного по сложному алгоритму.
Таблица значений
Таблица значений позволяет строить динамические наборы значений и манипулировать ими. Она может быть наполнена значениями любого типа, и в одной таблице типы хранимых значений могут быть разными.
Одним из примеров использования таблицы значений может служить организация представления в форме списка элементов справочника, отобранных по сложному алгоритму.
Дерево значений
Дерево значений представляет собой динамически формируемый набор значений любого типа, похожий на таблицу значений. В отличие от таблицы значений, строки дерева значений могут образовывать иерархические структуры: каждая строка дерева может иметь набор подчиненных строк, каждая из подчиненных строк, в свою очередь, также может иметь набор подчиненных строк и так далее. При этом поиск значений, сортировка, получение итогов могут осуществляться либо по текущему уровню иерархии, либо включая все подчиненные.
COMSafeArray
Представляет собой объектную оболочку над многомерным массивом SAFEARRAY из COM. Позволяет создавать и использовать SAFEARRAY для обмена данными между COM-объектами.
Фиксированный массив
Неизменяемый массив. Массив заполняется системой при инициализации объектов данного типа или разработчиком, с помощью конструктора.
Редактор текстов и модулей
Для создания и изменения текстов на встроенном языке разработчик может использовать редактор текста и модуля, обладающий удобными средствами создания, редактирования и синтаксической проверки модулей. Подробнее…
Платформа «1С: Предприятие» — что под капотом?
Привет, Хабр!
В этой статье мы начнем рассказ о том, как устроена внутри платформа «1С:Предприятие 8» и какие технологии используются при ее разработке.
- кластер серверов
- «тонкий» клиент, способный подключаться к серверу по http и собственному бинарному протоколу
- клиент для работы в двухзвенной архитектуре с БД, размещенной на жестком диске или сетевой папке
- веб-клиент
- средства администрирования сервера приложений
- среда разработки (известная как Конфигуратор)
- среда исполнения для iOS, Android и Windows Phone (мобильная платформа 1С)
Нативные приложения
- STL (в частности, строки, контейнеры и алгоритмы)
- множественное наследование, в т.ч. множественное наследование реализации
- шаблоны
- исключения
- умные указатели (собственная реализация)
Компоненты
Для обеспечения модульности весь функционал разделен на компоненты, представляющие из себя динамические библиотеки (*.dll под Windows, *.so — под Linux). Всего компонентов более полутора сотен, приведем описания некоторых из них:
backend | Содержит «движок» метаданных платформы |
accnt | Объекты, которые прикладные разработчики используют для построения бухгалтерского учета (планы счетов и регистры бухгалтерии) |
bsl | Движок исполнения встроенного языка |
nuke | Собственная реализация аллокатора памяти |
dbeng8 | Движок файловой базы. Простая файл-серверная машина баз данных, основанная на ISAM, включающая также простой SQL-процессор |
wbase | Содержит базовые классы и функции для реализации пользовательского интерфейса Windows — оконные классы, доступ к GDI и т. п. |
- Разделение способствует лучшему проектированию, в частности лучшей изоляции кода
- Из набора компонентов можно гибко собирать разные варианты поставки:
- Например, инсталляция тонкого клиента будет содержать wbase, но не будет backend
- а на сервере wbase, наоборот, не будет
- оба варианта будут, конечно, содержать nuke и bsl
SCOM
- Предоставляет фабричные методы, позволяющие создать класс из другой компоненты зная только его название (без раскрытия реализации)
- Предоставляет инфраструктуру умных указателей с подсчетом ссылок. За временем жизни SCOM-класса не нужно следить вручную
- Позволяет узнать реализует ли объект конкретный интерфейс и автоматически привести указатель на объект к указателю на интерфейс
- Создать объект-сервис, всегда доступный через метод get_service и т.д.
SCOM_CLASS_ENTRY(JSONStreamReader)
Этот макрос опишет специальный статический класс-регистратор, конструктор которого будет вызван при загрузке компоненты в память.
После это можно создать его экземпляр в другой компоненте:IJSONStreamReaderPtr jsonReader = create_instance(SCOM_CLSIDOF(JSONStreamReader));
Для поддержки сервисов SCOM предлагает дополнительную, достаточно сложную инфраструктуру. Центральным в ней является понятие SCOM-процесса, который служит контейнером для запущенных сервисов (т.е. выполняет роль Service Locator), а также содержит привязку к локализуемым ресурсами. SCOM процесс привязывается к потоку ОС. Благодаря этому внутри приложения можно вот так получать сервисы:
SCOM_Process* process = core::current_process(); if (process) return get_service(process);
Более, того переключая логические (SCOM) процессы привязанные к потоку, можно получить практически независимые с точки зрения информационного пространства приложения, выполняющиеся в рамках одного потока. Так устроен наш тонкий клиент, работающий с файловой базой — внутри одного процесса ОС находятся два SCOM-процесса, один связан с клиентом, а второй — с сервером. Такой подход позволяет унифицировать написания кода, который будет работать как на локальной файловой базе, так и в «настоящем» клиент-серверном варианте. Цена за такое единообразие — накладные расходы, но практика показывает, что они того стоят.
На основе компонентной модели SCOM реализована и бизнес-логика и интерфейсная часть 1С: Предприятия.
Пользовательский интерфейс
Кстати, об интерфейсах. Мы не используем стандартные контролы Windows, наши элементы управления реализованы напрямую на Windows API. Для Linux-версии сделана прослойка, работающая через библиотеку wxWidgets.
Библиотека элементов управления не зависит от других частей «1С:Предприятия» и используется нами еще в нескольких небольших внутренних утилитах.За годы развития 1С:Предприятие внешний вид контролов менялся, но серьезное изменение принципов произошло только один раз, в 2009 году, с выходом версии 8.2 и появлением «управляемых форм». Помимо изменения внешнего вида, фундаментально изменился принцип компоновки формы — произошел отказ от попиксельного позиционирования элементов в пользу flow-компоновки элементов. Кроме того, в новой модели элементы управления работают не напрямую с доменными объектами, а со специальными DTO (Data Transfer Objects).
Эти изменения позволили создать веб-клиент «1С:Предприятия», повторяющий С++ логику контролов на JavaScript. Мы стараемся поддерживать функциональную эквивалентность между тонким и веб клиентами. В том случае, когда это невозможно, например, из-за ограничений доступных из JavaScript API (например, возможности работы с файлами очень ограничены), мы часто реализуем нужную функциональность при помощи расширений браузеров, написанных на C++. На данный момент мы поддерживаем Internet Explorer и Microsoft Edge (Windows), Google Chrome(Windows), Firefox (Windows и Linux) и Safari (MacOS).Кроме того, технология управляемых форм используется для создания интерфейса мобильных приложений на платформе 1С. На мобильных устройствах отрисовка контролов реализована с использованием «родных» для операционной системы технологий, но уже для логики компоновки формы и реакции интерфейса используется тот же код, что и в «большой» платформе «1С:Предприятие».
Интерфейс 1С на ОС Linux
Интерфейс 1С на мобильном устройстве
Интерфейс 1С на других платформах
Интерфейс 1С на ОС Windows
Интерфейс 1С — веб-клиент
Open source
- cURL для работы с HTTP и FTP.
- OpenSSL для работы с криптографией и установки TLS соединений
- libxml2 и libxslt для разбора XML
- libetpan для работы с почтовыми протоколами (POP3, SMTP, IMAP)
- mimetic для разбора сообщений электронной почты
- sqllite для хранения журналов работы пользователей
- ICU для интернационализации
Заключение
В статье мы коснулись нескольких основных аспектов разработки платформы «1С: Предприятие». В ограниченном объеме статьи мы затронули лишь некоторые интересные, на наш взгляд, аспекты.
Общее описание различных механизмов платформы можно посмотреть тут.
Какие темы были бы интересны Вам в следующих статьях?Как реализована мобильная платформа 1С?
Описание внутреннего устройства веб-клиента?
Или, может быть, Вам интересен процесс выбора фич для новых релизов, разработки и тестирования?Пишите в комментариях!
- 1С
- erp системы
- разработка приложений
- кроссплатформенная разработка
- 1С:Предприятие
- C++
- программирование
- Блог компании 1С
- Веб-разработка
- Анализ и проектирование систем
- C++
История создания программы «1С:Предприятие 8» и как она устроена
Сегодня рассмотрим историю создания 1С и её устройство, причём максимально простым языком, понятным даже школьнику. Узнаем, как устроена её база данных и из чего складывается стоимость программы.
22 ноября 2022, вторник 22:59
Alex-IT [ ] для раздела Блогиреклама
«1С:Предприятие» стала самым популярным программным продуктом компании «1С». Используется для автоматизации деятельности на предприятии (включая бухгалтерию, склад и кадры). Написана на языках программирования C++, C#, SQL, имеет встроенный язык программирования 1С:Предприятие, позволяющий производить тонкую настройку программы под каждого клиента. Встроенный язык программирования имеет сходства с языками Pascal, Java Script, Basic.
Что такое «1С:Предприятие 8» простыми словами
реклама
По мнению самих программистов, платформа «1С:Предприятие 8» имеет свои особенности:
• Может работать в файловом и серверном вариантах;
• Имеет независимую систему учёта, легко устанавливаемую и настраиваемую;
реклама
• Является мощной экосистемой для программистов, имеет все необходимые инструменты для настройки под любого пользователя;
• Имеет приятный интерфейс, не надоедающий за многие годы;
• Является выгодным решением для бизнеса (дешевле западных аналогов);
• Имеет большую сеть франчайзи, и оказывает услуги начального обучения программистов и пользователей;
реклама
• Обширная база знаний, накопленная за многие годы;
• В программе средняя скорость выполнения алгоритмов;
• Во встроенном языке программирования отсутствуют классы, анонимные функции и прочие современные фичи. Хотя для многих задач они пока не требуются.
реклама
«1С:Предприятие 8» имеет платформу (аналог «движка»), ставшую промежуточным звеном между программой и базой данных. Программы для данного «движка» называют конфигурациями. Типовые конфигурации пишут сами разработчики (на них следует ориентироваться для уменьшения проблем при обновлениях). А рабочие конфигурации (что называется под ключ) пишут уже сторонние или штатные программисты в компаниях (все они проходят сертификацию в 1С).
В конфигурации описывается структура базы данных, тексты процедур, хранящиеся в отдельных модулях и прочие особенности программы, настроенной под конкретного клиента.
Получить сертификат «1С:Специалист» является первоочередной задачей для начинающего программиста или администратора программ «1С». Для получения сертификата нужно пройти аттестационный экзамен. Он довольно сложный, согласно статистике, с первого раза его проходят лишь четверо из десяти аттестуемых. Что требуется для подготовки, и расписание самих экзаменов написаны на официальном сайте 1С.
История создания и монополизм на российском рынке
Первая программа 1C была написана братьями Борисом и Сергеем Нуралиевыми в 1991 году, они являются основателями компании «1C». Интересный факт, своему названию 1C обязана быстрому ответу программы, выдаваемому не более чем за одну секунду.
В то время на рынке бухгалтерских программ уже имелись довольно популярные аналоги: «Инфобухгалтер», «Парус», «Финансы без проблем», «Инфин», «Турбобухгалтер». Но они проигрывали 1С по обширности сети сбыта и гибкости настроек, что и сделало её монополистом российского рынка.
Первая версия программы была написана под DOS (одну из первых операционных систем). Изначально она была слабее конкурентов, но в неё был встроен собственный макроязык программирования, позволяющий проводить тонкую настройку программы, расширяя её функционал. Программу было возможно адаптировать под любое предприятие. А дистрибьюторы (официальные продавцы) могли не только продавать, но и заниматься внедрением, получая дополнительный доход. Отмечу, что внедрение процесс трудоёмкий и не всегда быстрый, если компания большая. У внедренцев оплачивается по тарифу каждое обращение от клиента, что обеспечивает программистам приличные зарплаты.
По словам Бориса Нуралиева, в 2015 году у «1С» было уже более 200 дочерних и совместных предприятий. Позднее их число только увеличивается.
Согласно данным аналитиков CNews Analytics, компания «1С» по итогам 2020 года возглавляла рейтинг отечественных поставщиков программного обеспечения «Крупнейшие ИТ-разработчики России 2020». Её выручка составила 65,01 млрд рублей.
Устройство базы данных
«1С:Предприятие 8» имеет базу данных, в которой хранятся приходы и расходы, данные о сотрудниках и прочая информация. База данных может быть файловой или серверной.
В первом варианте вся база данных содержится в одном файле (имеющим расширение «1cd»). При этом платформа устанавливается на все компьютеры и напрямую считывает/заполняет базу данных.
Плюсами файлового варианта считаются низкая стоимость и простота развёртывания.
Минусом стала закрытая структура файла «1cd», отсутствие единой системы, взаимодействующей с базой данных. В итоге её проблематично использовать при числе пользователей больше 30. Также, при разрастании базы данных до 15 ГБ (и более) появляются сбои при динамическом обновлении. Как отмечают программисты, исправлять такие сбои довольно сложно, а утилита для починки базы не всегда её правильно чинит, а иногда даже портит.
Решением проблемы стало ежедневное резервное копирование базы данных. Плюс народные умельцы написали специальные утилиты для работы с файлами базы данных.
Более прогрессивным стал серверный вариант, когда для хранения базы данных используется SQL-сервер (ранее это был только MS SQL, но с версии 8.2.14 стало возможно использовать Firebird PostgreSQL, IBM DB2, Oracle Database). При этом сама платформа использует трехуровневую архитектуру.
В серверном варианте часть кода выполняется на клиентском ПК, а другая часть на сервере. С базой данных взаимодействует только сервер (что позволяет работать с одной базой большому числу сотрудников). Начиная с версии 8.2, кроме традиционного режима работы, названном режим «толстый клиент», появилось пара новых режимов работы: «тонкий клиент» (когда ПК пользователя выступает в роли терминала) и «web-клиент» (для работы через браузер).
Плюсами серверного варианта стали распределение нагрузки, открытость базы данных, отсутствие ограничений по числу пользователей.
Минусами стали стоимость, поскольку приобретать нужно отдельно клиентские лицензии на каждый ПК, отдельно лицензию на сервер 1С, плюс лицензию на сервер SQL (если используется не бесплатный). Иногда могут появляться сложности в работе базы данных.
Отличием и плюсом серверного варианта базы данных стало большее число настроек, но при этом все настройки производятся в диалоге установки и не требует что-либо прописывать в отдельных файлах (как это практикуется у многих программ). Основную сложность представляет установка и настройка SQL-сервера, ввиду большого числа настроек и необходимости изучения дополнительных инструкций, чтобы всё правильно настроить.
Как образуется цена приобретаемой программы
Закупочная цена всего программного обеспечения серии «1С:Предприятие», вдвое меньше рекомендуемой фирмой «1С». Маржа продавца ПО составляет 50% — подоходный налог. Дистрибьюторы получают большое количество фирменных материалов (от справочников, до рекламной продукции). Поэтому стоимость продуктов 1С везде примерно одинаковая, отличается лишь качество сопровождения, которое напрямую зависит от квалификации программистов.
Техническая поддержка
Условия технической поддержки программного обеспечения системы «1С:Предприятие» отличаются в зависимости от версии программы, комплектации поставки, а также времени выпуска продукта. Для оформления поддержки, пользователю нужно подписаться на «информационно-технологическое сопровождение», сокращённо ИТС.
В техподдержку входит предоставление доступа к разделу с обновлениями для платформы и конфигураций. Также предоставляется доступ к информационным разделам, описывающим особенности работы 1С. Плюс предоставляется диск с полезными материалами. Ещё есть фирменный форум, но он сильно уступает народному.
Также можно писать электронные письма в компанию 1С, но на них либо не ответят, либо придёт ответ робота: «Письмо передано в отдел разработки». Для программистов основную пользу представляют информация в интернете и встроенная в конфигуратор справка.
Резервное копирование
Для резервного копирования базы данных используются встроенные в программу средства, и дополнительные программы. В клиент-серверном варианте на СУБД Microsoft SQL резервное копирование базы данных может проводиться средствами SQL.
Из сторонних программ, имеются универсальные решения, например, Acronis Backup, Acronis Recovery, Handy Backup, Symantec Backup Exec, и специализированные, например, Effector Saver.
Система защиты
Для защиты бухгалтерских программ от несанкционированного использования служат аппаратные ключи HASP (внешне похожие на USB флешку, а по сути ей и являются). Но как показала практика, защита оказалась дырявой. Например, программист Сергей Давыдюк написал программный эмулятор системы защиты, получив в 2005 году условный срок на пару лет.
В базовых конфигурациях 8 версии программы появилась защита через электронный ключ (его нужно активировать после приобретения программы). На сегодняшний день по умолчанию используется электронный ключ, а аппаратные ключи продаются дистрибьюторами по запросу.
Интересно, что Сергей Давыдюк написал свою программу «sable» (возможно намекая на поговорку кривой, как турецкая сабля) на основе кодов хакера Mete0. А среди пользователей «sable», были и покупатели лицензионных версий 1С. Оказалось, что встроенная в «1С: Предприятие» защита не давала программе запускаться на некоторых конфигурациях компьютеров (тот случай, когда хакеры реагируют оперативней разработчиков). Сообщается, что первая публичная демонстрация исходного кода эмулятора HASP проводилась хакером Mete0 в августе 1997 года в одной из эхоконференций FIDO.
Разбор тестирования 1С:Профессионал и PMP
Встроенный язык 1С является частью платформы 1С:Предприятие, и нужен для создания алгоритмов в ходе разработки. Язык имеет схожие черты с другими языками программирования, но более нигде кроме 1С не используется. Поддерживается написание синтаксических конструкций на русском и английском языках:
Вопрос 06.82 экзамена 1С:Профессионал по платформе. С какой целью используется встроенный язык?
- Для определения интерфейса программы по умолчанию
- Для описания (на стадии разработки конфигурации) алгоритмов функционирования прикладной задачи
- Нет правильного ответа
Вопрос 06.83 экзамена 1С:Профессионал по платформе. Какое написание имеют функции встроенного языка?
- Только русское написание
- Только английское написание
- Русское и английское написание
- В зависимости от настроек конфигуратора
Вопрос 06.12 экзамена 1С:Профессионал по платформе. Какие функции отсутствуют во встроенном языке «1С:Предприятие 8»:
- Функции работы со значениями типа Дата
- Функции работы со значениями типа Время
- Функции работы со значениями типа Строка
- Функции работы со значениями типа Число
- Все вышеперечисленные функции имеются во встроенном языке