В повседневной работе менеджеров по закупкам часто возникает ситуация, когда необходимо быстро идентифицировать документ не по внутреннему номеру системы 1С, а по номеру, который присвоил заказу сам поставщик. В типовых конфигурациях, таких как 1С:Управление торговлей 11, 1С:ERP или 1С:Комплексная автоматизация, этот номер обычно хранится в документе Заказ поставщику в поле «Номер по входящему документу». Однако в общем списке «Документы закупки (все)» это поле по умолчанию не отображается.
Разберем подробно, как облегчить работу и вывести нужную информацию в список, чтобы не «проваливаться» каждый раз в приходную накладную и связанные с ней заказы.
Этот метод подходит для большинства пользователей и не требует внесения изменений в конфигурацию. Рассмотрим пошагово, как добавить поле через механизм «Изменить форму», основываясь на успешном опыте участников форума.
Список или содержит ссылку на данные).Заказ или Ссылка.Объект) и нажмем кнопку Добавить поля.Заказ поставщика. Поставим напротив него галочку и нажмем «ОК».Заказ поставщика появилось в списке элементов, выделим уже его и снова нажмем Добавить поля.Проанализируем ситуацию: почему пользователь в сообщении (4) сначала не мог найти поле? Дело в том, что в динамических списках 1С реквизиты объектов часто доступны через «разыменование» ссылок. Сначала нужно вывести саму ссылку на документ-основание, и только потом система позволит «дотянуться» до его внутренних реквизитов.
Если в базе данных огромное количество документов, метод «через точку» (описанный выше) может привести к замедлению работы списка. Это происходит потому, что системе приходится выполнять дополнительные запросы к таблице заказов для каждой строки списка. Рассмотрим, как оптимизировать этот процесс с помощью расширения конфигурации.
Выясним причину необходимости расширения: нам нужно изменить текст запроса Динамического списка, чтобы данные выбирались одним махом через левое соединение (LEFT JOIN). Посмотрим на пример реализации в процедуре ПриСозданииНаСервере:
&НаСервере
Процедура ИТ_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
// Получаем текущую схему запроса динамического списка
ТекстЗапроса = Список.ТекстЗапроса;
// Добавляем соединение с таблицей Заказов Поставщиков
// чтобы вытащить ВходящийНомер напрямую
НовыйТекстЗапроса =
"ВЫБРАТЬ
| ОсновнойЗапрос.*,
| ЕСТЬNULL(ДокЗаказ.НомерВходящегоДокумента, """") КАК НомерЗаказаПоставщика
|ИЗ
| (" + ТекстЗапроса + ") КАК ОсновнойЗапрос
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказПоставщику КАК ДокЗаказ
| ПО ОсновнойЗапрос.ЗаказПоставщика = ДокЗаказ.Ссылка";
Список.ТекстЗапроса = НовыйТекстЗапроса;
КонецПроцедуры
После изменения текста запроса необходимо программно добавить колонку на форму и связать её с новым полем НомерЗаказаПоставщика. Это позволит пользователям выполнять поиск и сортировку по данному полю без потери производительности системы.
Рассмотрим ситуации, при которых добавленное поле «N заказа по данным поставщика» может оказаться незаполненным:
Если номер поставщика критически важен для сквозного поиска во всех связанных цепочках документов, проанализируем возможность использования Дополнительных реквизитов. В 1С можно настроить общий доп. реквизит для заказов и накладных. Это позволит выводить его в списки штатными средствами без необходимости «пробрасывать» связи через несколько документов, что существенно упрощает интерфейс для конечного пользователя.
Подведем итог: для быстрого решения задачи используйте настройку Изменить форму, последовательно добавляя поле Заказ поставщика и его вложенный реквизит Номер по входящему документу. Если же требуется высокая скорость работы при больших объемах данных, следует обратиться к программисту для модификации динамического списка через расширение.