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