В начало

Отбор по дополнительной колонке журнала

           

Есть журнал документов «Платежные документы», в котором собираются 2 платежных документа: [Поступление денежных средств] и [Списание денежных средств]. У журнала документов есть графа «Проект», которое соответствует общему реквизиту [Проект]. Кроме того у журнала документов имеется форма списка, на которой расположены следующие колонки: ВидДокумента, Дата, Номер, Проект и дополнительное поле Проект1, для которого значение будет вытягиваться из табличных частей документов, входящих в журнал документов. При этом поле «Проект» и поле «Проект1» вовсе не должны совпадать.

Рис. Журнал документов «Платежные документы»

 

            Чтобы осуществить вывод данных в дополнительное поле «Проект1»  необходимо с свойствах табличного поля «ЖурналДокументовСписок» на событии «ПриВыводеСтроки» прописать процедуру, листинг которой показан ниже.

Листинг. Процедура «ЖурналДокументовСписокПриВыводеСтроки»

Процедура ЖурналДокументовСписокПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)

            ОформлениеСтроки.Ячейки.Проект1.ОтображатьТекст = Истина;

            Для Каждого Стр Из ДанныеСтроки.Ссылка.ДвижениеДенежныхСредств Цикл

                        ОформлениеСтроки.Ячейки.Проект1.Текст = Стр.Проект1;

            КонецЦикла;

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

           

В приведенной процедуре мы во первых устанавливаем отображение  текста в ячейках колонки «Проект1», а во вторых обходим табличные части платежных документов и тянем реквизит табличной части «Проект1».

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

Рис. Форма документа «Поступление денежных средств»

            Поскольку, поле «Проект1» не связано с реквизитами документов, входящих в журнал документов «Платежные документы», то отбор стандартными механизмами через кнопу «Отбор и сортировка» недоступны. Ниже показана вкладка «Отбор», на которой видны доступные для отбора реквизиты.

Рис. Виды отборов на кнопке «Отбор и сортировка»

            На рисунке видно поле «Проект», которое  присутствует в документах как реквизит, в журнале документов как графа, но вот дополнительного поля «Проект1» нет, а следовательно и отбор осуществить через «Воронку» нельзя.

            Для осуществления отбора по дополнительному полю «Проект1» предварительно на форму списка журнала документов «Платежные документы» добавим поле с именем «ПолеПроект1» с типом «СправочникСсылка.Проекты» и кнопку «ОтборПоПроекту1», на которую повесим событие при нажатии.

Листинг. Процедура на кнопке

Процедура Кнопка1Нажатие(Элемент)

                Запрос = Новый Запрос;

                Запрос.Текст =

                               "ВЫБРАТЬ

                               |               СписаниеДенежныхСредств.Ссылка,

                               |               СписаниеДенежныхСредствДвижениеДенежныхСредств.Проект1

                               |ПОМЕСТИТЬ втПлатежныеДокументы

                               |ИЗ

                               |               Документ.СписаниеДенежныхСредств.ДвижениеДенежныхСредств КАК СписаниеДенежныхСредствДвижениеДенежныхСредств

                               |                               ЛЕВОЕ СОЕДИНЕНИЕ Документ.СписаниеДенежныхСредств КАК СписаниеДенежныхСредств

                               |                               ПО (СписаниеДенежныхСредствДвижениеДенежныхСредств.Ссылка = СписаниеДенежныхСредств.Ссылка)

                               |

                               |ОБЪЕДИНИТЬ ВСЕ

                               |

                               |ВЫБРАТЬ

                               |               ПоступлениеДенежныхСредств.Ссылка,

                               |               ПоступлениеДенежныхСредствДвижениеДенежныхСредств.Проект1

                               |ИЗ

                               |               Документ.ПоступлениеДенежныхСредств.ДвижениеДенежныхСредств КАК ПоступлениеДенежныхСредствДвижениеДенежныхСредств

                               |                               ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеДенежныхСредств КАК ПоступлениеДенежныхСредств

                               |                               ПО (ПоступлениеДенежныхСредствДвижениеДенежныхСредств.Ссылка = ПоступлениеДенежныхСредств.Ссылка)

                               |;

                               |

                               |////////////////////////////////////////////////////////////////////////////////

                               |ВЫБРАТЬ

                               |               втПлатежныеДокументы.Проект1,

                               |               втПлатежныеДокументы.Ссылка

                               |ИЗ

                               |               втПлатежныеДокументы КАК втПлатежныеДокументы

                               |ГДЕ

                               |               втПлатежныеДокументы.Проект1 = &Проект1";

               

                Запрос.УстановитьПараметр("Проект1", ПолеПроект1);

               

                Если ЗначениеЗаполнено(ПолеПроект1) Тогда

                               Результат = Запрос.Выполнить();

                               Выборка = Результат.Выбрать();

                               СЗ = Новый СписокЗначений;

                              

                               Пока Выборка.Следующий() Цикл

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

                               КонецЦикла;

                              

                               Отбор.Ссылка.ВидСравнения = ВидСравнения.ВСписке;

                               Отбор.Ссылка.Значение = СЗ;

                               Отбор.Ссылка.Использование = Истина;

                Иначе

                               Отбор.Ссылка.Использование = Ложь;

                КонецЕсли;         

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

            Кроме того на кнопку «Очистка» поля «ПолеПроект1» тоже установим небольшую процедуру для очистки отбора.

 

Процедура ПолеПроектОчистка(Элемент, СтандартнаяОбработка)

            Отбор.Ссылка.Использование = Ложь;

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

 

            Далее показан результат отбора по типовому проекту №1.

Рис. Форма списка журнала документов «Платежные документы»