Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lab5.doc
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
822.27 Кб
Скачать

Пример решения задачи

Задание: Сформировать два отчета:

1. Разработать отчет с помощью запроса к регистру накопления.

Ведомость поступления товаров от поставщиков с учетов возвратов за период с ______ по_______

товар

Поступило

возвращено

% брака

Кол

Сумма

Кол

Сумма

Итого <> <> <>

1а. Дополнительный отчет:

Ведомость поступления товаров от поставщика ____________ за ___ период

С _____- по ______

Дата

Товар

Склад

Единицы

Колич.

цена

стоимость

Сумма ндс

Всего с ндс

Итого: < > < > < >

Замечание 1. Строки отчета группируются по складам. В конце группы следует включать строку «Итого по складу».

2. Сформировать сводную таблицу на основании запроса к регистру накопления. Структура сводной таблицы :

товар

поступило

возвращено

Кол

Сумма

Кол

Сумма

Замечание. В конфигурации уже есть:

  1. В конфигурации есть документ «ПоступлениеТоваров»

2. Разработаны регистры накопления «Закупки» и «ОстаткиТМЦ»

Движения в регистры выполняет модуль объекта документа поступления товаров:

Процедура ОбработкаПроведения(Отказ, Режим)

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

// регистр Закупки

Движение = Движения.Закупки.Добавить();

Движение.Период = Дата;

Движение.Поставщик = Поставщик;

Движение.Товар = ТекСтрокаТовары.Товар;

Движение.Количество = ТекСтрокаТовары.Количество;

Движение.СуммаБезНДС = ТекСтрокаТовары.Сумма;

Движение.СуммаНДС = ТекСтрокаТовары.СуммаНДС;

Движение.ВидОперации = Перечисления.ВидыОпераций.Закупка;

КонецЦикла;

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

// регистр ОстаткиТоваров Приход

Движение = Движения.ОстаткиТМЦ.Добавить();

Движение.ВидДвижения = ВидДвиженияНакопления.приход;

Движение.Период = Дата;

Движение.Товар = ТекСтрокаТовары.Товар;

Движение.Склад = Склад;

Движение.Количество = ТекСтрокаТовары.Количество;

Движение.Сумма = ТекСтрокаТовары.Сумма;

КонецЦикла;

// записываем движения регистров

Движения.Закупки.Записать();

Движения.ОстаткиТМЦ.Записать();

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

3. Документ «Возврат товаров», также формирующий движения в эти регистры

  1. Решение

Форма диалога и макет отчета - аналогичны отчету в примерах к предыдущей лаб. раб.. Поэтому новый объект конфигурации формируем копированием объекта, формирующего аналогичный отчет прямым обходом регистров накопления.

В полученном отчете меняем только модуль расчета.

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

Формируем запрос к основной таблице регистра накопления «ОстаткиТМЦ».

Результат запроса для предварительного обзора выведем в табличное поле:

Получим:

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

Получим модуль расчета

Результат расчета с расшифровкой:

Замечание. Запрос можно сформировать так, чтобы в результирующей таблице информация о поступлении и возврате товара располагалась на одной строке. В этом случае отпадает необходимость в использовании таблицы значений. В этом случае источником запроса является виртуальная таблица «Обороты»

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

// запрос к виртуальной таблице «Обороты»

Запрос.Текст = " Выбрать

|Остатки.товар как товар,

|Остатки.КоличествоПриход как КолПоступило,

|Остатки.СуммаПриход как СуммаПоступило,

|Остатки.КоличествоРасход как КолВозвращено,

|Остатки.СуммаРасход как СуммаВозвращено

| Из РегистрНакопления.ОстаткиТМЦ.Обороты(&Нач,&Кон) как Остатки

| Упорядочить ПО Остатки.товар

| Итоги

|Сумма(СуммаПоступило),Сумма(КолПоступило),Сумма(СуммаВозвращено),

|Сумма(КолВозвращено) ПО ОБЩИЕ

|";

Запрос.УстановитьПараметр("Нач", НачалоДня(НачПериода));

Запрос.УстановитьПараметр("Кон", КонецДня( КонПериода));

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

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

ТабличноеПоле1=Результат.Выгрузить();

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

Возврат;

Получим:

Внимание: Итоговая строка в таблице является первой. Это обстоятельство необходимо учесть при обработке таблицы.

Продолжаем текст модуля: (убрать команду «Возврат»)

Таб=ЭлементыФормы.ПолеТабличногоДокумента1;

Макет=Отчеты.ВедомостьПоступленияТоваровСЗапросамиКВиртуальнойТабл.ПолучитьМакет("МакетВедомости");

Область=Макет.ПолучитьОбласть("Шапка");

Область.Параметры.ОписаниеПериода=представлениепериода( НачалоДня(НачПериода),КонецДня( КонПериода),"ФП = Истина");

Таб.Вывести(Область);

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

ффф=0;

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

// пропускаем вывод общего итога

Если ВыбРег.ТипЗаписи()=ТипЗаписиЗапроса.ОбщийИтог Тогда

Продолжить;

КонецЕСли;

Область=Макет.ПолучитьОбласть("Строка");

Область.Параметры.Ном =ффф+1;

Область.Параметры.Товар =ВыбРег.товар;

Область.Параметры.КолПоступило =ВыбРег.КолПоступило;

Область.Параметры.СуммаПоступило =ВыбРег.СуммаПоступило;

Область.Параметры.КолВозвращено =ВыбРег.КолВозвращено;

Область.Параметры.СуммаВозвращено=ВыбРег.СуммаВозвращено;

Если ВыбРег.СуммаПоступило<>0 Тогда

Область.Параметры.Брак =Формат(Область.Параметры.СуммаВозвращено/Область.Параметры.СуммаПоступило*100,"ЧЦ=10; ЧДЦ=2");

Иначе

Область.Параметры.Брак =0;

КонецЕСли;

Область.Параметры.ТоварРасшифровка=ВыбРег.товар;

Таб.Вывести(Область);

ффф=ффф+1;

КонецЦикла;

// еще раз организуем выборку результатов запроса для получения первой (итоговой )

// записи

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

Если ВыбРег.Следующий() Тогда

Область=Макет.ПолучитьОбласть("Подвал");

Область.Параметры.ИтогКолПоступило =ВыбРег.КолПоступило;

Область.Параметры.ИтогСуммаПоступило =ВыбРег.СуммаПоступило;

Область.Параметры.ИтогКолВозвращено =ВыбРег.КолВозвращено;

Область.Параметры.ИтогСуммаВозвращено=ВыбРег.СуммаВозвращено;

Таб.Вывести(Область);

КонецЕСли;

Таб.ТолькоПросмотр = Истина;

Таб.Показать("Ведомость");

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

Результат работы модуля – отчет прежнего вида:

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

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

СтандартнаяОбработка = ложь;

// передаваемый параметр – товар, на котором стоит курсор

ТоварРасшифровка=Расшифровка;

Таб=новый табличныйДокумент;

Макет=Отчеты.ВедомостьПоступленияТоваров.ПолучитьМакет("МакетВедомости");

Область=Макет.ПолучитьОбласть("Шапка1");

Область.Параметры.ОписаниеПериода=представлениепериода( НачалоДня(НачПериода),КонецДня( КонПериода),"ФП = Истина");

Область.Параметры.товар=ТоварРасшифровка;

// запрос к основной таблице

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

Запрос.Текст = " Выбрать

|Остатки.товар как товар,

|Остатки.ВидДвижения как ВидДвижения,

|Остатки.Регистратор как Документ,

|Остатки.Сумма как Сумма,

|Остатки.Количество как Количество,

|Остатки.Период Как период

| Из РегистрНакопления.ОстаткиТМЦ как Остатки

| Где Период<=&Кон и Период>=&Нач и Товар=&ВыбТовар" ;

Запрос.УстановитьПараметр("Нач", НачалоДня(НачПериода));

Запрос.УстановитьПараметр("Кон", КонецДня( КонПериода));

// добавим новый параметр

Запрос.УстановитьПараметр("ВыбТовар", ТоварРасшифровка);

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

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

ффф=0;

Таб.Вывести(Область);

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

Область=Макет.ПолучитьОбласть("Строка1");

Область.Параметры.Ном =ффф+1;

Область.Параметры.Документ =ВыбРег.Документ;

Если ВыбРег.ВидДвижения=ВидДвижениянакопления.Приход Тогда

Область.Параметры.КолПоступило =ВыбРег.Количество;

Область.Параметры.СуммаПоступило =ВыбРег.Сумма;

Иначе

Область.Параметры.КолВозвращено =ВыбРег.Количество;

Область.Параметры.СуммаВозвращено =ВыбРег.Сумма;

КонецЕСли;

Область.Параметры.ДокументРасшифровка=ВыбРег.Документ;

Таб.Вывести(Область);

ффф=ффф+1;

КонецЦикла;

Таб.ТолькоПросмотр = Истина;

Таб.Показать("Расшифровка");

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

Внешний вид расшифровки – см. раньше.

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