Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
180 lines (118 sloc) 12.1 KB

Как доработать таблицу списка документов

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

Дополнительные колонки

Помимо основных полей списка, которые заполняются в модуле, существует 5 колонок для вывода дополнительных сведений. Они называются "ДопРеквизит1", "ДопРеквизит2" и т.д.

Для изменения заголовков, типов и допустимых данных для каждой из них используется событие :doc:`ПолучитьНастройкиДополнительныхКолонокСпискаДокументов <../../func/pm/Poluchit'_Nastroyki_Dopolnitel'nykh_Kolonok_Spiska_Dokumentov>`.

Формирование списка колонок происходит в основной форме модуля при изменении режима отображения документов.

Пример переименования 3 колонок: "ДопРеквизит1", "ДопРеквизит2", "ДопРеквизит3":

Режим = Параметры.Режим;

Если Режим = "ПолученныеДокументы" Тогда

    ДопКолонки = Новый Массив;  // не более 5. Индекс элемента в массиве, увеличенный на единицу, совпадает с порядковым номером колонки
    ДопКолонки.Добавить(Новый Структура("Заголовок, Тип, ДопустимыеЗначения", "Состояние документа 1С", Новый ОписаниеТипов("Строка")));
    ДопКолонки.Добавить(Новый Структура("Заголовок, Тип, ДопустимыеЗначения", "Сумма в 1С", Новый ОписаниеТипов("Число")));
    ДопКолонки.Добавить(Новый Структура("Заголовок, Тип, ДопустимыеЗначения", "Расхождение", Новый ОписаниеТипов("Число")));

    Возврат ДопКолонки;

КонецЕсли;

Заполнение данными колонок "ДопРеквизит" происходит:

В первом варианте необходимо учитывать, что поля запроса с дополнительными данными должны иметь названия "ДопРеквизит1", "ДопРеквизит2" и т.д.

Во втором варианте заполнение происходит через непосредственное обращение к реквизиты таблицы СписокДокументов.

Обращение к событию происходит при каждом обновлении списка на форме модуля.

Пример заполнения значений дополнительных реквизитов с использованием события :doc:`ПослеОбновленияСпискаДокументов <../../func/pm/Posle_Obnovleniya_Spiska_Dokumentov>`:

СписокДокументов = Параметры.СписокДокументов;
Режим = Параметры.Режим;

Если Режим = "ПолученныеДокументы" Тогда

    Запрос = Новый Запрос(
    "ВЫБРАТЬ
    |   Парам.НомерСтроки,
    |   ВЫРАЗИТЬ(Парам.СуммаДокумента КАК ЧИСЛО) КАК СуммаДокументаДД,
    |   ВЫРАЗИТЬ(Парам.Документ КАК Документ.ПоступлениеТоваровУслуг) КАК Документ1С
    |ПОМЕСТИТЬ ВТ
    |ИЗ
    |   &СписокДокументов КАК Парам
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |   ВТ.НомерСтроки,
    |   ВЫБОР
    |       КОГДА ВТ.Документ1С ССЫЛКА Документ.ПоступлениеТоваровУслуг
    |           ТОГДА ВЫБОР
    |                   КОГДА ВЫРАЗИТЬ(ВТ.Документ1С КАК Документ.ПоступлениеТоваровУслуг).ПометкаУдаления
    |                       ТОГДА ""Удален""
    |                   КОГДА НЕ ВЫРАЗИТЬ(ВТ.Документ1С КАК Документ.ПоступлениеТоваровУслуг).Проведен
    |                       ТОГДА ""Не проведен""
    |                   ИНАЧЕ """"
    |                 КОНЕЦ
    |       ИНАЧЕ """"
    |   КОНЕЦ КАК СостояниеДокумента,
    |   ЕСТЬNULL(ВТ.Документ1С.СуммаДокумента, 0) КАК СуммаДокумента1С,
    |   ВТ.СуммаДокументаДД - ЕСТЬNULL(ВТ.Документ1С.СуммаДокумента, 0) КАК Расхождение
    |ИЗ
    |   ВТ КАК ВТ"
    );

    Запрос.УстановитьПараметр("СписокДокументов", СписокДокументов.Выгрузить( ,"НомерСтроки, Документ, СуммаДокумента"));
    Выборка = Запрос.Выполнить().Выбрать();

    Пока Выборка.Следующий() Цикл
        СписокДокументов[Выборка.НомерСтроки - 1].ДопРеквизит1 = Выборка.СостояниеДокумента;
        СписокДокументов[Выборка.НомерСтроки - 1].ДопРеквизит2 = Выборка.СуммаДокумента1С;
        СписокДокументов[Выборка.НомерСтроки - 1].ДопРеквизит3 = Выборка.Расхождение;
    КонецЦикла;

    Возврат ПолучитьНастройкиДополнительныхКолонокСпискаДокументов(Новый Структура("Режим", Режим));

КонецЕсли;

Доработка формы основного модуля

Для возможности редактирования управляемой формы основного модуля, например, для установки условного оформления списка документов, используется событие :doc:`УстановитьУсловноеОформление <../../func/pm/Ustanovit'_Uslovnoye_Oformleniye>`

Вызывается при создании на сервере основной формы.

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

Форма = Параметры.Форма;

//входящие документ на подпись
ЭлементУО = Форма.УсловноеОформление.Элементы.Добавить();

ПолеЭлемента = ЭлементУО.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных("СписокДокументов");

ОтборЭлемента = ЭлементУО.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение   = Новый ПолеКомпоновкиДанных("Объект.СписокДокументов.Направление");
ОтборЭлемента.ВидСравнения    = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение  = "Входящее";

ОтборЭлемента = ЭлементУО.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение   = Новый ПолеКомпоновкиДанных("Объект.СписокДокументов.Статус");
ОтборЭлемента.ВидСравнения    = ВидСравненияКомпоновкиДанных.Содержит;
ОтборЭлемента.ПравоеЗначение  = "Требуется подпись";

ЭлементУО.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.БледноЗеленый);

Возврат Истина;

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

При открытии основной формы модуля вызывается событие :doc:`ПриОткрытииФормы <../../func/pm/Pri_Otkrytii_Formy>`

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

Форма     = Параметры.Форма;
ИмяФормы  = Параметры.ИмяФормы;

Если ИмяФормы = "ОсновнаяФорма" Тогда

    ДеревоФильтров = Форма.ДеревоФильтров;

    СтрокаОтправкаПакетов = ДеревоФильтров.Строки.Найти("ОтправкаПакетов");

    Если СтрокаОтправкаПакетов <> Неопределено Тогда

        Для Каждого СтрокаВидыПакетов Из СтрокаОтправкаПакетов.Строки Цикл
            СтрокаВидыПакетов.Пометка = Ложь;
        КонецЦикла;

    КонецЕсли;

КонецЕсли;

Возврат Истина;

При получении данных списка документов основной формы модуля вызывается событие :doc:`ПриПолученииДанныхТабличнойЧасти <../../func/pm/Pri_Poluchenii_Dannykh_Tablichnoy_Chasti>`

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

Форма           = Параметры.Форма;
ИмяФормы        = Параметры.ИмяФормы;
Элемент         = Параметры.Элемент;
ОформленияСтрок = Параметры.ОформленияСтрок;

Для Каждого Эл Из ОформленияСтрок Цикл

    Если Эл.ДанныеСтроки.НомерСтроки % 2 = 0 Тогда
        Эл.Ячейки.Документ.ЦветФона = WebЦвета.Аквамарин;
        Эл.ЦветФона = WebЦвета.Древесный;
    КонецЕсли;

КонецЦикла;

Возврат Истина;
You can’t perform that action at this time.