Всем привет, написал обработку (измучился) и для удобства клиента нужно в пользовательском режиме вызывать обработку, без загрузки файла
Код и Общего модуля
///https://www.youtube.com/watch?v=raETys0J16M
///https://programmist1s.ru/vneshnie-pechatnyie-formyi-v-1s/
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
"ОтчетРознПродДискКарты",
"Отчет розничных продаж с новыми дисконтными картами инф",
СформироватьПечатнуюФорму(МассивОбъектов[0],
ОбъектыПечати));
//НоваяСтрока=ТабличнаяЧасть1.Добавить();
//НоваяСтрока.
КонецПроцедуры // Печать()
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = Новый Структура;
МассивНазначений = Новый Массив;
МассивНазначений.Добавить("Отчеты.РозничныеПродажи"); //Указываем документ к которому делаем внешнюю печ. форму
ПараметрыРегистрации.Вставить("Вид", "ДополнительнаяОбработка"); //может быть - ПечатнаяФорма, ЗаполнениеОбъекта, ДополнительныйОтчет, СозданиеСвязанныхОбъектов...
ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
ПараметрыРегистрации.Вставить("Наименование", "Отчет розничных продаж с новыми дисконтными картами"); //имя под которым обработка будет зарегестрирована в справочнике внешних обработок
ПараметрыРегистрации.Вставить("БезопасныйРежим", ЛОЖЬ);
ПараметрыРегистрации.Вставить("Версия", "1.0");
ПараметрыРегистрации.Вставить("Информация", "Отчет розничных продаж с новыми дисконтными картами инф ");
ТаблицаКоманд = ПолучитьТаблицуКоманд();
ДобавитьКоманду(ТаблицаКоманд, "Отчет розничных продаж с новыми дисконтными картами инф", "ОтчетРознПродДискКарты", "ВызовСерверногоМетода", Истина, "ПечатьMXL");
ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
Возврат ПараметрыРегистрации;
КонецФункции
Функция ПолучитьТаблицуКоманд()
Команды = Новый ТаблицаЗначений;
Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));//как будет выглядеть описание печ.формы для пользователя
Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка")); //имя макета печ.формы
Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка")); //ВызовСерверногоМетода
//Команды.Колонки.Добавить("ВыполнитьКоманду", Новый ОписаниеТипов("Строка")); // Я добавил
Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
Возврат Команды;
КонецФункции
Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")
НоваяКоманда = ТаблицаКоманд.Добавить();
НоваяКоманда.Представление = Представление;
НоваяКоманда.Идентификатор = Идентификатор;
НоваяКоманда.Использование = Использование;
НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
НоваяКоманда.Модификатор = Модификатор;
КонецПроцедуры
Функция СформироватьПечатнуюФорму(Ссылка, ОбъектыПечати)
ДатаНачала=Дата('2025.04.27 00:00:00');
ДатаОкончанияКонецДня=Дата('2025.04.27 23:59:00');
// К отчету розничные продажи нужно добавить колво новых дисконтных карт, но с запросом в СКД не получалось это реализовать, по этому решил сделать так
//запрос позиции которые сегодня купили и вернули то есть имеется ЧекККМ и ЧекВозврат по конкретным позиицииям и дату
Запрос_Чек_И_ЧекВозрат = Новый Запрос;
Запрос_Чек_И_ЧекВозрат.Текст =
"ВЫБРАТЬ
| ЧекККМ.Ссылка КАК ЧекККМСсылка,
| ЧекККМЗапасы.Номенклатура КАК Номенклатура
|ПОМЕСТИТЬ Чек
|ИЗ
| Документ.ЧекККМ.Запасы КАК ЧекККМЗапасы
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЧекККМ КАК ЧекККМ
| ПО ЧекККМЗапасы.Ссылка = ЧекККМ.Ссылка
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ЧекККМВозврат.ЧекККМ КАК ЧекККМ_Возврат,
| ЧекККМВозврат.Ссылка КАК Возврат_Ссылка
|ПОМЕСТИТЬ Возврат
|ИЗ
| Документ.ЧекККМВозврат КАК ЧекККМВозврат
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Чек.ЧекККМСсылка КАК ЧекККМСсылка,
| Возврат.Возврат_Ссылка КАК Возврат_Ссылка,
| Чек.Номенклатура КАК Номенклатура
|ИЗ
| Чек КАК Чек
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Возврат КАК Возврат
| ПО Чек.ЧекККМСсылка = Возврат.ЧекККМ_Возврат
|ГДЕ
| НАЧАЛОПЕРИОДА(Возврат.ЧекККМ_Возврат.Дата, ДЕНЬ) >= &ДатаНачало
| И КОНЕЦПЕРИОДА(Возврат.ЧекККМ_Возврат.Дата, ДЕНЬ) <= &ДатаОкончания
| И НАЧАЛОПЕРИОДА(Чек.ЧекККМСсылка.Дата, ДЕНЬ) >= &ДатаНачало
| И КОНЕЦПЕРИОДА(Чек.ЧекККМСсылка.Дата, ДЕНЬ) <= &ДатаОкончания";
Запрос_Чек_И_ЧекВозрат.УстановитьПараметр("ДатаНачало", ДатаНачала);
Запрос_Чек_И_ЧекВозрат.УстановитьПараметр("ДатаОкончания", КонецДня(ДатаОкончанияКонецДня));
РезультатЗапроса_Чек_И_ЧекВозрат = Запрос_Чек_И_ЧекВозрат.Выполнить().Выгрузить();
ЗапросРозничныеПродажи = Новый Запрос;
ЗапросРозничныеПродажи.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ПродажиОбороты.Регистратор КАК Регистратор,
| ПродажиОбороты.ПериодДень КАК ПериодДень,
| ПродажиОбороты.ПериодНеделя КАК ПериодНеделя,
| ПродажиОбороты.ПериодДекада КАК ПериодДекада,
| ПродажиОбороты.ПериодМесяц КАК ПериодМесяц,
| ПродажиОбороты.ПериодКвартал КАК ПериодКвартал,
| ПродажиОбороты.ПериодПолугодие КАК ПериодПолугодие,
| ПродажиОбороты.ПериодГод КАК ПериодГод,
| ПродажиОбороты.ПериодЧас КАК ПериодЧас,
| ПродажиОбороты.Документ.КассаККМ КАК КассаККМ,
| ПродажиОбороты.Организация КАК Организация,
| ПродажиОбороты.Документ КАК Документ,
| ВЫБОР
| КОГДА ПродажиОбороты.Контрагент <> ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
| ТОГДА ПродажиОбороты.Контрагент
| КОГДА ПродажиОбороты.Документ ССЫЛКА Документ.ЗаказПокупателя
| И ПродажиОбороты.Документ <> ЗНАЧЕНИЕ(Документ.ЗаказПокупателя.ПустаяСсылка)
| ТОГДА ВЫРАЗИТЬ(ПродажиОбороты.Документ КАК Документ.ЗаказПокупателя).Контрагент
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
| КОНЕЦ КАК Контрагент,
| ВЫБОР
| КОГДА ПродажиОбороты.Документ ССЫЛКА Документ.ЗаказПокупателя
| И ПродажиОбороты.Документ <> ЗНАЧЕНИЕ(Документ.ЗаказПокупателя.ПустаяСсылка)
| ТОГДА ВЫРАЗИТЬ(ПродажиОбороты.Документ КАК Документ.ЗаказПокупателя).СтруктурнаяЕдиницаПродажи
| ИНАЧЕ ПродажиОбороты.Подразделение
| КОНЕЦ КАК Подразделение,
| ВЫБОР
| КОГДА ПродажиОбороты.Склад <> ЗНАЧЕНИЕ(Справочник.СтруктурныеЕдиницы.ПустаяСсылка)
| ТОГДА ПродажиОбороты.Склад
| КОГДА ПродажиОбороты.Документ = НЕОПРЕДЕЛЕНО
| ТОГДА ЗНАЧЕНИЕ(Справочник.СтруктурныеЕдиницы.ПустаяСсылка)
| КОГДА ПродажиОбороты.Документ ССЫЛКА Документ.ЧекККМ
| И ПродажиОбороты.Документ <> ЗНАЧЕНИЕ(Документ.ЧекККМ.ПустаяСсылка)
| ТОГДА ВЫРАЗИТЬ(ПродажиОбороты.Документ КАК Документ.ЧекККМ).СтруктурнаяЕдиница
| КОГДА ПродажиОбороты.Документ ССЫЛКА Документ.ЧекККМВозврат
| И ПродажиОбороты.Документ <> ЗНАЧЕНИЕ(Документ.ЧекККМВозврат.ПустаяСсылка)
| ТОГДА ВЫРАЗИТЬ(ПродажиОбороты.Документ КАК Документ.ЧекККМВозврат).СтруктурнаяЕдиница
| КОГДА ПродажиОбороты.Документ ССЫЛКА Документ.ОтчетОРозничныхПродажах
| И ПродажиОбороты.Документ <> ЗНАЧЕНИЕ(Документ.ОтчетОРозничныхПродажах.ПустаяСсылка)
| ТОГДА ВЫРАЗИТЬ(ПродажиОбороты.Документ КАК Документ.ОтчетОРозничныхПродажах).СтруктурнаяЕдиница
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.СтруктурныеЕдиницы.ПустаяСсылка)
| КОНЕЦ КАК Склад,
| ПродажиОбороты.Ответственный КАК Ответственный,
| ВЫБОР
| КОГДА ПродажиОбороты.Регистратор ССЫЛКА Документ.ЧекККМ
| ТОГДА ПродажиОбороты.Регистратор
| КОГДА НЕ ДокументЧекККМ.Ссылка ЕСТЬ NULL
| ТОГДА ДокументЧекККМ.Ссылка
| ИНАЧЕ NULL
| КОНЕЦ КАК ЧекККМ
|ПОМЕСТИТЬ ПродажиПоЧекам
|ИЗ
| РегистрНакопления.Продажи.Обороты(, , Авто, ) КАК ПродажиОбороты
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЧекККМ КАК ДокументЧекККМ
| ПО ПродажиОбороты.Регистратор = ДокументЧекККМ.КассоваяСмена
| И (ДокументЧекККМ.Проведен)
|ГДЕ
| (ПродажиОбороты.Регистратор ССЫЛКА Документ.ОтчетОРозничныхПродажах
| ИЛИ ПродажиОбороты.Регистратор ССЫЛКА Документ.ЧекККМ)
| И НЕ ВЫБОР
| КОГДА ПродажиОбороты.Регистратор ССЫЛКА Документ.ЧекККМ
| ТОГДА ПродажиОбороты.Регистратор
| КОГДА НЕ ДокументЧекККМ.Ссылка ЕСТЬ NULL
| ТОГДА ДокументЧекККМ.Ссылка
| ИНАЧЕ NULL
| КОНЕЦ ЕСТЬ NULL
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ПродажиОбороты.Регистратор,
| ПродажиОбороты.ПериодДень,
| ПродажиОбороты.ПериодНеделя,
| ПродажиОбороты.ПериодДекада,
| ПродажиОбороты.ПериодМесяц,
| ПродажиОбороты.ПериодКвартал,
| ПродажиОбороты.ПериодПолугодие,
| ПродажиОбороты.ПериодГод,
| ПродажиОбороты.ПериодЧас,
| ПродажиОбороты.Документ.КассаККМ,
| ПродажиОбороты.Организация,
| ПродажиОбороты.Документ,
| ВЫБОР
| КОГДА ПродажиОбороты.Контрагент <> ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
| ТОГДА ПродажиОбороты.Контрагент
| КОГДА ПродажиОбороты.Документ ССЫЛКА Документ.ЗаказПокупателя
| И ПродажиОбороты.Документ <> ЗНАЧЕНИЕ(Документ.ЗаказПокупателя.ПустаяСсылка)
| ТОГДА ВЫРАЗИТЬ(ПродажиОбороты.Документ КАК Документ.ЗаказПокупателя).Контрагент
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
| КОНЕЦ,
| ВЫБОР
| КОГДА ПродажиОбороты.Документ ССЫЛКА Документ.ЗаказПокупателя
| И ПродажиОбороты.Документ <> ЗНАЧЕНИЕ(Документ.ЗаказПокупателя.ПустаяСсылка)
| ТОГДА ВЫРАЗИТЬ(ПродажиОбороты.Документ КАК Документ.ЗаказПокупателя).СтруктурнаяЕдиницаПродажи
| ИНАЧЕ ПродажиОбороты.Подразделение
| КОНЕЦ,
| ВЫБОР
| КОГДА ПродажиОбороты.Склад <> ЗНАЧЕНИЕ(Справочник.СтруктурныеЕдиницы.ПустаяСсылка)
| ТОГДА ПродажиОбороты.Склад
| КОГДА ПродажиОбороты.Документ = НЕОПРЕДЕЛЕНО
| ТОГДА ЗНАЧЕНИЕ(Справочник.СтруктурныеЕдиницы.ПустаяСсылка)
| КОГДА ПродажиОбороты.Документ ССЫЛКА Документ.ЧекККМ
| И ПродажиОбороты.Документ <> ЗНАЧЕНИЕ(Документ.ЧекККМ.ПустаяСсылка)
| ТОГДА ВЫРАЗИТЬ(ПродажиОбороты.Документ КАК Документ.ЧекККМ).СтруктурнаяЕдиница
| КОГДА ПродажиОбороты.Документ ССЫЛКА Документ.ЧекККМВозврат
| И ПродажиОбороты.Документ <> ЗНАЧЕНИЕ(Документ.ЧекККМВозврат.ПустаяСсылка)
| ТОГДА ВЫРАЗИТЬ(ПродажиОбороты.Документ КАК Документ.ЧекККМВозврат).СтруктурнаяЕдиница
| КОГДА ПродажиОбороты.Документ ССЫЛКА Документ.ОтчетОРозничныхПродажах
| И ПродажиОбороты.Документ <> ЗНАЧЕНИЕ(Документ.ОтчетОРозничныхПродажах.ПустаяСсылка)
| ТОГДА ВЫРАЗИТЬ(ПродажиОбороты.Документ КАК Документ.ОтчетОРозничныхПродажах).СтруктурнаяЕдиница
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.СтруктурныеЕдиницы.ПустаяСсылка)
| КОНЕЦ,
| ПродажиОбороты.Ответственный,
| ВЫБОР
| КОГДА ПродажиОбороты.Регистратор ССЫЛКА Документ.ЧекККМВозврат
| ТОГДА ПродажиОбороты.Регистратор
| КОГДА НЕ ДокументЧекККМВозврат.Ссылка ЕСТЬ NULL
| ТОГДА ДокументЧекККМВозврат.Ссылка
| ИНАЧЕ NULL
| КОНЕЦ
|ИЗ
| РегистрНакопления.Продажи.Обороты(, , Авто, ) КАК ПродажиОбороты
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЧекККМВозврат КАК ДокументЧекККМВозврат
| ПО ПродажиОбороты.Регистратор = ДокументЧекККМВозврат.КассоваяСмена
| И (ДокументЧекККМВозврат.Проведен)
|ГДЕ
| (ПродажиОбороты.Регистратор ССЫЛКА Документ.ОтчетОРозничныхПродажах
| ИЛИ ПродажиОбороты.Регистратор ССЫЛКА Документ.ЧекККМВозврат)
| И НЕ ВЫБОР
| КОГДА ПродажиОбороты.Регистратор ССЫЛКА Документ.ЧекККМВозврат
| ТОГДА ПродажиОбороты.Регистратор
| КОГДА НЕ ДокументЧекККМВозврат.Ссылка ЕСТЬ NULL
| ТОГДА ДокументЧекККМВозврат.Ссылка
| ИНАЧЕ NULL
| КОНЕЦ ЕСТЬ NULL
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ПродажиПоЧекам.ЧекККМ КАК ЧекККМ,
| МАКСИМУМ(ЧекККМЗапасы.НомерСтроки) КАК КоличествоСтрок
|ПОМЕСТИТЬ ЧекиКоличествоСтрок
|ИЗ
| ПродажиПоЧекам КАК ПродажиПоЧекам
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЧекККМ.Запасы КАК ЧекККМЗапасы
| ПО ПродажиПоЧекам.ЧекККМ = ЧекККМЗапасы.Ссылка
|ГДЕ
| ПродажиПоЧекам.ЧекККМ ССЫЛКА Документ.ЧекККМ
|
|СГРУППИРОВАТЬ ПО
| ПродажиПоЧекам.ЧекККМ
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ПродажиПоЧекам.ЧекККМ,
| МАКСИМУМ(ЧекККМВозвратЗапасы.НомерСтроки)
|ИЗ
| ПродажиПоЧекам КАК ПродажиПоЧекам
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЧекККМВозврат.Запасы КАК ЧекККМВозвратЗапасы
| ПО ПродажиПоЧекам.ЧекККМ = ЧекККМВозвратЗапасы.Ссылка
|ГДЕ
| ПродажиПоЧекам.ЧекККМ ССЫЛКА Документ.ЧекККМВозврат
|
|СГРУППИРОВАТЬ ПО
| ПродажиПоЧекам.ЧекККМ
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ПродажиПоЧекам.Регистратор КАК Регистратор,
| ПродажиПоЧекам.ПериодДень КАК ПериодДень,
| ПродажиПоЧекам.ПериодНеделя КАК ПериодНеделя,
| ПродажиПоЧекам.ПериодДекада КАК ПериодДекада,
| ПродажиПоЧекам.ПериодМесяц КАК ПериодМесяц,
| ПродажиПоЧекам.ПериодКвартал КАК ПериодКвартал,
| ПродажиПоЧекам.ПериодПолугодие КАК ПериодПолугодие,
| ПродажиПоЧекам.ПериодГод КАК ПериодГод,
| ПродажиПоЧекам.ПериодЧас КАК ПериодЧас,
| ПродажиПоЧекам.Документ.КассаККМ КАК КассаККМ,
| ПродажиПоЧекам.Организация КАК Организация,
| ПродажиПоЧекам.Документ КАК Документ,
| ПродажиПоЧекам.Контрагент КАК Контрагент,
| ПродажиПоЧекам.Подразделение КАК Подразделение,
| ПродажиПоЧекам.Склад КАК Склад,
| ПродажиПоЧекам.Ответственный КАК Ответственный,
| ПродажиПоЧекам.ЧекККМ КАК ЧекККМ,
| ВЫБОР
| КОГДА ПродажиПоЧекам.ЧекККМ ССЫЛКА Документ.ЧекККМ
| ТОГДА ПродажиПоЧекам.ЧекККМ
| ИНАЧЕ NULL
| КОНЕЦ КАК ЧекПродажа,
| ВЫБОР
| КОГДА ПродажиПоЧекам.ЧекККМ ССЫЛКА Документ.ЧекККМВозврат
| ТОГДА ПродажиПоЧекам.ЧекККМ
| ИНАЧЕ NULL
| КОНЕЦ КАК ЧекВозврат,
| ЕСТЬNULL(ЧекиКоличествоСтрок.КоличествоСтрок, 0) КАК КоличествоСтрок
|ИЗ
| ПродажиПоЧекам КАК ПродажиПоЧекам
| ЛЕВОЕ СОЕДИНЕНИЕ ЧекиКоличествоСтрок КАК ЧекиКоличествоСтрок
| ПО ПродажиПоЧекам.ЧекККМ = ЧекиКоличествоСтрок.ЧекККМ
|ГДЕ
| НАЧАЛОПЕРИОДА(ПродажиПоЧекам.ПериодДень, ДЕНЬ) >= &ДатаНачало
| И КОНЕЦПЕРИОДА(ПродажиПоЧекам.ПериодДень, ДЕНЬ) <= &ДатаОкончания";
ЗапросРозничныеПродажи.УстановитьПараметр("ДатаНачало", ДатаНачала);
ЗапросРозничныеПродажи.УстановитьПараметр("ДатаОкончания", КонецДня(ДатаОкончанияКонецДня));
ЗапросЧеки = Новый Запрос;
ЗапросЧеки.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ПродажиОбороты.Регистратор КАК Регистратор,
| ПродажиОбороты.ПериодСекунда КАК ПериодСекунда,
| ПродажиОбороты.ПериодМинута КАК ПериодМинута,
| ПродажиОбороты.ПериодЧас КАК ПериодЧас,
| ПродажиОбороты.ПериодДень КАК ПериодДень,
| ПродажиОбороты.ПериодНеделя КАК ПериодНеделя,
| ПродажиОбороты.ПериодДекада КАК ПериодДекада,
| ПродажиОбороты.ПериодМесяц КАК ПериодМесяц,
| ПродажиОбороты.ПериодКвартал КАК ПериодКвартал,
| ПродажиОбороты.ПериодПолугодие КАК ПериодПолугодие,
| ПродажиОбороты.ПериодГод КАК ПериодГод,
| ПродажиОбороты.Номенклатура КАК Номенклатура,
| ПродажиОбороты.Характеристика КАК Характеристика,
| ПродажиОбороты.Партия КАК Партия,
| ПродажиОбороты.Документ КАК Документ,
| ПродажиОбороты.СтавкаНДС КАК СтавкаНДС,
| ПродажиОбороты.Организация КАК Организация,
| ПродажиОбороты.ЗаказПокупателя КАК ЗаказПокупателя,
| ВЫБОР
| КОГДА ПродажиОбороты.Контрагент <> ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
| ТОГДА ПродажиОбороты.Контрагент
| КОГДА ПродажиОбороты.Документ ССЫЛКА Документ.ЗаказПокупателя
| И ПродажиОбороты.Документ <> ЗНАЧЕНИЕ(Документ.ЗаказПокупателя.ПустаяСсылка)
| ТОГДА ВЫРАЗИТЬ(ПродажиОбороты.Документ КАК Документ.ЗаказПокупателя).Контрагент
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
| КОНЕЦ КАК Контрагент,
| ВЫБОР
| КОГДА ПродажиОбороты.Документ ССЫЛКА Документ.ЗаказПокупателя
| И ПродажиОбороты.Документ <> ЗНАЧЕНИЕ(Документ.ЗаказПокупателя.ПустаяСсылка)
| ТОГДА ВЫРАЗИТЬ(ПродажиОбороты.Документ КАК Документ.ЗаказПокупателя).СтруктурнаяЕдиницаПродажи
| ИНАЧЕ ПродажиОбороты.Подразделение
| КОНЕЦ КАК Подразделение,
| ВЫБОР
| КОГДА ПродажиОбороты.Склад <> ЗНАЧЕНИЕ(Справочник.СтруктурныеЕдиницы.ПустаяСсылка)
| ТОГДА ПродажиОбороты.Склад
| КОГДА ПродажиОбороты.Документ = НЕОПРЕДЕЛЕНО
| ТОГДА ЗНАЧЕНИЕ(Справочник.СтруктурныеЕдиницы.ПустаяСсылка)
| КОГДА ПродажиОбороты.Документ ССЫЛКА Документ.ЧекККМ
| И ПродажиОбороты.Документ <> ЗНАЧЕНИЕ(Документ.ЧекККМ.ПустаяСсылка)
| ТОГДА ВЫРАЗИТЬ(ПродажиОбороты.Документ КАК Документ.ЧекККМ).СтруктурнаяЕдиница
| КОГДА ПродажиОбороты.Документ ССЫЛКА Документ.ЧекККМВозврат
| И ПродажиОбороты.Документ <> ЗНАЧЕНИЕ(Документ.ЧекККМВозврат.ПустаяСсылка)
| ТОГДА ВЫРАЗИТЬ(ПродажиОбороты.Документ КАК Документ.ЧекККМВозврат).СтруктурнаяЕдиница
| КОГДА ПродажиОбороты.Документ ССЫЛКА Документ.ОтчетОРозничныхПродажах
| И ПродажиОбороты.Документ <> ЗНАЧЕНИЕ(Документ.ОтчетОРозничныхПродажах.ПустаяСсылка)
| ТОГДА ВЫРАЗИТЬ(ПродажиОбороты.Документ КАК Документ.ОтчетОРозничныхПродажах).СтруктурнаяЕдиница
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.СтруктурныеЕдиницы.ПустаяСсылка)
| КОНЕЦ КАК Склад,
| ПродажиОбороты.Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| ПродажиОбороты.Номенклатура.КатегорияНоменклатуры КАК КатегорияНоменклатуры,
| ПродажиОбороты.Ответственный КАК Ответственный,
| ПродажиОбороты.Документ.КассаККМ КАК КассаККМ,
| ПродажиОбороты.КоличествоОборот КАК Количество,
| ПродажиОбороты.СуммаОборот КАК Сумма,
| ПродажиОбороты.СуммаНДСОборот КАК СуммаНДС,
| ПродажиОбороты.СебестоимостьОборот КАК Себестоимость,
| ПродажиОбороты.СуммаБезСкидкиОборот КАК СуммаБезСкидки,
| ПродажиОбороты.СуммаБезСкидкиОборот - ПродажиОбороты.СуммаОборот КАК Скидка,
| ПродажиОбороты.СуммаОборот - ПродажиОбороты.СебестоимостьОборот КАК ВаловаяПрибыль,
| ВЫБОР
| КОГДА ПродажиОбороты.СуммаОборот <> 0
| ТОГДА (ПродажиОбороты.СуммаОборот - ПродажиОбороты.СебестоимостьОборот) / ПродажиОбороты.СуммаОборот
| ИНАЧЕ 0
| КОНЕЦ * 100 КАК Рентабельность,
| ВЫБОР
| КОГДА ПродажиОбороты.СебестоимостьОборот <> 0
| ТОГДА (ПродажиОбороты.СуммаОборот - ПродажиОбороты.СебестоимостьОборот) / ПродажиОбороты.СебестоимостьОборот
| ИНАЧЕ 0
| КОНЕЦ * 100 КАК Наценка,
| NULL КАК ВыданоСертификатами,
| ПродажиОбороты.Номенклатура.КоэффициентЕдиницыДляОтчетов КАК КоэффициентЕдиницыДляОтчетов
|ИЗ
| РегистрНакопления.Продажи.Обороты(, , Авто, {(Склад).* КАК СкладДвижений}) КАК ПродажиОбороты
|ГДЕ
| (ПродажиОбороты.Регистратор ССЫЛКА Документ.ОтчетОРозничныхПродажах
| ИЛИ ПродажиОбороты.Регистратор ССЫЛКА Документ.ЧекККМ
| ИЛИ ПродажиОбороты.Регистратор ССЫЛКА Документ.ЧекККМВозврат)
| И НАЧАЛОПЕРИОДА(ПродажиОбороты.ПериодДень, ДЕНЬ) >= &ДатаНачало
| И КОНЕЦПЕРИОДА(ПродажиОбороты.ПериодДень, ДЕНЬ) = &ДатаОкончания
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ПодарочныеСертификатыОбороты.Регистратор,
| ПодарочныеСертификатыОбороты.ПериодСекунда,
| ПодарочныеСертификатыОбороты.ПериодМинута,
| ПодарочныеСертификатыОбороты.ПериодЧас,
| ПодарочныеСертификатыОбороты.ПериодДень,
| ПодарочныеСертификатыОбороты.ПериодНеделя,
| ПодарочныеСертификатыОбороты.ПериодДекада,
| ПодарочныеСертификатыОбороты.ПериодМесяц,
| ПодарочныеСертификатыОбороты.ПериодКвартал,
| ПодарочныеСертификатыОбороты.ПериодПолугодие,
| ПодарочныеСертификатыОбороты.ПериодГод,
| ПодарочныеСертификатыОбороты.ПодарочныйСертификат,
| NULL,
| NULL,
| ПодарочныеСертификатыОбороты.Регистратор,
| NULL,
| ПодарочныеСертификатыОбороты.Регистратор.Организация,
| NULL,
| ПодарочныеСертификатыОбороты.Регистратор.Контрагент,
| ПодарочныеСертификатыОбороты.Регистратор.Подразделение,
| ПодарочныеСертификатыОбороты.Регистратор.СтруктурнаяЕдиница,
| NULL,
| NULL,
| ПодарочныеСертификатыОбороты.Регистратор.Ответственный,
| ПодарочныеСертификатыОбороты.Регистратор.КассаККМ,
| ВЫБОР
| КОГДА ЕСТЬNULL(ПодарочныеСертификатыОбороты.ПодарочныйСертификат.Номинал, 0) = 0
| ТОГДА 0
| ИНАЧЕ ПодарочныеСертификатыОбороты.СуммаПриход / ПодарочныеСертификатыОбороты.ПодарочныйСертификат.Номинал
| КОНЕЦ,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| ПодарочныеСертификатыОбороты.СуммаПриход,
| 1
|ИЗ
| РегистрНакопления.ПодарочныеСертификаты.Обороты(, , Авто, ) КАК ПодарочныеСертификатыОбороты
|ГДЕ
| (ПодарочныеСертификатыОбороты.Регистратор ССЫЛКА Документ.ОтчетОРозничныхПродажах
| ИЛИ ПодарочныеСертификатыОбороты.Регистратор ССЫЛКА Документ.ЧекККМ
| ИЛИ ПодарочныеСертификатыОбороты.Регистратор ССЫЛКА Документ.ЧекККМВозврат)";
ЗапросЧеки.УстановитьПараметр("ДатаНачало", ДатаНачала);
ЗапросЧеки.УстановитьПараметр("ДатаОкончания", КонецДня(ДатаОкончанияКонецДня));
ЗапросВидыДС = Новый Запрос;
ЗапросВидыДС.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ДенежныеСредстваВКассахККМОбороты.Регистратор КАК Регистратор,
| ДенежныеСредстваВКассахККМОбороты.ПериодСекунда КАК ПериодСекунда,
| ДенежныеСредстваВКассахККМОбороты.ПериодМинута КАК ПериодМинута,
| ДенежныеСредстваВКассахККМОбороты.ПериодЧас КАК ПериодЧас,
| ДенежныеСредстваВКассахККМОбороты.ПериодДень КАК ПериодДень,
| ДенежныеСредстваВКассахККМОбороты.ПериодНеделя КАК ПериодНеделя,
| ДенежныеСредстваВКассахККМОбороты.ПериодДекада КАК ПериодДекада,
| ДенежныеСредстваВКассахККМОбороты.ПериодМесяц КАК ПериодМесяц,
| ДенежныеСредстваВКассахККМОбороты.ПериодКвартал КАК ПериодКвартал,
| ДенежныеСредстваВКассахККМОбороты.ПериодПолугодие КАК ПериодПолугодие,
| ДенежныеСредстваВКассахККМОбороты.ПериодГод КАК ПериодГод,
| ДенежныеСредстваВКассахККМОбороты.Организация КАК Организация,
| ДенежныеСредстваВКассахККМОбороты.Регистратор КАК Документ,
| ДенежныеСредстваВКассахККМОбороты.Регистратор.Контрагент КАК Контрагент,
| ДенежныеСредстваВКассахККМОбороты.Регистратор.Подразделение КАК Подразделение,
| ДенежныеСредстваВКассахККМОбороты.Регистратор.СтруктурнаяЕдиница КАК Склад,
| ДенежныеСредстваВКассахККМОбороты.Регистратор.Ответственный КАК Ответственный,
| ДенежныеСредстваВКассахККМОбороты.КассаККМ КАК КассаККМ,
| ЕСТЬNULL(ДенежныеСредстваВКассахККМОбороты.СуммаОборот, 0) КАК ПолученоНаличными,
| 0 КАК ПолученоКартами,
| 0 КАК ПолученоСертификатами
|ИЗ
| РегистрНакопления.ДенежныеСредстваВКассахККМ.Обороты(, , Авто, ) КАК ДенежныеСредстваВКассахККМОбороты
|ГДЕ
| (ДенежныеСредстваВКассахККМОбороты.Регистратор ССЫЛКА Документ.ОтчетОРозничныхПродажах
| ИЛИ ДенежныеСредстваВКассахККМОбороты.Регистратор ССЫЛКА Документ.ЧекККМ
| ИЛИ ДенежныеСредстваВКассахККМОбороты.Регистратор ССЫЛКА Документ.ЧекККМВозврат)
| И НАЧАЛОПЕРИОДА(ДенежныеСредстваВКассахККМОбороты.ПериодДень, ДЕНЬ) >= &ДатаНачало
| И КОНЕЦПЕРИОДА(ДенежныеСредстваВКассахККМОбороты.ПериодДень, ДЕНЬ) = &ДатаОкончания
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ОплатаПлатежнымиКартамиОбороты.Регистратор,
| ОплатаПлатежнымиКартамиОбороты.ПериодСекунда,
| ОплатаПлатежнымиКартамиОбороты.ПериодМинута,
| ОплатаПлатежнымиКартамиОбороты.ПериодЧас,
| ОплатаПлатежнымиКартамиОбороты.ПериодДень,
| ОплатаПлатежнымиКартамиОбороты.ПериодНеделя,
| ОплатаПлатежнымиКартамиОбороты.ПериодДекада,
| ОплатаПлатежнымиКартамиОбороты.ПериодМесяц,
| ОплатаПлатежнымиКартамиОбороты.ПериодКвартал,
| ОплатаПлатежнымиКартамиОбороты.ПериодПолугодие,
| ОплатаПлатежнымиКартамиОбороты.ПериодГод,
| ОплатаПлатежнымиКартамиОбороты.Организация,
| ОплатаПлатежнымиКартамиОбороты.Регистратор,
| ОплатаПлатежнымиКартамиОбороты.Контрагент,
| ОплатаПлатежнымиКартамиОбороты.Регистратор.Подразделение,
| ОплатаПлатежнымиКартамиОбороты.СтруктурнаяЕдиница,
| ОплатаПлатежнымиКартамиОбороты.Регистратор.Ответственный,
| ОплатаПлатежнымиКартамиОбороты.ЭквайринговыйТерминал.Касса,
| 0,
| ЕСТЬNULL(ОплатаПлатежнымиКартамиОбороты.СуммаОборот, 0),
| 0
|ИЗ
| РегистрНакопления.ОплатаПлатежнымиКартами.Обороты(, , Авто, ) КАК ОплатаПлатежнымиКартамиОбороты
|ГДЕ
| (ОплатаПлатежнымиКартамиОбороты.Регистратор ССЫЛКА Документ.ОтчетОРозничныхПродажах
| ИЛИ ОплатаПлатежнымиКартамиОбороты.Регистратор ССЫЛКА Документ.ЧекККМ
| ИЛИ ОплатаПлатежнымиКартамиОбороты.Регистратор ССЫЛКА Документ.ЧекККМВозврат)
| И НАЧАЛОПЕРИОДА(ОплатаПлатежнымиКартамиОбороты.ПериодДень, ДЕНЬ) >= &ДатаНачало
| И КОНЕЦПЕРИОДА(ОплатаПлатежнымиКартамиОбороты.ПериодДень, ДЕНЬ) = &ДатаОкончания
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ОплатаПодарочнымиСертификатамиОбороты.Регистратор,
| ОплатаПодарочнымиСертификатамиОбороты.ПериодСекунда,
| ОплатаПодарочнымиСертификатамиОбороты.ПериодМинута,
| ОплатаПодарочнымиСертификатамиОбороты.ПериодЧас,
| ОплатаПодарочнымиСертификатамиОбороты.ПериодДень,
| ОплатаПодарочнымиСертификатамиОбороты.ПериодНеделя,
| ОплатаПодарочнымиСертификатамиОбороты.ПериодДекада,
| ОплатаПодарочнымиСертификатамиОбороты.ПериодМесяц,
| ОплатаПодарочнымиСертификатамиОбороты.ПериодКвартал,
| ОплатаПодарочнымиСертификатамиОбороты.ПериодПолугодие,
| ОплатаПодарочнымиСертификатамиОбороты.ПериодГод,
| ОплатаПодарочнымиСертификатамиОбороты.Организация,
| ОплатаПодарочнымиСертификатамиОбороты.Регистратор,
| ОплатаПодарочнымиСертификатамиОбороты.Контрагент,
| ОплатаПодарочнымиСертификатамиОбороты.Регистратор.Подразделение,
| ОплатаПодарочнымиСертификатамиОбороты.СтруктурнаяЕдиница,
| ОплатаПодарочнымиСертификатамиОбороты.Регистратор.Ответственный,
| ОплатаПодарочнымиСертификатамиОбороты.Регистратор.КассаККМ,
| 0,
| 0,
| ЕСТЬNULL(ОплатаПодарочнымиСертификатамиОбороты.СуммаОборот, 0)
|ИЗ
| РегистрНакопления.ОплатаПодарочнымиСертификатами.Обороты(, , Авто, ) КАК ОплатаПодарочнымиСертификатамиОбороты
|ГДЕ
| (ОплатаПодарочнымиСертификатамиОбороты.Регистратор ССЫЛКА Документ.ОтчетОРозничныхПродажах
| ИЛИ ОплатаПодарочнымиСертификатамиОбороты.Регистратор ССЫЛКА Документ.ЧекККМ
| ИЛИ ОплатаПодарочнымиСертификатамиОбороты.Регистратор ССЫЛКА Документ.ЧекККМВозврат)
| И НАЧАЛОПЕРИОДА(ОплатаПодарочнымиСертификатамиОбороты.ПериодДень, ДЕНЬ) >= &ДатаНачало
| И КОНЕЦПЕРИОДА(ОплатаПодарочнымиСертификатамиОбороты.ПериодДень, ДЕНЬ) = &ДатаОкончания";
ЗапросВидыДС.УстановитьПараметр("ДатаНачало", ДатаНачала);
ЗапросВидыДС.УстановитьПараметр("ДатаОкончания", КонецДня(ДатаОкончанияКонецДня));
РезультатЗапросРозничныеПродажи = ЗапросРозничныеПродажи.Выполнить().Выгрузить();
РезультатЗапросаЧеки = ЗапросЧеки.Выполнить().Выгрузить();
РезультатЗапросаВидыДС = ЗапросВидыДС.Выполнить().Выгрузить();
// Кол-во чеков, средний чек, кол-во чеков продажи, кол-во чеков возврата
МассивДублей = Новый Массив;
МассивЧековПродаж = Новый Массив;
КолВоЧековПродажи = 0;
КолВоЧековВозврата = 0;
КолВоСтрокЧекаПродаж = 0;
Для Каждого СтрокаРозничныеПродажи Из РезультатЗапросРозничныеПродажи Цикл
// Здесь пропсываю фильтр по Организации, Складу и Кассе ККМ
Организация = СтрокаРозничныеПродажи.Организация;
КассаККМ = СтрокаРозничныеПродажи.КассаККМ;
Склад = СтрокаРозничныеПродажи.Склад;
// Вытаскиваю переменные
// Чек продажа
ЧекПродажа = СтрокаРозничныеПродажи.ЧекПродажа;
// Проверка данный Чек уже был
ЧекПродажаПроверка=Истина;
Для Каждого СтрокаМассива Из МассивДублей Цикл
Если СтрокаМассива=ЧекПродажа Тогда
ЧекПродажаПроверка=Ложь;
Продолжить;
КонецЕсли;
КонецЦикла;
Если ЧекПродажаПроверка И ЗначениеЗаполнено(ЧекПродажа) Тогда
КолВоЧековПродажи=КолВоЧековПродажи+1;
КоличествоСтрок = СтрокаРозничныеПродажи.КоличествоСтрок;
КолВоСтрокЧекаПродаж=КолВоСтрокЧекаПродаж+КоличествоСтрок;
МассивДублей.Добавить(ЧекПродажа);
МассивЧековПродаж.Добавить(ЧекПродажа);
КонецЕсли;
// Чек Возврат
ЧекВозврат = СтрокаРозничныеПродажи.ЧекВозврат;
// Проверка данный Чек уже был
ЧекПродажаВозврат=Истина;
Для Каждого СтрокаМассива Из МассивДублей Цикл
Если СтрокаМассива=ЧекПродажаВозврат Тогда
ЧекПродажаВозврат=Ложь;
Продолжить;
КонецЕсли;
КонецЦикла;
Если ЧекПродажаВозврат И ЗначениеЗаполнено(ЧекВозврат) Тогда
КолВоЧековВозврата=КолВоЧековВозврата+1;
МассивДублей.Добавить(ЧекВозврат);
КонецЕсли;
КонецЦикла;
// Вычисляю поля
КолВоЧеков = КолВоЧековПродажи + КолВоЧековВозврата;
СреднееКолВоСтрок = КолВоСтрокЧекаПродаж/МассивЧековПродаж.Количество();
//СреднийЧек=СуммаПродаж/КолВоЧековПродажи;
/////////////////////////////////////////////////////////////// Вытаскиваю поля Скидка, сумма без скидки
МассивНоменклатур = Новый Массив;
СуммаПродаж = 0;
СуммаБезСкидки = 0;
ВаловаяПрибыль = 0;
ТаблицаНоменкЦена=Новый ТаблицаЗначений;
ТаблицаНоменкЦена.Колонки.Добавить("Номенклатура");
ТаблицаНоменкЦена.Колонки.Добавить("Количество");
ТаблицаНоменкЦена.Колонки.Добавить("Выручка");
ТаблицаНоменкЦена.Колонки.Добавить("Скидка");
ТаблицаНоменкЦена.Колонки.Добавить("СуммаБезСкидки");
ТаблицаНоменкЦена.Колонки.Добавить("ДокументСсылка");
Для Каждого СтрокаЧеки Из РезультатЗапросаЧеки Цикл
// // Здесь пропсываю фильтр по Организации, Складу и Кассе ККМ
Организация = СтрокаЧеки.Организация;
Склад = СтрокаЧеки.Склад;
КассаККМ = СтрокаЧеки.КассаККМ;
ДокументПроверка = СтрокаЧеки.Регистратор;
// Проверка данный Чек уже был
ЧекПродажа=Ложь;
Для Каждого СтрокаМассива Из МассивДублей Цикл
Если СтрокаМассива=ДокументПроверка Тогда
ЧекПродажа=Истина;
Продолжить;
КонецЕсли;
КонецЦикла;
Если Не ЧекПродажа Тогда
Продолжить; // Значит данного документа нет в РозничныхПродажах
КонецЕсли;
НоменклатураЧека = СтрокаЧеки.Номенклатура;
Количество = СтрокаЧеки.Количество;
СуммаЧека = СтрокаЧеки.Сумма;
СуммаБезСкидкиЧека = СтрокаЧеки.СуммаБезСкидки;
ВаловаяПрибыльЧека = СтрокаЧеки.ВаловаяПрибыль;
СуммаПродаж = СуммаПродаж+СуммаЧека;
СуммаБезСкидки = СуммаБезСкидки+СуммаБезСкидкиЧека;
ВаловаяПрибыль = ВаловаяПрибыль+ВаловаяПрибыльЧека;
// Результат запроса позиции которые сегодня купили и вернули
ФлагЗаписиПозиции=Истина;
Для Каждого Строка_РезультатЗапроса_Чек_И_ЧекВозрат ИЗ РезультатЗапроса_Чек_И_ЧекВозрат Цикл
Возврат_Ссылка = Строка_РезультатЗапроса_Чек_И_ЧекВозрат.Возврат_Ссылка;
Номенклатура_Ссылка = Строка_РезультатЗапроса_Чек_И_ЧекВозрат.Номенклатура;
ЧекККМСсылка_ИЗ__Чек_И_ЧекВозрат = Строка_РезультатЗапроса_Чек_И_ЧекВозрат.ЧекККМСсылка;
Если (ДокументПроверка=ЧекККМСсылка_ИЗ__Чек_И_ЧекВозрат ИЛИ ДокументПроверка=Возврат_Ссылка) И НоменклатураЧека=Номенклатура_Ссылка Тогда
ФлагЗаписиПозиции=Ложь;
Продолжить;
КонецЕсли;
КонецЦикла;
Если Не ФлагЗаписиПозиции Тогда
Продолжить;
КонецЕсли;
НоваяСтрокаТЗ = ТаблицаНоменкЦена.Добавить();
НоваяСтрокаТЗ.Номенклатура = НоменклатураЧека;
НоваяСтрокаТЗ.Количество = Количество;
НоваяСтрокаТЗ.Выручка = ВаловаяПрибыльЧека;
НоваяСтрокаТЗ.Скидка = СуммаБезСкидкиЧека-СуммаЧека;
НоваяСтрокаТЗ.СуммаБезСкидки = СуммаБезСкидкиЧека;
НоваяСтрокаТЗ.ДокументСсылка = ДокументПроверка;
КонецЦикла;
СреднийЧек = СуммаБезСкидки/КолВоЧековПродажи;
СуммаБезСкидки =СуммаБезСкидки;
Скидка = СуммаБезСкидки-СуммаПродаж;
///////////////////////////////////////////////// Вытаскиваю поля Получино наличными, Получино картами
ПолученоКартами = 0;
ПолученоНаличными = 0;
ПолученоСертификатами = 0;
Для Каждого СтрокаВидыДС Из РезультатЗапросаВидыДС Цикл
// // Здесь пропсываю фильтр по Организации, Складу и Кассе ККМ
КассаККМ = СтрокаВидыДС.КассаККМ;
Организация = СтрокаВидыДС.Организация;
Склад = СтрокаВидыДС.Склад;
// Проверка данный Чек уже был
ДокументПроверка=СтрокаВидыДС.Регистратор;
ЧекПродажа=Ложь;
Для Каждого СтрокаМассива Из МассивДублей Цикл
Если СтрокаМассива=ДокументПроверка Тогда
ЧекПродажа=Истина;
Продолжить;
КонецЕсли;
КонецЦикла;
Если Не ЧекПродажа Тогда
Продолжить; // Значит данного документа нет в РозничныхПродажах
КонецЕсли;
ПолученоКартами_ДС = СтрокаВидыДС.ПолученоКартами;
ПолученоНаличными_ДС = СтрокаВидыДС.ПолученоНаличными;
ПолученоСертификатами_ДС = СтрокаВидыДС.ПолученоСертификатами;
ПолученоКартами = ПолученоКартами+ПолученоКартами_ДС;
ПолученоНаличными = ПолученоНаличными+ПолученоНаличными_ДС;
ПолученоСертификатами = ПолученоСертификатами+ПолученоСертификатами_ДС;
КонецЦикла;
//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
ЗапросДисконтныеКарты = Новый Запрос;
ЗапросДисконтныеКарты.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| СогласиеНаОбработкуПерсональныхДанных.Ссылка КАК Ссылка
|ИЗ
| Документ.СогласиеНаОбработкуПерсональныхДанных КАК СогласиеНаОбработкуПерсональныхДанных
|ГДЕ
| НАЧАЛОПЕРИОДА(СогласиеНаОбработкуПерсональныхДанных.Дата, ДЕНЬ) >= &ДатаНачало
| И КОНЕЦПЕРИОДА(СогласиеНаОбработкуПерсональныхДанных.Дата, ДЕНЬ) = &ДатаОкончания";
ЗапросДисконтныеКарты.УстановитьПараметр("ДатаНачало", ДатаНачала);
ЗапросДисконтныеКарты.УстановитьПараметр("ДатаОкончания", КонецДня(ДатаОкончанияКонецДня));
ВыборкаДетальныеЗаписи = ЗапросДисконтныеКарты.Выполнить().Выбрать();
КолВоНовыхДисконтныхКарт = ВыборкаДетальныеЗаписи.Количество();
//СтруктуранПеременных=Новый Структура;
//СтруктуранПеременных.Вставить("КолВоНовыхДисконтныхКарт",КолВоНовыхДисконтныхКарт);
//СтруктуранПеременных.Вставить("ПолученоКартами",ПолученоКартами);
//СтруктуранПеременных.Вставить("ПолученоНаличными",ПолученоНаличными);
//СтруктуранПеременных.Вставить("ПолученоСертификатами",ПолученоСертификатами);
//СтруктуранПеременных.Вставить("КолВоЧековПродажи",КолВоЧековПродажи);
//СтруктуранПеременных.Вставить("КолВоЧековВозврата",КолВоЧековВозврата);
//СтруктуранПеременных.Вставить("СреднийЧек",СреднийЧек);
//СтруктуранПеременных.Вставить("СуммаБезСкидки",СуммаБезСкидки);
//СтруктуранПеременных.Вставить("Скидка",Скидка);
//СтруктуранПеременных.Вставить("КолВоЧеков",КолВоЧеков);
//СтруктуранПеременных.Вставить("СреднееКолВоСтрок",СреднееКолВоСтрок);
ПолученоКартами = ПолученоКартами;
ПолученоНаличными = ПолученоНаличными;
ПолученоСертификатами = ПолученоСертификатами;
КолВоЧековПродажи = КолВоЧековПродажи;
КолВоЧековВозврата = КолВоЧековВозврата;
СреднийЧек = СреднийЧек;
СуммаБезСкидки = СуммаБезСкидки;
Скидка = Скидка;
Выручка = СуммаБезСкидки-Скидка;
КолВоЧеков = КолВоЧеков;
СреднееКолВоСтрок = СреднееКолВоСтрок;
ТаблицаНоменкЦена.Сортировать("Номенклатура");
ТаблицаНоменкЦена2 = ТаблицаНоменкЦена;
//СтруктуранПеременных.Вставить("ТаблицаНоменкЦена",ТаблицаНоменкЦена);
//////////////////// Для печати
ТабДок = Новый ТабличныйДокумент;
ТабДок.Очистить();
//Макет=РеквизитФормыВЗначение("Объект").ПолучитьМакет("Макет");
Макет=ПолучитьМакет("Макет");
ОбластьШапка = Макет.ПолучитьОбласть("ОбластьШапка");
ОбластьШапка.Параметры.ДатаНачала =ДатаНачала;
ОбластьШапка.Параметры.ДатаОкончания =ДатаОкончанияКонецДня;
ТабДок.Вывести(ОбластьШапка);
ОбластьНазванияСтолбцов = Макет.ПолучитьОбласть("ОбластьНазванияСтолбцов");
ТабДок.Вывести(ОбластьНазванияСтолбцов);
ОбластьТабличныхПеременных = Макет.ПолучитьОбласть("ОбластьТабличныхПеременных");
ОбластьТабличныхПеременных.Параметры.Выручка = Выручка;
ОбластьТабличныхПеременных.Параметры.Скидка = Скидка;
ОбластьТабличныхПеременных.Параметры.СуммаБезСкидки = СуммаБезСкидки;
ОбластьТабличныхПеременных.Параметры.ПолученоНаличными = ПолученоНаличными;
ОбластьТабличныхПеременных.Параметры.ПолученоКартами = ПолученоКартами;
//Количество чеков
ОбластьТабличныхПеременных.Параметры.ВсегоЧеков = КолВоЧековПродажи+КолВоЧековВозврата;
ОбластьТабличныхПеременных.Параметры.КолВоЧековПродажи = КолВоЧековПродажи;
ОбластьТабличныхПеременных.Параметры.КолВоЧековВозврата = КолВоЧековВозврата;
//Статистика продаж СреднийЧек СреднееКолВоСтрок КолВоНовыхДисконтныхКарт
ОбластьТабличныхПеременных.Параметры.СреднийЧек = Формат(СреднийЧек,"ЧДЦ=2");
ОбластьТабличныхПеременных.Параметры.СреднееКолВоСтрок = Формат(СреднееКолВоСтрок,"ЧДЦ=2");
ОбластьТабличныхПеременных.Параметры.КолВоНовыхДисконтныхКарт = КолВоНовыхДисконтныхКарт;
ТабДок.Вывести(ОбластьТабличныхПеременных);
// Табличную часть вывожу Номенклатура и Цена
ОбластьТЗ_Цикл = Макет.ПолучитьОбласть("ОбластьТЗ_Цикл");
Для Каждого Строка ИЗ ТаблицаНоменкЦена Цикл
ОбластьТЗ_Цикл.Параметры.Номенклатура_ТЧ = Строка.Номенклатура;
ОбластьТЗ_Цикл.Параметры.Выручка_ТЧ = Строка.Выручка;
ОбластьТЗ_Цикл.Параметры.Скидка_ТЧ = Строка.Скидка;
ОбластьТЗ_Цикл.Параметры.СуммаБезСкидки_ТЧ = Строка.СуммаБезСкидки;
ТабДок.Вывести(ОбластьТЗ_Цикл);
КонецЦикла;
/////////// Вывожу подвал
ОбластьПодвал = Макет.ПолучитьОбласть("ОбластьПодвал");
ОбластьПодвал.Параметры.Выручка = Выручка;
ОбластьПодвал.Параметры.Скидка = Скидка;
ОбластьПодвал.Параметры.СуммаБезСкидки = СуммаБезСкидки;
ОбластьПодвал.Параметры.ПолученоНаличными = ПолученоНаличными;
ОбластьПодвал.Параметры.ПолученоКартами = ПолученоКартами;
//Количество чеков
ОбластьПодвал.Параметры.ВсегоЧеков = КолВоЧековПродажи+КолВоЧековВозврата;
ОбластьПодвал.Параметры.КолВоЧековПродажи = КолВоЧековПродажи;
ОбластьПодвал.Параметры.КолВоЧековВозврата = КолВоЧековВозврата;
//Статистика продаж СреднийЧек СреднееКолВоСтрок
ОбластьПодвал.Параметры.СреднийЧек = Формат(СреднийЧек,"ЧДЦ=2");
ОбластьПодвал.Параметры.СреднееКолВоСтрок = Формат(СреднееКолВоСтрок,"ЧДЦ=2");
ОбластьПодвал.Параметры.КолВоНовыхДисконтныхКарт = КолВоНовыхДисконтныхКарт;
ТабДок.Вывести(ОбластьПодвал);
Возврат ТабДок;
КонецФункции
// Обработчик команд из интерфейса
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыКоманды = Неопределено) Экспорт
Если ИдентификаторКоманды = "ОтчетРознПродДискКарты" Тогда
// Здесь можно добавить код для вывода формы или выполнения действия
// Например:
ПоказатьОтчет();
КонецЕсли;
КонецПроцедуры
Процедура ПоказатьОтчет()
// Ваш код для отображения отчета
// Например:
Параметры = Новый Структура;
Параметры.Вставить("Объект", Неопределено); // или конкретный документ
Параметры.Вставить("КоллекцияПечатныхФорм", Новый Соответствие);
Печать(Неопределено, Параметры.КоллекцияПечатныхФорм, Неопределено, Параметры);
КонецПроцедуры
Показать
Ошибка
Не удалось выполнить команду по причине:
Получение элемента по индексу для значения не определено
{ВнешняяОбработка.ВнешняяОбработкаРозничныеПродажи_НовДисконтныеКарты.МодульОбъекта(5)}:УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
{ВнешняяОбработка.ВнешняяОбработкаРозничныеПродажи_НовДисконтныеКарты.МодульОбъекта(896)}:Печать(Неопределено, Параметры.КоллекцияПечатныхФорм, Неопределено, Параметры);
{ВнешняяОбработка.ВнешняяОбработкаРозничныеПродажи_НовДисконтныеКарты.МодульОбъекта(884)}:ПоказатьОтчет();
{ОбщийМодуль.ДополнительныеОтчетыИОбработки.Модуль(2214)}:ВнешнийОбъект.ВыполнитьКоманду(ИдентификаторКоманды);
{ОбщийМодуль.ДополнительныеОтчетыИОбработки.Модуль(2283)}:ВыполнитьКомандуДополнительногоОтчетаИлиОбработки(
{ОбщийМодуль.ДополнительныеОтчетыИОбработки.Модуль(374)}:РезультатВыполнения = ВыполнитьКомандуВнешнегоОбъекта(ВнешнийОбъект, ИдентификаторКоманды, ПараметрыКоманды, АдресРезультата);
{(1)}:ДополнительныеОтчетыИОбработки.ВыполнитьКоманду(Параметры[0],Параметры[1])
{ОбщийМодуль.ОбщегоНазначения.Модуль(6472)}:Выполнить ИмяМетода + "(" + ПараметрыСтрока + ")";
{ОбщийМодуль.ДлительныеОперации.Модуль(1781)}:ОбщегоНазначения.ВыполнитьМетодКонфигурации(ИмяПроцедуры, ПараметрыВызова);
{ОбщийМодуль.ДлительныеОперации.Модуль(1748)}:ВызватьПроцедуру(ВсеПараметры.ИмяПроцедуры, ВсеПараметры.ПараметрыПроцедуры, ПараметрыВыполнения);
{ОбщийМодуль.ДлительныеОперации.Модуль(1761)}:ВызватьИсключение(Уточнение.Текст, Уточнение.Категория,, СтекЗапуска, ИнформацияОбОшибке);
[ОшибкаВоВремяВыполненияВстроенногоЯзыка, ИсключениеВызванноеИзВстроенногоЯзыка, ОшибкаКонфигурации]
по причине:
Получение элемента по индексу для значения не определено
[ОшибкаВоВремяВыполненияВстроенногоЯзыка, ОшибкаИспользованияВстроенногоЯзыка]
Все таки победил, внешнюю обработку сохранил
Изменил данную функцию
// Обработчик команд из интерфейса
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыКоманды = Неопределено) Экспорт
СформироватьПечатнуюФорму(Неопределено, Неопределено);
КонецПроцедуры
. Но при запуске ни чего не выдает, хотя должен появиться макет. И еще вопрос в обработки у меня была возможность установить период за который формируется отчет, но сейчас такая возможность пропала. Как можно установить период
Вот полный код
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
"ОтчетРознПродДискКарты",
"Отчет розничных продаж с новыми дисконтными картами инф",
СформироватьПечатнуюФорму(МассивОбъектов[0],
ОбъектыПечати));
//НоваяСтрока=ТабличнаяЧасть1.Добавить();
//НоваяСтрока.
КонецПроцедуры // Печать()
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = Новый Структура;
МассивНазначений = Новый Массив;
МассивНазначений.Добавить(""); //Указываем документ к которому делаем внешнюю печ. форму
ПараметрыРегистрации.Вставить("Вид", "ДополнительнаяОбработка"); //может быть - ПечатнаяФорма, ЗаполнениеОбъекта, ДополнительныйОтчет, СозданиеСвязанныхОбъектов...
ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
ПараметрыРегистрации.Вставить("Наименование", "Отчет розничных продаж с новыми дисконтными картами"); //имя под которым обработка будет зарегестрирована в справочнике внешних обработок
ПараметрыРегистрации.Вставить("БезопасныйРежим", ЛОЖЬ);
ПараметрыРегистрации.Вставить("Версия", "1.0");
ПараметрыРегистрации.Вставить("Информация", "Отчет розничных продаж с новыми дисконтными картами инф ");
ТаблицаКоманд = ПолучитьТаблицуКоманд();
ДобавитьКоманду(ТаблицаКоманд, "Отчет розничных продаж с новыми дисконтными картами инф", "ОтчетРознПродДискКарты", "ВызовСерверногоМетода", Истина, "ПечатьMXL");
ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
Возврат ПараметрыРегистрации;
КонецФункции
Функция ПолучитьТаблицуКоманд()
Команды = Новый ТаблицаЗначений;
Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));//как будет выглядеть описание печ.формы для пользователя
Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка")); //имя макета печ.формы
Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка")); //ВызовСерверногоМетода
//Команды.Колонки.Добавить("ВыполнитьКоманду", Новый ОписаниеТипов("Строка")); // Я добавил
Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
Возврат Команды;
КонецФункции
Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")
НоваяКоманда = ТаблицаКоманд.Добавить();
НоваяКоманда.Представление = Представление;
НоваяКоманда.Идентификатор = Идентификатор;
НоваяКоманда.Использование = Использование;
НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
НоваяКоманда.Модификатор = Модификатор;
КонецПроцедуры
Функция СформироватьПечатнуюФорму(Ссылка, ОбъектыПечати)
ДатаНачала=Дата('2025.04.27 00:00:00');
ДатаОкончанияКонецДня=Дата('2025.04.27 23:59:00');
// К отчету розничные продажи нужно добавить колво новых дисконтных карт, но с запросом в СКД не получалось это реализовать, по этому решил сделать так
//запрос позиции которые сегодня купили и вернули то есть имеется ЧекККМ и ЧекВозврат по конкретным позиицииям и дату
Запрос_Чек_И_ЧекВозрат = Новый Запрос;
Запрос_Чек_И_ЧекВозрат.Текст =
"ВЫБРАТЬ
| ЧекККМ.Ссылка КАК ЧекККМСсылка,
| ЧекККМЗапасы.Номенклатура КАК Номенклатура
|ПОМЕСТИТЬ Чек
|ИЗ
| Документ.ЧекККМ.Запасы КАК ЧекККМЗапасы
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЧекККМ КАК ЧекККМ
| ПО ЧекККМЗапасы.Ссылка = ЧекККМ.Ссылка
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ЧекККМВозврат.ЧекККМ КАК ЧекККМ_Возврат,
| ЧекККМВозврат.Ссылка КАК Возврат_Ссылка
|ПОМЕСТИТЬ Возврат
|ИЗ
| Документ.ЧекККМВозврат КАК ЧекККМВозврат
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Чек.ЧекККМСсылка КАК ЧекККМСсылка,
| Возврат.Возврат_Ссылка КАК Возврат_Ссылка,
| Чек.Номенклатура КАК Номенклатура
|ИЗ
| Чек КАК Чек
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Возврат КАК Возврат
| ПО Чек.ЧекККМСсылка = Возврат.ЧекККМ_Возврат
|ГДЕ
| НАЧАЛОПЕРИОДА(Возврат.ЧекККМ_Возврат.Дата, ДЕНЬ) >= &ДатаНачало
| И КОНЕЦПЕРИОДА(Возврат.ЧекККМ_Возврат.Дата, ДЕНЬ) <= &ДатаОкончания
| И НАЧАЛОПЕРИОДА(Чек.ЧекККМСсылка.Дата, ДЕНЬ) >= &ДатаНачало
| И КОНЕЦПЕРИОДА(Чек.ЧекККМСсылка.Дата, ДЕНЬ) <= &ДатаОкончания";
Запрос_Чек_И_ЧекВозрат.УстановитьПараметр("ДатаНачало", ДатаНачала);
Запрос_Чек_И_ЧекВозрат.УстановитьПараметр("ДатаОкончания", КонецДня(ДатаОкончанияКонецДня));
РезультатЗапроса_Чек_И_ЧекВозрат = Запрос_Чек_И_ЧекВозрат.Выполнить().Выгрузить();
ЗапросРозничныеПродажи = Новый Запрос;
ЗапросРозничныеПродажи.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ПродажиОбороты.Регистратор КАК Регистратор,
| ПродажиОбороты.ПериодДень КАК ПериодДень,
| ПродажиОбороты.ПериодНеделя КАК ПериодНеделя,
| ПродажиОбороты.ПериодДекада КАК ПериодДекада,
| ПродажиОбороты.ПериодМесяц КАК ПериодМесяц,
| ПродажиОбороты.ПериодКвартал КАК ПериодКвартал,
| ПродажиОбороты.ПериодПолугодие КАК ПериодПолугодие,
| ПродажиОбороты.ПериодГод КАК ПериодГод,
| ПродажиОбороты.ПериодЧас КАК ПериодЧас,
| ПродажиОбороты.Документ.КассаККМ КАК КассаККМ,
| ПродажиОбороты.Организация КАК Организация,
| ПродажиОбороты.Документ КАК Документ,
| ВЫБОР
| КОГДА ПродажиОбороты.Контрагент <> ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
| ТОГДА ПродажиОбороты.Контрагент
| КОГДА ПродажиОбороты.Документ ССЫЛКА Документ.ЗаказПокупателя
| И ПродажиОбороты.Документ <> ЗНАЧЕНИЕ(Документ.ЗаказПокупателя.ПустаяСсылка)
| ТОГДА ВЫРАЗИТЬ(ПродажиОбороты.Документ КАК Документ.ЗаказПокупателя).Контрагент
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
| КОНЕЦ КАК Контрагент,
| ВЫБОР
| КОГДА ПродажиОбороты.Документ ССЫЛКА Документ.ЗаказПокупателя
| И ПродажиОбороты.Документ <> ЗНАЧЕНИЕ(Документ.ЗаказПокупателя.ПустаяСсылка)
| ТОГДА ВЫРАЗИТЬ(ПродажиОбороты.Документ КАК Документ.ЗаказПокупателя).СтруктурнаяЕдиницаПродажи
| ИНАЧЕ ПродажиОбороты.Подразделение
| КОНЕЦ КАК Подразделение,
| ВЫБОР
| КОГДА ПродажиОбороты.Склад <> ЗНАЧЕНИЕ(Справочник.СтруктурныеЕдиницы.ПустаяСсылка)
| ТОГДА ПродажиОбороты.Склад
| КОГДА ПродажиОбороты.Документ = НЕОПРЕДЕЛЕНО
| ТОГДА ЗНАЧЕНИЕ(Справочник.СтруктурныеЕдиницы.ПустаяСсылка)
| КОГДА ПродажиОбороты.Документ ССЫЛКА Документ.ЧекККМ
| И ПродажиОбороты.Документ <> ЗНАЧЕНИЕ(Документ.ЧекККМ.ПустаяСсылка)
| ТОГДА ВЫРАЗИТЬ(ПродажиОбороты.Документ КАК Документ.ЧекККМ).СтруктурнаяЕдиница
| КОГДА ПродажиОбороты.Документ ССЫЛКА Документ.ЧекККМВозврат
| И ПродажиОбороты.Документ <> ЗНАЧЕНИЕ(Документ.ЧекККМВозврат.ПустаяСсылка)
| ТОГДА ВЫРАЗИТЬ(ПродажиОбороты.Документ КАК Документ.ЧекККМВозврат).СтруктурнаяЕдиница
| КОГДА ПродажиОбороты.Документ ССЫЛКА Документ.ОтчетОРозничныхПродажах
| И ПродажиОбороты.Документ <> ЗНАЧЕНИЕ(Документ.ОтчетОРозничныхПродажах.ПустаяСсылка)
| ТОГДА ВЫРАЗИТЬ(ПродажиОбороты.Документ КАК Документ.ОтчетОРозничныхПродажах).СтруктурнаяЕдиница
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.СтруктурныеЕдиницы.ПустаяСсылка)
| КОНЕЦ КАК Склад,
| ПродажиОбороты.Ответственный КАК Ответственный,
| ВЫБОР
| КОГДА ПродажиОбороты.Регистратор ССЫЛКА Документ.ЧекККМ
| ТОГДА ПродажиОбороты.Регистратор
| КОГДА НЕ ДокументЧекККМ.Ссылка ЕСТЬ NULL
| ТОГДА ДокументЧекККМ.Ссылка
| ИНАЧЕ NULL
| КОНЕЦ КАК ЧекККМ
|ПОМЕСТИТЬ ПродажиПоЧекам
|ИЗ
| РегистрНакопления.Продажи.Обороты(, , Авто, ) КАК ПродажиОбороты
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЧекККМ КАК ДокументЧекККМ
| ПО ПродажиОбороты.Регистратор = ДокументЧекККМ.КассоваяСмена
| И (ДокументЧекККМ.Проведен)
|ГДЕ
| (ПродажиОбороты.Регистратор ССЫЛКА Документ.ОтчетОРозничныхПродажах
| ИЛИ ПродажиОбороты.Регистратор ССЫЛКА Документ.ЧекККМ)
| И НЕ ВЫБОР
| КОГДА ПродажиОбороты.Регистратор ССЫЛКА Документ.ЧекККМ
| ТОГДА ПродажиОбороты.Регистратор
| КОГДА НЕ ДокументЧекККМ.Ссылка ЕСТЬ NULL
| ТОГДА ДокументЧекККМ.Ссылка
| ИНАЧЕ NULL
| КОНЕЦ ЕСТЬ NULL
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ПродажиОбороты.Регистратор,
| ПродажиОбороты.ПериодДень,
| ПродажиОбороты.ПериодНеделя,
| ПродажиОбороты.ПериодДекада,
| ПродажиОбороты.ПериодМесяц,
| ПродажиОбороты.ПериодКвартал,
| ПродажиОбороты.ПериодПолугодие,
| ПродажиОбороты.ПериодГод,
| ПродажиОбороты.ПериодЧас,
| ПродажиОбороты.Документ.КассаККМ,
| ПродажиОбороты.Организация,
| ПродажиОбороты.Документ,
| ВЫБОР
| КОГДА ПродажиОбороты.Контрагент <> ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
| ТОГДА ПродажиОбороты.Контрагент
| КОГДА ПродажиОбороты.Документ ССЫЛКА Документ.ЗаказПокупателя
| И ПродажиОбороты.Документ <> ЗНАЧЕНИЕ(Документ.ЗаказПокупателя.ПустаяСсылка)
| ТОГДА ВЫРАЗИТЬ(ПродажиОбороты.Документ КАК Документ.ЗаказПокупателя).Контрагент
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
| КОНЕЦ,
| ВЫБОР
| КОГДА ПродажиОбороты.Документ ССЫЛКА Документ.ЗаказПокупателя
| И ПродажиОбороты.Документ <> ЗНАЧЕНИЕ(Документ.ЗаказПокупателя.ПустаяСсылка)
| ТОГДА ВЫРАЗИТЬ(ПродажиОбороты.Документ КАК Документ.ЗаказПокупателя).СтруктурнаяЕдиницаПродажи
| ИНАЧЕ ПродажиОбороты.Подразделение
| КОНЕЦ,
| ВЫБОР
| КОГДА ПродажиОбороты.Склад <> ЗНАЧЕНИЕ(Справочник.СтруктурныеЕдиницы.ПустаяСсылка)
| ТОГДА ПродажиОбороты.Склад
| КОГДА ПродажиОбороты.Документ = НЕОПРЕДЕЛЕНО
| ТОГДА ЗНАЧЕНИЕ(Справочник.СтруктурныеЕдиницы.ПустаяСсылка)
| КОГДА ПродажиОбороты.Документ ССЫЛКА Документ.ЧекККМ
| И ПродажиОбороты.Документ <> ЗНАЧЕНИЕ(Документ.ЧекККМ.ПустаяСсылка)
| ТОГДА ВЫРАЗИТЬ(ПродажиОбороты.Документ КАК Документ.ЧекККМ).СтруктурнаяЕдиница
| КОГДА ПродажиОбороты.Документ ССЫЛКА Документ.ЧекККМВозврат
| И ПродажиОбороты.Документ <> ЗНАЧЕНИЕ(Документ.ЧекККМВозврат.ПустаяСсылка)
| ТОГДА ВЫРАЗИТЬ(ПродажиОбороты.Документ КАК Документ.ЧекККМВозврат).СтруктурнаяЕдиница
| КОГДА ПродажиОбороты.Документ ССЫЛКА Документ.ОтчетОРозничныхПродажах
| И ПродажиОбороты.Документ <> ЗНАЧЕНИЕ(Документ.ОтчетОРозничныхПродажах.ПустаяСсылка)
| ТОГДА ВЫРАЗИТЬ(ПродажиОбороты.Документ КАК Документ.ОтчетОРозничныхПродажах).СтруктурнаяЕдиница
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.СтруктурныеЕдиницы.ПустаяСсылка)
| КОНЕЦ,
| ПродажиОбороты.Ответственный,
| ВЫБОР
| КОГДА ПродажиОбороты.Регистратор ССЫЛКА Документ.ЧекККМВозврат
| ТОГДА ПродажиОбороты.Регистратор
| КОГДА НЕ ДокументЧекККМВозврат.Ссылка ЕСТЬ NULL
| ТОГДА ДокументЧекККМВозврат.Ссылка
| ИНАЧЕ NULL
| КОНЕЦ
|ИЗ
| РегистрНакопления.Продажи.Обороты(, , Авто, ) КАК ПродажиОбороты
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЧекККМВозврат КАК ДокументЧекККМВозврат
| ПО ПродажиОбороты.Регистратор = ДокументЧекККМВозврат.КассоваяСмена
| И (ДокументЧекККМВозврат.Проведен)
|ГДЕ
| (ПродажиОбороты.Регистратор ССЫЛКА Документ.ОтчетОРозничныхПродажах
| ИЛИ ПродажиОбороты.Регистратор ССЫЛКА Документ.ЧекККМВозврат)
| И НЕ ВЫБОР
| КОГДА ПродажиОбороты.Регистратор ССЫЛКА Документ.ЧекККМВозврат
| ТОГДА ПродажиОбороты.Регистратор
| КОГДА НЕ ДокументЧекККМВозврат.Ссылка ЕСТЬ NULL
| ТОГДА ДокументЧекККМВозврат.Ссылка
| ИНАЧЕ NULL
| КОНЕЦ ЕСТЬ NULL
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ПродажиПоЧекам.ЧекККМ КАК ЧекККМ,
| МАКСИМУМ(ЧекККМЗапасы.НомерСтроки) КАК КоличествоСтрок
|ПОМЕСТИТЬ ЧекиКоличествоСтрок
|ИЗ
| ПродажиПоЧекам КАК ПродажиПоЧекам
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЧекККМ.Запасы КАК ЧекККМЗапасы
| ПО ПродажиПоЧекам.ЧекККМ = ЧекККМЗапасы.Ссылка
|ГДЕ
| ПродажиПоЧекам.ЧекККМ ССЫЛКА Документ.ЧекККМ
|
|СГРУППИРОВАТЬ ПО
| ПродажиПоЧекам.ЧекККМ
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ПродажиПоЧекам.ЧекККМ,
| МАКСИМУМ(ЧекККМВозвратЗапасы.НомерСтроки)
|ИЗ
| ПродажиПоЧекам КАК ПродажиПоЧекам
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЧекККМВозврат.Запасы КАК ЧекККМВозвратЗапасы
| ПО ПродажиПоЧекам.ЧекККМ = ЧекККМВозвратЗапасы.Ссылка
|ГДЕ
| ПродажиПоЧекам.ЧекККМ ССЫЛКА Документ.ЧекККМВозврат
|
|СГРУППИРОВАТЬ ПО
| ПродажиПоЧекам.ЧекККМ
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ПродажиПоЧекам.Регистратор КАК Регистратор,
| ПродажиПоЧекам.ПериодДень КАК ПериодДень,
| ПродажиПоЧекам.ПериодНеделя КАК ПериодНеделя,
| ПродажиПоЧекам.ПериодДекада КАК ПериодДекада,
| ПродажиПоЧекам.ПериодМесяц КАК ПериодМесяц,
| ПродажиПоЧекам.ПериодКвартал КАК ПериодКвартал,
| ПродажиПоЧекам.ПериодПолугодие КАК ПериодПолугодие,
| ПродажиПоЧекам.ПериодГод КАК ПериодГод,
| ПродажиПоЧекам.ПериодЧас КАК ПериодЧас,
| ПродажиПоЧекам.Документ.КассаККМ КАК КассаККМ,
| ПродажиПоЧекам.Организация КАК Организация,
| ПродажиПоЧекам.Документ КАК Документ,
| ПродажиПоЧекам.Контрагент КАК Контрагент,
| ПродажиПоЧекам.Подразделение КАК Подразделение,
| ПродажиПоЧекам.Склад КАК Склад,
| ПродажиПоЧекам.Ответственный КАК Ответственный,
| ПродажиПоЧекам.ЧекККМ КАК ЧекККМ,
| ВЫБОР
| КОГДА ПродажиПоЧекам.ЧекККМ ССЫЛКА Документ.ЧекККМ
| ТОГДА ПродажиПоЧекам.ЧекККМ
| ИНАЧЕ NULL
| КОНЕЦ КАК ЧекПродажа,
| ВЫБОР
| КОГДА ПродажиПоЧекам.ЧекККМ ССЫЛКА Документ.ЧекККМВозврат
| ТОГДА ПродажиПоЧекам.ЧекККМ
| ИНАЧЕ NULL
| КОНЕЦ КАК ЧекВозврат,
| ЕСТЬNULL(ЧекиКоличествоСтрок.КоличествоСтрок, 0) КАК КоличествоСтрок
|ИЗ
| ПродажиПоЧекам КАК ПродажиПоЧекам
| ЛЕВОЕ СОЕДИНЕНИЕ ЧекиКоличествоСтрок КАК ЧекиКоличествоСтрок
| ПО ПродажиПоЧекам.ЧекККМ = ЧекиКоличествоСтрок.ЧекККМ
|ГДЕ
| НАЧАЛОПЕРИОДА(ПродажиПоЧекам.ПериодДень, ДЕНЬ) >= &ДатаНачало
| И КОНЕЦПЕРИОДА(ПродажиПоЧекам.ПериодДень, ДЕНЬ) <= &ДатаОкончания";
ЗапросРозничныеПродажи.УстановитьПараметр("ДатаНачало", ДатаНачала);
ЗапросРозничныеПродажи.УстановитьПараметр("ДатаОкончания", КонецДня(ДатаОкончанияКонецДня));
ЗапросЧеки = Новый Запрос;
ЗапросЧеки.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ПродажиОбороты.Регистратор КАК Регистратор,
| ПродажиОбороты.ПериодСекунда КАК ПериодСекунда,
| ПродажиОбороты.ПериодМинута КАК ПериодМинута,
| ПродажиОбороты.ПериодЧас КАК ПериодЧас,
| ПродажиОбороты.ПериодДень КАК ПериодДень,
| ПродажиОбороты.ПериодНеделя КАК ПериодНеделя,
| ПродажиОбороты.ПериодДекада КАК ПериодДекада,
| ПродажиОбороты.ПериодМесяц КАК ПериодМесяц,
| ПродажиОбороты.ПериодКвартал КАК ПериодКвартал,
| ПродажиОбороты.ПериодПолугодие КАК ПериодПолугодие,
| ПродажиОбороты.ПериодГод КАК ПериодГод,
| ПродажиОбороты.Номенклатура КАК Номенклатура,
| ПродажиОбороты.Характеристика КАК Характеристика,
| ПродажиОбороты.Партия КАК Партия,
| ПродажиОбороты.Документ КАК Документ,
| ПродажиОбороты.СтавкаНДС КАК СтавкаНДС,
| ПродажиОбороты.Организация КАК Организация,
| ПродажиОбороты.ЗаказПокупателя КАК ЗаказПокупателя,
| ВЫБОР
| КОГДА ПродажиОбороты.Контрагент <> ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
| ТОГДА ПродажиОбороты.Контрагент
| КОГДА ПродажиОбороты.Документ ССЫЛКА Документ.ЗаказПокупателя
| И ПродажиОбороты.Документ <> ЗНАЧЕНИЕ(Документ.ЗаказПокупателя.ПустаяСсылка)
| ТОГДА ВЫРАЗИТЬ(ПродажиОбороты.Документ КАК Документ.ЗаказПокупателя).Контрагент
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
| КОНЕЦ КАК Контрагент,
| ВЫБОР
| КОГДА ПродажиОбороты.Документ ССЫЛКА Документ.ЗаказПокупателя
| И ПродажиОбороты.Документ <> ЗНАЧЕНИЕ(Документ.ЗаказПокупателя.ПустаяСсылка)
| ТОГДА ВЫРАЗИТЬ(ПродажиОбороты.Документ КАК Документ.ЗаказПокупателя).СтруктурнаяЕдиницаПродажи
| ИНАЧЕ ПродажиОбороты.Подразделение
| КОНЕЦ КАК Подразделение,
| ВЫБОР
| КОГДА ПродажиОбороты.Склад <> ЗНАЧЕНИЕ(Справочник.СтруктурныеЕдиницы.ПустаяСсылка)
| ТОГДА ПродажиОбороты.Склад
| КОГДА ПродажиОбороты.Документ = НЕОПРЕДЕЛЕНО
| ТОГДА ЗНАЧЕНИЕ(Справочник.СтруктурныеЕдиницы.ПустаяСсылка)
| КОГДА ПродажиОбороты.Документ ССЫЛКА Документ.ЧекККМ
| И ПродажиОбороты.Документ <> ЗНАЧЕНИЕ(Документ.ЧекККМ.ПустаяСсылка)
| ТОГДА ВЫРАЗИТЬ(ПродажиОбороты.Документ КАК Документ.ЧекККМ).СтруктурнаяЕдиница
| КОГДА ПродажиОбороты.Документ ССЫЛКА Документ.ЧекККМВозврат
| И ПродажиОбороты.Документ <> ЗНАЧЕНИЕ(Документ.ЧекККМВозврат.ПустаяСсылка)
| ТОГДА ВЫРАЗИТЬ(ПродажиОбороты.Документ КАК Документ.ЧекККМВозврат).СтруктурнаяЕдиница
| КОГДА ПродажиОбороты.Документ ССЫЛКА Документ.ОтчетОРозничныхПродажах
| И ПродажиОбороты.Документ <> ЗНАЧЕНИЕ(Документ.ОтчетОРозничныхПродажах.ПустаяСсылка)
| ТОГДА ВЫРАЗИТЬ(ПродажиОбороты.Документ КАК Документ.ОтчетОРозничныхПродажах).СтруктурнаяЕдиница
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.СтруктурныеЕдиницы.ПустаяСсылка)
| КОНЕЦ КАК Склад,
| ПродажиОбороты.Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| ПродажиОбороты.Номенклатура.КатегорияНоменклатуры КАК КатегорияНоменклатуры,
| ПродажиОбороты.Ответственный КАК Ответственный,
| ПродажиОбороты.Документ.КассаККМ КАК КассаККМ,
| ПродажиОбороты.КоличествоОборот КАК Количество,
| ПродажиОбороты.СуммаОборот КАК Сумма,
| ПродажиОбороты.СуммаНДСОборот КАК СуммаНДС,
| ПродажиОбороты.СебестоимостьОборот КАК Себестоимость,
| ПродажиОбороты.СуммаБезСкидкиОборот КАК СуммаБезСкидки,
| ПродажиОбороты.СуммаБезСкидкиОборот - ПродажиОбороты.СуммаОборот КАК Скидка,
| ПродажиОбороты.СуммаОборот - ПродажиОбороты.СебестоимостьОборот КАК ВаловаяПрибыль,
| ВЫБОР
| КОГДА ПродажиОбороты.СуммаОборот <> 0
| ТОГДА (ПродажиОбороты.СуммаОборот - ПродажиОбороты.СебестоимостьОборот) / ПродажиОбороты.СуммаОборот
| ИНАЧЕ 0
| КОНЕЦ * 100 КАК Рентабельность,
| ВЫБОР
| КОГДА ПродажиОбороты.СебестоимостьОборот <> 0
| ТОГДА (ПродажиОбороты.СуммаОборот - ПродажиОбороты.СебестоимостьОборот) / ПродажиОбороты.СебестоимостьОборот
| ИНАЧЕ 0
| КОНЕЦ * 100 КАК Наценка,
| NULL КАК ВыданоСертификатами,
| ПродажиОбороты.Номенклатура.КоэффициентЕдиницыДляОтчетов КАК КоэффициентЕдиницыДляОтчетов
|ИЗ
| РегистрНакопления.Продажи.Обороты(, , Авто, {(Склад).* КАК СкладДвижений}) КАК ПродажиОбороты
|ГДЕ
| (ПродажиОбороты.Регистратор ССЫЛКА Документ.ОтчетОРозничныхПродажах
| ИЛИ ПродажиОбороты.Регистратор ССЫЛКА Документ.ЧекККМ
| ИЛИ ПродажиОбороты.Регистратор ССЫЛКА Документ.ЧекККМВозврат)
| И НАЧАЛОПЕРИОДА(ПродажиОбороты.ПериодДень, ДЕНЬ) >= &ДатаНачало
| И КОНЕЦПЕРИОДА(ПродажиОбороты.ПериодДень, ДЕНЬ) = &ДатаОкончания
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ПодарочныеСертификатыОбороты.Регистратор,
| ПодарочныеСертификатыОбороты.ПериодСекунда,
| ПодарочныеСертификатыОбороты.ПериодМинута,
| ПодарочныеСертификатыОбороты.ПериодЧас,
| ПодарочныеСертификатыОбороты.ПериодДень,
| ПодарочныеСертификатыОбороты.ПериодНеделя,
| ПодарочныеСертификатыОбороты.ПериодДекада,
| ПодарочныеСертификатыОбороты.ПериодМесяц,
| ПодарочныеСертификатыОбороты.ПериодКвартал,
| ПодарочныеСертификатыОбороты.ПериодПолугодие,
| ПодарочныеСертификатыОбороты.ПериодГод,
| ПодарочныеСертификатыОбороты.ПодарочныйСертификат,
| NULL,
| NULL,
| ПодарочныеСертификатыОбороты.Регистратор,
| NULL,
| ПодарочныеСертификатыОбороты.Регистратор.Организация,
| NULL,
| ПодарочныеСертификатыОбороты.Регистратор.Контрагент,
| ПодарочныеСертификатыОбороты.Регистратор.Подразделение,
| ПодарочныеСертификатыОбороты.Регистратор.СтруктурнаяЕдиница,
| NULL,
| NULL,
| ПодарочныеСертификатыОбороты.Регистратор.Ответственный,
| ПодарочныеСертификатыОбороты.Регистратор.КассаККМ,
| ВЫБОР
| КОГДА ЕСТЬNULL(ПодарочныеСертификатыОбороты.ПодарочныйСертификат.Номинал, 0) = 0
| ТОГДА 0
| ИНАЧЕ ПодарочныеСертификатыОбороты.СуммаПриход / ПодарочныеСертификатыОбороты.ПодарочныйСертификат.Номинал
| КОНЕЦ,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| ПодарочныеСертификатыОбороты.СуммаПриход,
| 1
|ИЗ
| РегистрНакопления.ПодарочныеСертификаты.Обороты(, , Авто, ) КАК ПодарочныеСертификатыОбороты
|ГДЕ
| (ПодарочныеСертификатыОбороты.Регистратор ССЫЛКА Документ.ОтчетОРозничныхПродажах
| ИЛИ ПодарочныеСертификатыОбороты.Регистратор ССЫЛКА Документ.ЧекККМ
| ИЛИ ПодарочныеСертификатыОбороты.Регистратор ССЫЛКА Документ.ЧекККМВозврат)";
ЗапросЧеки.УстановитьПараметр("ДатаНачало", ДатаНачала);
ЗапросЧеки.УстановитьПараметр("ДатаОкончания", КонецДня(ДатаОкончанияКонецДня));
ЗапросВидыДС = Новый Запрос;
ЗапросВидыДС.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ДенежныеСредстваВКассахККМОбороты.Регистратор КАК Регистратор,
| ДенежныеСредстваВКассахККМОбороты.ПериодСекунда КАК ПериодСекунда,
| ДенежныеСредстваВКассахККМОбороты.ПериодМинута КАК ПериодМинута,
| ДенежныеСредстваВКассахККМОбороты.ПериодЧас КАК ПериодЧас,
| ДенежныеСредстваВКассахККМОбороты.ПериодДень КАК ПериодДень,
| ДенежныеСредстваВКассахККМОбороты.ПериодНеделя КАК ПериодНеделя,
| ДенежныеСредстваВКассахККМОбороты.ПериодДекада КАК ПериодДекада,
| ДенежныеСредстваВКассахККМОбороты.ПериодМесяц КАК ПериодМесяц,
| ДенежныеСредстваВКассахККМОбороты.ПериодКвартал КАК ПериодКвартал,
| ДенежныеСредстваВКассахККМОбороты.ПериодПолугодие КАК ПериодПолугодие,
| ДенежныеСредстваВКассахККМОбороты.ПериодГод КАК ПериодГод,
| ДенежныеСредстваВКассахККМОбороты.Организация КАК Организация,
| ДенежныеСредстваВКассахККМОбороты.Регистратор КАК Документ,
| ДенежныеСредстваВКассахККМОбороты.Регистратор.Контрагент КАК Контрагент,
| ДенежныеСредстваВКассахККМОбороты.Регистратор.Подразделение КАК Подразделение,
| ДенежныеСредстваВКассахККМОбороты.Регистратор.СтруктурнаяЕдиница КАК Склад,
| ДенежныеСредстваВКассахККМОбороты.Регистратор.Ответственный КАК Ответственный,
| ДенежныеСредстваВКассахККМОбороты.КассаККМ КАК КассаККМ,
| ЕСТЬNULL(ДенежныеСредстваВКассахККМОбороты.СуммаОборот, 0) КАК ПолученоНаличными,
| 0 КАК ПолученоКартами,
| 0 КАК ПолученоСертификатами
|ИЗ
| РегистрНакопления.ДенежныеСредстваВКассахККМ.Обороты(, , Авто, ) КАК ДенежныеСредстваВКассахККМОбороты
|ГДЕ
| (ДенежныеСредстваВКассахККМОбороты.Регистратор ССЫЛКА Документ.ОтчетОРозничныхПродажах
| ИЛИ ДенежныеСредстваВКассахККМОбороты.Регистратор ССЫЛКА Документ.ЧекККМ
| ИЛИ ДенежныеСредстваВКассахККМОбороты.Регистратор ССЫЛКА Документ.ЧекККМВозврат)
| И НАЧАЛОПЕРИОДА(ДенежныеСредстваВКассахККМОбороты.ПериодДень, ДЕНЬ) >= &ДатаНачало
| И КОНЕЦПЕРИОДА(ДенежныеСредстваВКассахККМОбороты.ПериодДень, ДЕНЬ) = &ДатаОкончания
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ОплатаПлатежнымиКартамиОбороты.Регистратор,
| ОплатаПлатежнымиКартамиОбороты.ПериодСекунда,
| ОплатаПлатежнымиКартамиОбороты.ПериодМинута,
| ОплатаПлатежнымиКартамиОбороты.ПериодЧас,
| ОплатаПлатежнымиКартамиОбороты.ПериодДень,
| ОплатаПлатежнымиКартамиОбороты.ПериодНеделя,
| ОплатаПлатежнымиКартамиОбороты.ПериодДекада,
| ОплатаПлатежнымиКартамиОбороты.ПериодМесяц,
| ОплатаПлатежнымиКартамиОбороты.ПериодКвартал,
| ОплатаПлатежнымиКартамиОбороты.ПериодПолугодие,
| ОплатаПлатежнымиКартамиОбороты.ПериодГод,
| ОплатаПлатежнымиКартамиОбороты.Организация,
| ОплатаПлатежнымиКартамиОбороты.Регистратор,
| ОплатаПлатежнымиКартамиОбороты.Контрагент,
| ОплатаПлатежнымиКартамиОбороты.Регистратор.Подразделение,
| ОплатаПлатежнымиКартамиОбороты.СтруктурнаяЕдиница,
| ОплатаПлатежнымиКартамиОбороты.Регистратор.Ответственный,
| ОплатаПлатежнымиКартамиОбороты.ЭквайринговыйТерминал.Касса,
| 0,
| ЕСТЬNULL(ОплатаПлатежнымиКартамиОбороты.СуммаОборот, 0),
| 0
|ИЗ
| РегистрНакопления.ОплатаПлатежнымиКартами.Обороты(, , Авто, ) КАК ОплатаПлатежнымиКартамиОбороты
|ГДЕ
| (ОплатаПлатежнымиКартамиОбороты.Регистратор ССЫЛКА Документ.ОтчетОРозничныхПродажах
| ИЛИ ОплатаПлатежнымиКартамиОбороты.Регистратор ССЫЛКА Документ.ЧекККМ
| ИЛИ ОплатаПлатежнымиКартамиОбороты.Регистратор ССЫЛКА Документ.ЧекККМВозврат)
| И НАЧАЛОПЕРИОДА(ОплатаПлатежнымиКартамиОбороты.ПериодДень, ДЕНЬ) >= &ДатаНачало
| И КОНЕЦПЕРИОДА(ОплатаПлатежнымиКартамиОбороты.ПериодДень, ДЕНЬ) = &ДатаОкончания
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ОплатаПодарочнымиСертификатамиОбороты.Регистратор,
| ОплатаПодарочнымиСертификатамиОбороты.ПериодСекунда,
| ОплатаПодарочнымиСертификатамиОбороты.ПериодМинута,
| ОплатаПодарочнымиСертификатамиОбороты.ПериодЧас,
| ОплатаПодарочнымиСертификатамиОбороты.ПериодДень,
| ОплатаПодарочнымиСертификатамиОбороты.ПериодНеделя,
| ОплатаПодарочнымиСертификатамиОбороты.ПериодДекада,
| ОплатаПодарочнымиСертификатамиОбороты.ПериодМесяц,
| ОплатаПодарочнымиСертификатамиОбороты.ПериодКвартал,
| ОплатаПодарочнымиСертификатамиОбороты.ПериодПолугодие,
| ОплатаПодарочнымиСертификатамиОбороты.ПериодГод,
| ОплатаПодарочнымиСертификатамиОбороты.Организация,
| ОплатаПодарочнымиСертификатамиОбороты.Регистратор,
| ОплатаПодарочнымиСертификатамиОбороты.Контрагент,
| ОплатаПодарочнымиСертификатамиОбороты.Регистратор.Подразделение,
| ОплатаПодарочнымиСертификатамиОбороты.СтруктурнаяЕдиница,
| ОплатаПодарочнымиСертификатамиОбороты.Регистратор.Ответственный,
| ОплатаПодарочнымиСертификатамиОбороты.Регистратор.КассаККМ,
| 0,
| 0,
| ЕСТЬNULL(ОплатаПодарочнымиСертификатамиОбороты.СуммаОборот, 0)
|ИЗ
| РегистрНакопления.ОплатаПодарочнымиСертификатами.Обороты(, , Авто, ) КАК ОплатаПодарочнымиСертификатамиОбороты
|ГДЕ
| (ОплатаПодарочнымиСертификатамиОбороты.Регистратор ССЫЛКА Документ.ОтчетОРозничныхПродажах
| ИЛИ ОплатаПодарочнымиСертификатамиОбороты.Регистратор ССЫЛКА Документ.ЧекККМ
| ИЛИ ОплатаПодарочнымиСертификатамиОбороты.Регистратор ССЫЛКА Документ.ЧекККМВозврат)
| И НАЧАЛОПЕРИОДА(ОплатаПодарочнымиСертификатамиОбороты.ПериодДень, ДЕНЬ) >= &ДатаНачало
| И КОНЕЦПЕРИОДА(ОплатаПодарочнымиСертификатамиОбороты.ПериодДень, ДЕНЬ) = &ДатаОкончания";
ЗапросВидыДС.УстановитьПараметр("ДатаНачало", ДатаНачала);
ЗапросВидыДС.УстановитьПараметр("ДатаОкончания", КонецДня(ДатаОкончанияКонецДня));
РезультатЗапросРозничныеПродажи = ЗапросРозничныеПродажи.Выполнить().Выгрузить();
РезультатЗапросаЧеки = ЗапросЧеки.Выполнить().Выгрузить();
РезультатЗапросаВидыДС = ЗапросВидыДС.Выполнить().Выгрузить();
// Кол-во чеков, средний чек, кол-во чеков продажи, кол-во чеков возврата
МассивДублей = Новый Массив;
МассивЧековПродаж = Новый Массив;
КолВоЧековПродажи = 0;
КолВоЧековВозврата = 0;
КолВоСтрокЧекаПродаж = 0;
Для Каждого СтрокаРозничныеПродажи Из РезультатЗапросРозничныеПродажи Цикл
// Здесь пропсываю фильтр по Организации, Складу и Кассе ККМ
Организация = СтрокаРозничныеПродажи.Организация;
КассаККМ = СтрокаРозничныеПродажи.КассаККМ;
Склад = СтрокаРозничныеПродажи.Склад;
// Вытаскиваю переменные
// Чек продажа
ЧекПродажа = СтрокаРозничныеПродажи.ЧекПродажа;
// Проверка данный Чек уже был
ЧекПродажаПроверка=Истина;
Для Каждого СтрокаМассива Из МассивДублей Цикл
Если СтрокаМассива=ЧекПродажа Тогда
ЧекПродажаПроверка=Ложь;
Продолжить;
КонецЕсли;
КонецЦикла;
Если ЧекПродажаПроверка И ЗначениеЗаполнено(ЧекПродажа) Тогда
КолВоЧековПродажи=КолВоЧековПродажи+1;
КоличествоСтрок = СтрокаРозничныеПродажи.КоличествоСтрок;
КолВоСтрокЧекаПродаж=КолВоСтрокЧекаПродаж+КоличествоСтрок;
МассивДублей.Добавить(ЧекПродажа);
МассивЧековПродаж.Добавить(ЧекПродажа);
КонецЕсли;
// Чек Возврат
ЧекВозврат = СтрокаРозничныеПродажи.ЧекВозврат;
// Проверка данный Чек уже был
ЧекПродажаВозврат=Истина;
Для Каждого СтрокаМассива Из МассивДублей Цикл
Если СтрокаМассива=ЧекПродажаВозврат Тогда
ЧекПродажаВозврат=Ложь;
Продолжить;
КонецЕсли;
КонецЦикла;
Если ЧекПродажаВозврат И ЗначениеЗаполнено(ЧекВозврат) Тогда
КолВоЧековВозврата=КолВоЧековВозврата+1;
МассивДублей.Добавить(ЧекВозврат);
КонецЕсли;
КонецЦикла;
// Вычисляю поля
КолВоЧеков = КолВоЧековПродажи + КолВоЧековВозврата;
СреднееКолВоСтрок = КолВоСтрокЧекаПродаж/МассивЧековПродаж.Количество();
//СреднийЧек=СуммаПродаж/КолВоЧековПродажи;
/////////////////////////////////////////////////////////////// Вытаскиваю поля Скидка, сумма без скидки
МассивНоменклатур = Новый Массив;
СуммаПродаж = 0;
СуммаБезСкидки = 0;
ВаловаяПрибыль = 0;
ТаблицаНоменкЦена=Новый ТаблицаЗначений;
ТаблицаНоменкЦена.Колонки.Добавить("Номенклатура");
ТаблицаНоменкЦена.Колонки.Добавить("Количество");
ТаблицаНоменкЦена.Колонки.Добавить("Выручка");
ТаблицаНоменкЦена.Колонки.Добавить("Скидка");
ТаблицаНоменкЦена.Колонки.Добавить("СуммаБезСкидки");
ТаблицаНоменкЦена.Колонки.Добавить("ДокументСсылка");
Для Каждого СтрокаЧеки Из РезультатЗапросаЧеки Цикл
// // Здесь пропсываю фильтр по Организации, Складу и Кассе ККМ
Организация = СтрокаЧеки.Организация;
Склад = СтрокаЧеки.Склад;
КассаККМ = СтрокаЧеки.КассаККМ;
ДокументПроверка = СтрокаЧеки.Регистратор;
// Проверка данный Чек уже был
ЧекПродажа=Ложь;
Для Каждого СтрокаМассива Из МассивДублей Цикл
Если СтрокаМассива=ДокументПроверка Тогда
ЧекПродажа=Истина;
Продолжить;
КонецЕсли;
КонецЦикла;
Если Не ЧекПродажа Тогда
Продолжить; // Значит данного документа нет в РозничныхПродажах
КонецЕсли;
НоменклатураЧека = СтрокаЧеки.Номенклатура;
Количество = СтрокаЧеки.Количество;
СуммаЧека = СтрокаЧеки.Сумма;
СуммаБезСкидкиЧека = СтрокаЧеки.СуммаБезСкидки;
ВаловаяПрибыльЧека = СтрокаЧеки.ВаловаяПрибыль;
СуммаПродаж = СуммаПродаж+СуммаЧека;
СуммаБезСкидки = СуммаБезСкидки+СуммаБезСкидкиЧека;
ВаловаяПрибыль = ВаловаяПрибыль+ВаловаяПрибыльЧека;
// Результат запроса позиции которые сегодня купили и вернули
ФлагЗаписиПозиции=Истина;
Для Каждого Строка_РезультатЗапроса_Чек_И_ЧекВозрат ИЗ РезультатЗапроса_Чек_И_ЧекВозрат Цикл
Возврат_Ссылка = Строка_РезультатЗапроса_Чек_И_ЧекВозрат.Возврат_Ссылка;
Номенклатура_Ссылка = Строка_РезультатЗапроса_Чек_И_ЧекВозрат.Номенклатура;
ЧекККМСсылка_ИЗ__Чек_И_ЧекВозрат = Строка_РезультатЗапроса_Чек_И_ЧекВозрат.ЧекККМСсылка;
Если (ДокументПроверка=ЧекККМСсылка_ИЗ__Чек_И_ЧекВозрат ИЛИ ДокументПроверка=Возврат_Ссылка) И НоменклатураЧека=Номенклатура_Ссылка Тогда
ФлагЗаписиПозиции=Ложь;
Продолжить;
КонецЕсли;
КонецЦикла;
Если Не ФлагЗаписиПозиции Тогда
Продолжить;
КонецЕсли;
НоваяСтрокаТЗ = ТаблицаНоменкЦена.Добавить();
НоваяСтрокаТЗ.Номенклатура = НоменклатураЧека;
НоваяСтрокаТЗ.Количество = Количество;
НоваяСтрокаТЗ.Выручка = ВаловаяПрибыльЧека;
НоваяСтрокаТЗ.Скидка = СуммаБезСкидкиЧека-СуммаЧека;
НоваяСтрокаТЗ.СуммаБезСкидки = СуммаБезСкидкиЧека;
НоваяСтрокаТЗ.ДокументСсылка = ДокументПроверка;
КонецЦикла;
СреднийЧек = СуммаБезСкидки/КолВоЧековПродажи;
СуммаБезСкидки =СуммаБезСкидки;
Скидка = СуммаБезСкидки-СуммаПродаж;
///////////////////////////////////////////////// Вытаскиваю поля Получино наличными, Получино картами
ПолученоКартами = 0;
ПолученоНаличными = 0;
ПолученоСертификатами = 0;
Для Каждого СтрокаВидыДС Из РезультатЗапросаВидыДС Цикл
// // Здесь пропсываю фильтр по Организации, Складу и Кассе ККМ
КассаККМ = СтрокаВидыДС.КассаККМ;
Организация = СтрокаВидыДС.Организация;
Склад = СтрокаВидыДС.Склад;
// Проверка данный Чек уже был
ДокументПроверка=СтрокаВидыДС.Регистратор;
ЧекПродажа=Ложь;
Для Каждого СтрокаМассива Из МассивДублей Цикл
Если СтрокаМассива=ДокументПроверка Тогда
ЧекПродажа=Истина;
Продолжить;
КонецЕсли;
КонецЦикла;
Если Не ЧекПродажа Тогда
Продолжить; // Значит данного документа нет в РозничныхПродажах
КонецЕсли;
ПолученоКартами_ДС = СтрокаВидыДС.ПолученоКартами;
ПолученоНаличными_ДС = СтрокаВидыДС.ПолученоНаличными;
ПолученоСертификатами_ДС = СтрокаВидыДС.ПолученоСертификатами;
ПолученоКартами = ПолученоКартами+ПолученоКартами_ДС;
ПолученоНаличными = ПолученоНаличными+ПолученоНаличными_ДС;
ПолученоСертификатами = ПолученоСертификатами+ПолученоСертификатами_ДС;
КонецЦикла;
//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
ЗапросДисконтныеКарты = Новый Запрос;
ЗапросДисконтныеКарты.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| СогласиеНаОбработкуПерсональныхДанных.Ссылка КАК Ссылка
|ИЗ
| Документ.СогласиеНаОбработкуПерсональныхДанных КАК СогласиеНаОбработкуПерсональныхДанных
|ГДЕ
| НАЧАЛОПЕРИОДА(СогласиеНаОбработкуПерсональныхДанных.Дата, ДЕНЬ) >= &ДатаНачало
| И КОНЕЦПЕРИОДА(СогласиеНаОбработкуПерсональныхДанных.Дата, ДЕНЬ) = &ДатаОкончания";
ЗапросДисконтныеКарты.УстановитьПараметр("ДатаНачало", ДатаНачала);
ЗапросДисконтныеКарты.УстановитьПараметр("ДатаОкончания", КонецДня(ДатаОкончанияКонецДня));
ВыборкаДетальныеЗаписи = ЗапросДисконтныеКарты.Выполнить().Выбрать();
КолВоНовыхДисконтныхКарт = ВыборкаДетальныеЗаписи.Количество();
//СтруктуранПеременных=Новый Структура;
//СтруктуранПеременных.Вставить("КолВоНовыхДисконтныхКарт",КолВоНовыхДисконтныхКарт);
//СтруктуранПеременных.Вставить("ПолученоКартами",ПолученоКартами);
//СтруктуранПеременных.Вставить("ПолученоНаличными",ПолученоНаличными);
//СтруктуранПеременных.Вставить("ПолученоСертификатами",ПолученоСертификатами);
//СтруктуранПеременных.Вставить("КолВоЧековПродажи",КолВоЧековПродажи);
//СтруктуранПеременных.Вставить("КолВоЧековВозврата",КолВоЧековВозврата);
//СтруктуранПеременных.Вставить("СреднийЧек",СреднийЧек);
//СтруктуранПеременных.Вставить("СуммаБезСкидки",СуммаБезСкидки);
//СтруктуранПеременных.Вставить("Скидка",Скидка);
//СтруктуранПеременных.Вставить("КолВоЧеков",КолВоЧеков);
//СтруктуранПеременных.Вставить("СреднееКолВоСтрок",СреднееКолВоСтрок);
ПолученоКартами = ПолученоКартами;
ПолученоНаличными = ПолученоНаличными;
ПолученоСертификатами = ПолученоСертификатами;
КолВоЧековПродажи = КолВоЧековПродажи;
КолВоЧековВозврата = КолВоЧековВозврата;
СреднийЧек = СреднийЧек;
СуммаБезСкидки = СуммаБезСкидки;
Скидка = Скидка;
Выручка = СуммаБезСкидки-Скидка;
КолВоЧеков = КолВоЧеков;
СреднееКолВоСтрок = СреднееКолВоСтрок;
ТаблицаНоменкЦена.Сортировать("Номенклатура");
ТаблицаНоменкЦена2 = ТаблицаНоменкЦена;
//СтруктуранПеременных.Вставить("ТаблицаНоменкЦена",ТаблицаНоменкЦена);
//////////////////// Для печати
ТабДок = Новый ТабличныйДокумент;
ТабДок.Очистить();
//Макет=РеквизитФормыВЗначение("Объект").ПолучитьМакет("Макет");
Макет=ПолучитьМакет("Макет");
ОбластьШапка = Макет.ПолучитьОбласть("ОбластьШапка");
ОбластьШапка.Параметры.ДатаНачала =ДатаНачала;
ОбластьШапка.Параметры.ДатаОкончания =ДатаОкончанияКонецДня;
ТабДок.Вывести(ОбластьШапка);
ОбластьНазванияСтолбцов = Макет.ПолучитьОбласть("ОбластьНазванияСтолбцов");
ТабДок.Вывести(ОбластьНазванияСтолбцов);
ОбластьТабличныхПеременных = Макет.ПолучитьОбласть("ОбластьТабличныхПеременных");
ОбластьТабличныхПеременных.Параметры.Выручка = Выручка;
ОбластьТабличныхПеременных.Параметры.Скидка = Скидка;
ОбластьТабличныхПеременных.Параметры.СуммаБезСкидки = СуммаБезСкидки;
ОбластьТабличныхПеременных.Параметры.ПолученоНаличными = ПолученоНаличными;
ОбластьТабличныхПеременных.Параметры.ПолученоКартами = ПолученоКартами;
//Количество чеков
ОбластьТабличныхПеременных.Параметры.ВсегоЧеков = КолВоЧековПродажи+КолВоЧековВозврата;
ОбластьТабличныхПеременных.Параметры.КолВоЧековПродажи = КолВоЧековПродажи;
ОбластьТабличныхПеременных.Параметры.КолВоЧековВозврата = КолВоЧековВозврата;
//Статистика продаж СреднийЧек СреднееКолВоСтрок КолВоНовыхДисконтныхКарт
ОбластьТабличныхПеременных.Параметры.СреднийЧек = Формат(СреднийЧек,"ЧДЦ=2");
ОбластьТабличныхПеременных.Параметры.СреднееКолВоСтрок = Формат(СреднееКолВоСтрок,"ЧДЦ=2");
ОбластьТабличныхПеременных.Параметры.КолВоНовыхДисконтныхКарт = КолВоНовыхДисконтныхКарт;
ТабДок.Вывести(ОбластьТабличныхПеременных);
// Табличную часть вывожу Номенклатура и Цена
ОбластьТЗ_Цикл = Макет.ПолучитьОбласть("ОбластьТЗ_Цикл");
Для Каждого Строка ИЗ ТаблицаНоменкЦена Цикл
ОбластьТЗ_Цикл.Параметры.Номенклатура_ТЧ = Строка.Номенклатура;
ОбластьТЗ_Цикл.Параметры.Выручка_ТЧ = Строка.Выручка;
ОбластьТЗ_Цикл.Параметры.Скидка_ТЧ = Строка.Скидка;
ОбластьТЗ_Цикл.Параметры.СуммаБезСкидки_ТЧ = Строка.СуммаБезСкидки;
ТабДок.Вывести(ОбластьТЗ_Цикл);
КонецЦикла;
/////////// Вывожу подвал
ОбластьПодвал = Макет.ПолучитьОбласть("ОбластьПодвал");
ОбластьПодвал.Параметры.Выручка = Выручка;
ОбластьПодвал.Параметры.Скидка = Скидка;
ОбластьПодвал.Параметры.СуммаБезСкидки = СуммаБезСкидки;
ОбластьПодвал.Параметры.ПолученоНаличными = ПолученоНаличными;
ОбластьПодвал.Параметры.ПолученоКартами = ПолученоКартами;
//Количество чеков
ОбластьПодвал.Параметры.ВсегоЧеков = КолВоЧековПродажи+КолВоЧековВозврата;
ОбластьПодвал.Параметры.КолВоЧековПродажи = КолВоЧековПродажи;
ОбластьПодвал.Параметры.КолВоЧековВозврата = КолВоЧековВозврата;
//Статистика продаж СреднийЧек СреднееКолВоСтрок
ОбластьПодвал.Параметры.СреднийЧек = Формат(СреднийЧек,"ЧДЦ=2");
ОбластьПодвал.Параметры.СреднееКолВоСтрок = Формат(СреднееКолВоСтрок,"ЧДЦ=2");
ОбластьПодвал.Параметры.КолВоНовыхДисконтныхКарт = КолВоНовыхДисконтныхКарт;
ТабДок.Вывести(ОбластьПодвал);
Возврат ТабДок;
КонецФункции
// Обработчик команд из интерфейса
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыКоманды = Неопределено) Экспорт
СформироватьПечатнуюФорму(Неопределено, Неопределено);
КонецПроцедуры
Функция СформироватьПечатнуюФорму(Ссылка, ОбъектыПечати)
Функция СформироватьПечатнуюФорму(МассивОбъектов , ОбъектыПечати)
Для каждого СсылкаНаОбъект Из МассивОбъектов Цикл
.....
кусок кода формирования свой
...
КонецЦикла;
Возврат ТабДок;
А что нужно-то? Печатная форма вызывается из документа для которого она нужна, если нужно заполнять параметры, то стоит изучить это.
Если обработка планирует запускаться из доп.обработок, то наверное нужно еще одну команду с типом открытия формы и соответственно эту форму добавить.