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