Примеры решения задач
Первое задание.
«Ведомость поступления товаров от поставщиков за ___ месяц ___ года»
Поставщик |
Товар |
Документ |
Количество |
Сумма |
Итого: < > < > < >
Отчет должен иметь промежуточные подсуммировки по поставщикам
Второе задание.
Сформировать Отчет: «Ведомость поступления товаров от поставщиков за ___ месяц ___ года»
Поставщик |
Товар |
Количество |
Сумма |
Итого: < > < > < >
Третье задание.
Сформировать Отчет: «Ведомость безвозмездного поступления ТМЦ от организаций за период с по »
Организация
|
Поступило материалов на сумму
|
Поступило ОС на сумму
|
Поступило денег на сумму
|
Всего поступило от организации
|
Итого: _________ _________ ____________ ______________
Решение первого задания.
«Ведомость поступления товаров от поставщиков за ___ месяц ___ года»
Поставщик |
Товар |
Документ |
Количество |
Сумма |
Итого: < > < > < >
Отчет должен иметь промежуточные подсуммировки по поставщикам
Отчет основывается на проводках
Дебет |
Кредит |
Сумма |
|||
Счет
|
Субконто (Материал) |
Количество |
Счет |
Субконто (Поставщик) |
|
41
41
и т.д.
|
Вилка
ложка |
10
15 |
60
60 |
Искра
Комета |
1000
2000
|
Каждая проводка по поступлению ТМЦ за период войдет в отчет отдельной строкой. Кроме того, в отчете участвуют субконто проводок (Товар, поставщик). Следовательно, для формирования запроса обращаемся к таблице регистра бухгалтерии, ведущей детальные записи по проводкам с учетом субконто. Это таблица:
Движения с субконто. Доступ к записям регистра бухгалтерии с учетом субконто
Поля таблицы:
<Измерения>
<Измерения>Дт
<Измерения>Кт
<Реквизиты>
<Ресурсы>
<Ресурсы>Дт
<Ресурсы>Кт
Активность
ВидСубконтоДт<Номер субконто>
ВидСубконтоКт<Номер субконто>
МоментВремени
НомерСтроки
Период
Регистратор
СубконтоДт<Номер субконто>
СубконтоДт<Номер субконто>
СчетДт
СчетКт
Кроме того, таблица содержит параметры:
Начало периода
|
Тип параметра: Дата, МоментВремени, Граница. Начало периода, за который будут выбираться проводки. Значение по умолчанию: Неопределено |
Конец периода
|
Тип параметра: Дата, МоментВремени, Граница. Конец периода, за который будут выбираться проводки. Значение по умолчанию: Неопределено |
Условие |
Конструкция языка запросов. Условие выбора проводок. В условии могут использоваться все поля таблицы |
А) Сначала формируем новый отчет с формой диалога
ПолеТабличногоДокумента для вывода отчета
|
Т
|
Б) Затем для него формируем макет
в) Формируем запрос:
// данный счет введен в план счетов как предопределенный
Счет41=Планысчетов.Хозрасчетный.Товары;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЖурналОперацийДвиженияССубконто.Регистратор как документ,
| ЖурналОперацийДвиженияССубконто.СубконтоДт1 как ТОвар,
| ЖурналОперацийДвиженияССубконто.СубконтоКт1 как Поставщик,
| ЖурналОперацийДвиженияССубконто.КоличествоДт как количество,
| ЖурналОперацийДвиженияССубконто.Сумма как сумма
|ИЗ
| РегистрБухгалтерии.ЖурналОпераций.ДвиженияССубконто(&Нач,&Кон) КАК ЖурналОперацийДвиженияССубконто
| Где ЖурналОперацийДвиженияССубконто.СчетДТ=&Счет41
| Итоги Сумма(КоличествоДт), Сумма(Сумма) по Поставщик, ОБЩИЕ";
Запрос.УстановитьПараметр("Нач", НачалоДня(НачПериода));
Запрос.УстановитьПараметр("Кон", КонецДня( КонПериода));
Запрос.УстановитьПараметр("Счет41", Счет41);
Результат = Запрос.Выполнить();
ТабличноеПоле1 = Результат.Выгрузить();
ЭлементыФормы.ТабличноеПоле1.СоздатьКолонки();
Возврат;
После вывода результата запроса в ТабличноеПоле получим
После того, как убеждаемся, что в таблице результатов запроса есть и группировочные, и детализированные строчки, продолжаем текст модуля формирования отчета:
Таб=ЭлементыФормы.ПолеТабличногоДокумента1;
Макет=Отчеты.ВедомостьПоступленияТоваровОтПоставщиковБухучет.ПолучитьМакет("МакетВедомости");
Область=Макет.ПолучитьОбласть("Шапка");
Область.Параметры.ОписаниеПериода=представлениепериода( НачалоДня(НачПериода),КонецДня( КонПериода),"ФП = Истина");
Таб.Вывести(Область);
ффф=0;
ВыбРег = Результат.Выбрать();
ВсегоСумма=0;
ВсегоКоличество=0;
Пока ВыбРег.Следующий() Цикл
Если ВыбРег.ТипЗаписи()=ТипЗаписиЗапроса.ИтогПоГруппировке Тогда
Область=Макет.ПолучитьОбласть("ПоПоставщику");
Область.Параметры.ИтогСумма =ВыбРег.Сумма;
Область.Параметры.ИтогКоличество =ВыбРег.Количество;
Таб.Вывести(Область);
ИначеЕсли ВыбРег.ТипЗаписи()=ТипЗаписиЗапроса.ОбщийИтог Тогда
Продолжить;
Иначе
Область=Макет.ПолучитьОбласть("Строка");
Область.Параметры.Ном =ффф+1;
Область.Параметры.Товар =ВыбРег.товар;
Область.Параметры.ТоварРасшифровка=ВыбРег.товар;
Область.Параметры.Количество =ВыбРег.Количество;
Область.Параметры.Сумма =ВыбРег.Сумма;
Область.Параметры.Поставщик =ВыбРег.Поставщик;
Область.Параметры.ПоставщикРасшифровка=ВыбРег.Поставщик;
Область.Параметры.Документ=ВыбРег.Документ;
Область.Параметры.ДокументРасшифровка=ВыбРег.Документ;
Таб.Вывести(Область);
ффф=ффф+1;
ВсегоСумма=ВсегоСумма+ВыбРег.Сумма;
ВсегоКоличество=ВсегоКоличество+ВыбРег.Количество;
КонецЕсли;
КонецЦикла;
Тз=Новый ТаблицаЗначений;
Тз=Результат.Выгрузить();
Область=Макет.ПолучитьОбласть("Подвал");
Область.Параметры.ВсегоСумма =Тз.Итог("Сумма");
Область.Параметры.ВсегоКоличество = Тз.Итог("Количество");
Таб.Вывести(Область);
Таб.ТолькоПросмотр = Истина;
Таб.Показать("ВедомостьПоступленияБухучет");
КонецПроцедуры
Получим результат:
В отчете работают расшифровки:
по поставщику:
по товару:
по документу:
Второе задание.
Сформировать Отчет: «Ведомость поступления товаров от поставщиков за ___ месяц ___ года»
Поставщик |
Товар |
Количество |
Сумма |
Итого: < > < > < >
Решение второго задания
Отчет требует вывода сводных итогов по товарам и поставщикам: в отчете должно быть столько строк, сколько различных поставщиков за период поставляли различные товары.
Источником для отчета может служить виртуальная таблица «Обороты»
Обороты. Получение оборотов по счетам и между счетами, а также по измерениям и субконто.
Поля таблицы:
<Имя измерения>
<ИмяРесурса>Оборот
<ИмяРесурса>ОборотДт
<ИмяРесурса>ОборотКт
КорСубконто<Номер субконто>
КорСчет
НомерСтроки
Период
Регистратор
Субконто<НомерСубконто>
Счет
Параметры:
Начало периода
|
Тип параметра: Дата, МоментВремени, Граница. Начало периода, за который будут выбираться проводки. Значение по умолчанию: Неопределено |
Конец периода
|
Тип параметра: Дата, МоментВремени, Граница. Конец периода, за который будут выбираться проводки. Значение по умолчанию: Неопределено |
Периодичность |
Конструкция языка запросов. Задает периодичность, с которой надо сгруппировать данные. Допустимые значения: Период, Год, Полугодие, Квартал, Месяц, Декада, Неделя, День, Регистратор, Запись. Значение по умолчанию: Период |
Условие по счету |
Конструкция языка запросов. Условие, по каким счетам получать данные. В условие можно использовать только поле <Счет>. Значение по умолчанию: Неопределено |
Субконто
|
Тип параметра: ПланВидовХарактеристикСсылка, массив значений ПланВидовХарактеристикСсылка. Задает набор и порядок субконто, которыми можно оперировать в запросе. Накладывает фильтр на записи по видам субконто (если массив, то по И). Если параметр <Субконто> не задан, то субконто определяются позиционно. То есть берется вид субконто соответствующего счета из соответствующей позиции. Так, если <Субконто> не определен, и делается запрос по счету, у которого определены виды субконто первое "Материалы", второе "Склад", то поле "Субконто1" будет содержать материалы, а поле "Субконто2" - склады. Если делается запрос по двум счетам, при этом у первого настройка субконто "Материалы, Склад", а у второго "Склад, Материал" и не задан параметр <Субконто>, то поле "Субконто1" будет содержать и материалы для первого счета и склады для второго счета. Поле "Субконто2" будет содержать склады для первого счета и материалы для второго. Если параметр <Субконто> задан, то выбираются данные только по тем счетам, у которых определены все указанные виды субконто. При этом поля "Субконто<N>", будут содержать значения, соответствующие переданным видам субконто. Например, если один счет имеет настройку субконто "Материалы, Склад", а второй "Склад, Материалы", и параметр виды субконто задан как массив "Материалы, Склад", то поле "Субконто1" будет содержать материалы, а поле "Субконто2" - склады, не зависимо от счета. Значение по умолчанию: Неопределено |
Условие |
Конструкция языка запросов. Условие, по которому отбираются данные. Можно использовать поля <Субконто<Номер субконто>>, <Имя измерения>. Значение по умолчанию: Неопределено |
Условие по кор. счету |
Конструкция языка запросов. Условие, по каким счетам получать данные. В условие можно использовать только поле <Счет>. Значение по умолчанию: Неопределено |
КорСубконто |
Тип параметра: ПланВидовХарактеристикСсылка, массив значений ПланВидовХарактеристикСсылка. Задает набор и порядок кор. субконто, которыми можно оперировать в запросе. Накладывает фильтр на записи по видам кор. субконто (если массив то по И). Значение по умолчанию: Неопределено |
Формируем новый отчет, его форму диалога, макет.
Запрос в модуле расчета будет иметь вид:
Счет41=Планысчетов.Хозрасчетный.Товары;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЖурналОперацийОбороты.Субконто1 как ТОвар,
| ЖурналОперацийОбороты.КорСубконто1 как Поставщик,
| ЖурналОперацийОбороты.КоличествоОборотДт как количество,
| ЖурналОперацийОбороты.СуммаОборот как сумма
|ИЗ
| РегистрБухгалтерии.ЖурналОпераций.Обороты(&Нач,&Кон) КАК
| ЖурналОперацийОбороты
| Где ЖурналОперацийОбороты.Счет=&Счет41
| Итоги Сумма(КоличествоОборотДт), Сумма(СуммаОборот) по Поставщик";
Запрос.УстановитьПараметр("Нач", НачалоДня(НачПериода));
Запрос.УстановитьПараметр("Кон", КонецДня( КонПериода));
Запрос.УстановитьПараметр("Счет41", Счет41);
Результат = Запрос.Выполнить();
ТабличноеПоле1 = Результат.Выгрузить();
ЭлементыФормы.ТабличноеПоле1.СоздатьКолонки();
Возврат;
Результат формирования запроса:
После того, как убеждаемся, что в таблице результатов запроса есть и группировочные, и детализированные строчки, продолжаем текст модуля формирования отчета:
Результат:
Третье задание.
Сформировать Отчет: «Ведомость безвозмездного поступления ТМЦ от организаций за период с___ по ___ »
Организация
|
Поступило материалов на сумму
|
Поступило ОС на сумму
|
Поступило денег на сумму
|
Всего поступило от организации
|
Итого: _________ _________ ____________ ______________
Решение третьего задания
Формируем новый отчет с макетом:
И
сточником
данных для запроса возьмем виртуальную
таблицу «ДвиженияССубконто»,
но в запросе свернем таблицу по поставщику.
Для свертки данных исходной таблицы используем при расчете числовых полей функцию «СУММА» и команду «Сгруппировать», которые обеспечат получение свернутых по группировкам числовых значений.
роме того, в запросе обеспечим хранение в одной строке (по поставщику) суммового оборота по счетам 10, 01,51.
Получим запрос:
счет10=ПланыСчетов.Хозрасчетный.Материалы;
счет01=ПланыСчетов.Хозрасчетный.ОсновныеСредства;
счет51=ПланыСчетов.Хозрасчетный.РасчетныйСчет;
Макет = ОтчетОбъект.ПолучитьМакет("ЗапросКРегиструБухгалтерии");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|ЖурналОперацийДвиженияССубконто.СубконтоКт1 КАК Контрагент,
|Сумма(выбор Когда ЖурналОперацийДвиженияССубконто.СчетДт=&Счет10 |Тогда ЖурналОперацийДвиженияССубконто.Сумма Иначе 0 Конец) КАК |Сумма10,
| Сумма(выбор Когда ЖурналОперацийДвиженияССубконто.СчетДт=&Счет01 Тогда ЖурналОперацийДвиженияССубконто.Сумма Иначе 0 Конец) КАК Сумма01,
| Сумма(выбор Когда ЖурналОперацийДвиженияССубконто.СчетДт=&Счет51 Тогда ЖурналОперацийДвиженияССубконто.Сумма Иначе 0 Конец) КАК Сумма51
|ИЗ
| РегистрБухгалтерии.ЖурналОпераций.ДвиженияССубконто(&Нач,&Кон) КАК ЖурналОперацийДвиженияССубконто
| Сгруппировать по ЖурналОперацийДвиженияССубконто.СубконтоКт1
|ИТОГИ ПО ОБЩИЕ";
Запрос.УстановитьПараметр("Нач", НачалоДня(НачПериода));
Запрос.УстановитьПараметр("Кон", КонецДня( КонПериода));
Запрос.УстановитьПараметр("счет10", счет10);
Запрос.УстановитьПараметр("счет01", счет01);
Запрос.УстановитьПараметр("счет51", счет51);
Результат = Запрос.Выполнить();
ТабличноеПоле1=Результат.Выгрузить();
ЭлементыФормы.ТабличноеПоле1.СоздатьКолонки();
//Возврат;
Результат запроса в ТабличномПоле:
В запросе есть обороты по поставщикам, а также Общий итог
Продолжаем модуль расчета:
ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали");
ТабДок.Очистить();
ТабДок.Вывести(ОбластьЗаголовок);
ТабДок.Вывести(ОбластьШапкаТаблицы);
ТабДок.НачатьАвтогруппировкуСтрок();
//Выборка = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Если Выборка.ТипЗаписи()=ТипЗаписиЗапроса.ОбщийИтог Тогда
Продолжить;
КонецЕсли;
ОбластьДетальныхЗаписей.Параметры.Заполнить(Выборка);
ОбластьДетальныхЗаписей.Параметры.Итого=ОбластьДетальныхЗаписей.Параметры.Сумма01+ОбластьДетальныхЗаписей.Параметры.Сумма10+ОбластьДетальныхЗаписей.Параметры.Сумма51;
ТабДок.Вывести(ОбластьДетальныхЗаписей);
КонецЦикла;
Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда
ОбластьПодвал.Параметры.Заполнить(Выборка);
ОбластьПодвал.Параметры.Итого=ОбластьПодвал.Параметры.Сумма01+ОбластьПодвал.Параметры.Сумма10+ОбластьПодвал.Параметры.Сумма51;
ТабДок.Вывести(ОбластьПодвал);
КонецЕСли;
Окончательный отчет:

абличноеПоле
для вывода результатов запроса
(временное)