Как найти место установки или программного изменения ИНН в 1С:Бухгалтерия государственного учреждения 2.0

Программист 1С v8.3 (Управляемые формы) Бухгалтерский учет
← На главную

В процессе разработки и поддержки конфигурации «Бухгалтерия государственного учреждения 2.0» (БГУ 2.0) программисты часто сталкиваются с ситуацией, когда данные в карточке контрагента, такие как ИНН, заполняются или изменяются автоматически. Бывает и более сложная проблема: ИНН в справочнике Контрагенты не совпадает с ИНН в связанном справочнике Юридические и физические лица. В этой статье мы подробно разберем, какими путями данные попадают на форму, где искать «скрытые» точки изменения реквизитов и как устроена архитектура хранения данных в БГУ 2.0.

Архитектурная особенность БГУ 2.0: связь двух справочников

Прежде чем приступать к отладке кода, проанализируем структуру базы. В отличие от типовой «Бухгалтерии предприятия», в БГУ 2.0 справочник Контрагенты является своего рода «оболочкой» или учетным представлением. Основные нормативно-справочные данные (ИНН, КПП, наименование, признак резидентства) хранятся в отдельном справочнике — Юридические и физические лица.

Рассмотрим, к чему это приводит на практике:

  1. На форме контрагента реквизит ИНН часто не принадлежит напрямую объекту Контрагент. Он может быть выведен через путь к данным: Объект.ЮридическоеФизическоеЛицо.ИНН.
  2. Если данные в этих двух справочниках рассинхронизированы, пользователь увидит в карточке одно значение, а в списке контрагентов или в отчетах — другое.
  3. Причиной расхождения часто становится прямой импорт данных (через обработки или обмен), который обновляет один справочник, забывая про связанный.

События формы: где искать установку значений

Если при открытии формы ИНН уже заполнен некорректно или подменяется в процессе, нам необходимо исследовать серверные события формы. Рассмотрим их последовательность:

1. ПриСозданииНаСервере
Это первое место, куда стоит заглянуть. Здесь часто выполняется инициализация реквизитов формы. Однако, если мы работаем с уже существующим объектом, данные могут быть считаны из базы до выполнения этой процедуры. Если в этой процедуре ИНН уже заполнен, значит, он пришел из данных объекта.

2. ПриЧтенииНаСервере
Это событие часто упускают из виду. Оно выполняется после того, как данные объекта были считаны из базы данных, но до того, как форма будет отрисована. В БГУ 2.0 и других конфигурациях на БСП именно здесь могут срабатывать механизмы дозаполнения реквизитов формы, которые не хранятся в самом объекте, но нужны для отображения.

Проанализируем пример кода, который может встретиться в модуле формы:


&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
    // Программная подстановка ИНН из связанного справочника
    Если ЗначениеЗаполнено(ТекущийОбъект.ЮридическоеФизическоеЛицо) Тогда
        РеквизитФормыИНН = ТекущийОбъект.ЮридическоеФизическоеЛицо.ИНН;
    КонецЕсли;
КонецПроцедуры

Использование глобального поиска по ПутьКДанным

Если в коде модуля формы нет прямого обращения к переменной ИНН, выясним, не создается ли элемент формы программно. В сложных конфигурациях элементы могут добавляться динамически в процедурах типа УстановитьВидимостьДоступность() или через общие модули БСП. Нам нужно искать не только имя реквизита, но и строки, содержащие обращения к реквизиту ЮридическоеФизическоеЛицо, так как ИНН является его свойством.

Скрытые механизмы: Подписки на события и Фоновые задания

Если данные меняются в момент записи или «сами собой» через некоторое время, проверим следующие механизмы:

  1. Подписки на события: Найдем в дереве метаданных подписки, связанные со справочником Контрагенты или ЮридическиеФизическиеЛица. Обратите внимание на события ПередЗаписью и ПриЗаписи. Программный код в подписке может принудительно синхронизировать ИНН между двумя справочниками или обращаться к внешним сервисам.
  2. Расширения: Проанализируем наличие расширений в базе. Код в расширении может использовать аннотации &После или &Вместо для типовых процедур заполнения, подменяя логику установки ИНН.
  3. Фоновые задания: В современных версиях 1С реализованы механизмы фоновой проверки контрагентов. Сервис 1С:Контрагент может в фоновом режиме сверять данные вашей базы с реестром ФНС. Если включено автоматическое обновление, система может программно перезаписать реквизиты, которые посчитает неактуальными.

Как быстро найти виновника через «Историю данных»

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

Почему ИНН могут различаться: подводим итоги

Проанализировав ситуацию, можно выделить две основные причины расхождения ИНН у Контрагента и его «ЮрЛица» в БГУ 2.0:

Первая: Ошибки обмена данными. При синхронизации из внешних систем (например, из ЗУП или отраслевых решений) данные записываются напрямую в набор записей или объект справочника методом ОбменДанными.Загрузка = Истина. В этом случае стандартные проверки и процедуры синхронизации в модулях 1С игнорируются, что порождает рассинхрон.

Вторая: Использование обработки «Групповое изменение реквизитов». Бухгалтеры часто меняют ИНН сразу у списка контрагентов. Если при этом не выбрана обработка связанных объектов (ЮрЛиц), данные изменятся только в одном справочнике, создавая противоречие в системе.

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

← На главную