![]() |
![]() |
![]() |
|
Неправильно считает ВсегоСкидка | ☑ | ||
---|---|---|---|---|
0
o-bol
07.01.12
✎
10:03
|
Помогите разобраться. Скидку считает верно, а в сумму скидки выводит последнюю скидку по документу. Вот код:
ВсегоСкидка = 0; Скидка=0; Если ТипЗнч(СтрокаРасхода.Док)=Тип("ДокументСсылка.ОтчетОРозничныхПродажах")ИЛИ ТипЗнч(СтрокаРасхода.Док)=Тип("ДокументСсылка.РеализацияТоваровУслуг")Тогда Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ | ПродажиОбороты.ДокументПродажи КАК Регистратор, | ПродажиОбороты.СтоимостьБезСкидокОборот КАК СуммаПоРознице, | ПродажиОбороты.СтоимостьОборот КАК СуммаПродажная, | ПродажиОбороты.СтоимостьБезСкидокОборот - ПродажиОбороты.СтоимостьОборот КАК Скидка |ИЗ | РегистрНакопления.Продажи.Обороты(, , Запись, ДокументПродажи = &Ссылка) КАК ПродажиОбороты |ИТОГИ | СУММА(Скидка) |ПО ОБЩИЕ, Регистратор |"; Запрос.УстановитьПараметр("Ссылка", СтрокаРасхода.Док); Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); Пока Выборка.Следующий() Цикл Если Выборка.ТипЗаписи() = ТипЗаписиЗапроса.ОбщийИтог Тогда Скидка = Выборка.Скидка; ВсегоСкидка = Выборка.Скидка+ВсегоСкидка; КонецЕсли; КонецЦикла; ОбластьМакета.Параметры.Скидка = ОбщегоНазначения.ФорматСумм(Скидка); ОбластьМакета.Параметры.СуммаТовара = ОбщегоНазначения.ФорматСумм(СтрокаРасхода.СуммаДокумента); ОбластьМакета.Параметры.СуммаТовара = ОбщегоНазначения.ФорматСумм(СтрокаРасхода.Расход); мТабДок.Вывести(ОбластьМакета); КонецЕсли; КонецЦикла; Расход = ТЗРасходы.Итог("Расход"); ОбластьМакета = Макет.ПолучитьОбласть("ИтогоРасход"); ОбластьМакета.Параметры.РасхСтоимостьВсего = ОбщегоНазначения.ФорматСумм(Расход); ОбластьМакета.Параметры.ВсегоСкидка = ОбщегоНазначения.ФорматСумм(ВсегоСкидка); мТабДок.Вывести(ОбластьМакета); |
|||
1
Rie
07.01.12
✎
10:10
|
(0) Так а где начало цикла (Для СтрокаРасхода Из ...)?
Судя по всему, ты в _каждой строке_ ВсегоСкидка инициализируешь нулём и заново насчитываешь - вот и выводится последняя. |
|||
2
zak555
07.01.12
✎
10:12
|
запрос с цикле ?
|
|||
3
o-bol
07.01.12
✎
10:50
|
Если убрать из Цикла, тогда выдает ошибку:
{Форма.Форма.Форма(249)}: Преобразование значения к типу Число не может быть выполнено ВсегоСкидка = Выборка.Скидка+ВсегоСкидка; |
|||
4
o-bol
07.01.12
✎
10:52
|
ОбластьМакета = Макет.ПолучитьОбласть("Строка");
Для Каждого СтрокаРасхода Из ТЗРасходы Цикл ОбластьМакета.Параметры.Докум = СтрокаРасхода.Док; ОбластьМакета.Параметры.Расшифровка = СтрокаРасхода.Док; ОбластьМакета.Параметры.ДатаДокумента = СтрокаРасхода.ДатаДок; ОбластьМакета.Параметры.НомерДокумента = СтрокаРасхода.НомерДок; ВсегоСкидка = 0; Скидка=0; Если ТипЗнч(СтрокаРасхода.Док)=Тип("ДокументСсылка.ОтчетОРозничныхПродажах")ИЛИ ТипЗнч(СтрокаРасхода.Док)=Тип("ДокументСсылка.РеализацияТоваровУслуг")Тогда Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ | ПродажиОбороты.ДокументПродажи КАК Регистратор, //| ПродажиОбороты.Номенклатура КАК Номенклатура, | ПродажиОбороты.СтоимостьБезСкидокОборот КАК СуммаПоРознице, | ПродажиОбороты.СтоимостьОборот КАК СуммаПродажная, | ПродажиОбороты.СтоимостьБезСкидокОборот - ПродажиОбороты.СтоимостьОборот КАК Скидка |ИЗ | РегистрНакопления.Продажи.Обороты(, , Запись, ДокументПродажи = &Ссылка) КАК ПродажиОбороты |ИТОГИ | СУММА(Скидка) |ПО ОБЩИЕ, Регистратор |"; Запрос.УстановитьПараметр("Ссылка", СтрокаРасхода.Док); Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); Пока Выборка.Следующий() Цикл Если Выборка.ТипЗаписи() = ТипЗаписиЗапроса.ОбщийИтог Тогда Скидка = Выборка.Скидка; КонецЕсли; КонецЦикла; ОбластьМакета.Параметры.Скидка = ОбщегоНазначения.ФорматСумм(Скидка); ОбластьМакета.Параметры.СуммаТовара = ОбщегоНазначения.ФорматСумм(СтрокаРасхода.СуммаДокумента); ОбластьМакета.Параметры.СуммаТовара = ОбщегоНазначения.ФорматСумм(СтрокаРасхода.Расход); мТабДок.Вывести(ОбластьМакета); КонецЕсли; КонецЦикла; ВсегоСкидка = Выборка.Скидка+ВсегоСкидка; Расход = ТЗРасходы.Итог("Расход"); ОбластьМакета = Макет.ПолучитьОбласть("ИтогоРасход"); ОбластьМакета.Параметры.РасхСтоимостьВсего = ОбщегоНазначения.ФорматСумм(Расход); ОбластьМакета.Параметры.ВсегоСкидка = ОбщегоНазначения.ФорматСумм(ВсегоСкидка); мТабДок.Вывести(ОбластьМакета); |
|||
5
Rie
07.01.12
✎
11:01
|
(4) У тебя ещё праздники? :-)
ВсегоСкидка = 0; Для Каждого СтрокаРасхода Из ТЗРасходы Цикл //... Пока Выборка.Следующий() Цикл //... ВсегоСкидка = ВсегоСкидка+Выборка.Скидка; КонецЦикла; //... КонецЦикла; //... ОбластьМакета.Параметры.ВсегоСкидка = ОбщегоНазначения.ФорматСумм(ВсегоСкидка); //... Ну и учти замечание из (2) насчёт запроса в цикле. |
|||
6
zak555
07.01.12
✎
11:02
|
ТЗРасходы это ТЧ дока ?
|
|||
9
o-bol
07.01.12
✎
11:40
|
Спасибо Rie. Вот так работает:
ОбластьМакета = Макет.ПолучитьОбласть("Строка"); ВсегоСкидка = 0; Для Каждого СтрокаРасхода Из ТЗРасходы Цикл ОбластьМакета.Параметры.Докум = СтрокаРасхода.Док; ОбластьМакета.Параметры.Расшифровка = СтрокаРасхода.Док; ОбластьМакета.Параметры.ДатаДокумента = СтрокаРасхода.ДатаДок; ОбластьМакета.Параметры.НомерДокумента = СтрокаРасхода.НомерДок; Если ТипЗнч(СтрокаРасхода.Док)=Тип("ДокументСсылка.ОтчетОРозничныхПродажах")ИЛИ ТипЗнч(СтрокаРасхода.Док)=Тип("ДокументСсылка.РеализацияТоваровУслуг")Тогда Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ | ПродажиОбороты.ДокументПродажи КАК Регистратор, | ПродажиОбороты.СтоимостьБезСкидокОборот КАК СуммаПоРознице, | ПродажиОбороты.СтоимостьОборот КАК СуммаПродажная, | ПродажиОбороты.СтоимостьБезСкидокОборот - ПродажиОбороты.СтоимостьОборот КАК Скидка |ИЗ | РегистрНакопления.Продажи.Обороты(, , Запись, ДокументПродажи = &Ссылка) КАК ПродажиОбороты |ИТОГИ | СУММА(Скидка) |ПО ОБЩИЕ, Регистратор |"; Запрос.УстановитьПараметр("Ссылка", СтрокаРасхода.Док); Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); Пока Выборка.Следующий() Цикл Если Выборка.ТипЗаписи() = ТипЗаписиЗапроса.ОбщийИтог Тогда Скидка = Выборка.Скидка; ВсегоСкидка = ВсегоСкидка+Выборка.Скидка; КонецЕсли; КонецЦикла; ОбластьМакета.Параметры.Скидка = ОбщегоНазначения.ФорматСумм(Скидка); ОбластьМакета.Параметры.СуммаТовара = ОбщегоНазначения.ФорматСумм(СтрокаРасхода.СуммаДокумента); ОбластьМакета.Параметры.СуммаТовара = ОбщегоНазначения.ФорматСумм(СтрокаРасхода.Расход); мТабДок.Вывести(ОбластьМакета); КонецЕсли; КонецЦикла; |
|||
10
Rie
07.01.12
✎
11:42
|
(9) Но всё же подумай над тем, что это можно уложить в один запрос, а циклами - лишь перебирать результат запроса.
|
|||
11
o-bol
07.01.12
✎
11:55
|
Спасибо, подумаю на досуге.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |