Как не регистрировать стопку документов в планах обмена с включенной авторегистрацией при групповом перепроведении
Наверное, каждый разработчик сталкивался с проблемой автоматической регистрации документов в планах обмена, которые просто необходимо последовательно перепровести.
Я расскажу про свой выход из подобной ситуации.
- Описание
- Подробнее
Описание
Конечно, сейчас мода на ручную регистрацию изменений в планах обмена, но до сих пор остается много старых и самописных конфигураций, которым, может быть, сможет помочь моя публикация.
Для начала я вкратце расскажу, как ручная регистрация происходит в типовой конфигурации:
- Перед записью документа вызывается событие «МеханизмРегистрацииОбъектовПередЗаписьюДокумента«, которое, собственно, и отвечает за регистрацию. Я пропущу большую часть всех условий, а перейду к сути.
- А именно к функции «ОбъектМодифицированДляПланаОбменаПопыткаИсключение«. Функция получает «ТаблицаРеквизитовРегистрации«, которая, по-видимому, берется из правил регистрации объектов. После чего для каждого реквизита или таблицы регистрации идет запрос (ЗАПРОС В ЦИКЛЕ) для значения реквизита до изменений. И идет сравнение с текущим значением реквизита.
- В результате перед записью одного документа выполняется хренова куча кода с хреновой кучей запросов.
Скажу честно, такой подход мне показался не слишком оптимальным, и при этом достаточно МНОГОВРЕМЕНИЗАТРАЧИВАЕМЫМ для моей простой небольшой базы. Поэтому я и решил поискать способ попроще.
- Чтобы отменить авторегистрацию, нужно написать где-нибудь:
Источник.ОбменДанными.Получатели.АвтоЗаполнение = Ложь;
- Я создал подписку перед записью документа и решил добавить простенькую проверку на модифицированность
Если Не Источник.Модифицированность() Тогда Источник.ОбменДанными.Получатели.АвтоЗаполнение = Ложь; КонецЕсли; Каково же было моё удивление, что она не работает))) Причем, даже есть проверять модифицированность в самом начале в модуле объекта. Решением стал вызов подписчика на процедуру «ОбработкаПроверкиЗаполнения«. Но и это не все! если проведение происходит из списка документов, то проверка на модифицированность даёт ЛОЖЬ, а если через форму документа (даже если ты просто нажал ОК) ИСТИНА.

