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