Консультация № 178598
24.05.2010, 01:46
0.00 руб.
26.05.2010, 17:50
0 9 1
Здравствуйте, уважаемые эксперты!
Бухгалтерия предприятия 8.1.
Помогите, пожалуйста, дописать запрос, чтобы в макет отчета добавить колонку Сумма. В запросе должна рассчитываться средняя цена по субконто "Материал" по счету 10.01 на дату документа (Наряд) = Сумма кон.остаток/ кол-во кон.остаток * "Количество" из запроса. Заранее спасибо.

Приложение:
Процедура СформироватьОтчет(ТабличныйДокумент) Экспорт
ТабличныйДокумент.Очистить();
Макет = ПолучитьМакет("Макет");
//Вывод шапки
Секция = Макет.ПолучитьОбласть("Шапка");
Секция.Параметры.НачалоПериода = Формат(НачалоПериода, "ДФ=dd.MM.yyyy");
Секция.Параметры.КонецПериода = Формат(КонецПериода, "ДФ=dd.MM.yyyy");
СведенияОбОрганизации = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Организация);
НазваниеОрганизации = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОбОрганизации,"НаименованиеДляПечатныхФорм");
Секция.Параметры.НазваниеОрганизации = НазваниеОрганизации;
Секция.Параметры.ОтветственныйЗаВыполнение = ОтветственныйЗаВыполнение.Наименование;
ТабличныйДокумент.Вывести(Секция);

//Выполнение запроса
Результат = ПодготовитьОтчетКВыводуНаПечать();

Если Результат.Пустой() Тогда
Секция = Макет.ПолучитьОбласть("Строка");
ТабличныйДокумент.Вывести(Секция);
УправлениеОтчетами.УстановитьКолонтитулыПоУмолчанию(ТабличныйДокумент, ,Строка(глЗначениеПеременной("глТекущийПользователь")));
Возврат;
КонецЕсли;

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

Счетчик = 1;
Если ГруппироватьПоРазделам Тогда
СекцияРаздела = Макет.ПолучитьОбласть("Раздел");
ГруппировкаПоРазделу = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
ТабличныйДокумент.НачатьАвтогруппировкуСтрок();
Пока ГруппировкаПоРазделу.Следующий() Цикл
СекцияРаздела.Параметры.Заполнить(ГруппировкаПоРазделу);
ТабличныйДокумент.Вывести(СекцияРаздела, 1);
СекцияАдреса = Макет.ПолучитьОбласть("Адрес");
ГруппировкаПоАдресу = ГруппировкаПоРазделу.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ГруппировкаПоАдресу.Следующий() Цикл
СекцияАдреса.Параметры.Заполнить(ГруппировкаПоАдресу);
ТабличныйДокумент.Вывести(СекцияАдреса,1);

Документ = ГруппировкаПоАдресу.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока Документ.Следующий() Цикл
Секция.Параметры.НПП = Счетчик;
Если ВыводСтроки(Документ, Секция) Тогда
ТабличныйДокумент.Вывести(Секция,2);
Счетчик = Счетчик + 1;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла;
Иначе
СекцияАдреса = Макет.ПолучитьОбласть("Адрес");
ГруппировкаПоАдресу = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
ТабличныйДокумент.НачатьАвтогруппировкуСтрок();
Пока ГруппировкаПоАдресу.Следующий() Цикл
СекцияАдреса.Параметры.Заполнить(ГруппировкаПоАдресу);
ТабличныйДокумент.Вывести(СекцияАдреса,1);

Документ = ГруппировкаПоАдресу.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока Документ.Следующий() Цикл
Секция.Параметры.НПП = Счетчик;
Если ВыводСтроки(Документ, Секция) Тогда
ТабличныйДокумент.Вывести(Секция,2);
Счетчик = Счетчик + 1;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЕсли;

ТабличныйДокумент.ЗакончитьАвтогруппировкуСтрок();
ТабличныйДокумент.ПовторятьПриПечатиСтроки = ТабличныйДокумент.Области.ШапкаТаблицы;
УправлениеОтчетами.УстановитьКолонтитулыПоУмолчанию(ТабличныйДокумент, ,Строка(глЗначениеПеременной("глТекущийПользователь")));

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

Функция ВыводСтроки(Документ, Секция)
Секция.Параметры.Заполнить(Документ);
Секция.Параметры.Наряд = "№ " + ОбщегоНазначения.ПолучитьНомерНаПечать(Документ.Наряд)+ " от " + Формат(Документ.Наряд.Дата, "ДФ='дд.ММ.гг'") + " г.";
Возврат Истина;
КонецФункции

Функция ПодготовитьОтчетКВыводуНаПечать()

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| УК_НарядЗаказМатериалыФакт.Ссылка КАК Наряд,
| УК_НарядЗаказМатериалыФакт.Работа,
| УК_НарядЗаказМатериалыФакт.Материал КАК Материал,
| УК_НарядЗаказМатериалыФакт.ЕдиницаИзмерения,
| УК_НарядЗаказМатериалыФакт.ВОбъем КАК Объем,
| УК_НарядЗаказМатериалыФакт.ФОбъем КАК Количество,
| УК_НарядЗаказМатериалыФакт.ВидРаботы.Раздел КАК Раздел,";
Если ПоДомам Тогда
Запрос.Текст = Запрос.Текст + "
| ВЫБОР
| КОГДА УК_НарядЗаказМатериалыФакт.Ссылка.ВидОперации = ЗНАЧЕНИЕ(Перечисление.КВП_ВидыОперацийЗаявокНаВыполнениеРабот.ВыполнениеРаботПоДому)
| ТОГДА УК_НарядЗаказМатериалыФакт.Ссылка.Здание
| ИНАЧЕ УК_НарядЗаказМатериалыФакт.Ссылка.ЛицевойСчет.Адрес.Владелец
| КОНЕЦ КАК Адрес";
Иначе
Запрос.Текст = Запрос.Текст + "
| УК_НарядЗаказМатериалыФакт.Ссылка.Адрес КАК Адрес";
КонецЕсли;
Запрос.Текст = Запрос.Текст + "
|ИЗ
| Документ.УК_НарядЗаказ.МатериалыФакт КАК УК_НарядЗаказМатериалыФакт
|ГДЕ
| УК_НарядЗаказМатериалыФакт.Ссылка.Организация = &Организация
| И (НЕ УК_НарядЗаказМатериалыФакт.Ссылка.ПометкаУдаления)
| И (УК_НарядЗаказМатериалыФакт.Ссылка.Дата МЕЖДУ &НачалоПериода И &КонецПериода)
|УПОРЯДОЧИТЬ ПО
| Адрес,
| Наряд,
| Материал";

Если ГруппироватьПоРазделам Тогда
Запрос.Текст = Запрос.Текст + "
|ИТОГИ ПО
|Раздел,
|Адрес";
Иначе
Запрос.Текст = Запрос.Текст + "
|ИТОГИ ПО
|Адрес";
КонецЕсли;
Запрос.УстановитьПараметр("НачалоПериода",НачалоПериода);
Запрос.УстановитьПараметр("КонецПериода",КонецПериода);
Запрос.УстановитьПараметр("Организация",Организация);
Возврат Запрос.Выполнить();
КонецФункции

Обсуждение

Неизвестный
26.05.2010, 11:09
общий
Darina9:
Конфигурация какая? Бухгалтерия?
Неизвестный
26.05.2010, 11:46
общий
Да, Бухгалтерия. извините, что сразу не написала
давно
Студент
218854
56
31.05.2010, 14:08
общий
Darina9:
Я не вижу способов реализовать получение средней цены материала на дату документа в одном запросе.
Можно получать остатки по регистру бухгалтерии в цикле при выводе срок табличного документа. Также необходимо учитывать делает ли проводки по 10 счету документ, который получаем в запросе. Если да, то надо определиться будем ли учитывать движение текущего документа при расчете средней цены материала.

Запрос примерно такой (можно оформить отдельной функцией и передавать ей текущий документ и текущий материал):
"ВЫБРАТЬ
| ХозрасчетныйОстатки.СуммаОстаток,
| ХозрасчетныйОстатки.КоличествоОстаток
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаДок, Счет В ИЕРАРХИИ (&Счет10), ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура), Субконто1 = &ТекНоменклатура) КАК ХозрасчетныйОстатки"

где ДатаДок - дата текущего документа. Если надо включить движения текущего документа, то задаем граница вида: Новый Граница(ТекДок.Дата, ВидГраницы.Включая)
ТекНоменклатура - текущая номенклатура из выборки
Неизвестный
31.05.2010, 14:17
общий
Darina9:
Напишите, пожалуйста, помогла ли Вам эта информация?
Неизвестный
01.06.2010, 10:17
общий
Вопрос закрываю.
Неизвестный
01.06.2010, 12:17
общий
Я реализовала расчет средней в цикле при выводе срок табличного документа. Интересовала сложнее задача - в запросе. Тем не менее, спасибо
давно
Студент
218854
56
01.06.2010, 12:21
общий
это ответ
Переношу ответ из мини-форума

Я не вижу способов реализовать получение средней цены материала на дату документа в одном запросе.
Можно получать остатки по регистру бухгалтерии в цикле при выводе срок табличного документа. Также необходимо учитывать делает ли проводки по 10 счету документ, который получаем в запросе. Если да, то надо определиться будем ли учитывать движение текущего документа при расчете средней цены материала.

Запрос примерно такой (можно оформить отдельной функцией и передавать ей текущий документ и текущий материал):
"ВЫБРАТЬ
| ХозрасчетныйОстатки.СуммаОстаток,
| ХозрасчетныйОстатки.КоличествоОстаток
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаДок, Счет В ИЕРАРХИИ (&Счет10), ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура), Субконто1 = &ТекНоменклатура) КАК ХозрасчетныйОстатки"

где ДатаДок - дата текущего документа. Если надо включить движения текущего документа, то задаем граница вида: Новый Граница(ТекДок.Дата, ВидГраницы.Включая)
ТекНоменклатура - текущая номенклатура из выборки
5
Неизвестный
04.06.2010, 06:51
общий
А что мешает анализировать регистр партий? ведь цена товара на определенный момент расчитывается именно там. Не совсем уверен чтотакой регистр есть в бухгалтерии. т.к. в основном работаю на УПП.
давно
Студент
218854
56
04.06.2010, 07:31
общий
Полозов Олег aka Asher:
В БУХ нет партионного учета на регистрах накопления. Да и в этом случае среднюю цену необходимо получить на дату текущего документа, как это реализовать в одном запросе я не знаю :)
Форма ответа