Кому это может пригодиться?
Тем, кто хочет «точечно» ограничить изменение объектов (справочников, документов, планов видов характеристик) при повторной загрузке уже созданных обменом ранее объектов в базе приемнике и/или дополнительно измененных пользователем.
Многие в комментариях могут возразить, что это неправильно и приводит к «рассинхронизации» данных между базами и т.д. Я сразу хочу ответить, что во первых, штатный механизм обмена не исключает возникновения «рассинхронизации» при обмене по вполне естественным причинам и к тому же содержит некоторые типовые механизмы настройки позволяющие это делать, во вторых мой инструмент для тех, кто четко понимает какую задачу он хочет решить с его помощью и осознает последствия таких действий. В типовых конфигурациях на базе БСП есть штатный способ заблокировать объекты в базе приемнике для изменения через обмен, но он не очень хорошо подходит для «точечного» применения. Настройка эта находится в разделе «синхронизация данных» и в зависимости от функциональности конкретной типовой конфигурации позволяет более детально, чем просто общая дата – отфильтровать объекты по узлам источникам, разделам учета и принадлежности к виду операции(статусу) или значению реквизита «Организация» из соотв. справочника организаций. Как правило это применимо к документам и периодическим регистрам сведений.
Мое решение позволяет блокировать изменение конкретных объектов через обмен (как правило документов или справочников) в базе приемнике по выбору пользователя из заранее разрешенных типов объектов метаданных.
Ниже я постараюсь описать ситуации, когда может возникнуть такая потребность.
Потребовалось как-то заказчику в рамках внедрения управленческого учета на базе УНФ в связке 1С:Бухгалтерией настроить обмен данными, где в результате тестирования штатного двухстороннего обмена (документы по банку выгружаются из 1С:Бухгалтерии в УНФ, а все остальные документы участвующие в обмене выгружаются из УНФ в 1С:Бухгалтерию). Как это часто бывает при обмене вылезли разные «нюансы» и ограничения. Более детальное изучение содержимого правил обмена выявило ряд проблем, связанных как большими различиями в архитектуре конфигураций, так и ошибок обмена и ограничений схемы XDTO из типовых правил. В результате повторной выгрузки объекта возникала ситуация, которая приводила в базе приемнике к очистке или изменению некоторых исправленных или заполненных пользователем вручную реквизитов у объектов, изначально загруженных обменом некорректно. Для решения проблемы требовалась доработки модуля правил обмена и схемы XDTO, с необходимостью в дальнейшем поддержки правил в актуальном состоянии при обновлении конфигураций на новые типовые релизы от 1С. По результатам обсуждения вариантов решения проблемы, совместно с заказчиком было принято решение разработать механизм адресной блокировки от изменений через обмен конкретных документов, проверенных и исправленных пользователем в базе приемнике.
Технические аспекты решения.
Доработка реализована в виде расширения с минимальными врезками без заимствования форм объектов и использует функционал подключаемых команд из БСП (Библиотека стандартных подсистем). Отличия в файлах расширений для скачивания минимальны и связаны с различиями в метаданных конфигураций. В расширение заимствованы только сами объекты метаданных (по умолчанию документы и справочники), ссылки на которые я нашел в процедурах получения данных общего модуля «МенеджерОбменаЧерезУниверсальныйФормат». Минимальный режим совместимости 8.3.14. Если не использовать режим "изменение и контроль" который используется только для одной процедуры, то можно опустить до режима совместимости еще ниже.
Работа расширения проверена на платформе 1С:Предприятие 8.3 (8.3.20.1914,) для типовых конфигураций:
- Бухгалтерия предприятия, редакция 3.0 (3.0.118.14)
- 1С:ERP Управление предприятием 2 (2.5.8.221)
- Управление торговлей, редакция 11 (11.5.7.308)
- Управление нашей фирмой, редакция 1.6 (1.6.27.232)
Дополнительное тестирование расширения на открытие форм документов проводилось с помощью обработки на основе публикации Групповая проверка доработок.
Как функционал расширения выглядит в пользовательском режиме.
В формах списков заимствованных в расширение объектов в крайней правой колонке динамического списка выводится пиктограмма состояния разрешения/запрета изменений через обмен. По кнопке верхней панели «Запретить изменения через обмен» или «Разрешить изменения через обмен» можно для одного или нескольких объектов установить желаемый статус разрешений обмена.
В основной форме самого объекта (из списка объектов заимствованных в расширение) появляется пиктограмма отображающая текущее состояние разрешения/запрета изменения объекта через обмен. Работает как переключатель состояния при нажатии.
Действие пользователя по изменению статуса разрешения/запрета обмена для одного или сразу нескольких объектов приводит к автоматическому обновлению пиктограммы актуального статуса во всех открытых формах пользовательского приложения.
Для дополнительных форм списков на основе журналов документов и обработок необходимо единожды создать записи настроек специального регистра в форме настроек. Настройка находится в разделе «Администрирование» – «Настройка дополнительных форм разрешений для объектов обмена».
Для каждой такой формы необходимо заполнить копированием строковое поле - имя формы (включить режим технического специалиста и нажать три точки в правом верхнем углу интересующей формы - "Информация для технического специалиста"),
далее выбрать признак разрешения/запрета(принудительного подавления) вывода колонки состояния для выбранной формы списка, в поле «имя реквизита динамического списка» по умолчанию оставить пустым. В редких случаях (для форм имеющих несколько страниц со списками) возможно потребуется указать название реквизита списка, как оно задано в конфигураторе.
В процессе обмена данными для объектов в статусе запрет изменений при попытке обновления данных объекта через обмен регистрируется событие в журнале регистрации в разделе "Обмен данными" с признаком «предупреждение».
Ограничения.
Для некоторых форм списков может потребоваться дополнительная доработка расширения, Например при открытии справочника на форме списка видны кнопки управления блокировкой/разблокировкой объектов, но при этом в списке отсутствует колонка справа с пиктограммой текущего статуса запрета обмена, это это значит что необходимо в конфигураторе заимствавать форму в расширение и перенести в заимствованной процедуре ПриСозданииНаСервере вызов подсистемы «ПодключаемыеКоманды» позднее того места, где программно заполняется текст запроса динамического списка. В очень редких случаях для формы объекта (как правило это примитивные формы без кода, которые используюутся для некоторых второстепенных справочников) может потребоваться добавление стандартных процедур БСП на форму для подсистемы «ПодключаемыеКоманды».
Либо использовать менее оптимальный вариант: повторный вызов «ПодключаемыеКоманды» в режиме "После"
Идеи для самостоятельной доработки:
Создать механизм обратной связи для передачи в базу источник информации о факте блокировки объекта к изменению (по аналогии с реализацией блокировки в базе источнике документа «отражение зарплаты в рег. Учете» в типовом обмене ЗУП-БУХ) Потребуются доработки типовых обменов в обоих базах + добавление измерения «узел обмена» в расширение для установки и проверки разрешений на запрет изменения объекта.
25.12.2022 Update
Усовершенствован механизм определения и модификации Динамического списка: теперь поддерживаются динамические списки без использования произвольного запроса, а также заполнение нескольких динамических списков на одной форме. Оптимизирован алгоритм обновления пиктограммы текущего статуса запрета обмена. К Документам по умолчанию добавлены и Справочники (которые используются в планах обмена ED - в режиме получение данных)