|
Запросы в 1С | ☑ | ||
---|---|---|---|---|
0
The_ka6a4ok
20.10.20
✎
17:22
|
добрых дней. помогите, пожалуйста, разобраться с запросом в 1с, который выполняет ряд функций. Вкратце, перед мной стоит задание: нужно из документа ЧекККМ забрать вид оплаты и вставить это значение в документ ОтчетОРозничныхПродажах, пишу так, потому что уверен, что вы понимаете о чем я. проблема в том, что я не понимаю, почему в итоге 1с даёт ошибку, что такого поля не найдено, скажу прямо: запросы я только изучаю. могу отправить всю базу данных, там данных-то кот наплакал, пока вот только эта обработка:
<spoiler> //ИНК НАЧАЛО //СТАРЫЙ ТЕКСТ: //Если КонецДня(Дата) = КонецДня(ТекущаяДата()) Тогда //НОВЫЙ ТЕКСТ: Если (НачалоДня(Дата) + (инк_ВремяОкончания - '00010101000000')) = КонецДня(ТекущаяДата()) Тогда //ИНК ОКОНЧАНИЕ РежимПроведения = РежимПроведенияДокумента.Оперативный; Иначе РежимПроведения = РежимПроведенияДокумента.Неоперативный; КонецЕсли; МассивДокументовКПроведению = Новый Массив; ОтчетОРозничныхПродажах = СоздатьОтчетОРозничныхПродажах(); СоответствиеТарифов = УправлениеРозничнойТорговлей.СформироватьСоответствиеТарифовЭквайринг(ОтчетОРозничныхПродажах.ДоговорЭквайринга); ОтчетОРозничныхПродажах.Склад = Справочники.Склады.ПустаяСсылка(); ЗапросПоЧекам = Новый Запрос; //ИНК НАЧАЛО //СТАРЫЙ ТЕКСТ: //ЗапросПоЧекам.УстановитьПараметр("НачДата" , НачалоДня(Дата)); //ЗапросПоЧекам.УстановитьПараметр("КонДата" , КонецДня(Дата)); //НОВЫЙ ТЕКСТ: ЗапросПоЧекам.УстановитьПараметр("НачДата" , НачалоДня(Дата) + (инк_ВремяНачала - '00010101000000')); ЗапросПоЧекам.УстановитьПараметр("КонДата" , НачалоДня(Дата) + (инк_ВремяОкончания - '00010101000000')); //ИНК ОКОНЧАНИЕ ЗапросПоЧекам.УстановитьПараметр("КассаККМ", КассаККМ); ЗапросПоЧекам.Текст =" |ВЫБРАТЬ | Док.Ссылка КАК Ссылка |ИЗ | Документ.ЧекККМ КАК Док |ГДЕ | Док.Дата МЕЖДУ &НачДата И &КонДата | И Док.КассаККМ = &КассаККМ | И Док.Проведен |ДЛЯ ИЗМЕНЕНИЯ Документ.ЧекККМ |"; Запрос = Новый Запрос; //ИНК НАЧАЛО //СТАРЫЙ ТЕКСТ: //Запрос.УстановитьПараметр("НачДата" , НачалоДня(Дата)); //Запрос.УстановитьПараметр("КонДата" , КонецДня(Дата)); //НОВЫЙ ТЕКСТ: Запрос.УстановитьПараметр("НачДата" , НачалоДня(Дата) + (инк_ВремяНачала - '00010101000000')); Запрос.УстановитьПараметр("КонДата" , НачалоДня(Дата) + (инк_ВремяОкончания - '00010101000000')); //ИНК ОКОНЧАНИЕ Запрос.УстановитьПараметр("КассаККМ" , КассаККМ); Запрос.УстановитьПараметр("ВидОперацииПродажа", Перечисления.ВидыОперацийЧекККМ.Продажа); Запрос.Текст ="ВЫБРАТЬ | СУММА(ВЫБОР | КОГДА ДокументЧекККМ.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийЧекККМ.Продажа) | ТОГДА 1 | ИНАЧЕ -1 | КОНЕЦ) КАК КоличествоСерийныхНоменров, | ДокументЧекККМ.Склад КАК Склад, | ЧекККМТовары.Номенклатура КАК Номенклатура, | ЧекККМСерийныеНомера.СерийныйНомер КАК СерийныйНомер, | ЧекККМТовары.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры, | ЧекККМТовары.СерияНоменклатуры КАК СерияНоменклатуры, | ЧекККМТовары.ЕдиницаИзмерения КАК ЕдиницаИзмерения, | ЧекККМТовары.Коэффициент КАК Коэффициент, | ЧекККМТовары.Цена КАК Цена, | ЧекККМТовары.ПроцентСкидкиНаценки КАК ПроцентСкидкиНаценки, | ЧекККМТовары.ПроцентАвтоматическихСкидок КАК ПроцентАвтоматическихСкидок, | ЧекККМТовары.УсловиеАвтоматическойСкидки КАК УсловиеАвтоматическойСкидки, | ЧекККМТовары.ЗначениеУсловияАвтоматическойСкидки КАК ЗначениеУсловияАвтоматическойСкидки, //нужно забрать вид оплаты именно отсюда | Дон.ВидОплаты.Ссылка КАК Вид |ИЗ | Документ.ЧекККМ КАК ДокументЧекККМ | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЧекККМ.Товары КАК ЧекККМТовары | ПО (ЧекККМТовары.Ссылка = ДокументЧекККМ.Ссылка) | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СправочникНоменклатура | ПО (СправочникНоменклатура.Ссылка = ЧекККМТовары.Номенклатура) | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЧекККМ.СерийныеНомера КАК ЧекККМСерийныеНомера | ПО (ЧекККМСерийныеНомера.Ссылка = ДокументЧекККМ.Ссылка) | И (ЧекККМСерийныеНомера.КлючСвязи = ЧекККМТовары.КлючСвязи), //полное соединение, как я понимаю | Документ.ЧекККМ.Оплата КАК Дон |ГДЕ | ДокументЧекККМ.Дата МЕЖДУ &НачДата И &КонДата | И ДокументЧекККМ.Проведен | И ДокументЧекККМ.КассаККМ = &КассаККМ | И НЕ СправочникНоменклатура.Комплект | |СГРУППИРОВАТЬ ПО | ДокументЧекККМ.Склад, | ЧекККМТовары.Номенклатура, | ЧекККМСерийныеНомера.СерийныйНомер, | ЧекККМТовары.ХарактеристикаНоменклатуры, | ЧекККМТовары.СерияНоменклатуры, | ЧекККМТовары.ЕдиницаИзмерения, | ЧекККМТовары.Коэффициент, | ЧекККМТовары.Цена, //моё последние добавление в этом запросе | Дон.ВидОплаты, | ЧекККМТовары.ПроцентСкидкиНаценки, | ЧекККМТовары.ПроцентАвтоматическихСкидок, | ЧекККМТовары.УсловиеАвтоматическойСкидки, | ЧекККМТовары.ЗначениеУсловияАвтоматическойСкидки | |ИМЕЮЩИЕ | СУММА(ВЫБОР | КОГДА ДокументЧекККМ.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийЧекККМ.Продажа) | ТОГДА 1 | ИНАЧЕ -1 | КОНЕЦ) > 0 |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ЗНАЧЕНИЕ(Документ.ЧекККМ.ПустаяСсылка) КАК Документ, | ТоварыБезКомплектов.Комплект КАК Комплект, | ТоварыБезКомплектов.Склад КАК Склад, | ТоварыБезКомплектов.ПодакцизныеТоварыДляКоммерческогоИспользования КАК ПодакцизныеТоварыДляКоммерческогоИспользования, | ТоварыБезКомплектов.Номенклатура КАК Номенклатура, | ТоварыБезКомплектов.Количество КАК Количество, | ТоварыБезКомплектов.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры, | ТоварыБезКомплектов.СерияНоменклатуры КАК СерияНоменклатуры, | ТоварыБезКомплектов.ЕдиницаИзмерения КАК ЕдиницаИзмерения, | ТоварыБезКомплектов.Коэффициент КАК Коэффициент, | ТоварыБезКомплектов.Цена КАК Цена, | ТоварыБезКомплектов.ПроцентСкидкиНаценки КАК ПроцентСкидкиНаценки, | ТоварыБезКомплектов.ПроцентАвтоматическихСкидок КАК ПроцентАвтоматическихСкидок, | ТоварыБезКомплектов.УсловиеАвтоматическойСкидки КАК УсловиеАвтоматическойСкидки, | ТоварыБезКомплектов.ЗначениеУсловияАвтоматическойСкидки КАК ЗначениеУсловияАвтоматическойСкидки, | ТоварыБезКомплектов.Сумма КАК Сумма, | ПУСТАЯТАБЛИЦА.( КАК КлючСтроки, КАК КлючСвязи, КАК Номенклатура, КАК ХарактеристикаНоменклатуры, КАК СерияНоменклатуры, КАК ЕдиницаИзмерения, КАК Количество, КАК Цена) КАК СоставНабора, | ПУСТАЯТАБЛИЦА.( КАК КлючСвязи, КАК СерийныйНомер) КАК СерийныеНомераСоставНабора, | 0 КАК КлючСтроки |ИЗ | (ВЫБРАТЬ | Док.Номенклатура.Комплект КАК Комплект, | Док.Ссылка.Склад КАК Склад, | Док.Ссылка.ПодакцизныеТоварыДляКоммерческогоИспользования КАК ПодакцизныеТоварыДляКоммерческогоИспользования, | Док.Номенклатура КАК Номенклатура, | СУММА(ВЫБОР | КОГДА Док.Ссылка.ВидОперации = &ВидОперацииПродажа | ТОГДА Док.Количество | ИНАЧЕ -Док.Количество | КОНЕЦ) КАК Количество, | Док.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры, | Док.СерияНоменклатуры КАК СерияНоменклатуры, | Док.ЕдиницаИзмерения КАК ЕдиницаИзмерения, | Док.Коэффициент КАК Коэффициент, | Док.Цена КАК Цена, | Док.ПроцентСкидкиНаценки КАК ПроцентСкидкиНаценки, | Док.ПроцентАвтоматическихСкидок КАК ПроцентАвтоматическихСкидок, | Док.УсловиеАвтоматическойСкидки КАК УсловиеАвтоматическойСкидки, | Док.ЗначениеУсловияАвтоматическойСкидки КАК ЗначениеУсловияАвтоматическойСкидки, | СУММА(ВЫБОР | КОГДА Док.Ссылка.ВидОперации = &ВидОперацииПродажа | ТОГДА Док.Сумма | ИНАЧЕ -Док.Сумма | КОНЕЦ) КАК Сумма | ИЗ | Документ.ЧекККМ.Товары КАК Док | ГДЕ | Док.Ссылка.Дата МЕЖДУ &НачДата И &КонДата | И Док.Ссылка.КассаККМ = &КассаККМ | И Док.Ссылка.Проведен | И НЕ Док.Номенклатура.Комплект | | СГРУППИРОВАТЬ ПО | Док.Ссылка.Склад, | Док.Ссылка.ПодакцизныеТоварыДляКоммерческогоИспользования, | Док.Номенклатура, | Док.ХарактеристикаНоменклатуры, | Док.СерияНоменклатуры, | Док.ЕдиницаИзмерения, | Док.Коэффициент, | Док.Цена, | Док.ПроцентСкидкиНаценки, | Док.ПроцентАвтоматическихСкидок, | Док.УсловиеАвтоматическойСкидки, | Док.ЗначениеУсловияАвтоматическойСкидки, | Док.Номенклатура.Комплект | | ИМЕЮЩИЕ | СУММА(ВЫБОР | КОГДА Док.Ссылка.ВидОперации = &ВидОперацииПродажа | ТОГДА Док.Количество | ИНАЧЕ -Док.Количество | КОНЕЦ) <> 0) КАК ТоварыБезКомплектов | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | Док.Ссылка, | Док.Номенклатура.Комплект, | Док.Ссылка.Склад, | Док.Ссылка.ПодакцизныеТоварыДляКоммерческогоИспользования, | Док.Номенклатура, | ВЫБОР | КОГДА Док.Ссылка.ВидОперации = &ВидОперацииПродажа | ТОГДА Док.Количество | ИНАЧЕ -Док.Количество | КОНЕЦ, | Док.ХарактеристикаНоменклатуры, | Док.СерияНоменклатуры, | Док.ЕдиницаИзмерения, | Док.Коэффициент, | Док.Цена, | Док.ПроцентСкидкиНаценки, | Док.ПроцентАвтоматическихСкидок, | Док.УсловиеАвтоматическойСкидки, | Док.ЗначениеУсловияАвтоматическойСкидки, | ВЫБОР | КОГДА Док.Ссылка.ВидОперации = &ВидОперацииПродажа | ТОГДА Док.Сумма | ИНАЧЕ -Док.Сумма | КОНЕЦ, | Док.Ссылка.СоставНабора.( | КлючСтроки, | КлючСвязи, | Номенклатура, | ХарактеристикаНоменклатуры, | СерияНоменклатуры, | ЕдиницаИзмерения, | Количество, | Цена | ), | Док.Ссылка.СерийныеНомераСоставНабора.( | КлючСвязи, | СерийныйНомер | ), | Док.КлючСтроки |ИЗ | Документ.ЧекККМ.Товары КАК Док |ГДЕ | Док.Ссылка.Дата МЕЖДУ &НачДата И &КонДата | И Док.Ссылка.КассаККМ = &КассаККМ | И Док.Ссылка.Проведен | И Док.Номенклатура.Комплект | |УПОРЯДОЧИТЬ ПО | Склад"; ЗапросПоОплате = Новый Запрос(" |ВЫБРАТЬ | Док.Ссылка.Склад КАК Склад, | Док.ВидОплаты.ТипОплаты КАК ТипОплаты, | Док.ВидОплаты.Ссылка КАК ВидОплаты, | СУММА(ВЫБОР КОГДА Док.Ссылка.ВидОперации = &ВидОперацииПродажа ТОГДА | Док.Сумма | ИНАЧЕ | -Док.Сумма | КОНЕЦ) КАК Сумма |ИЗ | Документ.ЧекККМ.Оплата КАК Док |ГДЕ | Док.Ссылка.Дата МЕЖДУ &НачДата И &КонДата | И Док.Ссылка.КассаККМ = &КассаККМ | И Док.Ссылка.Проведен | И Док.ВидОплаты.ТипОплаты <> &ТипОплатыНаличные |СГРУППИРОВАТЬ ПО | Док.Ссылка.Склад, | Док.Ссылка, | Док.НомерСтроки, | Док.ВидОплаты.ТипОплаты, | Док.ВидОплаты |"); //ИНК НАЧАЛО //СТАРЫЙ ТЕКСТ: //ЗапросПоОплате.УстановитьПараметр("НачДата" , НачалоДня(Дата)); //ЗапросПоОплате.УстановитьПараметр("КонДата" , КонецДня(Дата)); //НОВЫЙ ТЕКСТ: ЗапросПоОплате.УстановитьПараметр("НачДата" , НачалоДня(Дата) + (инк_ВремяНачала - '00010101000000')); ЗапросПоОплате.УстановитьПараметр("КонДата" , НачалоДня(Дата) + (инк_ВремяОкончания - '00010101000000')); //ИНК ОКОНЧАНИЕ ЗапросПоОплате.УстановитьПараметр("КассаККМ" , КассаККМ); ЗапросПоОплате.УстановитьПараметр("ВидОперацииПродажа", Перечисления.ВидыОперацийЧекККМ.Продажа); ЗапросПоОплате.УстановитьПараметр("ТипОплатыНаличные" , Перечисления.ТипыОплатЧекаККМ.Наличные); ЗапросПоДисконтнымКартам = Новый Запрос(" |ВЫБРАТЬ | Док.Склад КАК Склад, | Док.ДисконтнаяКарта КАК ДисконтнаяКарта, | Док.ВладелецДисконтнойКарты КАК ВладелецДисконтнойКарты, | СУММА(ВЫБОР КОГДА Док.ВидОперации = &ВидОперацииПродажа ТОГДА | Док.СуммаДокумента | ИНАЧЕ | -Док.СуммаДокумента | КОНЕЦ) КАК Сумма |ИЗ | Документ.ЧекККМ КАК Док |ГДЕ | Док.Дата МЕЖДУ &НачДата И &КонДата | И Док.КассаККМ = &КассаККМ | И Док.ДисконтнаяКарта <> &ПустаяДисконтнаяКарта | И Док.Проведен |СГРУППИРОВАТЬ ПО | Док.Склад, | Док.ДисконтнаяКарта, | Док.ВладелецДисконтнойКарты |ИМЕЮЩИЕ | СУММА(ВЫБОР КОГДА Док.ВидОперации = &ВидОперацииПродажа ТОГДА | Док.СуммаДокумента | ИНАЧЕ | -Док.СуммаДокумента | КОНЕЦ) <> 0 |"); //это я сделал для проверки ЗапросНаВид = новый Запрос(); ЗапросНаВид.Текст = "Выбрать |Док.ВидОплаты.Ссылка КАК Вид |ИЗ Документ.ЧекККМ.Оплата КАК Док"; //это я сделал для проверки //ИНК НАЧАЛО //СТАРЫЙ ТЕКСТ: //ЗапросПоДисконтнымКартам.УстановитьПараметр("НачДата" , НачалоДня(Дата)); //ЗапросПоДисконтнымКартам.УстановитьПараметр("КонДата" , КонецДня(Дата)); //НОВЫЙ ТЕКСТ: ЗапросПоДисконтнымКартам.УстановитьПараметр("НачДата", НачалоДня(Дата) + (инк_ВремяНачала - '00010101000000')); ЗапросПоДисконтнымКартам.УстановитьПараметр("КонДата", НачалоДня(Дата) + (инк_ВремяОкончания - '00010101000000')); //ИНК ОКОНЧАНИЕ ЗапросПоДисконтнымКартам.УстановитьПараметр("КассаККМ" , КассаККМ); ЗапросПоДисконтнымКартам.УстановитьПараметр("ПустаяДисконтнаяКарта", Справочники.ИнформационныеКарты.ПустаяСсылка()); ЗапросПоДисконтнымКартам.УстановитьПараметр("ВидОперацииПродажа" , Перечисления.ВидыОперацийЧекККМ.Продажа); ЗапросПоДисконтнымКартам.УстановитьПараметр("ТипОплатыНаличные" , Перечисления.ТипыОплатЧекаККМ.Наличные); ОтменитьТранзакцию = Ложь; НачатьТранзакцию(); РезультатЗапросаПоЧекам = ЗапросПоЧекам.Выполнить(); РезультатыЗапросов = Запрос.ВыполнитьПакет(); РезультатЗапроса = РезультатыЗапросов[1]; //РезультатыЗапросов массив из двух элементов //РезультатЗапроса[0] - все серийные номера на номенклатуру //РезультатЗапроса[1] - Основной запрос РезультатЗапросаПоОплате = ЗапросПоОплате.Выполнить(); ТаблицаПоДисконтнымКартам = ЗапросПоДисконтнымКартам.Выполнить().Выгрузить(); ТаблицаПоДисконтнымКартам.Индексы.Добавить("Склад"); ТаблицаСерийныеНомераНоменклатуры = РезультатыЗапросов[0].Выгрузить(); ТаблицаОплатПлатежныеКарты = ОбщегоНазначения.ОтобратьСтрокиПоКритериям(РезультатЗапросаПоОплате, Новый Структура("ТипОплаты", Перечисления.ТипыОплатЧекаККМ.ПлатежнаяКарта)).Выгрузить(); ТаблицаОплатПлатежныеКарты.Индексы.Добавить("Склад"); ТаблицаОплатБанковскиеКредиты = ОбщегоНазначения.ОтобратьСтрокиПоКритериям(РезультатЗапросаПоОплате, Новый Структура("ТипОплаты", Перечисления.ТипыОплатЧекаККМ.БанковскийКредит)).Выгрузить(); ТаблицаОплатБанковскиеКредиты.Индексы.Добавить("Склад"); ТаблицаСерийныеНомераКомплект = Неопределено; // Таблица в которую будут выгружены серийные номера на комплектующие набора-комплекта СтруктураПоискаСерийногоНомера = Новый Структура();// Набор полей для поиска серийного номера на комплектующее набора-комплекта СтруктураПоискаСерийногоНомераНоменклатура = Новый Структура();// Набор полей для поиска серийного номера на номенклатуру СтруктураПоляЗаполнения = Новый Структура();// Содержит поля которые нужно обновить в документе "Отчет о розничных продажах" //СтруктураПоляЗаполнения содержит поля которые нужно обновить. //Ключ структуры содержит имя поля //Значение структуры = "Истина" поле участвует в отборе по таблице с серийными номерами // = "Ложь" поле не участвует в отборе по таблице с серийными номерами СтруктураПоляЗаполнения.Вставить("Склад" , Истина); СтруктураПоляЗаполнения.Вставить("Номенклатура" , Истина); СтруктураПоляЗаполнения.Вставить("ЕдиницаИзмерения" , Истина); СтруктураПоляЗаполнения.Вставить("Коэффициент" , Истина); СтруктураПоляЗаполнения.Вставить("ХарактеристикаНоменклатуры" , Истина); СтруктураПоляЗаполнения.Вставить("СерияНоменклатуры" , Истина); СтруктураПоляЗаполнения.Вставить("Количество" , Ложь); СтруктураПоляЗаполнения.Вставить("Цена" , Истина); СтруктураПоляЗаполнения.Вставить("ПроцентСкидкиНаценки" , Истина); СтруктураПоляЗаполнения.Вставить("ПроцентАвтоматическихСкидок" , Истина); СтруктураПоляЗаполнения.Вставить("УсловиеАвтоматическойСкидки" , Истина); СтруктураПоляЗаполнения.Вставить("ЗначениеУсловияАвтоматическойСкидки", Истина); СтруктураПоляЗаполнения.Вставить("Сумма" , Ложь); СтруктураПоляЗаполнения.Вставить("ПодакцизныеТоварыДляКоммерческогоИспользования", Ложь); СтруктураПоляЗаполнения.Вставить("Вид", Истина); СтрокаПолейИндекса = ""; Для Каждого ИмяПоля Из СтруктураПоляЗаполнения Цикл Если ИмяПоля.Значение Тогда СтрокаПолейИндекса = СтрокаПолейИндекса + ИмяПоля.Ключ + ","; КонецЕсли; КонецЦикла; ТаблицаСерийныеНомераНоменклатуры.Индексы.Добавить(Сред(СтрокаПолейИндекса, 0,СтрДлина(СтрокаПолейИндекса) - 1)); ПараметрыСвязиСтрокТЧ = Новый Соответствие; ПараметрыСвязиСтрокТЧ.Вставить("Товары", Новый Структура("СвободныйКлюч, ФлагМодификации", Неопределено, Ложь)); ПараметрыСвязиСтрокТЧ.Вставить("СоставНабора", Новый Структура("СвободныйКлюч, ФлагМодификации", Неопределено, Ложь)); ДокументЧекККМ = Неопределено; Если РезультатЗапроса.Пустой() Тогда ТекстСообщения = "За кассовую смену не продано ни одного товара по выбранной кассе ККМ."; ОбщегоНазначения.СообщитьОбОшибке(ТекстСообщения); ОтменитьТранзакцию = Истина; Иначе Выборка = РезультатЗапроса.Выбрать(); //это я сделал для проверки проверка = ЗапросНаВид.Выполнить().Выбрать(); Пока проверка.Следующий() Цикл Сообщить("та самая - " + проверка.Вид); КонецЦикла; //это я сделал для проверки Пока Выборка.Следующий() Цикл //это я сделал для проверки Сообщить("другая - " + Выборка.Вид); //это я сделал для проверки Если Выборка.Комплект И НЕ Выборка.Документ = ДокументЧекККМ Тогда ДокументЧекККМ = Выборка.Документ; ТаблицаСерийныеНомераКомплект = Выборка.СерийныеНомераСоставНабора.Выгрузить(); ТаблицаСерийныеНомераКомплект.Индексы.Добавить("КлючСвязи"); КонецЕсли; Если Не мСкладыВТабличнойЧасти Тогда Если НЕ ЗначениеЗаполнено(ОтчетОРозничныхПродажах.Склад) Тогда ОтчетОРозничныхПродажах.Склад = Выборка.Склад; Иначе Если ОтчетОРозничныхПродажах.Склад <> Выборка.Склад Тогда // надо создавать новый документ Если Не ОтменитьТранзакцию Тогда СтруктураПоиска = Новый Структура; СтруктураПоиска.Вставить("Склад", ОтчетОРозничныхПродажах.Склад); МассивОплат = ТаблицаОплатПлатежныеКарты.НайтиСтроки(СтруктураПоиска); Для Каждого Оплата Из МассивОплат Цикл НоваяСтрока = ОтчетОРозничныхПродажах.ОплатаПлатежнымиКартами.Добавить(); НоваяСтрока.ВидОплаты = Оплата.ВидОплаты; НоваяСтрока.Сумма = Оплата.Сумма; НоваяСтрока.ПроцентТорговойУступки = СоответствиеТарифов[НоваяСтрока.ВидОплаты]; ОтчетОРозничныхПродажах.ПересчитатьТорговуюУступку(НоваяСтрока); ТаблицаОплатПлатежныеКарты.Удалить(Оплата); КонецЦикла; МассивОплат = ТаблицаОплатБанковскиеКредиты.НайтиСтроки(СтруктураПоиска); Для Каждого Оплата Из МассивОплат Цикл НоваяСтрока = ОтчетОРозничныхПродажах.ОплатаБанковскимиКредитами.Добавить(); НоваяСтрока.ВидОплаты = Оплата.ВидОплаты; НоваяСтрока.Сумма = Оплата.Сумма; ОтчетОРозничныхПродажах.ПриИзмененииВидаОплатыБанковскимКредитом(НоваяСтрока); ТаблицаОплатБанковскиеКредиты.Удалить(Оплата); КонецЦикла; МассивДисконтныхКарт = ТаблицаПоДисконтнымКартам.НайтиСтроки(СтруктураПоиска); Для Каждого ПродажаПоДисконтнойКарте Из МассивДисконтныхКарт Цикл НоваяСтрока = ОтчетОРозничныхПродажах.ПродажиПоДисконтнымКартам.Добавить(); НоваяСтрока.ДисконтнаяКарта = ПродажаПоДисконтнойКарте.ДисконтнаяКарта; НоваяСтрока.ВладелецДисконтнойКарты = ПродажаПоДисконтнойКарте.ВладелецДисконтнойКарты; НоваяСтрока.Сумма = ПродажаПоДисконтнойКарте.Сумма; ТаблицаПоДисконтнымКартам.Удалить(ПродажаПоДисконтнойКарте); КонецЦикла; Если ЗаписатьОтчетОРозничныхПродажах(ОтчетОРозничныхПродажах) Тогда МассивДокументовКПроведению.Добавить(ОтчетОРозничныхПродажах); Иначе ОтменитьТранзакцию = Истина; Прервать; КонецЕсли; КонецЕсли; ОтчетОРозничныхПродажах = СоздатьОтчетОРозничныхПродажах(); СоответствиеТарифов = УправлениеРозничнойТорговлей.СформироватьСоответствиеТарифовЭквайринг(ОтчетОРозничныхПродажах.ДоговорЭквайринга); ОтчетОРозничныхПродажах.Склад = Выборка.Склад; КонецЕсли; КонецЕсли; КонецЕсли; СтрокаТабличнойЧасти = ОтчетОРозничныхПродажах.Товары.Добавить(); Если Выборка.Комплект Тогда СтрокаТабличнойЧасти.КлючСтроки = УправлениеЗапасами.ПолучитьНовыйКлючСтроки(ОтчетОРозничныхПродажах); ЗаполнитьЗначенияСвойств(СтрокаТабличнойЧасти, Выборка, "Номенклатура, ЕдиницаИзмерения, Коэффициент, ХарактеристикаНоменклатуры, СерияНоменклатуры, Количество, Цена, ПроцентСкидкиНаценки, ПроцентАвтоматическихСкидок, УсловиеАвтоматическойСкидки, ЗначениеУсловияАвтоматическойСкидки, Сумма, ПодакцизныеТоварыДляКоммерческогоИспользования, допПродавец"); ВыборкаКомплектующих = Выборка.СоставНабора.Выбрать(); Пока ВыборкаКомплектующих.Следующий() Цикл Если ВыборкаКомплектующих.КлючСтроки = Выборка.КлючСтроки Тогда СтрокаСоставаНабора = ОтчетОРозничныхПродажах.СоставНабора.Добавить(); ЗаполнитьЗначенияСвойств(СтрокаСоставаНабора, ВыборкаКомплектующих, "Номенклатура, ЕдиницаИзмерения, ХарактеристикаНоменклатуры, СерияНоменклатуры, Количество, Цена"); СтрокаСоставаНабора.КлючСтроки = СтрокаТабличнойЧасти.КлючСтроки; Если НЕ ВыборкаКомплектующих.КлючСвязи = 0 Тогда СтруктураПоискаСерийногоНомера.Вставить("КлючСвязи", ВыборкаКомплектующих.КлючСвязи); массивСтрок = ТаблицаСерийныеНомераКомплект.НайтиСтроки(СтруктураПоискаСерийногоНомера); КлючСвязи = УчетСерийныхНомеров.ПолучитьНовыйКлючСвязи(ПараметрыСвязиСтрокТЧ, ОтчетОРозничныхПродажах, "СоставНабора", Истина); СтрокаСоставаНабора.КлючСвязи = КлючСвязи; Для Каждого СтрокаСерийногоНомераЧекККМ Из массивСтрок Цикл СтрокаСерийногоНомера = ОтчетОРозничныхПродажах.СерийныеНомераСоставНабора.Добавить(); СтрокаСерийногоНомера.СерийныйНомер = СтрокаСерийногоНомераЧекККМ.СерийныйНомер; СтрокаСерийногоНомера.КлючСвязи = КлючСвязи; КонецЦикла; КонецЕсли; КонецЕсли; КонецЦикла; Иначе Для Каждого ПолеЗаполнения Из СтруктураПоляЗаполнения Цикл СтрокаТабличнойЧасти[ПолеЗаполнения.Ключ] = Выборка[ПолеЗаполнения.Ключ]; Если ПолеЗаполнения.Значение Тогда СтруктураПоискаСерийногоНомераНоменклатура.Вставить(ПолеЗаполнения.Ключ, Выборка[ПолеЗаполнения.Ключ]); КонецЕсли; КонецЦикла; массивСтрок = ТаблицаСерийныеНомераНоменклатуры.НайтиСтроки(СтруктураПоискаСерийногоНомераНоменклатура); Если массивСтрок.Количество() > 0 Тогда КлючСвязи = УчетСерийныхНомеров.ПолучитьНовыйКлючСвязи(ПараметрыСвязиСтрокТЧ, ОтчетОРозничныхПродажах, "Товары", Истина); СтрокаТабличнойЧасти.КлючСвязи = КлючСвязи; Для Каждого СтрокаСерийногоНомераЧекККМ Из массивСтрок Цикл Для х = 1 По СтрокаСерийногоНомераЧекККМ.КоличествоСерийныхНоменров Цикл СтрокаСерийногоНомера = ОтчетОРозничныхПродажах.СерийныеНомера.Добавить(); СтрокаСерийногоНомера.СерийныйНомер = СтрокаСерийногоНомераЧекККМ.СерийныйНомер; СтрокаСерийногоНомера.КлючСвязи = КлючСвязи; КонецЦикла; КонецЦикла; КонецЕсли; КонецЕсли; Сообщить("ыы" + СтрокаТабличнойЧасти.Номенклатура); Если мСкладыВТабличнойЧасти Тогда СтрокаТабличнойЧасти.Склад = Выборка.Склад; КонецЕсли; // + Юра ОтчетОРозничныхПродажах.ЗаполнитьСчетаУчетаВСтрокеТабЧасти(СтрокаТабличнойЧасти, "Товары", Истина, Истина); // КонецЦикла; //ИНК НАЧАЛО //БЛОКИРУЕМ УДАЛЕНИЕ ЧЕКОВ// Удаляем чеки. //Если Не ОтменитьТранзакцию Тогда // Попытка // ТЗ_Чек=РезультатЗапросаПоЧекам.Выгрузить(); // Для Каждого СтрТЗ Из ТЗ_Чек Цикл // Об=СтрТЗ.Ссылка.ПолучитьОбъект(); // Об.Записать(РежимЗаписиДокумента.ОтменаПроведения); // КонецЦикла; // //УдалитьОбъекты(РезультатЗапросаПоЧекам.Выгрузить().ВыгрузитьКолонку("Ссылка"), Ложь); // Исключение // ОтменитьТранзакцию = Истина; // Предупреждение("Не удалось удалить чеки ККМ!"); // КонецПопытки; //КонецЕсли; //ИНК ОКОНЧАНИЕ // Записываем ОтчетОРозничныхПродажах. Если Не ОтменитьТранзакцию И ОтчетОРозничныхПродажах.Товары.Количество() > 0 Тогда Для Каждого Оплата Из ТаблицаОплатПлатежныеКарты Цикл НоваяСтрока = ОтчетОРозничныхПродажах.ОплатаПлатежнымиКартами.Добавить(); НоваяСтрока.ВидОплаты = Оплата.ВидОплаты; НоваяСтрока.Сумма = Оплата.Сумма; НоваяСтрока.ПроцентТорговойУступки = СоответствиеТарифов[НоваяСтрока.ВидОплаты]; ОтчетОРозничныхПродажах.ПересчитатьТорговуюУступку(НоваяСтрока); КонецЦикла; Для Каждого Оплата Из ТаблицаОплатБанковскиеКредиты Цикл НоваяСтрока = ОтчетОРозничныхПродажах.ОплатаБанковскимиКредитами.Добавить(); НоваяСтрока.ВидОплаты = Оплата.ВидОплаты; НоваяСтрока.Сумма = Оплата.Сумма; ОтчетОРозничныхПродажах.ПриИзмененииВидаОплатыБанковскимКредитом(НоваяСтрока); КонецЦикла; Для Каждого ПродажаПоДисконтнойКарте Из ТаблицаПоДисконтнымКартам Цикл НоваяСтрока = ОтчетОРозничныхПродажах.ПродажиПоДисконтнымКартам.Добавить(); НоваяСтрока.ДисконтнаяКарта = ПродажаПоДисконтнойКарте.ДисконтнаяКарта; НоваяСтрока.ВладелецДисконтнойКарты = ПродажаПоДисконтнойКарте.ВладелецДисконтнойКарты; НоваяСтрока.Сумма = ПродажаПоДисконтнойКарте.Сумма; КонецЦикла; Если ЗаписатьОтчетОРозничныхПродажах(ОтчетОРозничныхПродажах) Тогда МассивДокументовКПроведению.Добавить(ОтчетОРозничныхПродажах); Иначе ОтменитьТранзакцию = Истина; КонецЕсли; КонецЕсли; Если ОтменитьТранзакцию Тогда ОтменитьТранзакцию(); Иначе ЗафиксироватьТранзакцию(); Для Каждого ДокументКПроведению Из МассивДокументовКПроведению Цикл //ИНК НАЧАЛО ДатаПоследнегоЧека = Дата; МассивЧековККМ = РезультатЗапросаПоЧекам.Выгрузить().ВыгрузитьКолонку("Ссылка"); Для каждого СтрокаМассива Из МассивЧековККМ Цикл Попытка ДокументОбъект = СтрокаМассива.Ссылка.ПолучитьОбъект(); ДокументОбъект.инк_ОтчетОРозничныхПродажах = ОтчетОРозничныхПродажах.Ссылка; Если СтрокаМассива.Ссылка.инк_СтатусЧекаККМ = Перечисления.инк_СтатусыЧековККМ.Пробитый Тогда ДокументОбъект.инк_СтатусЧекаККМ = Перечисления.инк_СтатусыЧековККМ.Архивный; КонецЕсли; ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение); Исключение ОтменитьТранзакцию = Истина; ОбщегоНазначения.СообщитьОбОшибке("Не удалось перезаписать """ + СтрокаМассива.Ссылка + """!"); КонецПопытки; ДатаПоследнегоЧека = ДокументОбъект.Ссылка.Дата; КонецЦикла; ОтчетОРозничныхПродажах.Дата = ДатаПоследнегоЧека; //ИНК ОКОНЧАНИЕ Попытка ДокументКПроведению.Записать(РежимЗаписиДокумента.Проведение, РежимПроведения); Исключение ОбщегоНазначения.СообщитьОбОшибке("Не удалось провести документ """ + ДокументКПроведению + """."); КонецПопытки; ДокументКПроведению.ПолучитьФорму().Открыть(); КонецЦикла; КонецЕсли; КонецЕсли; </spoiler> |
|||
1
The_ka6a4ok
20.10.20
✎
17:22
|
мда уж, скинул так скинул
|
|||
2
Йохохо
20.10.20
✎
17:41
|
никак нельзя связать товары и вид оплаты, только сумму по чеку с суммой оплат
|
|||
3
The_ka6a4ok
20.10.20
✎
17:45
|
(2) как же это, в таком случае, провернуть?
|
|||
4
Йохохо
20.10.20
✎
17:46
|
(3) пихать то что нужно куда нужно и не хотеть ненужного
|
|||
5
Йохохо
20.10.20
✎
17:47
|
частичную оплату как раз придумали для решения парадокса про 3.5 дровосека
|
|||
6
GANR
20.10.20
✎
17:51
|
(1) А чего это ты модуль обработки правил конвертации не скинул сюда!? 10 минут сохраняется (!) на диск.
|
|||
7
The_ka6a4ok
20.10.20
✎
17:54
|
(4) если бы была какая-нибудь инициализация, я имею ввиду, как мне проверять, что данная покупка совершенна была именно этим способом оплаты? по дате - не вариант, она не записывается в элементы отчета, то есть, туда попадают все чекиККМ, сделанные за условный день - это будет один отчет, в котором множество покупок и будет, думаю, невозможным каждому прописать верный вид оплаты
|
|||
8
The_ka6a4ok
20.10.20
✎
17:54
|
(6) я ничего не конвертирую, это встроенная обработка в бд
|
|||
9
Йохохо
20.10.20
✎
17:59
|
(7) "будет, думаю, невозможным каждому прописать верный вид оплаты" я ж об том же, только суммы
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |