Имя: Пароль:
1C
1С v8
Не проводится отчет комитенту по продажам. Типовой запрос возвращает нулевые остатки
,
0 Niang
 
19.07.19
12:19
УТ 10.3 последний релиз. Не проводится документ, выводит ошибку: Остатка товара полученного по договору недостаточно. Остатки товара есть, проверено по всем параметрам (склад, характеристика, серия, договор и т.д.). Ннулевые остатки по всем товарам возвращает текущий типовой запрос:  

Запрос = Новый Запрос;

    // Установим параметры запроса
    Запрос.УстановитьПараметр("ДокументСсылка",     СтруктураШапкиДокумента.Ссылка);
    Запрос.УстановитьПараметр("ДоговорКонтрагента", СтруктураШапкиДокумента.ДоговорКонтрагента);
    Если ЗначениеЗаполнено(СтруктураШапкиДокумента.Сделка) Тогда
        Запрос.УстановитьПараметр("Сделка", СтруктураШапкиДокумента.Сделка);
    Иначе
        Запрос.УстановитьПараметр("Сделка", Неопределено);
    КонецЕсли;
    Запрос.УстановитьПараметр("СтатусПолучения",    СтатусПолучения);

    ТекстЗапроса = "
    |ВЫБРАТЬ // Запрос, контролирующий остатки на складах
    |    Док.Номенклатура.Представление                         КАК НоменклатураПредставление,
    |    Док.Номенклатура.ЕдиницаХраненияОстатков.Представление КАК ЕдиницаХраненияОстатковПредставление,
    |   %ПОЛЕ_Док_Характеристика%                              КАК ХарактеристикаНоменклатуры,
    |    ПРЕДСТАВЛЕНИЕ(%ПОЛЕ_Док_Характеристика%)               КАК ХарактеристикаНоменклатурыПредставление,
    |   %ПОЛЕ_Док_Серия%                                       КАК СерияНоменклатуры,
    |    ПРЕДСТАВЛЕНИЕ(%ПОЛЕ_Док_Серия%)                        КАК СерияНоменклатурыПредставление,
    |    %ПОЛЕ_Док_Количество%                                  КАК ДокументКоличество,
    |    ЕСТЬNULL(МАКСИМУМ(Остатки.КоличествоОстаток), 0)       КАК ОстатокКоличество
    |ИЗ
    |    Документ." + ИмяТаблицы + " КАК Док
    |
    |ЛЕВОЕ СОЕДИНЕНИЕ
    |    РегистрНакопления.ТоварыПолученные.Остатки(,
    |        Номенклатура В (%ВыборкаПоНоменклатуре%)
    |        И ДоговорКонтрагента = &ДоговорКонтрагента
    |        И Сделка             = &Сделка
    |        И СтатусПолучения    = &СтатусПолучения
    |    ) КАК Остатки
    |ПО
    |    Док.Номенклатура                = Остатки.Номенклатура
    |   // СОЕДИНЕНИЕ_Характеристика_Остатки
    |   // СОЕДИНЕНИЕ_Серия_Остатки
    |
    |ГДЕ
    |    Док.Ссылка  =  &ДокументСсылка
    |
    |СГРУППИРОВАТЬ ПО
    |    Док.Номенклатура,
    |   %ПОЛЕ_Док_Характеристика%,
    |   %ПОЛЕ_Док_Серия%
    |
    |ИМЕЮЩИЕ
    |    ЕСТЬNULL(МАКСИМУМ(Остатки.КоличествоОстаток), 0) < %ПОЛЕ_Док_Количество%
    |
    |ДЛЯ ИЗМЕНЕНИЯ
    |    РегистрНакопления.ТоварыПолученные.Остатки // Блокирующие чтение таблицы остатков регистра для разрешения коллизий многопользовательской работы
    |";

    Если ЕстьХарактеристика Тогда
        ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%ПОЛЕ_Док_Характеристика%",            "Док.ХарактеристикаНоменклатуры");
        ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "// СОЕДИНЕНИЕ_Характеристика_Остатки", " И Док.ХарактеристикаНоменклатуры = Остатки.ХарактеристикаНоменклатуры");
    Иначе
        ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%ПОЛЕ_Док_Характеристика%",            "Неопределено");
        ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "// СОЕДИНЕНИЕ_Характеристика_Остатки", "");
    КонецЕсли;
    Если ЕстьСерия Тогда
        ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%ПОЛЕ_Док_Серия%",            "Док.СерияНоменклатуры");
        ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "// СОЕДИНЕНИЕ_Серия_Остатки", " И Док.СерияНоменклатуры = Остатки.СерияНоменклатуры");
    Иначе
        ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%ПОЛЕ_Док_Серия%",            "Неопределено");
        ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "// СОЕДИНЕНИЕ_Серия_Остатки", "");
    КонецЕсли;
    
    ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%ПОЛЕ_Док_Количество%", ?(ЕстьКоэффициент,
        "СУММА(Док.Количество * Док.Коэффициент / Док.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент)",
        "СУММА(Док.Количество)"));
    ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%ВыборкаПоНоменклатуре%", ТекстЗапросаСписокНоменклатуры);
    
    Запрос.Текст = ТекстЗапроса;
    Выборка = Запрос.Выполнить().Выбрать();



в консоли запросов мой запрос возвращает правильные остатки:

ВЫБРАТЬ
    ОтчетКомитентуОПродажахТовары.Номенклатура,
    ОтчетКомитентуОПродажахТовары.Количество,
    ТоварыПолученныеОстатки.КоличествоОстаток
ИЗ
    Документ.ОтчетКомитентуОПродажах.Товары КАК ОтчетКомитентуОПродажахТовары
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыПолученные.Остатки КАК ТоварыПолученныеОстатки
        ПО ОтчетКомитентуОПродажахТовары.Номенклатура = ТоварыПолученныеОстатки.Номенклатура
            И ОтчетКомитентуОПродажахТовары.ХарактеристикаНоменклатуры = ТоварыПолученныеОстатки.ХарактеристикаНоменклатуры
            И ОтчетКомитентуОПродажахТовары.СерияНоменклатуры = ТоварыПолученныеОстатки.СерияНоменклатуры
ГДЕ
    ОтчетКомитентуОПродажахТовары.Ссылка = &Ссылка

Почему типовой запрос возвращает нулевые остатки?
1 Случайный прохожий
 
19.07.19
12:26
Точку останова поставь на строку "Запрос.Текст = ТекстЗапроса;", погляди значение переменной "ТекстЗапроса". Его в консольку и суй
2 catena
 
19.07.19
12:29
И какие значения в твоем запросе у ДоговорКонтрагента, Сделка, СтатусПолучения?
3 torgm
 
19.07.19
12:30
(0)  какой склад ты собираешься проверять у комитента в отчете комитента?
4 Niang
 
19.07.19
12:36
(1) Так и сделал, типовой запрос возвращает нулевые остатки. Мой запрос (написан в конце 1 сообщения) возвращает нормальные остатки
5 Niang
 
19.07.19
12:37
(2) такие же как в проводимом документе
6 Niang
 
19.07.19
13:08
(3) никакой. Просто на всякий случай проверил остатки в регистре Товары на складах, ибо где еще искать концы варианты закончились...
7 catena
 
19.07.19
13:10
(4)Не верю.
8 catena
 
19.07.19
13:10
Вернее: (5) не верю
9 Niang
 
19.07.19
13:21
(8) ДоговорКонтрагента проставлен правильно, Сделка непоределено, т.к. в документе так же не заполнена, СтатусПолучения = на комиссию. С параметрами все нормально.
10 hhhh
 
19.07.19
15:30
(9) в обработке проведения должен быть совершенно другой результат. Это нормально.