При настройке типовой синхронизации данных между конфигурациями «1С:Бухгалтерия предприятия 3.0» и «1С:ERP Управление предприятием 2» (или «1С:Управление торговлей 11») специалисты часто сталкиваются со следующей ситуацией: в параметрах отправки документов и справочников установлен переключатель «Не отправлять», однако при выполнении обмена система все равно регистрирует к отправке и передает такие объекты, как документ Установка цен номенклатуры и регистр сведений Штрихкоды номенклатуры.
В этой статье мы подробно проанализируем причины такого поведения типовых механизмов 1С, рассмотрим риски некорректного отключения объектов через конфигуратор и изучим все возможные способы решения данной задачи без снятия базы с поддержки.
Чтобы понять, почему происходит регистрация объектов, проанализируем устройство типового механизма обмена данными на базе 1С:EnterpriseData и подписок на события.
Штрихкоды номенклатуры является необрабатываемой в этой интерактивной опции сущностью. Регистрация записей регистра сведений происходит автоматически при срабатывании подписки на событие (например, ЗарегистрироватьИзмененияДляОбмена...) при записи самого штрихкода или при изменении связанного элемента справочника Номенклатура. В типовых правилах регистрации объектов (ПРО) проверка флага запрета отправки документов/справочников для регистра сведений часто отсутствует.Рассмотрим по шагам все варианты отключения выгрузки данных объектов — от простых настроек в пользовательском режиме до доработок с помощью расширений.
Разберем самый простой и штатный способ отключения передачи цен, который доступен непосредственно в режиме 1С:Предприятие без привлечения разработчиков.
После сохранения этих настроек типовой алгоритм перестанет регистрировать документы Установка цен номенклатуры для выбранного узла обмена.
Если объекты уже попали в очередь на выгрузку, их можно оперативно снять с регистрации.
Интерактивный способ:
Документ.УстановкаЦенНоменклатуры и РегистрСведений.ШтрихкодыНоменклатуры.Программный способ:
Для регулярной очистки регистрации (например, в регламентном задании) можно использовать следующий фрагмент кода на языке 1С:
УзелОбмена = ПланыОбмена.СинхронизацияДанныхЧерезУниверсальныйФормат.НайтиПоКоду("ERP");
Если ЗначениеЗаполнено(УзелОбмена) Тогда
// Отменяем регистрацию для документа Установка цен номенклатуры
ПланыОбмена.УдалитьРегистрациюИзменений(УзелОбмена, Метаданные.Документы.УстановкаЦенНоменклатуры);
// Отменяем регистрацию для регистра сведений Штрихкоды номенклатуры
ПланыОбмена.УдалитьРегистрациюИзменений(УзелОбмена, Метаданные.РегистрыСведений.ШтрихкодыНоменклатуры);
ЗаписьЖурналаРегистрации("Синхронизация", УровеньЖурналаРегистрации.Информация,
,, "Регистрация ненужных объектов успешно очищена.");
КонецЕсли;
Чтобы навсегда запретить регистрацию объектов без изменения конфигурации, проанализируем использование пользовательских правил регистрации.
РегистрСведений.ШтрихкодыНоменклатуры и Документ.УстановкаЦенНоменклатуры в обработчике Перед обработкой правила регистрации пропишем отказ:
// Отключаем регистрацию для конкретного узла или безусловно
Отказ = Истина;
Этот способ идеален тем, что база остается на типовой поддержке, а логика регистрации полностью подконтрольна администратору.
Современным стандартом доработки 1С является использование расширений. Мы можем перехватить процедуру регистрации изменений до того, как объект попадет в план обмена.
Создадим расширение и добавим в него модуль подписки на событие или переопределим метод модуля обмена. Рассмотрим пример кода в расширении для блокировки регистрации объектов:
&Вместо("ЗарегистрироватьИзменения")
Процедура Расш1_ЗарегистрироватьИзменения(Узел, Данные)
ТипДанных = ТипЗнч(Данные);
// Проверяем, не является ли объект запрещенным к выгрузке
Если ТипДанных = Тип("ДокументСсылка.УстановкаЦенНоменклатуры")
Или ТипДанных = Тип("РегистрСведенийЗаписьКлюч.ШтрихкодыНоменклатуры") Тогда
// Пропускаем регистрацию данного объекта
Возврат;
КонецЕсли;
// Вызываем стандартный механизм для остальных объектов
ПродолжитьВызов(Узел, Данные);
КонецПроцедуры
В сообщении на форуме автор темы отметил, что решил проблему простым удалением этих метаданных из состава состава Плана обмена (ПО) в Конфигураторе.
Проанализируем, почему этот метод не рекомендуется использовать на практике:
Для корректного отключения выгрузки документов Установка цен номенклатуры и регистра Штрихкоды номенклатуры рекомендуется отказаться от правки состава состава плана обмена в конфигураторе. Оптимальным решением является использование пользовательских Правил регистрации объектов (ПРО) или написание точечного расширения конфигурации. Это гарантирует стабильность работы синхронизации и сохраняет простоту обновления 1С.