Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lab3.doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
1.13 Mб
Скачать
  1. Разработать Документ «Возврат товара».

В состав реквизитов документы, кроме реквизитов предыдущего документа, добавим реквизит «шапки» : ДокументОснование (Тип: Документ.ПоступлениеТоваров)

и получим форму документа.

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

Для копирования полей данного документа из документаОснования выполним

Процедура ПиИзмененииДокументаОснования(Элемент)

Поставщик=ДокументОснование.Поставщик;

Склад=ДокументОснование.Склад;

Для каждого стр из ДокументОснование.Товары Цикл

Стр1=товары.Добавить();

Стр1.Товар=стр.товар;

стр1.Количество=стр.количество;

стр1.Цена=стр.Цена;

стр1.Сумма=Стр.Сумма;

КонецЦикла;

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

Колонка табличной части документа «Цена» не может исправляться пользователем, а количество – может, но только в сторону уменьшения. Можно также удалять лишние строки табличной части документа, если товар не подлежит возврату.

Для исключения доступа к полу «Цена» в его свойствах уберем отметку «Доступность»

6. Сформировать новый отчет «Ведомость о поступлениях и возврате».

  1. Сформировать макет данного отчета

  1. для обеспечения последующей нестандартной расшифровки отчет будем выводить в форму отчета – в поле табличного документа:

  1. Текст процедуры.

Поскольку данные для отчета должны быть взяты из двух журналов документов, они (эти данные) должны быть предварительно сформированы в некоторой коллекции данных, а потом выведены в поле табличного документа. Таким предварительным хранилищем данных может быть таблица значений. Поэтому в начале процедуры ее необходимо создать.

Процедура КнопкаСформироватьНажатие(Кнопка)

ТЗ=Новый ТаблицаЗначений;

ТЗ.Колонки.Добавить("Товар");

ТЗ.Колонки.Добавить("КолПоступило");

ТЗ.Колонки.Добавить("СуммаПоступило");

ТЗ.Колонки.Добавить("КолВозвращено");

ТЗ.Колонки.Добавить("СуммаВозвращено");

ТЗ.Колонки.Добавить("ДокументПоступления");

ТЗ.Колонки.Добавить("ДокументВозврата");

Затем необходимо заполнить данную таблицу сначала данными из журнала документов поступления:

ВыбДок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;

ЭлементыФормы.ТабличноеПоле1.СоздатьКолонки();

Возврат;

После запуска отчета в форме появится содержимое таблицы значений.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]