- •Лабораторная работа № 3 Разработка объектов конфигурации в среде v8 Тема: Документы
- •Пример выполнения работы
- •Разработать Документ «Поступление товара»
- •Сформировать форму документа
- •Разработать Документ «Возврат товара».
- •6. Сформировать новый отчет «Ведомость о поступлениях и возврате».
- •Обеспечение промежуточной подсуммировки итогов в отчете
Разработать Документ «Возврат товара».
В состав реквизитов документы, кроме реквизитов предыдущего документа, добавим реквизит «шапки» : ДокументОснование (Тип: Документ.ПоступлениеТоваров)
и получим форму документа.
После ввода значения поля «ДокументОснование» в табличной части данного документа должны появиться все строки из документа-основания.
Для копирования полей данного документа из документаОснования выполним
Процедура ПиИзмененииДокументаОснования(Элемент)
Поставщик=ДокументОснование.Поставщик;
Склад=ДокументОснование.Склад;
Для каждого стр из ДокументОснование.Товары Цикл
Стр1=товары.Добавить();
Стр1.Товар=стр.товар;
стр1.Количество=стр.количество;
стр1.Цена=стр.Цена;
стр1.Сумма=Стр.Сумма;
КонецЦикла;
КонецПроцедуры
Колонка табличной части документа «Цена» не может исправляться пользователем, а количество – может, но только в сторону уменьшения. Можно также удалять лишние строки табличной части документа, если товар не подлежит возврату.
Для исключения доступа к полу «Цена» в его свойствах уберем отметку «Доступность»
6. Сформировать новый отчет «Ведомость о поступлениях и возврате».
Сформировать макет данного отчета
для обеспечения последующей нестандартной расшифровки отчет будем выводить в форму отчета – в поле табличного документа:
Текст процедуры.
Поскольку данные для отчета должны быть взяты из двух журналов документов, они (эти данные) должны быть предварительно сформированы в некоторой коллекции данных, а потом выведены в поле табличного документа. Таким предварительным хранилищем данных может быть таблица значений. Поэтому в начале процедуры ее необходимо создать.
Процедура КнопкаСформироватьНажатие(Кнопка)
ТЗ=Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Товар");
ТЗ.Колонки.Добавить("КолПоступило");
ТЗ.Колонки.Добавить("СуммаПоступило");
ТЗ.Колонки.Добавить("КолВозвращено");
ТЗ.Колонки.Добавить("СуммаВозвращено");
ТЗ.Колонки.Добавить("ДокументПоступления");
ТЗ.Колонки.Добавить("ДокументВозврата");
Затем необходимо заполнить данную таблицу сначала данными из журнала документов поступления:
ВыбДок1=Документы.ПоступлениеТоваров.Выбрать(НачалоДня(НачПериода),КонецДня( КонПериода));
Пока ВыбДок1.Следующий() Цикл
Если Не ВыбДок1.Проведен Тогда
продолжить;
КонецЕСли;
ДЛя каждого стр из ВыбДок1.Товары Цикл
ТекЗапись=ТЗ.Добавить();
ТекЗапись.товар=стр.Товар;
ТекЗапись.КолПоступило=стр.Количество;
ТекЗапись.СуммаПоступило=Стр.Сумма;
ТекЗапись.КолВозвращено=0;
ТекЗапись.СуммаВозвращено=0;
ТекЗапись.ДокументПоступления=ВыбДок1.Ссылка;
ТекЗапись.ДокументВозврата=Документы.ВозвратТоваров.ПустаяСсылка();
КонецЦикла;
КонецЦикла;
А затем – данными из журнала документов возврата::
ВыбДок2=Документы.ВозвратТоваров.Выбрать(НачалоДня(НачПериода),КонецДня( КонПериода));
Пока ВыбДок2.Следующий() Цикл
Если Не ВыбДок2.Проведен Тогда
продолжить;
КонецЕСли;
ДЛя каждого стр из ВыбДок2.Товары Цикл
ТекЗапись=ТЗ.Добавить();
ТекЗапись.товар=стр.Товар;
ТекЗапись.КолПоступило=0;
ТекЗапись.СуммаПоступило=0;
ТекЗапись.КолВозвращено=стр.Количество;
ТекЗапись.СуммаВозвращено=Стр.Сумма;
ТекЗапись.ДокументПоступления=Документы.ПоступлениеТоваров.ПустаяСсылка();
ТекЗапись.ДокументВозврата=ВыбДок2.Ссылка;
КонецЦикла;
КонецЦикла;
После такого заполнения содержимое таблицы значений ТЗ будет выглядеть так:
Для вывода полученных данных в отчет необходимо, чтобы данные об одном товаре располагались на одной строке таблицы. Например, информация о вилке в таблице расположена в трех строках. Необходимо, чтобы в обновленной таблице товар «вилка» был расположен только в одной строке, но все числовые поля таблицы при этом были просуммированы. Для этого заведем еще одну таблицу значений.
ТЗ1= Новый ТаблицаЗначений;
ТЗ1=ТЗ.Скопировать();
ТЗ1.Свернуть("Товар","КолПоступило, СуммаПоступило, КолВозвращено, СуммаВозвращено");
После свертки содержимое таблицы значений ТЗ1 будет выглядеть так:
Такую таблицу уже можно выводить в отчет
Остаток текста программы:
Таб=ЭлементыФормы.ПолеТабличногоДокумента1;
Макет=Отчеты.ВедомостьПоступленияТоваров.ПолучитьМакет("МакетВедомости");
Область=Макет.ПолучитьОбласть("Шапка");
Область.Параметры.ОписаниеПериода=ПредставлениеПериода( НачалоДня(НачПериода),КонецДня( КонПериода),"ФП = Истина");
Таб.Вывести(Область);
Для ффф=0 По ТЗ1.Количество()-1 Цикл
Область=Макет.ПолучитьОбласть("Строка");
Область.Параметры.Ном =ффф+1;
Область.Параметры.Товар =ТЗ1[ффф].товар;
Область.Параметры.КолПоступило =ТЗ1[ффф].КолПоступило;
Область.Параметры.СуммаПоступило =ТЗ1[ффф].СуммаПоступило;
Область.Параметры.КолВозвращено =ТЗ1[ффф].КолВозвращено;
Область.Параметры.СуммаВозвращено=ТЗ1[ффф].СуммаВозвращено;
Область.Параметры.Брак =Формат(Область.Параметры.СуммаВозвращено/Область.Параметры.СуммаПоступило*100,"ЧЦ=10; ЧДЦ=2");
Таб.Вывести(Область);
КонецЦикла;
Область=Макет.ПолучитьОбласть("Подвал");
Область.Параметры.ИтогКолПоступило =ТЗ1.Итог("КолПоступило");
Область.Параметры.ИтогСуммаПоступило =ТЗ1.Итог("СуммаПоступило");
Область.Параметры.ИтогКолВозвращено =ТЗ1.Итог("КолВозвращено");
Область.Параметры.ИтогСуммаВозвращено=ТЗ1.Итог("СуммаВозвращено");
Таб.Вывести(Область);
Таб.ТолькоПросмотр = Истина;
Таб.Показать("Ведомость");
Для нестандартной расшифровки настроим область вывода основного отчета – поле табличного документа - на вызов процедуры-расшифровки:
А
в макете, в свойстве поля «Товар» укажем
параметр расшифровки с именем
«ТоварРасшифровка»
и распространим расшифровку на всю строку.
Далее, в программе вывода основного отчета добавим означивание переменной «ТоварРасшифровка»
ДЛя ффф=0 По ТЗ1.Количество()-1 Цикл
Область=Макет.ПолучитьОбласть("Строка");
Область.Параметры.Ном =ффф+1;
Область.Параметры.Товар =ТЗ1[ффф].товар;
Область.Параметры.КолПоступило =ТЗ1[ффф].КолПоступило;
Область.Параметры.СуммаПоступило =ТЗ1[ффф].СуммаПоступило;
Область.Параметры.КолВозвращено =ТЗ1[ффф].КолВозвращено;
Область.Параметры.СуммаВозвращено=ТЗ1[ффф].СуммаВозвращено;
Область.Параметры.Брак =Формат(Область.Параметры.СуммаВозвращено/Область.Параметры.СуммаПоступило*100,"ЧЦ=10; ЧДЦ=2");
Область.Параметры.ТоварРасшифровка=ТЗ1[ффф].товар;
Таб.Вывести(Область);
КонецЦикла;
Для вывода нового отчета-расшифровки можно сформировать отдельный макет, а можно сформировать секции в предыдущем макете:
Новый отчет будем выводить в отдельное окно вывода.
Для вывода отчета необходимо содержимое таблицы значений ТЗ. Она сформирована в процедуре КнопкаСформироватьНажатие(Кнопка).
Для того, чтобы она была «видна» и в процедуре Процедура ОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка) , опишем данную переменную, как внешнюю в самом начале модуля формы отчета.
Перем ТЗ;
Текст процедуры-расшифровки:
Процедура ОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
СтандартнаяОбработка = ложь;
Товар=Расшифровка;
Таб=новый табличныйДокумент;
Макет=Отчеты.ВедомостьПоступленияТоваров.ПолучитьМакет("МакетВедомости");
Область=Макет.ПолучитьОбласть("Шапка1");
Область.Параметры.ОписаниеПериода=представлениепериода( НачалоДня(НачПериода),КонецДня( КонПериода),"ФП = Истина");
Область.Параметры.товар=Товар;
Таб.Вывести(Область);
ДЛя ффф=0 По ТЗ.Количество()-1 Цикл
Если Товар<> ТЗ[ффф].товар Тогда
продолжить;
КонецЕСли;
Область=Макет.ПолучитьОбласть("Строка1");
Область.Параметры.Ном =ффф+1;
Если ТЗ[ффф].ДокументПоступления = Документы.ПоступлениеТоваров.ПустаяСсылка() Тогда
Док=ТЗ[ффф].ДокументВозврата;
иначе
Док=ТЗ[ффф].ДокументПоступления;
КонецЕСли;
Область.Параметры.Документ =Док;
Область.Параметры.КолПоступило =ТЗ[ффф].КолПоступило;
Область.Параметры.СуммаПоступило =ТЗ[ффф].СуммаПоступило;
Область.Параметры.КолВозвращено =ТЗ[ффф].КолВозвращено;
Область.Параметры.СуммаВозвращено=ТЗ[ффф].СуммаВозвращено;
Область.Параметры.ДокументРасшифровка=Док;
Таб.Вывести(Область);
КонецЦикла;
Таб.Вывести(Область);
Таб.ТолькоПросмотр = Истина;
Таб.Показать("Расшифровка");
КонецПроцедуры
Результат:
Замечание. Для обеспечения стандартной расшифровки нового отчета – вызова документа- необходимо:
Поместить отчет в главное меню задачи.
Замечание. Часто в процессе разработки необходимо показать на экране (в форме) содержимое таблицы значений. Это можно сделать так:
в форму вставить элемент управления – табличное поле
А в тексте программы после формирования таблицы значений написать:
ЭлементыФормы.ТабличноеПоле1.Значение=ТЗ1;
ЭлементыФормы.ТабличноеПоле1.СоздатьКолонки();
Возврат;
После запуска отчета в форме появится содержимое таблицы значений.
