В конфигурациях на базе 1С:ERP, таких как «Управление торговлей 11.4» или «Комплексная автоматизация», пользователи часто сталкиваются с тем, что в справочнике Партнеры не отображаются важные реквизиты: ИНН и КПП. Даже если эти поля добавлены в запрос динамического списка в конфигураторе, они могут оставаться невидимыми в пользовательском режиме. В этой статье мы подробно разберем, почему так происходит, и пройдем по всем шагам для решения этой задачи.
Перед тем как приступать к правке кода, проанализируем структуру данных. В типовых решениях 1С разделены понятия «Партнер» (управленческая сущность) и «Контрагент» (юридическое лицо). Реквизиты ИНН и КПП принадлежат справочнику Контрагенты. Если в настройках программы включена опция «Независимое ведение партнеров и контрагентов», у одного партнера может быть несколько контрагентов. В этом случае вывод ИНН в список партнеров становится неоднозначным: какой именно ИНН показывать, если их несколько?
Если же опция выключена, связь между партнером и контрагентом — «один к одному». В такой ситуации вывод колонок технически прост, но система все равно может блокировать их отображение по ряду причин.
Рассмотрим основной запрос динамического списка, который обычно используется в форме списка справочника Партнеры. Для вывода данных из связанного справочника необходимо использовать соединение таблиц.
Важный нюанс: в типовом коде часто используется ВНУТРЕННЕЕ СОЕДИНЕНИЕ (Inner Join). Это критическая ошибка, если ваша цель — видеть всех партнеров. Если у партнера еще не заведен контрагент, при внутреннем соединении такой партнер просто исчезнет из списка. Рекомендуем использовать ЛЕВОЕ СОЕДИНЕНИЕ.
Рассмотрим пример правильного построения запроса:
ВЫБРАТЬ
СправочникПартнеры.Ссылка КАК Ссылка,
СправочникПартнеры.Код КАК Код,
СправочникПартнеры.Наименование КАК Наименование,
Контрагенты.ИНН КАК ИНН,
Контрагенты.КПП КАК КПП,
Контрагенты.Ссылка КАК Контрагент
ИЗ
Справочник.Партнеры КАК СправочникПартнеры
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
ПО Контрагенты.Партнер = СправочникПартнеры.Ссылка
ГДЕ
// Здесь обычно располагаются стандартные отборы по сегментам и поиску
Обратите внимание на поле Контрагенты.ИНН КАК ИНН. Присвоение псевдонима обязательно для того, чтобы платформа могла однозначно идентифицировать поле в настройках формы.
Даже если поле присутствует в запросе, 1С может оптимизировать выполнение запроса и не выбирать данные для этого поля, если оно не выведено на форму. Это часто приводит к тому, что при попытке добавить колонку через «Изменить форму» в пользовательском режиме поле остается пустым или недоступным.
Выполним следующие действия в Конфигураторе:
Партнеры.Список).ИНН и КПП.Если после настройки запроса колонки все равно не отображаются, проанализируем программный код. В конфигурации УТ 11 управление видимостью элементов часто вынесено из модуля формы в общие модули. Рассмотрим процедуры ПриСозданииНаСервере.
Поищем вызовы процедур, связанных с управлением формой. Часто это модули:
ПартнерыИКонтрагентыПереопределяемыйПартнерыИКонтрагентыВызовСервераВ этих модулях может содержаться логика, которая принудительно скрывает колонки ИНН/КПП, если в системе включено независимое ведение партнеров. Система «считает», что выводить ИНН в общем списке некорректно, и выполняет код типа:
Если ПолучитьФункциональнуюОпцию("ИспользоватьРаздельноеВедениеПартнеровИКонтрагентов") Тогда
Элементы.СписокИНН.Видимость = Ложь;
Элементы.СписокКПП.Видимость = Ложь;
КонецЕсли;
Чтобы обойти это ограничение, нам потребуется создать расширение и в методе ПриСозданииНаСервере (после вызова основной процедуры) принудительно установить видимость в значение Истина.
Проанализируем ситуацию с пользовательскими настройками. Иногда колонки скрыты из-за примененных ранее настроек формы конкретным пользователем. Разберем, как это сбросить:
Также стоит проверить Условное оформление формы. В редких случаях там могут быть правила, которые скрывают текст в колонках (например, устанавливают цвет текста равным цвету фона) при определенных условиях.
Разберем важный побочный эффект при выводе ИНН в список партнеров. Поскольку мы используем соединение со справочником Контрагенты, если у одного партнера создано два или более юридических лица (контрагента), то в списке партнеров одна и та же строка партнера продублируется столько раз, сколько у него контрагентов.
Чтобы избежать этого, проанализируем возможность использования агрегатных функций в запросе динамического списка (хотя они не всегда поддерживаются) или вывода только основного контрагента. Если мы хотим видеть «хотя бы какой-то» ИНН, можно изменить запрос так:
ВЫБРАТЬ
СправочникПартнеры.Ссылка КАК Ссылка,
(ВЫБРАТЬ МИНИМУМ(К.ИНН) ИЗ Справочник.Контрагенты КАК К ГДЕ К.Партнер = СправочникПартнеры.Ссылка) КАК ИНН
ИЗ
Справочник.Партнеры КАК СправочникПартнеры
Такой подход с вложенным запросом позволит избежать дублей, хотя и может несколько снизить производительность списка при огромном количестве записей.
Выясним причину отсутствия колонок по шагам: сначала проверяем тип соединения в запросе (только ЛЕВОЕ СОЕДИНЕНИЕ), затем устанавливаем признак «Использовать всегда», и в завершение проверяем общие модули на наличие программного скрытия элементов. Соблюдение этой последовательности позволит корректно вывести ИНН и КПП в список партнеров, сделав работу пользователей в 1С:УТ 11.4 более эффективной.