Синхронизация данных между конфигурациями «Зарплата и управление персоналом» (ЗУП 3.1) и «Бухгалтерия предприятия» (БП 3.0) — один из наиболее часто используемых механизмов в экосистеме «1С:Предприятие». Однако пользователи и разработчики часто сталкиваются с ситуацией, когда изменение ключевых реквизитов (например, кассы) в уже проведенном документе ВедомостьВКассу не приводит к его автоматической повторной регистрации для выгрузки в бухгалтерскую базу.
В этой статье мы подробно проанализируем причины такого поведения системы, разберем по шагам процесс отладки механизмов регистрации и предложим несколько вариантов решения этой проблемы: от написания программного кода в расширении до изменения настроек обмена без программирования.
Для оптимизации производительности и сокращения объемов передаваемых данных Библиотека стандартных подсистем (БСП), на которой построена синхронизация, использует механизм под названием «Фильтр выборочной регистрации объектов». По умолчанию платформа отслеживает не любые изменения в объекте, а только те, которые удовлетворяют определенным условиям:
Касса в правилах конвертации объектов (ПКО) не сопоставлен напрямую с аналогичным реквизитом в базе-приемнике (или переносится по сложной логике, не отслеживаемой платформой напрямую), БСП считает изменение этого реквизита «несущественным» для принимающей стороны и игнорирует его запись.Касса отсутствует в списке отслеживаемых свойств для документа ВедомостьВКассу, то простое его перепроведение или изменение не заставит систему поставить документ в очередь на отправку.Рассмотрим подробнее, как локализовать эту проблему с помощью отладчика и решить её программными и административными методами.
Прежде чем писать код, нам необходимо точно выяснить, в какой момент система блокирует регистрацию изменений. Для этого воспользуемся механизмом отладки подписок на события.
Выполним следующие действия по шагам:
ОбменЗарплата3Бухгалтерия3РегистрацияДокумента (или аналогичную ей, отвечающую за регистрацию документов в вашем плане обмена).ОбменДаннымиСобытия, процедура МеханизмРегистрацииСобытияПередЗаписьюДокумента).ВедомостьВКассу, заменим кассу на другую и нажмем кнопку «Провести и закрыть».Особое внимание уделим анализу таблиц правил регистрации и сопоставлению старых и новых значений реквизитов. В процессе трассировки мы увидим, на каком именно этапе (например, при вызове функций проверки выборочной регистрации) система принимает решение отказаться от регистрации изменений для данного узла обмена.
Если нам необходимо гарантировать, что при изменении кассы в документе ВедомостьВКассу он обязательно будет зарегистрирован к выгрузке, наиболее правильным решением будет создание небольшого расширения конфигурации. Это позволит сохранить типовую конфигурацию на поддержке и избежать сложностей при последующих обновлениях.
Создадим расширение и добавим в него документ ВедомостьВКассу. Нам потребуется перехватить событие ПередЗаписью модуля документа, чтобы сравнить текущее значение реквизита на форме с тем значением, которое хранится в базе данных.
Ниже представлен пример программного кода, который решает эту задачу:
&После("ПередЗаписью")
Процедура ИТ_ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
// Проверяем, что документ не новый, то есть уже существует в базе данных
Если ЭтоНовый() Тогда
Возврат;
КонецЕсли;
// Получаем текущее значение кассы из базы данных для сравнения
СтароеЗначениеКассы = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "Касса");
// Если касса была изменена, принудительно регистрируем документ на узлах обмена
Если СтароеЗначениеКассы <> Касса Тогда
// Задаем имя плана обмена между ЗУП и БП
ИмяПланаОбмена = "ОбменЗарплата3Бухгалтерия3";
// Выбираем все активные узлы данного плана обмена
ВыборкаУзлов = ПланыОбмена[ИмяПланаОбмена].Выбрать();
Пока ВыборкаУзлов.Следующий() Цикл
// Исключаем предопределенный узел (нашу текущую базу)
Если ВыборкаУзлов.Ссылка = ПланыОбмена[ИмяПланаОбмена].ЭтотУзел() Тогда
Продолжить;
КонецЕсли;
// Используем стандартный метод БСП для корректной регистрации изменений.
// Этот метод учитывает установленные фильтры даты начала обмена и другие ограничения.
ПланыОбмена.ЗарегистрироватьИзменения(ВыборкаУзлов.Ссылка, Ссылка);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Важное примечание разработчику: Обратите внимание на использование метода ОбщегоНазначения.ЗначениеРеквизитаОбъекта(). Обращение напрямую через Ссылка.Касса крайне не рекомендуется, так как это приводит к неявному считыванию всего объекта из базы данных в память, что негативно сказывается на производительности системы при групповой обработке документов.
Если вы не хотите вносить изменения в код программы, существуют два альтернативных административных пути решения проблемы.
В БСП предусмотрена возможность полностью отключить оптимизацию выборочной регистрации. После этого любое перепроведение документа (даже без изменения реквизитов) будет безусловно регистрировать его к обмену.
Внимание: Данный способ имеет побочный эффект. Если в вашей базе пользователи массово перепроводят старые документы за прошлые периоды (например, при закрытии месяца), все эти документы будут заново зарегистрированы и отправлены в бухгалтерию, что может существенно замедлить процесс синхронизации и увеличить размер файла обмена.
Более тонкая настройка заключается в изменении самих правил регистрации с помощью конфигурации «1С:Конвертация данных 2.1»:
ОбменЗарплата3Бухгалтерия3 в XML-файл.ВедомостьВКассу.Касса в список отслеживаемых полей.После выполнения этих действий БСП начнет штатно отслеживать изменения реквизита Касса и регистрировать документ автоматически без использования кастомного программного кода.
Иногда возникает ситуация, когда документ успешно зарегистрирован в ЗУП, файл обмена успешно выгружен и загружен в БП, но изменения в бухгалтерии все равно не применились. Это связано с внутренней логикой БП: по умолчанию проведенные документы, пришедшие по обмену, могут защищаться от автоматического изменения, чтобы не нарушить закрытые периоды и уже сданную отчетность.
Если вы столкнулись с такой коллизией, выполните следующие шаги:
Мы подробно разобрали все возможные варианты решения проблемы авторегистрации ведомостей при изменении кассы. Выбор конкретного метода зависит от архитектурных требований вашей компании, квалификации специалистов и готовности к поддержке кастомных расширений.