Хочу поделиться своим кейсом, который, надеюсь, поможет вам сэкономить время на поиски решения в похожей ситуации.
Сразу сделаю акцент, вся конфигурация, в которой выполняется разработка, полностью самописная, т.е. создана с нуля.
Поступил запрос: для документов счетов на оплату и кредитных сообщений необходимо разработать график платежей, с большим количеством фильтров и возможностью на лету корректировать часть полей. Все изменения должно быть можно делать сразу скопом на выбранном произвольным образом пуле документов из уже отфильтрованных, не открывая сами документы.
Первая часть разработки реализована через динамические списки с отборами, для сохранения скорости работы фильтрации большого пула документов. Для внесения изменений без открытия документов создана вторая форма с таблицей значений, где по выбранным документам часть столбцов доступна для корректирования.
Передача отфильтрованных данных динамических списков выполнена через Параметры передачи формы в виде массивов по команде Открыть форму для обновления:
&НаКлиенте
Процедура ОткрытьФормуДляОбновления(Команда)
ПараметрыПередачи = Новый Структура;
ПараметрыПередачи.Вставить("МассивОтфильтрованныхСчетовНаОплату", ПолучитьМассивЗначений("СчетНаОплату"));
ПараметрыПередачи.Вставить("МассивОтфильтрованныхКредитныхСообщений", ПолучитьМассивЗначений("КредитноеСообщение"));
ОткрытьФорму("Обработка.ГрафикПлатежей.Форма.ФормаДляИзменений", ПараметрыПередачи,, , , , Новый ОписаниеОповещения("ПослеЗакрытияФормыДляИзменения", ЭтотОбъект), РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура ПослеЗакрытияФормыДляИзменения(Результат, ДопПараметры) Экспорт
…
КонецПроцедуры
В функции ПолучитьМассивЗначени(ТипДокумента) выполняется компоновка динамического списка сначала в коллекцию значений, а затем в массив, который уже передается в качестве параметра в форму обновления. В этой форме через таблицу значений осуществляется внесение изменений в документы:
&НаСервере
Функция ПолучитьМассивЗначений(ТипДокумента)
Если ТипДокумента = " СчетНаОплату " Тогда
СписокФормы=Элементы. СчетНаОплатуДляВыгрузки;
ИначеЕсли ТипДокумента = " КредитноеСообщение " Тогда
СписокФормы=Элементы.КредитныеСообщенияДляВыгрузки;
КонецЕсли;
Схема = СписокФормы.ПолучитьИсполняемуюСхемуКомпоновкиДанных();
Настройки = СписокФормы.ПолучитьИсполняемыеНастройкиКомпоновкиДанных();
Поле = Настройки.Структура[0].Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
Поле.Использование = Истина;
Поле.Поле = Новый ПолеКомпоновкиДанных("Ссылка");
Поле.Заголовок = "Ссылка";
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных();
МакетКомпоновки = КомпоновщикМакета.Выполнить(Схема, Настройки,,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"),Истина);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ТЗ = Новый ТаблицаЗначений;
ПроцессорВывода.НачатьВывод();
ПроцессорВывода.УстановитьОбъект(ТЗ);
ТЗ = ПроцессорВывода.Вывести(ПроцессорКомпоновки);
Массив = Новый Массив;
Для Каждого Строка Из ТЗ Цикл
Если ЗначениеЗаполнено(Строка.Ссылка) Тогда
Массив.Добавить(Строка.Ссылка);
КонецЕсли;
КонецЦикла;
Возврат Массив;
КонецФункции
В форме для обновления осуществляется вывод переданных данных в таблицу значений:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ОтфильтрованныеДокументы.Очистить();
Счетчик = 0;
Если Параметры. МассивОтфильтрованныхСчетовНаОплату <> Неопределено Тогда
Для Каждого ДокументЭлемент ИЗ Параметры. МассивОтфильтрованныхСчетовНаОплату Цикл
НоваяСтрока = ОтфильтрованныеДокументы.Добавить();
НоваяСтрока.Документ = ДокументЭлемент.Ссылка;
…
КонецЦикла;
КонецЕсли;
Если Параметры. МассивОтфильтрованныхКредитныхСообщений <> Неопределено Тогда
Для Каждого ДокументЭлемент ИЗ Параметры. МассивОтфильтрованныхКредитныхСообщений Цикл
НоваяСтрока = ОтфильтрованныеДокументы.Добавить();
НоваяСтрока.Документ = ДокументЭлемент.Ссылка;
…
КонецЦикла;
КонецЕсли;
КонецПроцедуры
В таблице значений ОтфильтрованныеДокументы создан специальный столбец Отмечено для изменения типа Булево, который позволяет осуществлять мануальную выборку документов, в которые вносятся изменения, без открытия каждого из документов в отдельности.
Вступайте в нашу телеграмм-группу Инфостарт