Вывод дополнительной информации на форму с динамическим списком. Секреты Динамических списков 1С

от автора

Недавно встала задача в конфигурации ERP в форме списка документов «Заказы клиентов», выводить дополнительную информацию в виде «скрепки» которая бы говорила о том что данный документ имеет прикрепленные скан копии документов подтверждающие его значимость.

В стандартной конфигурации за вывод списка документов отвечает динамический список, там нужная информация отсутствует рис 1-2.

Форму списка Заказов клиента формирует динамический список.

Форму списка Заказов клиента формирует динамический список.

Рис 1.

Открыв содержимое списка видим что нет ни какой информации о присоединённых файлах!

Открыв содержимое списка видим что нет ни какой информации о присоединённых файлах!

Рис 2.

Сама форма списка выглядит пока вот так рис 3. Кроме того что заказ проведен не видим ни каких других картинок

Рис 3.

Решение .

Оно заключается в двух вариантах назовем их так:

  1. Меняем жестко динамический список

  2. Меняем мягко динамический список

1. Меняем динамический список на уровне запросов

Поискал где и информация о том что к документу прикреплены скан копии файлы документов.

Они конечно же в регистре сведений «Наличие файлов», разработку ведем в расширении,

заимствуя туда необходимые объекты рис 4.

Расширении в котором ведем доработку

Расширении в котором ведем доработку

Заходи на «ФормуСпискаДокументов» ( а не на «Форму Списка» !) и меняем динамический список добавив регистр «Наличие файлов» и создав «Левое соединение» с регистром . рис 5-6.

Добавляем регистр кв динамический список.

Добавляем регистр кв динамический список.

Рис 5.

Создаем связь  регистра с Документами "Заказ клиента"

Создаем связь регистра с Документами «Заказ клиента»

В динамическом списке появилось новое поле «ЕстьФайл» типа булево. Рис 7.

Рис 7.

В свойствах поля устанавливаем тип «картинка» и назначаем картинку «скрепку» в том числе и в шапке поля Рис 8.

Выводим скрепку в форму списка

Выводим скрепку в форму списка

Все готово осталось посмотреть на результат Рис 9.

Результат решения задачи

Результат решения задачи

2. Минимальное изменение запроса в динамическом списке, вывод дополнительной информации при обработке списка.

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

Какой же вариант в этом случае? Он заключается в добавление в запрос лишь полей которые будут выводится на форме. Рис 2.1

Рис 2.1       Добавили поле "ЕстьФайл" с типом булево.

Рис 2.1 Добавили поле «ЕстьФайл» с типом булево.

По умолчанию это поле всегда имеет значение = Ложь, поле появилось у нас в динамическом списке, выносим его на форму установив вид «Поле Картинки» и установив значение поля «Картинка значений» в виде картинки скрепки Рис 2.2

Рис 2.2   Расположение дополнительного поля на форму и назначение ему нужных свойств.

Рис 2.2 Расположение дополнительного поля на форму и назначение ему нужных свойств.

Ну и теперь остается получить каким то образом доступ к дополнительным реквизитам чтобы присвоить им значения при выводе формы списка (Заказы клиента).

За это отвечает метод модуля формы — «СписокПриПолученииДанныхНаСервере(ИмяЭлемента, Настройки, Строки)», в этом методе параметр «Строки» поможет реализовать заполнение при выводе списка. Заимствуем этот метод в расширение из основной конфигурации с директивой «&Изменение Контроль» и пропишем в нем необходимы код. Рис 2.3

&НаСервереБезКонтекста &ИзменениеИКонтроль("СписокПриПолученииДанныхНаСервере") Процедура sps_СписокПриПолученииДанныхНаСервере(ИмяЭлемента, Настройки, Строки)  #Вставка   Запрос = Новый Запрос; Запрос.Текст =  "ВЫБРАТЬ |НаличиеФайлов.ЕстьФайлы КАК ЕстьФайлы, |НаличиеФайлов.ОбъектСФайлами КАК ОбъектСФайлами |ИЗ |РегистрСведений.НаличиеФайлов КАК НаличиеФайлов |ГДЕ | НаличиеФайлов.ОбъектСФайлами В(&ЗаказыКлиента)";  Запрос.УстановитьПараметр("ЗаказыКлиента",Строки.ПолучитьКлючи());   РезультатЗапроса = Запрос.Выполнить(); Выборка = РезультатЗапроса.Выбрать();  Если  Выборка <> неопределено Тогда Пока Выборка.Следующий() Цикл // Вставить обработку выборки ВыборкаДетальныеЗаписи СтрокаСписка = Строки[Выборка.ОбъектСФайлами]; СтрокаСписка.Данные.ЕстьФайл = Выборка.ЕстьФайлы;  КонецЦикла; КонецЕсли;  #КонецВставки  // ЭлектронноеВзаимодействие.СервисEDI ДокументыEDIИнтеграция.ПриПолученииДанныхНаСервереСписокДокументов(Перечисления.ТипыДокументовEDI.ЗаказКлиента, ИмяЭлемента, Настройки, Строки); // Конец ЭлектронноеВзаимодействие.СервисEDI  КонецПроцедуры 

Рис 2.3

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

Первоначально значения поля динамического списка «ЕстьФайл» имеет значение ложь Рис 2.4.

Рис 2.4        Используем ключи и значение строк динамического списка

Рис 2.4 Используем ключи и значение строк динамического списка

Подготовим запросом (который мы в первом варианте включали в текст запроса динамического списка) необходимые данные — документы в которых есть присоединенные файлы.

Используя виде ключа ссылки («ОбъектСФайлами») на документы заказ клиента, подставим необходимые данные

СтрокаСписка = Строки[Выборка.ОбъектСФайлами]; СтрокаСписка.Данные.ЕстьФайл = Выборка.ЕстьФайлы; 

и результат это список документов с дополнительными реквизитами или обработкой списка, можно назначить цвет, шрифт, вычислить какое то значение и другое при выводе списка.

Вывод дополнительной информации в динамическом списке.

Вывод дополнительной информации в динамическом списке.

Заключение:

Динамические списки мощный элемент в разработке на 1С, буду рад если для кого то материал статьи будет интересным.

До новых встреч на HABR .

(SPS).


ссылка на оригинал статьи https://habr.com/ru/articles/920304/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *