Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Запросы в 1С

Запросы в 1С
Я
   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>
   The_ka6a4ok
 
1 - 20.10.20 - 17:22
мда уж, скинул так скинул
   Йохохо
 
2 - 20.10.20 - 17:41
никак нельзя связать товары и вид оплаты, только сумму по чеку с суммой оплат
   The_ka6a4ok
 
3 - 20.10.20 - 17:45
(2) как же это, в таком случае, провернуть?
   Йохохо
 
4 - 20.10.20 - 17:46
(3) пихать то что нужно куда нужно и не хотеть ненужного
   Йохохо
 
5 - 20.10.20 - 17:47
частичную оплату как раз придумали для решения парадокса про 3.5 дровосека
   GANR
 
6 - 20.10.20 - 17:51
(1) А чего это ты модуль обработки правил конвертации не скинул сюда!? 10 минут сохраняется (!) на диск.
   The_ka6a4ok
 
7 - 20.10.20 - 17:54
(4) если бы была какая-нибудь инициализация, я имею ввиду, как мне проверять, что данная покупка совершенна была именно этим способом оплаты? по дате - не вариант, она не записывается в элементы отчета, то есть, туда попадают все чекиККМ, сделанные за условный день - это будет один отчет, в котором множество покупок и будет, думаю, невозможным каждому прописать верный вид оплаты
   The_ka6a4ok
 
8 - 20.10.20 - 17:54
(6) я ничего не конвертирую, это встроенная обработка в бд
   Йохохо
 
9 - 20.10.20 - 17:59
(7) "будет, думаю, невозможным каждому прописать верный вид оплаты" я ж об том же, только суммы

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.