При работе с классической конфигурацией «Торговля и Склад» (ТиС) версии 9.2 на платформе 1С:Предприятие 7.7 начинающие разработчики часто сталкиваются с архитектурной особенностью: открыв справочник Контрагенты в конфигураторе, они не находят там привычных реквизитов ИНН или КПП. Однако в режиме «Предприятие» эти данные отображаются на форме и успешно выводятся в печатные формы счетов-фактур и накладных.
В этой статье мы подробно разберем, по какому принципу организовано хранение этих данных, где именно они находятся и как их правильно извлечь программным способом для своих отчетов или обработок.
Проанализируем структуру данных ТиС 9.2. Разработчики фирмы «1С» применили здесь принцип разделения управленческой и юридической информации. Справочник Контрагенты является, по сути, «управленческой оболочкой». Он содержит наименование для поиска в списках, группы, договоры и другие данные, необходимые для оперативного учета. Юридические же реквизиты (полное наименование, ИНН, КПП, коды ОКПО) вынесены в отдельные справочники-владельцы данных.
Основным связующим звеном является реквизит ЮрФизЛицо в справочнике Контрагенты. Давайте рассмотрим, на что он может ссылаться. Этот реквизит имеет неопределенный тип, что позволяет ему хранить ссылки на элементы разных справочников в зависимости от того, кем является наш контрагент:
Такая структура позволяет избежать дублирования данных, если одно и то же юридическое лицо выступает в разных ролях (например, и как поставщик, и как покупатель).
Выясним, как обратиться к этим данным в коде. Платформа 1С 7.7 поддерживает механизм «позднего связывания», который позволяет обращаться к реквизитам через точку, даже если тип значения определен как «неопределенный». Поскольку во всех вышеперечисленных справочниках (ЮрЛица, ФизЛица, СвоиЮрЛица) реквизит для ИНН называется одинаково — ИНН, мы можем использовать прямое обращение.
Рассмотрим пример кода для получения ИНН:
// Предположим, СпрКонтр — это объект справочника Контрагенты
ЗначениеИНН = СпрКонтр.ЮрФизЛицо.ИНН;
Сообщить("ИНН контрагента: " + ЗначениеИНН);
Однако с КПП ситуация обстоит иначе. Важно помнить, что у физических лиц (индивидуальных предпринимателей) в российском законодательстве КПП отсутствует. Следовательно, в справочнике ФизЛица реквизита КПП просто нет. Если мы попытаемся обратиться к нему напрямую для физлица, система может не выдать ошибку (в зависимости от контекста), но и данных мы не получим.
Чтобы наш код работал корректно и не вызывал исключительных ситуаций, проанализируем ситуацию с типами объектов. Мы можем использовать функции ТипЗначенияСтр() и Вид(), чтобы понять, с каким объектом имеем дело.
Разберем по шагам правильный алгоритм получения реквизитов:
ОбъектЮрФиз = СпрКонтр.ЮрФизЛицо;
Если ОбъектЮрФиз.Выбран() = 1 Тогда
// Получаем ИНН — он есть везде
ТекущийИНН = ОбъектЮрФиз.ИНН;
// Пытаемся получить КПП только у юрлиц
Если (ОбъектЮрФиз.Вид() = "ЮрЛица") Или (ОбъектЮрФиз.Вид() = "СвоиЮрЛица") Тогда
ТекущийКПП = ОбъектЮрФиз.КПП;
Иначе
ТекущийКПП = ""; // Для ФизЛиц КПП не заполняем
КонецЕсли;
Сообщить("ИНН/КПП: " + ТекущийИНН + " / " + ТекущийКПП);
КонецЕсли;
В типовой конфигурации «Торговля и Склад» уже встроены механизмы для получения юридических реквизитов. Разработчики часто используют функции глобального модуля, чтобы унифицировать вывод данных в печатные формы. Одной из самых полезных является функция глПредставлениеРеквизита().
Рассмотрим подробнее, почему выгодно использовать типовые функции:
Пример обращения к глобальной функции (может варьироваться в зависимости от релиза ТиС):
// В печатных формах часто используется подобная конструкция:
СтрокаРеквизитов = глПредставлениеРеквизита(СпрКонтр.ЮрФизЛицо, "ИНН");
Проанализируем еще несколько важных моментов, которые помогут избежать ошибок при разработке:
1. Длина ИНН: Помните, что длина ИНН у юридических лиц составляет 10 символов, а у физических лиц — 12. В справочниках 1С 7.7 длина текстового поля ИНН обычно установлена с запасом (12 символов). При выгрузке данных в налоговые органы или банки может потребоваться дополнительная проверка на количество знаков.
2. КПП и его изменение: В отличие от адреса, который в ТиС может быть периодическим (хотя это редкость для данной конфигурации в части юр.адреса), ИНН и КПП являются обычными реквизитами. Это означает, что история изменений не хранится. Если вы измените КПП в карточке юридического лица сегодня, то при перепечатке документа годовой давности в печатную форму попадет уже новый КПП. Если вам критически важно сохранять старый КПП для старых документов, это потребует серьезной доработки архитектуры справочников.
3. Поиск по ИНН: Если вам нужно найти контрагента по ИНН, помните, что искать нужно не в справочнике Контрагенты, а сначала в справочнике ЮрЛица (или ФизЛица), а затем искать владельца или ссылку в справочнике Контрагенты по найденному объекту ЮрФизЛицо.
Таким образом, мы выяснили, что для получения ИНН и КПП в 1С 7.7 необходимо использовать связку через реквизит ЮрФизЛицо. Это элегантное, хотя и несколько непривычное для пользователей 1С 8.x решение, которое позволяет эффективно управлять данными о контрагентах.