Прокачай список. Как добавить дополнительную информацию в динамический список с помощью расширения!

28.02.25

Разработка - Работа с интерфейсом

В статье узнаете, как улучшить функционал динамического списка в 1С с помощью расширений. Как добавить дополнительную информацию и новые колонки, интегрировать иконки. Простые шаги и примеры позволят вам расширить возможности вашей конфигурации.

Бесплатные

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Бесплатно
Прокачай список. Как добавить дополнительную информацию в динамический список с помощью расширения!:
.rar 29,65Kb ver:1.1.1.1
61 Скачать бесплатно

Постановка задачи

Нужно видеть в списке номенклатуры по отдельным колонкам форматы картинок, которые прикреплены к товару. Например, у товара1 есть картинка в формате SVG, многомерная картинка и обычная картинка. В этом случае выводим три колонки в списке, где напротив позиции высвечивается соответствующая иконка наличия той или иной картинки. У товара2 есть только обычная картинка и картинка в формате SVG, поэтому высвечиваются иконки только в двух колонках и так далее. При 2-м клике по колонке вызывать форму списка прикрепленных файлов.

Далее в качестве примера рассмотрю файлы с расширением JPG на примере одной колонки для конфигурации "Управление торговлей, редакция 11 (11.5.7.402)", версия платформы 8.3.24.1467.  

 

1. Добавляем расширение в конфигураторе 1С

Для начала, создадим расширение в конфигураторе 1С. Откройте вашу конфигурацию и добавьте новое расширение с назначением "Адаптация". Дайте ему имя, соответствующее вашим потребностям, и сохраните изменения. Так же можно снять флажок "Безопасный режим" для того чтобы убрать дополнительные проверки модулей расширения или регулировать профилем безопасности если решение работает в клиент-серверном варианте, подробнее тут. Ссылки на статьи по расширениям: Расширения конфигураций. Адаптация прикладных решений.Расширения конфигураций. Е. Ю. Хрусталева

 

2. В качестве примера форма списка номенклатуры, добавляем в расширение процедуру ПриСозданииНаСервереПосле

Теперь добавим в расширение процедуру ПриСозданииНаСервереПосле. Для этого откройте форму списка номенклатуры и добавьте в расширение  процедуру ПриСозданииНаСервере, встав на заголовок процедуры правой кнопкой мыши пункт "Добавить в расширение". Ниже приведен код, который будет перехватывать текст запроса динамического списка и добавлять новое поле ИндексКартинкиJPG.

 
 ПриСозданииНаСервереПосле

 

3. Добавляем новую колонку на форму программно

Следующий шаг — добавление новой колонки на форму программным способом. Для этого создаем новую процедуру на сервере СоздатьЭлементФормы ее так же можно разместить в общем модуле если планируется использовать в других формах, вызов процедуры происходит из процедуры описанной выше ПриСозданииНаСервереПосле. Используем следующий код:

 
 СоздатьЭлементФормы сокращенный вариант

 

 
 СоздатьЭлементФормы для добавления разных элементов программно

 

4. Вывод иконки картинки в строках событие ПриПолученииДанныхНаСервере

Для вывода иконки картинки в строках добавим в расширении обработчик события динамического списка ПриПолученииДанныхНаСервереПосле. Пример кода ниже:

 
 ПриПолученииДанныхНаСервереПосле

 

5. Открытие файла 2-м кликом событие СписокВыбор

Для открытия файла двойным кликом добавим обработчик события динамического спискаВыборПосле. Код ниже:

 
 ВыборПосле

 

Результаты работы расширения

Отрываем форму списка номенклатуры, получаем новую колонку JPG в списке:

 

 

Позиционируемся на первой колонке и при двойном клике открываем окно присоединенных файлов:

 

 

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

Спасибо за внимание.

Применение cтандартов и методик разработки конфигураций на практике

Шаблоны для применения cтандартов и методик разработки конфигураций 1С

Простой пример разработки регулярного обмена с использованием БСП на примере ERP 2.4 и УПП 1.3.

Конфигурация "Табель учета рабочего времени. (Учет работ, доходов и расходов. Взаимодействие с клиентами)"

Применение ChatGPT в 1С и не только

Универсальная выгрузка и загрузка зарегистрированных справочников и документов по узлу.

Загрузка данных из унифицированных форм УПД и ТОРГ-12.

Список документов и их количество в базе.

 

 

Проверено на следующих конфигурациях и релизах:

  • Управление торговлей, редакция 11, релизы 11.5.7.402

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Работа с интерфейсом 1С v8.3 Платные (руб)

Подсистема условного оформления элементов форм (далее подсистема) предназначена для настройки оформления элементов форм (видимость, доступность, цвет фона, цвет текста и прочее) в пользовательском режиме 1С. Также подсистему возможно использовать для ограничения доступа к реквизитам формы для определенных пользователей (или групп пользователей).

6000 руб.

18.01.2022    11188    2    2    

7

Работа с интерфейсом Программист 1С v8.3 1C:Бухгалтерия 1С:ERP Управление предприятием 2 Платные (руб)

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

2400 руб.

29.06.2020    21111    30    6    

46

Работа с интерфейсом Программист Стажер 1С v8.3 Бесплатно (free)

Это инструкция по дизайну форм в среде 1С. Гайд охватывает рекомендации и стандарты для оптимизации пользовательского интерфейса. В гайде содержатся указания по использованию элементов интерфейса, включая как основные, так и продвинутые аспекты. Предоставляются также примеры и антипримеры для наглядного понимания принципов дизайна

20.08.2024    33232    mrXoxot    44    

135

Работа с интерфейсом Программист 1С v8.3 Бесплатно (free)

Пример простого и симпатичного прогресс-бара в динамическом списке, без картинок, используя редактирование запроса.

27.05.2024    18988    smielka    37    

106

Работа с интерфейсом 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 Бесплатно (free)

Добавьте новогоднего настроения! Расширение создает декорацию в виде гирлянды на некоторых формах объектов.

27.12.2023    20277    1264    elcoan    53    

128

Инструментарий разработчика Работа с интерфейсом Программист 1С v8.3 1C:Бухгалтерия Абонемент ($m)

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

3 стартмани

10.04.2023    14297    174    acces969    31    

131

Работа с интерфейсом Программист 1С v8.3 1C:Бухгалтерия Абонемент ($m)

"MVC плохо применима в 1С" - познакомьтесь с моделью состояния и, возможно, ваше мнение поменяется! Представленное решение является эволюционным развитием идеи реализации MVC для 1С. В новой версии добавлены DSL для описания модели состояния, а также параметризация свойств параметров и элементов формы.

1 стартмани

05.07.2022    11342    kalyaka    7    

35

Работа с интерфейсом Программист Пользователь 1С v8.3 8.3.14 1C:Бухгалтерия 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Абонемент ($m)

Ещё с времен платформы 8.3.13 можно изменять цвет стилей интерфейса главного окна. Данное расширение позволит вам выбрать из подготовленных десятка стилей на свой вкус.

1 стартмани

01.07.2022    30015    438    rpgshnik    75    

103
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. aximo 2367 19.07.24 12:15 Сейчас в теме
Вот тип процедур "ПриПолученииДанныхНаСервереПосле", касаемых динамических списков - будет сильно тормозить весь список...

идеально, когда весь список собран единым запросом
2. improg 731 21.07.24 16:08 Сейчас в теме
(1) Ну, такой способ самый распространенный, хотя и не самый оптимальный, но рабочий. Вы предлагаете делать множество левых соединений в запросе ДС?
5. ixijixi 2033 22.07.24 11:49 Сейчас в теме
(2) Снизить нагрузки можно закэшировав уже полученные значения
&НаСервереБезКонтекста
Процедура УТ_СписокРасширенныйПоискНоменклатураПриПолученииДанныхНаСер­вереПосле(ИмяЭлемента, Настройки, Строки)

	Если Не Настройки.ДополнительныеСвойства.Свойство("Кэш") Тогда
		Настройки.ДополнительныеСвойства.Вставить("Кэш", Новый Массив);
	КонецЕсли;
	
	НеобработанныеСсылки = ОбщегоНазначенияКлиентСервер.РазностьМассивов(Строки.ПолучитьКлючи(), Настройки.ДополнительныеСвойства.Кэш);
	
	Если НеобработанныеСсылки.Количество() > 0 Тогда
		
		Запрос = Новый Запрос;
		Запрос.Текст = 
		"ВЫБРАТЬ РАЗРЕШЕННЫЕ
		|	НоменклатураФайлы.ВладелецФайла КАК Номенклатура
		|ИЗ
		|	Справочник.НоменклатураПрисоединенныеФайлы КАК НоменклатураФайлы
		|ГДЕ
		|	НоменклатураФайлы.ВладелецФайла В(&ВладелецФайла)
		|	И НоменклатураФайлы.Расширение = &Расширение";
		
		
		Запрос.УстановитьПараметр("ВладелецФайла", НеобработанныеСсылки);
		Запрос.УстановитьПараметр("Расширение", "JPG");
		
		РезультатЗапроса = Запрос.Выполнить();
		Выборка = РезультатЗапроса.Выбрать();
		
		Пока Выборка.Следующий() Цикл
			Настройки.ДополнительныеСвойства.Кэш.Добавить(Выборка.Номенклатура);
		КонецЦикла;
		
	КонецЕсли;
	
	Для Каждого СтрокаСписка Из Строки Цикл
		СтрокаСписка.Значение.Данные["ИндексКартинкиJPG"] = Настройки.ДополнительныеСвойства.Кэш.Найти(СтрокаСписка.Ключ) <> Неопределено;
	КонецЦикла;
	
КонецПроцедуры
Показать
JohnyDeath; 0x00; improg; +3 Ответить
14. QbeeQ 17 23.03.25 23:10 Сейчас в теме
(5) Простите, можете прокомментировать один нюанс, касательно Вашего кода?

Читаю синтаксис-помощник про событие ПриПолученииДанныхНаСервере. Там написано:

<Настройки>
Тип: НастройкиКомпоновкиДанных.
Содержит копию полных настроек динамического списка.

Исходя из этого возникает два вопроса:
1. Имеют ли смысл строки с использованием кэша в Вашем коде?
На мой взгляд, нет. Я проверил. Программа каждый раз при получении следующей порции строк вновь его формирует
2. Пытаюсь в качестве кэша использовать менеджер временных таблиц, но что-то не могу придумать где его хранить вне контекста формы. Может быть подскажете?
15. QbeeQ 17 23.03.25 23:48 Сейчас в теме
(14) Разрешите сам отвечу.
В моём случае проще и быстрей данные выгрузить в таблицу значений и поместить во временное хранилище.
Менеджер временных таблиц никуда лезть не хочет :(

&НаСервере
Процедура ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
	
	АдресКэша = ПоместитьВоВременноеХранилище(ДанныеСинхронизации(), ЭтаФорма.УникальныйИдентификатор);
	СписокДокументыПоступления.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("КэшДанныхСинхронизации", АдресКэша);
	
КонецПроцедуры

&НаСервереБезКонтекста
Процедура СписокДокументыПоступленияПриПолученииДанныхНаСервереПосле(ИмяЭлемента, Настройки, Строки)
	
	Если Не Настройки.ДополнительныеСвойства.Свойство("КэшДанныхСинхронизации") Тогда Возврат; КонецЕсли;
	
	КэшДанныхСинхронизации = ПолучитьИзВременногоХранилища(Настройки.ДополнительныеСвойства.КэшДанныхСинхронизации);
	
	Для Каждого СтрокаСписка Из Строки Цикл
		СтрокаДанныхСинхронизации = КэшДанныхСинхронизации.Найти(СтрокаСписка.Ключ, "Ссылка");
		Если СтрокаДанныхСинхронизации = Неопределено Тогда Продолжить; КонецЕсли;
		ЗаполнитьЗначенияСвойств(СтрокаСписка.Значение.Данные, СтрокаДанныхСинхронизации, "СостояниеСинхронизации,ДатаСинхронизации");
	КонецЦикла;
	
КонецПроцедуры
Показать
3. improg 731 21.07.24 16:09 Сейчас в теме
Добавил бонусом в статью полную версию процедуры "СоздатьЭлементФормы".
4. aximo 2367 21.07.24 19:22 Сейчас в теме
Для простых вещей сойдет
6. fancy 37 23.07.24 08:41 Сейчас в теме
Пару копеек своих вставлю
1) Номенклатуру наверное стоит выбирать в запросе "РАЗЛИЧНУЮ" чтоб дублей в кэше не было
2) если используется функция РазностьМассивов, то логично и лаконично заменить на
Кэш = ОбщегоНазначенияКлиентСервер.ДополнитьМассив(Кэш, Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Номенклатура"));
11. improg 731 24.07.24 13:13 Сейчас в теме
(9) Да спасибо, на счет различные согласен, хотя и не критично, запрос должен быть максимально простым в таких конструкциях, по поводу кеша подумаю позже как его применить.
(6)
7. Re:аниматор 337 24.07.24 11:39 Сейчас в теме
(5) Точно снижается нагрузка? Кэшируются только найденные значения. Но при сравнение массивов (строк и кэша) всегда будет разница за счет не найденных значений кэша.. т.е. будут передаваться в запрос не найденные в кэше, а в кэш не попадут т.к. не соответствуют условиям запроса.

Переменная "НеобработанныеСсылки" не попадают строки по которым нет файлов!

Да, соглашусь с (6) там в запросе нужно поменять на РАЗЛИЧНЫЕ т.к. может быть несколько файлов на одного владельца
8. ixijixi 2033 24.07.24 11:43 Сейчас в теме
(7) Согласен, алгоритм есть куда совершенствовать, но согласитесь - это лучше, чем обращаться к базе при каждой прокрутке списка.
Точно снижается нагрузка
Надо замеры включать, чтобы сказать точно. Но в типовых делают именно так, думаю они шарят)
12. Cyberhawk 136 27.07.24 18:14 Сейчас в теме
(8)
это лучше, чем обращаться к базе при каждой прокрутке списка
При таком подходе я никогда не увижу в списке тех изменений, что произошли в базе после первого наполнения кеша.
Особенно если учесть, что при двойном клике там открывается список присоединенных файлов, то наверняка там их состав тоже будут менять, но результат своего труда пользователь после этого не увидит...
13. ixijixi 2033 27.07.24 22:14 Сейчас в теме
(12) Тащемта, при записи происходит оповещение динамического списка, все можно отловить и обновить кэш.
9. Re:аниматор 337 24.07.24 11:50 Сейчас в теме
(8) Да, нужно минимизировать обращения к запросам, но кэшировать тогда нужно все получаемые строки, а не строки где есть файлы. Файлов то может быть в 1 строке из 1 000 к примеру. и в кэше будет 1 строка, а всегда проверятся будет 999 строк
10. ixijixi 2033 24.07.24 12:32 Сейчас в теме
(9) Я же уже согласился)))
Оставьте свое сообщение