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

22.06.26

Разработка - Универсальные функции

Компоновка Динамического списка в Коллекцию значение и дальше в Массив для передачи в другую форму и обработки в Таблице значений.

Хочу поделиться своим кейсом, который, надеюсь, поможет вам сэкономить время на поиски решения в похожей ситуации.

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

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

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

Передача отфильтрованных данных динамических списков выполнена через Параметры передачи формы в виде массивов по команде Открыть форму для обновления:  
 

&НаКлиенте

Процедура ОткрытьФормуДляОбновления(Команда)

                ПараметрыПередачи = Новый Структура;                        

                ПараметрыПередачи.Вставить("МассивОтфильтрованныхСчетовНаОплату", ПолучитьМассивЗначений("СчетНаОплату"));

                ПараметрыПередачи.Вставить("МассивОтфильтрованныхКредитныхСообщений", ПолучитьМассивЗначений("КредитноеСообщение"));

                ОткрытьФорму("Обработка.ГрафикПлатежей.Форма.ФормаДляИзменений", ПараметрыПередачи,, , , , Новый ОписаниеОповещения("ПослеЗакрытияФормыДляИзменения", ЭтотОбъект), РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);

КонецПроцедуры

&НаКлиенте

Процедура ПослеЗакрытияФормыДляИзменения(Результат, ДопПараметры) Экспорт        

                …           

КонецПроцедуры

В функции ПолучитьМассивЗначени(ТипДокумента) выполняется компоновка динамического списка сначала в коллекцию значений, а затем в массив, который уже передается в качестве параметра в форму обновления. В этой форме через таблицу значений осуществляется внесение изменений в документы:
 

&НаСервере

Функция ПолучитьМассивЗначений(ТипДокумента)

                Если ТипДокумента = " СчетНаОплату " Тогда

                               СписокФормы=Элементы. СчетНаОплатуДляВыгрузки;

                ИначеЕсли ТипДокумента = " КредитноеСообщение " Тогда

                               СписокФормы=Элементы.КредитныеСообщенияДляВыгрузки;

                КонецЕсли;      

                Схема = СписокФормы.ПолучитьИсполняемуюСхемуКомпоновкиДанных();

                Настройки = СписокФормы.ПолучитьИсполняемыеНастройкиКомпоновкиДанных();

                Поле = Настройки.Структура[0].Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));

                Поле.Использование = Истина;

                Поле.Поле = Новый ПолеКомпоновкиДанных("Ссылка");                      

                Поле.Заголовок = "Ссылка";

                КомпоновщикМакета     = Новый КомпоновщикМакетаКомпоновкиДанных();       

                МакетКомпоновки = КомпоновщикМакета.Выполнить(Схема, Настройки,,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"),Истина);

                ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;    

                ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);

                ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;

                ТЗ = Новый ТаблицаЗначений;

                ПроцессорВывода.НачатьВывод();

                ПроцессорВывода.УстановитьОбъект(ТЗ);  

                ТЗ = ПроцессорВывода.Вывести(ПроцессорКомпоновки); 

                Массив = Новый Массив;

                Для Каждого Строка Из ТЗ Цикл

                               Если ЗначениеЗаполнено(Строка.Ссылка) Тогда

                                               Массив.Добавить(Строка.Ссылка);

                               КонецЕсли;   

                КонецЦикла;

                Возврат Массив;

КонецФункции

В форме для обновления осуществляется вывод переданных данных в таблицу значений:
 

&НаСервере

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

                СтандартнаяОбработка = Ложь;

                ОтфильтрованныеДокументы.Очистить();

                Счетчик = 0;

                Если Параметры. МассивОтфильтрованныхСчетовНаОплату <> Неопределено Тогда             

                               Для Каждого ДокументЭлемент ИЗ Параметры. МассивОтфильтрованныхСчетовНаОплату Цикл

                                               НоваяСтрока = ОтфильтрованныеДокументы.Добавить();

                                               НоваяСтрока.Документ = ДокументЭлемент.Ссылка;

                                               …

                               КонецЦикла;

                КонецЕсли;

Если Параметры. МассивОтфильтрованныхКредитныхСообщений <> Неопределено Тогда

                               Для Каждого ДокументЭлемент ИЗ Параметры. МассивОтфильтрованныхКредитныхСообщений Цикл

НоваяСтрока = ОтфильтрованныеДокументы.Добавить();

                                               НоваяСтрока.Документ = ДокументЭлемент.Ссылка;

                                               …

                               КонецЦикла;

                КонецЕсли;

КонецПроцедуры

В таблице значений ОтфильтрованныеДокументы создан специальный столбец Отмечено для изменения типа Булево, который позволяет осуществлять мануальную выборку документов, в которые вносятся изменения, без открытия каждого из документов в отдельности.

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

динамический список таблица значений компоновка данных массив конвертация данных

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Загрузка и выгрузка в Excel Универсальные функции Программист 1С:Предприятие 8 Россия Бесплатно (free)

Описанный ниже подход позволяет в три шага заполнять формулы в Excel файлы, вне зависимости от ОС сервера (MS Windows Server или Linux). Подход подразумевает отказ от работы с COM-объектом в пользу работы через "объектную модель документа" (DOM).

30.10.2025    5967    Abysswalker    11    

47

Универсальные функции Работа с интерфейсом Программист 1С:Предприятие 8 Бесплатно (free)

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

14.05.2025    10754    DeerCven    15    

64

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

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

21.05.2024    62419    dimanich70    86    

177

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    8477    7    John_d    13    

59

Универсальные функции Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    78465    atdonya    31    

75

Универсальные функции Программист 1С:Предприятие 8 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    11154    ke.92@mail.ru    18    

68
Для отправки сообщения требуется регистрация/авторизация