Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 16:47

Неверно считает суммы в процедуре

Автор Каримдат, 27 июн 2018, 20:00

0 Пользователей и 1 гость просматривают эту тему.

Каримдат

Функция НапечататьПриходРасходСРозничныхСкладовВЦенахАТТ(Док, ВалютаРегламентированногоУчета, ЭтоПриход) Экспорт

Если ЭтоПриход Тогда
ТекстЗапросаКоличество = "ВЫБОР КОГДА РегТоварыВРознице.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
|    И РегТоварыВРознице.Количество > 0 ТОГДА
| РегТоварыВРознице.Количество
| КОГДА РегТоварыВРознице.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
|    И РегТоварыВРознице.Количество < 0 ТОГДА
| -РегТоварыВРознице.Количество
| ИНАЧЕ
| 0
| КОНЕЦ";

ТекстЗапросаСуммаПродажная = "ВЫБОР КОГДА РегТоварыВРознице.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
|    И РегТоварыВРознице.СуммаПродажная > 0 ТОГДА
| РегТоварыВРознице.СуммаПродажная
| КОГДА РегТоварыВРознице.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
|    И РегТоварыВРознице.СуммаПродажная < 0 ТОГДА
| -РегТоварыВРознице.СуммаПродажная
| ИНАЧЕ
| 0
| КОНЕЦ";

ТекстНетДвижений = "Данным документом не выполнен приход ни на один розничный склад!";

ТекстВсегоПринятоОтпущено = "Всего принято ";
ТекстПринялОтпустил = "Принял";
Иначе
ТекстЗапросаКоличество = "ВЫБОР КОГДА РегТоварыВРознице.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
|    И РегТоварыВРознице.Количество > 0 ТОГДА
| РегТоварыВРознице.Количество
| КОГДА РегТоварыВРознице.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
|    И РегТоварыВРознице.Количество < 0 ТОГДА
| -РегТоварыВРознице.Количество
| ИНАЧЕ
| 0
| КОНЕЦ";

ТекстЗапросаСуммаПродажная = "ВЫБОР КОГДА РегТоварыВРознице.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
|    И РегТоварыВРознице.СуммаПродажная > 0 ТОГДА
| РегТоварыВРознице.СуммаПродажная
| КОГДА РегТоварыВРознице.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
|    И РегТоварыВРознице.СуммаПродажная < 0 ТОГДА
| -РегТоварыВРознице.СуммаПродажная
| ИНАЧЕ
| 0
| КОНЕЦ";

ТекстНетДвижений = "Данным документом не выполнен расход ни с одного розничного склада!";

ТекстВсегоПринятоОтпущено = "Всего отпущено ";
ТекстПринялОтпустил = "Отпустил";
КонецЕсли;

ДопКолонка = Константы.ДополнительнаяКолонкаПечатныхФормДокументов.Получить();
Если ДопКолонка = Перечисления.ДополнительнаяКолонкаПечатныхФормДокументов.Артикул Тогда
СуффиксОбласти = "СКодами";
ИмяКолонкиКодов = "Артикул";
ИначеЕсли ДопКолонка = Перечисления.ДополнительнаяКолонкаПечатныхФормДокументов.Код Тогда
СуффиксОбласти = "СКодами";
ИмяКолонкиКодов = "Код";
Иначе
СуффиксОбласти = "";
ИмяКолонкиКодов = "Код"; // это нужно, чтобы текст запроса формировался корректно
КонецЕсли;

Запрос = Новый Запрос("
|ВЫБРАТЬ
| РегТоварыВРознице.Склад КАК Склад,
| РегТоварыВРознице.Номенклатура.Представление КАК Номенклатура,
|    РегТоварыВРознице.Номенклатура."+ИмяКолонкиКодов+" КАК КодТовара,
| РегТоварыВРознице.Номенклатура КАК НоменклатураСсылка,
| РегТоварыВРознице.Номенклатура.ЕдиницаХраненияОстатков.Представление КАК ЕдиницаИзмерения,
| РегТоварыВРознице.ХарактеристикаНоменклатуры.Представление КАК Характеристика,
| РегТоварыВРознице.СерияНоменклатуры.Представление КАК Серия,
| РегТоварыВРознице.Качество.Представление КАК Качество,
//Добавлено
| ОтчетОРозничныхПродажахТовары.ПроцентСкидкиНаценки,//процент ручных скидок
| ОтчетОРозничныхПродажахТовары.ПроцентАвтоматическихСкидок,//процент автоматических скидок
| Сумма(" + ТекстЗапросаКоличество + ") КАК Количество,
| Сумма(" + ТекстЗапросаСуммаПродажная + ") КАК СуммаПродажная,
|  ОтчетОРозничныхПродажахТовары.Сумма КАК ИтоговаяСумма, //сумма, итоговая, после расчёта скидок в документе Отчет о розничных продажах
//Добавлено сумма скидок ручных и автоматических
|  ВЫРАЗИТЬ(ОтчетОРозничныхПродажахТовары.ПроцентАвтоматическихСкидок + ОтчетОРозничныхПродажахТовары.ПроцентСкидкиНаценки КАК ЧИСЛО(5, 2)) КАК СуммаСкидок
|ИЗ
| РегистрНакопления.ТоварыВРознице КАК РегТоварыВРознице
//Добавлено
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ОтчетОРозничныхПродажах.Товары КАК ОтчетОРозничныхПродажахТовары
| ПО РегТоварыВРознице.Номенклатура = ОтчетОРозничныхПродажахТовары.Номенклатура
|ГДЕ
| РегТоварыВРознице.Регистратор = &Док
| И РегТоварыВРознице.Активность
|
|СГРУППИРОВАТЬ ПО
| РегТоварыВРознице.Склад,
| РегТоварыВРознице.Номенклатура,
| РегТоварыВРознице.Номенклатура.ЕдиницаХраненияОстатков,
| РегТоварыВРознице.ХарактеристикаНоменклатуры,
| РегТоварыВРознице.СерияНоменклатуры,
| РегТоварыВРознице.Качество,
//Добавлено
| ОтчетОРозничныхПродажахТовары.ПроцентСкидкиНаценки,
| ОтчетОРозничныхПродажахТовары.ПроцентАвтоматическихСкидок,
|      ОтчетОРозничныхПродажахТовары.Сумма
|ИМЕЮЩИЕ
| Сумма(" + ТекстЗапросаКоличество + ") <> 0
| ИЛИ Сумма(" + ТекстЗапросаСуммаПродажная + ") <> 0
|
|УПОРЯДОЧИТЬ ПО Номенклатура
|ИТОГИ
|ПО
| Склад
|");
Запрос.УстановитьПараметр("Док", Док);

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

Если РезультатЗапроса.Пустой() Тогда
Предупреждение(ТекстНетДвижений);
ТабДокумент = Неопределено;
Иначе
ТабДокумент = Новый ТабличныйДокумент;
ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_РасходСРозничныхСкладовВЦенахАТТ";

Макет = ПолучитьОбщийМакет("ПриходРасходВЦенахАТТ");

ОбластьЗаголовок     = Макет.ПолучитьОбласть("Заголовок");
ОбластьШапкаТаблицы  = Макет.ПолучитьОбласть("ШапкаТаблицы"+СуффиксОбласти);
ОбластьСклад         = Макет.ПолучитьОбласть("Склад");
ОбластьСтроки        = Макет.ПолучитьОбласть("Строка"+СуффиксОбласти);
ОбластьИтого         = Макет.ПолучитьОбласть("Итого");
ОбластьСуммаПрописью = Макет.ПолучитьОбласть("СуммаПрописью");
ОбластьПодписи       = Макет.ПолучитьОбласть("Подписи");

Если СуффиксОбласти <> "" Тогда
ОбластьШапкаТаблицы.Параметры.ИмяКолонкиКодов = ИмяКолонкиКодов;
КонецЕсли;

ЗаголовокДокумента = ОбщегоНазначения.СформироватьЗаголовокДокумента(Док, Док.Метаданные().Синоним);

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

ОбластьЗаголовок.Параметры.ТекстЗаголовка = ЗаголовокДокумента;
ТабДокумент.Вывести(ОбластьЗаголовок);

ОбластьСклад.Параметры.ПредставлениеСклада = СокрЛП(ВыборкаСклады.Склад) + ?(ЗначениеЗаполнено(ВыбМОЛ), " (материально-ответственное лицо: " + ВыбМОЛ + ")", "");
//Добавлено
ОбластьПодписи.Параметры.ТП = ПараметрыСеанса.ТекущийПользователь;
ТабДокумент.Вывести(ОбластьСклад);

ТабДокумент.Вывести(ОбластьШапкаТаблицы);

НомерСтроки = 0;
Сумма = 0;
//Добавлено
СуммаСоСкидкой= 0;
//СуммаСкидок = Неопределено;

Выборка = ВыборкаСклады.Выбрать();
Пока Выборка.Следующий() Цикл
НомерСтроки = НомерСтроки + 1;

Сумма = Сумма + Выборка.СуммаПродажная;
//Добавлено
СуммаСоСкидкой= СуммаСоСкидкой+ Выборка.ИтоговаяСумма;

ОбластьСтроки.Параметры.Заполнить(Выборка);
ОбластьСтроки.Параметры.НомерСтроки = НомерСтроки;
ОбластьСтроки.Параметры.Товар = СокрЛП(Выборка.Номенклатура)+ ФормированиеПечатныхФорм.ПредставлениеСерий(Выборка);
ОбластьСтроки.Параметры.Цена = ?(Выборка.Количество = 0, 0, Выборка.СуммаПродажная / Выборка.Количество);
//Добавлено
ОбластьСтроки.Параметры.СуммаСкидок = Выборка.СуммаСкидок;

ОбластьСтроки.Параметры.ИтоговаяСумма = (Выборка.ИтоговаяСумма / Выборка.Количество);
//ОбластьСтроки.Параметры.ИтоговаяСумма = СуммаСоСкидкой;

ТабДокумент.Вывести(ОбластьСтроки);
КонецЦикла;

ОбластьИтого.Параметры.Всего = ОбщегоНазначения.ФорматСумм(Сумма);
ОбластьИтого.Параметры.ВсегоСоСкидкой = ОбщегоНазначения.ФорматСумм(СуммаСоСкидкой);
ТабДокумент.Вывести(ОбластьИтого);

//ОбластьСуммаПрописью.Параметры.ИтоговаяСтрока = ТекстВсегоПринятоОтпущено + НомерСтроки + " наименований, на сумму " + ОбщегоНазначения.ФорматСумм(Сумма, ВалютаРегламентированногоУчета);
//Добавлено
ОбластьСуммаПрописью.Параметры.ИтоговаяСтрока = ТекстВсегоПринятоОтпущено + НомерСтроки + " наименований, на сумму " + ОбщегоНазначения.ФорматСумм(СуммаСоСкидкой, ВалютаРегламентированногоУчета);
//Добавлено
Попытка
ОбластьСуммаПрописью.Параметры.СуммаБезнал  = "" + Док.ОплатаПлатежнымиКартами.Итог("Сумма") + " (" + ОбщегоНазначения.СформироватьСуммуПрописью(Док.ОплатаПлатежнымиКартами.Итог("Сумма"), ВалютаРегламентированногоУчета) + ")";
Исключение;
КонецПопытки;
//
//ОбластьСуммаПрописью.Параметры.СуммаПрописью  = ОбщегоНазначения.СформироватьСуммуПрописью(Сумма, ВалютаРегламентированногоУчета);
//Добавлено
ОбластьСуммаПрописью.Параметры.СуммаПрописью  = ОбщегоНазначения.СформироватьСуммуПрописью(СуммаСоСкидкой, ВалютаРегламентированногоУчета);
ТабДокумент.Вывести(ОбластьСуммаПрописью);

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

ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
КонецЦикла;
КонецЕсли;

Возврат ТабДокумент;

КонецФункции // НапечататьПриходРасходСРозничныхСкладовВЦенахАТТ()


Выдаёт неверное значение ОбластьСтроки.Параметры.ИтоговаяСумма = (Выборка.ИтоговаяСумма / Выборка.Количество); вот тут. И почему то подхватывает количество неизвестно откуда. В документе Отчёт о розничных продажах Количество 1, а подставляет Количество 9,а второй строкой 1. Отладкой смотрел, не могу понять откуда растут ноги (

LexaK

наверно потому что, нормальные программисты таким маразмом

ТекстЗапросаКоличество = "ВЫБОР КОГДА РегТоварыВРознице.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
        |       И РегТоварыВРознице.Количество > 0 ТОГДА
        |        РегТоварыВРознице.Количество
        |    КОГДА РегТоварыВРознице.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
        |       И РегТоварыВРознице.Количество < 0 ТОГДА
        |        -РегТоварыВРознице.Количество
        |    ИНАЧЕ
        |        0
        |    КОНЕЦ";


не страдают

и из обычного регистра накоплений, берут Остаток, Начальный/Конечный остаток, Обороты и т.д.
если помогло нажмите: Спасибо!

Каримдат

Цитата: LexaK от 28 июн 2018, 15:59наверно потому что, нормальные программисты таким маразмом
Код: [Выделить]

ТекстЗапросаКоличество = "ВЫБОР КОГДА РегТоварыВРознице.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
        |       И РегТоварыВРознице.Количество > 0 ТОГДА
        |        РегТоварыВРознице.Количество
        |    КОГДА РегТоварыВРознице.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
        |       И РегТоварыВРознице.Количество < 0 ТОГДА
        |        -РегТоварыВРознице.Количество
        |    ИНАЧЕ
        |        0
        |    КОНЕЦ";

А это не я) это типовой код в Управление торговлей 10.3.47.3


KOI8-R

Скорее всего некорректно добавили соединение с документом отчет о розничных продажах.
Вы же ссылки на возможные отчеты не передаете, поэтому получаете соединение со всеми документами отчет, в которых присутствует номенклатура.

Похожие темы (5)

Рейтинг@Mail.ru

Поиск