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