Проект Утопия

В настоящей публикации представлен авторский проект универсальных подсистем для платформы 1С. Основная концепция проекта заключается в создании универсального программного комплекса, который легко встраивается в любую конфигурацию. Легкость встраивания достигается минимальностью добавляемых объектов конфигурации. Компактный набор добавляемых объектов позволяет получить расширенные возможности для использования программы пользователями, а также получить удобные инструменты для программирования. Есть определенный опыт доработок большого числа конфигураций, а также есть опыт работы в командных проектах с разными философиями/подходами к внесению изменений. Поэтому настоящий проект – это конгломерат идей за 14 лет самостоятельной работы. Попытка сохранить прошлые и текущие программные конструкции (Эрмитаж идей). Возможно, кому-то покажется неоптимальным по некоторым параметрам, но упор здесь именно на универсальность, может быть, немного в ущерб быстродействию. Проект нестандартный, постоянно развивающийся. Рассмотрим только идею и основные принципы.

Создание проекта

Начнем с доработок типовых конфигураций 1C. Очень часто программисты пишут одни и те же функции при доработке разных конфигураций. Универсальные функции можно выделить почти из любой разработки. И чем больше доработка, тем больше таких общих функций. Универсальные функции можно объединить в универсальный модуль, который будет дополняться новыми функциями в дальнейшем, а старые функции при необходимости будут дорабатываться с сохранением изначального функционала (например, расширение функций путем добавления необязательных параметров). Этот модуль удобно копировать в новые конфигурации или обновлять в старых. Это позволяет за минимальное время получить набор проверенных (выстраданных/отлаженных) функций, с которыми разработчик знает, как работать. Так начался данный проект.

Постепенно универсальных функций стало много, пришлось структурировать модуль. Добавились модули для работы с сервером, с тонким клиентом, с полными правами и с повторными значениями. Эти модули тоже пришлось добавить в проект.

При доработках конфигураций 1С часто возникает необходимость сохранить разные параметры/настройки в базе, чтобы использовать их в дальнейшем. Например, ссылки на справочники/документы, логины, пароли, текущие состояния счетчиков. Часто программисты привязываются к кодам или наименованиям справочников, что не является надежным способом, т.к. эти данные могут меняться. К сожалению, в 1С нет универсального хранилища данных. Поэтому приходится обращаться к метаданным, если требуется сохранение данных для последующей работы. Справочники, документы, регистры и другие объекты метаданных жестко определены конфигурацией. Есть, конечно, хранилище настроек, но по нему нельзя осуществлять поиск, и его нельзя экспортировать в другую конфигурацию. Поэтому добавление метаданных – это суровая необходимость, но можно минимизировать эти «вливания».

Набор добавляемых объектов

Мы берем произвольную конфигурацию 1С на обычных формах и добавляем наши объекты. Будем считать, что конфигурация типовая, постоянно обновляемая. Для визуального определения и группировки в названия объектов добавлен префикс «_», чтобы при лексико-графическом упорядочивании наши объекты стали первыми в списке. Также имена универсальных модулей сокращены, чтобы не перегружать выражения, в которых они используются.

Далее будет перечислен минимальный набор добавляемых объектов. Минимальность понимается в том смысле, что без этих объектов не обойтись, не теряя функциональность/производительность.

  1.  Виртуальный справочник _Элементы
  2.  Регистр сведений _Параметры
  3.  Общие модули (_ГМ, _ГМС, _ДМ, _ДМС, _ДМПП, _ДМПИ, _ЛМ).
  4.  Подписки

Добавление изменений в произвольную конфигурацию разбито по уровням абстракции. Чем больше уровень абстракции, тем больше мы знаем о конфигурации. Каждый следующий уровень включает в себя все предыдущие.

1 уро1 уровень абстракции – добавляем модуль _ГМ, можно использовать динамическое обновление.

2 уровень абстракции – добавляем 1 объект метаданных: регистр _Параметры, когда появляется необходимость хранить данные.

3 уровень абстракции – определен виртуальный справочник, есть модули повторного использования.

4 уровень абстракции – связующее звено и индивидуальные доработки текущей конфигурации. Модуль _ЛМ содержит заранее определенные функции, которые описывают особенности текущей конфигурации.

Расширения проекта Утопия – дополнительные специфические проекты, для которых нужны добавочные метаданные.

Интеграция в разные конфигурации

Рассмотрим интеграцию проекта в разные конфигурации. Добавляются объекты 1-3 уровня абстракции. Индивидуальные особенности и доработки (локальные изменения) конфигурации записываются отдельно, в модуль _ЛМ.

Модуль _ЛМ выполняет роль драйвера, который предоставляет функционалу проекта Утопия работать с текущей конфигурацией. Сам проект Утопия общий для всех конфигураций, будет дорабатываться. Для обновления проекта Утопия достаточно полностью заменить объекты 1-3 уровня абстракции (перепрошить). Замена небольшого количества объектов занимает намного меньше времени, чем анализ вставок в код программы. Обновить проект Утопия может даже администратор (по инструкции), не владеющий программированием 1С.

А теперь о каждом пункте поподробнее.

Виртуальный справочник _Элементы

Это справочник, содержащий в себе сразу несколько справочников. Он маскируется под любой справочник с помощью числового значения реквизита «Тип». При этом меняется видимость реквизитов и могут даже быть предусмотрены отдельные формы элемента и списка. Действия, которые над ним можно выполнять, тоже отличаются. Можно рассматривать его как справочник-хамелеон, динамично маскирующийся под любой справочник. Ключом к цвету хамелеона является реквизит «Тип».

Для работы со справочником «_Элементы» реквизит Тип задает набор свойств виртуального справочника по описанию виртуальных элементов (ОВЭ).

Для добавления нового справочника достаточно добавить новую строку в описание ОВЭ. При этом не нужно детально все расписывать, так как часть настроек задана по умолчанию. Обязательными для заполнения являются только название справочника в единственном и множественном числах.

Данное описание напоминает код ДНК при создании белка. Последовательность нуклеотидов – это цифры поля Тип, а белок – это виртуальный справочник, молекула ДНК – описание виртуальных элементов.

Описание ОВЭ определено в одной из функций модуля _ДМПИ (для ускорения работы, т.к. часто используется).

Элементы виртуального справочника заданы длинной строкой из тэгов. В ней содержится название виртуального справочника в единственном числе, название во множественном числе, общие реквизиты, набор дополнительных реквизитов, права на использование справочника. Общие реквизиты – это Наименование, Инфо (строка 70 символов), Ссылка1, Ссылка2, Цвет. Эти реквизиты часто используются, поэтому они есть у всех виртуальных элементов, но не у всех они обрабатываются (соответственно, не у всех видны).

В виртуальном справочнике есть стандартная форма списка, но для некоторых виртуальных справочников есть индивидуальные формы списка. Они отличаются тем, что для них в форме списка существует добавленный функционал.

Механизм управления цветами уже вшит в стандартные форму списка и форму элемента любого виртуального справочника.

Виртуальные справочники с типом меньшим 1000 являются предопределенными (описаны в _ДМПИ). Остальные виртуальные справочники зависят от текущей конфигурации, в которую добавляется проект Утопия.

При необходимости можно дополнить виртуальные справочники новыми элементами и новыми свойствами (для предопределенных), используя модуль _ЛМ.

В данном примере справочники 8, 9, 13, 22 дополняются новыми свойствами (для свойства указывается тип), а справочник 1007 добавляется (он не универсальный и используется только в текущей конфигурации).

Регистр сведений _Параметры

Регистр состоит из одного измерения «Ключ» и одного ресурса «Значение». Тип Ключа – строка, а Значение – сложный тип (любая ссылка и базовые – число, строка, дата, булево). При использовании сложных типов есть ограничение по использованию бесконечных строк. Удалось обойти это ограничение, используя разбиение строк на тома, по аналогии с архиваторами файлов. Разработана функция для работы с такими томами строк. Благодаря ей, при считывании строки конкатенируются с помощью ключей, у которых есть признак длинных строк.

Назначение регистра – хранение произвольных параметров и оперативный доступ к ним. Не смотря на примитивность, регистр оказался очень эффективен для решения различного рода задач.

В регистре можно хранить соответствие объектов. Реализована универсальная функция «Параметр()», возвращающая ссылку по строковому представлению. Параметром функции является строковое представление, в котором через разделитель указан тип ссылки (Например, «Склады.ОсновнойСклад»). Если по данному ключу есть сопоставление (запись) в регистре, то функция возвращает ссылку. Если записи нет, то функция предлагает интерактивно сопоставить ссылку со строковым представлением. Если пользователь сопоставил ссылку, то соответствие записывается в регистр, чтобы в следующий раз функция «Параметр()» сразу вернула ссылку.

Другие варианты использования регистра: хранение произвольных настроек пользователей, журнала событий, текущих показаний счетчиков (например, счетчика для генерирования новых числовых идентификаторов). Все вышеназванные варианты использования регистра Параметры реализованы в проекте Утопия.

Набор модулей

Набор модулей проекта Утопия состоит из:

_ГМ (глобальный модуль) – все универсальные функции, которые не привязаны к конкретным метаданным и функционал работы с регистром _Параметры (функция «Параметр()»). Набор универсальных функций.

_ГМС (глобальный модуль серверный) – часть функций _ГМ, которые работают на сервере, либо для передачи управления на сервер.

_ДМ (дополнительный модуль) – процедуры, которые нужны для работы с добавленными объектами. Привязан к виртуальным элементам. Ядро проекта Утопия.

_ДМС (дополнительный модуль серверный) – часть функций _ДМ, которые работают на сервере, либо для передачи управления на сервер.

_ДМПП (дополнительный модуль с полными правами) – набор функций, которые выполняются без контроля прав.

_ДМПИ (дополнительный модуль повторного использования) – функции _ДМ, которые надо кэшировать.

_ЛМ (локальный модуль) – точка входа для текущей конфигурации. Там же хранятся все добавленные функции, индивидуальные для текущей конфигурации.

Применение проекта Утопия

За много лет появилось огромное количество доработок (функций), которые хотелось использовать в любой конфигурации. Частично эти доработки прикладные, частично для программирования. Вот некоторые примеры функций.

Функции основного проекта Утопия

1. Основная панель – интерфейсная часть проекта. С помощью основной панели можно запустить остальные функции для обычного пользователя и для администратора. Состав закладок зависит от прав текущего пользователя. Основная панель реализована как произвольная форма в справочнике _Элементы, чтобы не добавлять дополнительный объект в проект. На первой закладке отображается Журнал объектов.

2. Журнал объектов – последние 20 открытых пользователем объектов (справочников или документов) в хронологическом порядке. Данная функция реализована на подписках и регистре _Параметры. Для каждого пользователя в регистре заводится хранилище с 20 объектами и указатель на текущий объект. В момент открытия ссылочного объекта система записывает в регистр всего 2 записи: новый указатель и объект по этому указателю. Если указатель доходит до 20, то сбрасывается до 1. Процесс записи цикличен (соответственно, ограничен по ресурсам) и оптимизирован по времени исполнения. При просмотре журнала хронология открытых объектов формируется из циклических записей регистра в обратном порядке, начиная с текущего указателя.

3. Список сотрудников реализован в виде справочника. Нажатием одной кнопки на основной панели инструментов можно открыть список. В списке можно указать номера телефонов, адреса электронной почты, должности сотрудников, файлы (в том числе оцифрованные сканы документов кадрового учета и просто произвольные файлы). Сотрудников можно классифицировать по группам, по филиалам. Для сотрудника можно задать цвет. Практика показала, что цвета быстро ассоциируются с сотрудниками и почти сразу помогают визуально разделять сообщения, справочники и документы по сотрудникам.

4. Дополнительные отборы в формах списков – расширенные отборы по табличным частям документов и справочников. Функция также реализована как дополнительная форма в справочнике _Элементы. При открытии формы списка добавляется кнопка для открытия данной функции. Отборы можно сохранить (используется регистр _Параметры). Реализованы дополнительные отборы по любым полям табличных частей документов и справочников. Система считывает структуру полей табличных частей и предоставляет отбор по присутствию выбранных в отборе значений. Также в системе можно выбрать часто используемые поля, т.к. бывают объекты, сильно перегруженные реквизитами табличных частей, которые редко используются.В данном примере отбираются все реализации, в табличной части которых присутствует хотя бы 1 строка с ценой 150.

5. Напоминания – набор сообщений, которые отображаются при возникновении определенных событий. Система напоминаний помогает предостеречь пользователей при выполнении определенных действий. В конфигурации вставляется запуск формы напоминания по произвольным параметрам.

6. Нормализация наименований справочников – часто используемая функция в любой конфигурации. Для многих справочников (и других ссылочных типов) требуется в наименовании убрать лишние пробелы: в начале, в конце и дубли в середине. Данная функция реализована с помощью подписок на запись ссылочных объектов конфигурации. Для конкретных объектов метаданных можно выставить нормализацию наименования. Настройки хранятся в виртуальном справочнике «Метаданные» на базе _Элементов. Также там можно запретить дублирование по наименованию. Данные настройки не требуют внесения изменений в конфигурацию, их можно сделать «на лету», в пользовательском режиме.

7. Цветовые профили и палитры – незаменимый функционал для оформления форм. В проекте реализованы виртуальные справочники для работы с цветами: палитры и цветовые профили. Палитра содержит произвольный набор цветов с описанием каждой позиции. Система палитр и настроек записывается в цветовой профиль. С помощью цветового профиля можно раскрасить объекты конфигурации для наглядности.

8. Заметки – система сохранения печатных форм и таблиц с дополнительными функциями. Добавлено сравнение макетов/текстов (используется функция платформы «Диалог сравнения» для табличных документов и текстов).

9. Обработка ошибок – ведение таблицы ошибок и работа с ней (добавление, проверка актуальности, исправление, подсвечивание).

10. Восстановление последовательностей документов – умное перепроведение документов по измененным измерениям регистра накопления для восстановления последовательности.

11. Автоматически запускаемые процессы – имитация регламентных заданий в файловом варианте и контроль их выполнения. Реализована гибернация процессов по превышении количества неудачных попыток выполнения процесса.

12. Отчет по произвольным печатным формам документов. Позволяет печатать любые печатные формы ссылочных объектов в несколько столбцов.

Дополнительные функции проекта Утопия

В этот раздел попали функции, которые не получилось сделать на базе справочника _Элементы и регистра _Параметры. Для перечисленных ниже функций необходимо добавлять метаданные помимо проекта Утопия, но количество добавляемых объектов также сведено к минимуму.

1. Внутренний чат (пейджер) – функция, которая с успехом используется многими клиентами, значительно облегчая коммуникации. В чате можно сделать рассылку сообщений всем участникам чата, а также прикрепить к письму нужный документ. Для сообщений добавлены отдельные справочники Сообщений и Сообщений пользователя.

2. История изменения объектов (Черный ящик). Для реализации этой функции создан отдельный регистр _История объектов. При изменении справочников и документов сохраняется информация об измененных полях (включая табличные части).

3. Хранилище файлов. Для формы объектов создается отдельная страница с хранилищем файлов. При активизации данной страницы открывается список загруженных файлов. Данные файлы можно просмотреть сразу в 1С (если это картинки), сохранить на компьютере либо загрузить с компьютера в хранилище. Есть возможность загружать в хранилище несколько файлов в одном диалоге с помощью множественного выбора. Также в нем можно хранить дополнительные обработки и печатные формы (аналог функции типовой конфигурации «Внешние обработки»).

4. Корреспонденция – функция является расширением проекта Утопия. В системе встроена работа с корреспонденцией, входящей и исходящей. Автоматически присваивается регистрационный номер с префиксом организации (если база ведется по нескольким организациям, то префиксы помогут сделать сквозную нумерацию по каждой организации).

5. Универсальная обработка – самостоятельная обработка для применения функций _ГМ. Обработка интегрирована в проект для расширения функционала. Из журнала объектов можно перенести выбранные ссылки в обработку для дальней работы. Модулем обработки является модуль _ГМ.

Функций много: работа со списком объектов (выбор по отбору, выбор из журнала объектов, запись, проведение, отмена проведения, полное удаление, регистрация на обмен, снятие с обмена, изменение любого реквизита, выполнение произвольного кода над объектами); команды системы (запуск приложения из 1С, распознание документов из списка текстовых представлений документов); работа с N-ричными числами (бинарными, Hex и произвольными), форматом BASE64; работа со структурой метаданных (поиск имен таблиц БД по имени объекта метаданных) и др. Более подробно http://investlend.ru/?page_id=149.

6. Распознание текста – работа с текстовыми предложениями. Опознаваемые конструкции хранятся в дополнительных регистрах-словарях. Применяется для обработки назначений платежа. Более подробно //infostart.ru/public/547393/.

Заключение

Конечно, этот проект – утопия. Невозможно все свои разработки и доработки включить в одну конфигурацию, тем более на базе 1 справочника и 1 регистра. Важен баланс. Кое-что можно сделать, и потом эффективно этим пользоваться.

Следующим этапом будет объединение обычных и управляемых форм в один проект, новый этап универсализации.

Данный проект объединил большую часть разработок автора в единую систему, в одну большую библиотеку функций и прикладных объектов. Разработана методика добавления новых и дополнения существующих функций, не теряя старый функционал. На данном этапе автору не так интересны новые проекты, если они не позволяют совершенствовать, дорабатывать данный проект. Это тот момент, когда работа перевоплощается в увлечение, хобби. Удачи всем разработчикам!