Как настроить автоматическую регистрацию документа «Ведомость в кассу» к выгрузке при изменении кассы в 1С:ЗУП 3.1?

Программист 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом IT и автоматизация бизнеса
← На главную

Синхронизация данных между конфигурациями «Зарплата и управление персоналом» (ЗУП 3.1) и «Бухгалтерия предприятия» (БП 3.0) — один из наиболее часто используемых механизмов в экосистеме «1С:Предприятие». Однако пользователи и разработчики часто сталкиваются с ситуацией, когда изменение ключевых реквизитов (например, кассы) в уже проведенном документе ВедомостьВКассу не приводит к его автоматической повторной регистрации для выгрузки в бухгалтерскую базу.

В этой статье мы подробно проанализируем причины такого поведения системы, разберем по шагам процесс отладки механизмов регистрации и предложим несколько вариантов решения этой проблемы: от написания программного кода в расширении до изменения настроек обмена без программирования.

Выясняем причину: почему документ не регистрируется автоматически?

Для оптимизации производительности и сокращения объемов передаваемых данных Библиотека стандартных подсистем (БСП), на которой построена синхронизация, использует механизм под названием «Фильтр выборочной регистрации объектов». По умолчанию платформа отслеживает не любые изменения в объекте, а только те, которые удовлетворяют определенным условиям:

  1. Отсутствие реквизита в правилах обмена (ПКО). Если реквизит Касса в правилах конвертации объектов (ПКО) не сопоставлен напрямую с аналогичным реквизитом в базе-приемнике (или переносится по сложной логике, не отслеживаемой платформой напрямую), БСП считает изменение этого реквизита «несущественным» для принимающей стороны и игнорирует его запись.
  2. Ограничения в Правилах регистрации объектов (ПРО). Правила регистрации определяют, какие именно свойства объекта должны измениться, чтобы сработал триггер авторегистрации. Если реквизит Касса отсутствует в списке отслеживаемых свойств для документа ВедомостьВКассу, то простое его перепроведение или изменение не заставит систему поставить документ в очередь на отправку.
  3. Дата начала обмена. Если дата документа меньше, чем установленная в настройках обмена дата начала выгрузки, то любые изменения в нем будут игнорироваться системой регистрации.

Рассмотрим подробнее, как локализовать эту проблему с помощью отладчика и решить её программными и административными методами.

Шаг 1. Локализация проблемы с помощью отладчика

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

Выполним следующие действия по шагам:

  1. Запустим конфигуратор 1С:ЗУП 3.1 в режиме отладки.
  2. В дереве метаданных найдем ветку «Общие» -> «Подписки на события».
  3. Найдем подписку с именем ОбменЗарплата3Бухгалтерия3РегистрацияДокумента (или аналогичную ей, отвечающую за регистрацию документов в вашем плане обмена).
  4. Откроем модуль, в котором расположен обработчик этой подписки (обычно это общий модуль ОбменДаннымиСобытия, процедура МеханизмРегистрацииСобытияПередЗаписьюДокумента).
  5. Установим точку останова в самом начале этой процедуры.
  6. В режиме предприятия откроем нужный документ ВедомостьВКассу, заменим кассу на другую и нажмем кнопку «Провести и закрыть».
  7. После остановки выполнения в точке останова, используя пошаговую отладку (клавиша F10/F11), проследим за логикой работы алгоритма.

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

Шаг 2. Программное решение через расширение конфигурации

Если нам необходимо гарантировать, что при изменении кассы в документе ВедомостьВКассу он обязательно будет зарегистрирован к выгрузке, наиболее правильным решением будет создание небольшого расширения конфигурации. Это позволит сохранить типовую конфигурацию на поддержке и избежать сложностей при последующих обновлениях.

Создадим расширение и добавим в него документ ВедомостьВКассу. Нам потребуется перехватить событие ПередЗаписью модуля документа, чтобы сравнить текущее значение реквизита на форме с тем значением, которое хранится в базе данных.

Ниже представлен пример программного кода, который решает эту задачу:


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

Важное примечание разработчику: Обратите внимание на использование метода ОбщегоНазначения.ЗначениеРеквизитаОбъекта(). Обращение напрямую через Ссылка.Касса крайне не рекомендуется, так как это приводит к неявному считыванию всего объекта из базы данных в память, что негативно сказывается на производительности системы при групповой обработке документов.

Шаг 3. Решение без программирования (настройка параметров обмена)

Если вы не хотите вносить изменения в код программы, существуют два альтернативных административных пути решения проблемы.

Вариант А. Отключение выборочной регистрации объектов

В БСП предусмотрена возможность полностью отключить оптимизацию выборочной регистрации. После этого любое перепроведение документа (даже без изменения реквизитов) будет безусловно регистрировать его к обмену.

  1. Откройте функции технического специалиста (или воспользуйтесь поиском по функциям) и найдите регистр сведений «Правила для обмена данными».
  2. Найдите запись, соответствующую вашему обмену с Бухгалтерией предприятия.
  3. Снимите флаг «Использовать фильтр выборочной регистрации объектов».
  4. Сохраните настройки.

Внимание: Данный способ имеет побочный эффект. Если в вашей базе пользователи массово перепроводят старые документы за прошлые периоды (например, при закрытии месяца), все эти документы будут заново зарегистрированы и отправлены в бухгалтерию, что может существенно замедлить процесс синхронизации и увеличить размер файла обмена.

Вариант Б. Модернизация Правил регистрации объектов (ПРО)

Более тонкая настройка заключается в изменении самих правил регистрации с помощью конфигурации «1С:Конвертация данных 2.1»:

  1. Выгрузите правила регистрации (ПРО) из вашего плана обмена ОбменЗарплата3Бухгалтерия3 в XML-файл.
  2. Откройте этот файл в программе «Конвертация данных 2.1».
  3. Найдите правило регистрации для документа ВедомостьВКассу.
  4. В настройках отбора свойств объекта добавьте реквизит Касса в список отслеживаемых полей.
  5. Сохраните правила, выгрузите их в XML и загрузите обратно в вашу информационную базу ЗУП через форму настройки синхронизации данных.

После выполнения этих действий БСП начнет штатно отслеживать изменения реквизита Касса и регистрировать документ автоматически без использования кастомного программного кода.

Рекомендация при возникновении коллизий в принимающей базе (БП 3.0)

Иногда возникает ситуация, когда документ успешно зарегистрирован в ЗУП, файл обмена успешно выгружен и загружен в БП, но изменения в бухгалтерии все равно не применились. Это связано с внутренней логикой БП: по умолчанию проведенные документы, пришедшие по обмену, могут защищаться от автоматического изменения, чтобы не нарушить закрытые периоды и уже сданную отчетность.

Если вы столкнулись с такой коллизией, выполните следующие шаги:

  1. В базе БП 3.0 временно снимите с проведения целевой документ ведомости.
  2. Снимите регистрацию этого документа на узле обмена в БП (если она там присутствует).
  3. В базе ЗУП 3.1 заново зарегистрируйте документ к обмену вручную (через монитор регистрации изменений).
  4. Запустите синхронизацию данных повторно.

Мы подробно разобрали все возможные варианты решения проблемы авторегистрации ведомостей при изменении кассы. Выбор конкретного метода зависит от архитектурных требований вашей компании, квалификации специалистов и готовности к поддержке кастомных расширений.

← На главную