Почему в форме списка Клиенты (Партнеры) нет полей ИНН/КПП и как их вернуть?

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

При работе в современных конфигурациях на базе 1С:Предприятие 8.3, таких как 1С:Управление торговлей 11, 1С:ERP или 1С:Комплексная автоматизация 2, пользователи часто сталкиваются с загадочной ситуацией: в справочнике Партнеры (раздел Продажи -> Клиенты) внезапно исчезают колонки ИНН и КПП. Причем попытка добавить их через «Изменить форму» не приносит результата — нужных полей просто нет в списке доступных, хотя в конфигураторе в динамическом списке запрос кажется корректным. Рассмотрим подробно, почему это происходит и как мы можем решить данную проблему.

Разберем архитектурную причину проблемы

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

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

Шаг 1. Поиск «проблемных» данных с помощью запроса

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


ВЫБРАТЬ
    Контрагенты.Партнер КАК Партнер,
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Контрагенты.Ссылка) КАК КоличествоКонтрагентов
ИЗ
    Справочник.Контрагенты КАК Контрагенты
ГДЕ
    Контрагенты.Партнер <> ЗНАЧЕНИЕ(Справочник.Партнеры.ПустаяСсылка)
СГРУППИРОВАТЬ ПО
    Контрагенты.Партнер
ИМЕЮЩИЕ
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Контрагенты.Ссылка) > 1

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


ВЫБРАТЬ
    Партнеры.Ссылка КАК ПартнерСсылка,
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Контрагенты.Ссылка) КАК Количество
ПОМЕСТИТЬ ВременнаяТаблица
ИЗ
    Справочник.Контрагенты КАК Контрагенты
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Партнеры КАК Партнеры
    ПО Контрагенты.Партнер = Партнеры.Ссылка
СГРУППИРОВАТЬ ПО
    Партнеры.Ссылка
ИМЕЮЩИЕ
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Контрагенты.Ссылка) > 1;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Контрагенты.Ссылка КАК КонтрагентСсылка,
    Контрагенты.Партнер КАК Партнер
ИЗ
    Справочник.Контрагенты КАК Контрагенты
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВременнаяТаблица КАК ВТ
    ПО Контрагенты.Партнер = ВТ.ПартнерСсылка

Шаг 2. Исправление данных

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

  1. Проверим наличие предопределенного элемента «Неизвестный партнер». Часто при некорректном импорте данных или обмене с другими системами (например, из 1С:Бухгалтерии) многим контрагентам ошибочно присваивается этот один общий партнер. В этом случае нужно перераспределить контрагентов по своим партнерам.
  2. Если используется настройка Использовать партнеров и контрагентов независимо (в разделе НСИ и администрирование), и вы сознательно ведете связь 1:N, то поля ИНН в списке партнеров не появятся типовыми средствами. Вам придется смотреть их в карточке партнера на вкладке «Контрагенты».
  3. Если же настройка Независимо вести партнеров и контрагентов выключена, но дубли есть — необходимо объединить найденных контрагентов или пометить лишние записи на удаление и очистить у них ссылку на партнера (для этого пригодится универсальная обработка удаления связей и лишних данных в базе). Помните: просто пометка на удаление не поможет, так как запрос видит все записи. Нужно либо полное удаление, либо перепривязка к другому партнеру.

Шаг 3. Программный способ решения проблемы (через расширение)

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

Проанализируем процедуру ПартнерыФормаВыбораСпискаПриСозданииНаСервере. Нам нужно установить флаг ЗапросСИнформациейПоКонтрагенту в значение Истина, независимо от того, что вычислила система автоматически. Посмотрим на пример кода:


&После("ПартнерыФормаВыбораСпискаПриСозданииНаСервере")
Процедура Мой_ПартнерыФормаВыбораСпискаПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка)
    
    // Принудительно заставляем систему включить поля контрагента в динамический список
    ЗапросСИнформациейПоКонтрагенту = Истина;
    
    // Переформируем текст запроса динамического списка
    Форма.Список.ТекстЗапроса = ПартнерыИКонтрагенты.ТекстЗапросаДинамическогоСпискаПартнеры(ЗапросСИнформациейПоКонтрагенту);
    
    // Настраиваем видимость группы полей
    Если Форма.Элементы.Найти("ГруппаКонтрагентыПартнера") <> Неопределено Тогда
        Форма.Элементы.ГруппаКонтрагентыПартнера.Видимость = Истина;
    КонецЕсли;

КонецПроцедуры

Обратите внимание: При таком подходе, если у партнера действительно несколько контрагентов, в списке возникнет дублирование строк (одна строка партнера на каждую запись контрагента). Это плата за вывод ИНН в общем списке.

Шаг 4. Сброс настроек пользователя

Иногда после исправления данных в базе поля ИНН/КПП всё равно не появляются в списке. Это происходит из-за того, что настройки формы были сохранены в кэше пользователя в «сломанном» виде. Выполним следующие действия для очистки:

  1. Откроем форму списка клиентов.
  2. Нажмем Все действия (или кнопку с шестеренкой) -> Изменить форму....
  3. В открывшемся окне нажмем Все действия -> Установить стандартные настройки.
  4. Если это не помогло, попробуем встать на поле Ссылка в дереве элементов формы, нажать Добавить поля и проверить наличие поля Контрагент или ИНН там.

Проанализировав ситуацию, мы видим, что проблема «пропавших» ИНН в 1С:УТ 11 — это не баг, а программная проверка целостности данных. Придерживаясь правила «1 партнер = 1 контрагент», вы всегда будете иметь доступ к этим реквизитам в стандартных формах без привлечения программиста.

← На главную