Трусов Михаил — SuperProgrammist.Ru

Михаил Юрьевич Трусов

Более 25 лет опыта в программировании

Разработка оригинальной системы репликации двух и более версий БД 1С:Предприятия 7.7

Введение

В 2001 году, задолго до пандемии короновируса и карантина, возникла задача организовать удаленную работу главного бухгалтера. Ему не требовалась полная актуальность данных, достаточно было иметь вчерашние данные. Т.е., вполне нормально было бы организовать ежедневную синхронизацию БД 1С.

Как можно было решить задачу

В то время существовала платная утилита 1С "Управление распределенными БД", которая в принципе и предназначена для решения такого рода задач. Но она была платной и требовала дополнительных административных мер поддержания целостности версий БД. Утилита идентифицировала объекты по их видимому коду, который дополнялся префиксом версии БД. Но код объекта может быть изменен в процессе работы пользователя 1С. Эта утилита была признана не подходящей.

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

Как было реализовано

Для описания решения воспользуюсь составленной при написании обработки внутренней справке в 1С:

Обработка предназначена для обмена данными между копиями одной (!!!) ИБ. Для идентификации объектов (справочников, документов, счетов) она использует внутреннее строковое представление, получаемое функцией ЗначениеВСтрокуВнутр().

Обмен осуществляется путем выгрузки данных в текстовый файл из одной копии и последующей их загрузке в другую. Формат текстового файла взят из штатной обработки с незначительными доработками.

Выгружаются только измененные объекты. Отбор измененных объектов осуществляется по системному журналу регистрации в пределах указанных дат и по имени пользователя.

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

Если пользователь хочет принудительно включить объект в выгружаемые данные, то необходимо явно его сохранить (как правило кнопка "Записать" или "ОК") и повторно отобрать объекты (кнопка "Отобрать").

Для загрузки данных необходимо на вкладке "Загрузка" указать путь к файлу переноса данных, диапазон дат и имя пользователя, по которым будут проверяться конфликты одновременного изменения объектов.

Для загрузки данных необходимо на вкладке "Загрузка" указать путь к файлу переноса данных, диапазон дат и имя пользователя, по которым будут проверяться конфликты одновременного изменения объектов.

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

Выбор в ячейке "Решение":

  • оставить - оставить существующий;
  • добавить - загруженный объект добавляется в текущую ИБ;
  • заменить - существующий объект корректируется по загружаемым данным.

Потом, нажав кнопку "Записать", пользователь может занести новые данные в текущую ИБ. При этом можно получать сообщения (флажок "Выводить сообщения") и получить отчет (флажок "Сформировать отчет").

После загрузки обязательно проверить корректность переноса данных.

Выводы

Таким образом, удалось с минимальными усилиями по переработке штатной обработки обеспечить удобную и надежную репликацию нескольких версий БД 1С 7.7, которая проработала без ошибок много лет до последнего времени. При этом, с ней успешно работал главный бухгалтер, который имел весьма ограниченный опыт администрирования БД.