Как доработать таблицу списка документов
В списке документов основного модуля выводятся наиболее часто требуемые поля, характеризующие полученный пакет или документ.
Дополнительные колонки
Помимо основных полей списка, которые заполняются в модуле, существует 5 колонок для вывода дополнительных сведений. Они называются «ДопРеквизит1», «ДопРеквизит2» и т.д.
Для изменения заголовков, типов и допустимых данных для каждой из них используется событие ПолучитьНастройкиДополнительныхКолонокСпискаДокументов.
Формирование списка колонок происходит в основной форме модуля при изменении режима отображения документов.
Пример переименования 3 колонок: «ДопРеквизит1», «ДопРеквизит2», «ДопРеквизит3»:
Режим = Параметры.Режим;
Если Режим = "ПолученныеДокументы" Тогда
ДопКолонки = Новый Массив; // не более 5. Индекс элемента в массиве, увеличенный на единицу, совпадает с порядковым номером колонки
ДопКолонки.Добавить(Новый Структура("Заголовок, Тип, ДопустимыеЗначения", "Состояние документа 1С", Новый ОписаниеТипов("Строка")));
ДопКолонки.Добавить(Новый Структура("Заголовок, Тип, ДопустимыеЗначения", "Сумма в 1С", Новый ОписаниеТипов("Число")));
ДопКолонки.Добавить(Новый Структура("Заголовок, Тип, ДопустимыеЗначения", "Расхождение", Новый ОписаниеТипов("Число")));
Возврат ДопКолонки;
КонецЕсли;
Заполнение данными колонок «ДопРеквизит» происходит:
в функции ПолучитьТекстЗапросаДляСпискаПакетовНаОтправкуПоМассивуВидовПакетов
в функции ПослеОбновленияСпискаДокументов
В первом варианте необходимо учитывать, что поля запроса с дополнительными данными должны иметь названия «ДопРеквизит1», «ДопРеквизит2» и т.д.
Важно
Размещать дополнительные поля в запросе следует так, чтобы «ВидПакета» оставался последним полем
Во втором варианте заполнение происходит через непосредственное обращение к реквизитам таблицы СписокДокументов.
Обращение к событию происходит при каждом обновлении списка на форме модуля.
Пример заполнения значений дополнительных реквизитов с использованием события ПослеОбновленияСпискаДокументов:
СписокДокументов = Параметры.СписокДокументов;
Режим = Параметры.Режим;
Если Режим = "ПолученныеДокументы" Тогда
Запрос = Новый Запрос(
"ВЫБРАТЬ
| Парам.НомерСтроки,
| ВЫРАЗИТЬ(Парам.СуммаДокумента КАК ЧИСЛО) КАК СуммаДокументаДД,
| ВЫРАЗИТЬ(Парам.Документ КАК Документ.ПоступлениеТоваровУслуг) КАК Документ1С
|ПОМЕСТИТЬ ВТ
|ИЗ
| &СписокДокументов КАК Парам
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТ.НомерСтроки,
| ВЫБОР
| КОГДА ВТ.Документ1С ССЫЛКА Документ.ПоступлениеТоваровУслуг
| ТОГДА ВЫБОР
| КОГДА ВЫРАЗИТЬ(ВТ.Документ1С КАК Документ.ПоступлениеТоваровУслуг).ПометкаУдаления
| ТОГДА ""Удален""
| КОГДА НЕ ВЫРАЗИТЬ(ВТ.Документ1С КАК Документ.ПоступлениеТоваровУслуг).Проведен
| ТОГДА ""Не проведен""
| ИНАЧЕ """"
| КОНЕЦ
| ИНАЧЕ """"
| КОНЕЦ КАК СостояниеДокумента,
| ЕСТЬNULL(ВТ.Документ1С.СуммаДокумента, 0) КАК СуммаДокумента1С,
| ВТ.СуммаДокументаДД - ЕСТЬNULL(ВТ.Документ1С.СуммаДокумента, 0) КАК Расхождение
|ИЗ
| ВТ КАК ВТ"
);
Запрос.УстановитьПараметр("СписокДокументов", СписокДокументов.Выгрузить( ,"НомерСтроки, Документ, СуммаДокумента"));
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
СписокДокументов[Выборка.НомерСтроки - 1].ДопРеквизит1 = Выборка.СостояниеДокумента;
СписокДокументов[Выборка.НомерСтроки - 1].ДопРеквизит2 = Выборка.СуммаДокумента1С;
СписокДокументов[Выборка.НомерСтроки - 1].ДопРеквизит3 = Выборка.Расхождение;
КонецЦикла;
Возврат ПолучитьНастройкиДополнительныхКолонокСпискаДокументов(Новый Структура("Режим", Режим));
КонецЕсли;
Доработка формы основного модуля
Событие УстановитьУсловноеОформление предназначено для редактирования управляемой формы основного модуля. К примеру, для установки условного оформления списка документов.
Вызывается при создании на сервере основной формы.
Пример изменения фона строки списка входящих документов:
Форма = Параметры.Форма;
//входящие документ на подпись
ЭлементУО = Форма.УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = ЭлементУО.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных("СписокДокументов");
ОтборЭлемента = ЭлементУО.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СписокДокументов.Направление");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = "Входящее";
ОтборЭлемента = ЭлементУО.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СписокДокументов.Статус");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Содержит;
ОтборЭлемента.ПравоеЗначение = "Требуется подпись";
ЭлементУО.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.БледноЗеленый);
Возврат Истина;
Для редактирования обычных форм используются несколько событий.
При открытии основной формы модуля вызывается событие ПриОткрытииФормы
Пример снятия флажков у всех видов пакетов на отправку:
Форма = Параметры.Форма;
ИмяФормы = Параметры.ИмяФормы;
Если ИмяФормы = "ОсновнаяФорма" Тогда
ДеревоФильтров = Форма.ДеревоФильтров;
СтрокаОтправкаПакетов = ДеревоФильтров.Строки.Найти("ОтправкаПакетов");
Если СтрокаОтправкаПакетов <> Неопределено Тогда
Для Каждого СтрокаВидыПакетов Из СтрокаОтправкаПакетов.Строки Цикл
СтрокаВидыПакетов.Пометка = Ложь;
КонецЦикла;
КонецЕсли;
КонецЕсли;
Возврат Истина;
При получении данных списка документов основной формы модуля вызывается событие ПриПолученииДанныхТабличнойЧасти
Пример выделения каждой второй строки списка документов:
Форма = Параметры.Форма;
ИмяФормы = Параметры.ИмяФормы;
Элемент = Параметры.Элемент;
ОформленияСтрок = Параметры.ОформленияСтрок;
Для Каждого Эл Из ОформленияСтрок Цикл
Если Эл.ДанныеСтроки.НомерСтроки % 2 = 0 Тогда
Эл.Ячейки.Документ.ЦветФона = WebЦвета.Аквамарин;
Эл.ЦветФона = WebЦвета.Древесный;
КонецЕсли;
КонецЦикла;
Возврат Истина;