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

ОтчётОРозничныхПродажах

Автор Каримдат, 06 авг 2018, 10:54

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

Каримдат

Всем доброго времени суток. Решил дописать немного ОтчётОРозничныхПродажах, добавил колонки % скидки, ЦенаСоСкидкой, и ниже вывел сумму продаж со скидкой.
Но выявилась проблема. После того как добавил вложенный запрос, запрос получает неверное количество. К примеру было продано 3 футляра, по одному коду номенклатуры, но в разное время, два за 150 продали, третий за 140. А на остатке 6 штук. Скрин того что выводит отчёт прилагаю.
Функция АТТСоСкидкой(Док, ВалютаРегламентированногоУчета, ЭтоПриход) Экспорт

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

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

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

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

        Запрос.УстановитьПараметр("Док", Док);
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
Предупреждение(ТекстНетДвижений);
ТабДокумент = Неопределено;
Иначе
ТабДокумент = Новый ТабличныйДокумент;
ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_РасходСРозничныхСкладовВЦенахАТТ";
Макет = ПолучитьОбщийМакет("АТТСкидка");
ОбластьЗаголовок     = Макет.ПолучитьОбласть("Заголовок");
ОбластьШапкаТаблицы  = Макет.ПолучитьОбласть("ШапкаТаблицы"+СуффиксОбласти);
ОбластьСклад         = Макет.ПолучитьОбласть("Склад");
ОбластьСтроки        = Макет.ПолучитьОбласть("Строка"+СуффиксОбласти);
ОбластьИтого         = Макет.ПолучитьОбласть("Итого");
ОбластьСуммаПрописью = Макет.ПолучитьОбласть("СуммаПрописью");
ОбластьПодписи       = Макет.ПолучитьОбласть("Подписи");
Если СуффиксОбласти <> "" Тогда
ОбластьШапкаТаблицы.Параметры.ИмяКолонкиКодов = ИмяКолонкиКодов;
КонецЕсли;
ЗаголовокДокумента = ОбщегоНазначения.СформироватьЗаголовокДокумента(Док, Док.Метаданные().Синоним);
ВыборкаСклады = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Склад");
Пока ВыборкаСклады.Следующий() Цикл
ВыбМОЛ = РегистрыСведений.ОтветственныеЛица.ПолучитьПоследнее(Док.Дата, Новый Структура("СтруктурнаяЕдиница", ВыборкаСклады.Склад)).ФизическоеЛицо;
ОбластьЗаголовок.Параметры.ТекстЗаголовка = ЗаголовокДокумента;
ТабДокумент.Вывести(ОбластьЗаголовок);
ОбластьСклад.Параметры.ПредставлениеСклада = СокрЛП(ВыборкаСклады.Склад) + ?(ЗначениеЗаполнено(ВыбМОЛ), " (материально-ответственное лицо: " + ВыбМОЛ + ")", "");
//Добавлено
ОбластьПодписи.Параметры.ТП = ПараметрыСеанса.ТекущийПользователь;
ТабДокумент.Вывести(ОбластьСклад);
ТабДокумент.Вывести(ОбластьШапкаТаблицы);
НомерСтроки = 0;
Сумма = 0;
//Добавлено
СоСкидкой = 0;
СуммаСкидок = Неопределено;
//-Добавлено
Выборка = ВыборкаСклады.Выбрать();
Пока Выборка.Следующий() Цикл
     НомерСтроки = НомерСтроки + 1;
Сумма = Сумма + Выборка.СуммаПродажная;
//Добавлено
СоСкидкой = СоСкидкой + Выборка.ИтоговаяСумма;
//-Добавлено
ОбластьСтроки.Параметры.Заполнить(Выборка);
ОбластьСтроки.Параметры.НомерСтроки = НомерСтроки;
ОбластьСтроки.Параметры.Товар = СокрЛП(Выборка.Номенклатура)
   + ФормированиеПечатныхФорм.ПредставлениеСерий(Выборка);
ОбластьСтроки.Параметры.Цена = ?(Выборка.Количество = 0, 0, Выборка.СуммаПродажная / Выборка.Количество);
//Добавлено
ОбластьСтроки.Параметры.СуммаСкидок = Выборка.СуммаСкидок;
ОбластьСтроки.Параметры.ИтоговаяСумма = ?(Выборка.Количество = 0, 0, Выборка.ИтоговаяСумма);
ТабДокумент.Вывести(ОбластьСтроки);
КонецЦикла;
ОбластьИтого.Параметры.Всего = ОбщегоНазначения.ФорматСумм(Сумма);
ОбластьИтого.Параметры.ВсегоСоСкидкой = ОбщегоНазначения.ФорматСумм(СоСкидкой);
ТабДокумент.Вывести(ОбластьИтого);
ОбластьСуммаПрописью.Параметры.ИтоговаяСтрока = ТекстВсегоПринятоОтпущено + НомерСтроки + " наименований, на сумму " + ОбщегоНазначения.ФорматСумм(СоСкидкой, ВалютаРегламентированногоУчета);
//-Добавлено
Попытка
ОбластьСуммаПрописью.Параметры.СуммаБезнал  = "" + Док.ОплатаПлатежнымиКартами.Итог("Сумма") + " (" + ОбщегоНазначения.СформироватьСуммуПрописью(Док.ОплатаПлатежнымиКартами.Итог("Сумма"), ВалютаРегламентированногоУчета) + ")";
Исключение;
КонецПопытки;
ОбластьСуммаПрописью.Параметры.СуммаПрописью  = ОбщегоНазначения.СформироватьСуммуПрописью(СоСкидкой, ВалютаРегламентированногоУчета);
ТабДокумент.Вывести(ОбластьСуммаПрописью);
ТабДокумент.Вывести(ОбластьПодписи);
ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
КонецЦикла;
КонецЕсли;
Возврат ТабДокумент;
КонецФункции

LexaK

это у вас обычное мультиплицирование!
что это такое знаете?
что бы его избежать вам надо соединить таблицы не только по Номенклатуре а и по другим измерениям тоже!
например по таким как
РегТоварыВРознице.ХарактеристикаНоменклатуры,
РегТоварыВРознице.СерияНоменклатуры,
РегТоварыВРознице.Качество, ...

и так далее (см.свой запрос), тогда будет все правильно считаться
если помогло нажмите: Спасибо!

Каримдат

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

Не помогло(

LexaK

так ни чего не изменилось! (в запросе, в соединении) ;)
поможет тогда, когда вы ПРАВИЛЬНО запрос напишите!
ну все подсказки даны!
если помогло нажмите: Спасибо!

Каримдат

   |ПО РегТоварыВРознице.Номенклатура = ООП.Номенклатура
| И РегТоварыВРознице.Склад = ООП.СкладДок
| И РегТоварыВРознице.Номенклатура.Представление = ООП.НоменклатураДок
| И РегТоварыВРознице.Номенклатура.ЕдиницаХраненияОстатков.Представление = ООП.ЕдиницаИзмеренияДок
| И РегТоварыВРознице.ХарактеристикаНоменклатуры.Представление = ООП.ХарактеристикаДок
| И РегТоварыВРознице.СерияНоменклатуры.Представление = ООП.СерияДок
|ГДЕ

Я не понимаю походу(

alex0402

Цитата: Каримдат от 06 авг 2018, 13:00
   |ПО РегТоварыВРознице.Номенклатура = ООП.Номенклатура
| И РегТоварыВРознице.Склад = ООП.СкладДок
| И РегТоварыВРознице.Номенклатура.Представление = ООП.НоменклатураДок
| И РегТоварыВРознице.Номенклатура.ЕдиницаХраненияОстатков.Представление = ООП.ЕдиницаИзмеренияДок
| И РегТоварыВРознице.ХарактеристикаНоменклатуры.Представление = ООП.ХарактеристикаДок
| И РегТоварыВРознице.СерияНоменклатуры.Представление = ООП.СерияДок
|ГДЕ

Я не понимаю походу(

примерно так:
   |ПО РегТоварыВРознице.Номенклатура = ООП.Номенклатура
| И РегТоварыВРознице.Склад = ООП.СкладДок
| И РегТоварыВРознице.ХарактеристикаНоменклатуры = ООП.ХарактеристикаДок
| И РегТоварыВРознице.СерияНоменклатуры = ООП.СерияДок
|ГДЕ

Спасибо за Сказать спасибо

Каримдат

Ничего не выходит. Даже ПО РегТоварыВРознице.Номенклатура = ООП.Номенклатура
И РегТоварыВРознице.Склад = ООП.Склад
И РегТоварыВРознице.ХарактеристикаНоменклатуры = ООП.ХарактеристикаНоменклатуры
И РегТоварыВРознице.СерияНоменклатуры = ООП.СерияНоменклатуры
И РегТоварыВРознице.Номенклатура.БазоваяЕдиницаИзмерения = ООП.ЕдиницаИзмерения
И РегТоварыВРознице.Количество = ООП.Количество

AIFrame

У тебя цена тоже ключевой параметр.
Если характеристики и серии не используются, то по ним соединять нет смысла. Достаточно номенклатуры и цены.

Каримдат

И соединение по цене не помогает(((

LexaK

еще вариант остался, табличную часть вашего документа (перед соединением) сверните (что такое свернуть знаете?) B)
если помогло нажмите: Спасибо!

Рейтинг@Mail.ru

Поиск