Ответ в теме: Какие ошибки в запросе 1С могут вызывать неправильные остатки товаров?

База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Какие ошибки в запросе 1С могут вызывать неправильные остатки товаров? › Ответ в теме: Какие ошибки в запросе 1С могут вызывать неправильные остатки товаров?

#38479
bot_avaOdin — Одинэсник
Участник

    В вашем запросе есть несколько ошибок синтаксиса и логики, которые мешают корректному выполнению:

    1. Дублирование соединений (ПО) подряд
    В блоке с соединениями:

    |ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Остатки КАК ВТ_Остатки
    |ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Обороты(…) КАК ТоварыНаСкладахОбороты
    |ПО ВТ_Остатки.Период = НАЧАЛОПЕРИОДА(ТоварыНаСкладахОбороты.Период, ДЕНЬ)
    |ПО ВТ_БлижайшиеДатыОстатков.ПериодРО = ВТ_Остатки.Период
    |И ВТ_БлижайшиеДатыОстатков.Номенклатура = ВТ_Остатки.Номенклатура

    Здесь два оператора ПО подряд — это ошибка. В 1С запросах после каждого соединения должен быть только один оператор ПО.

    Правильно:

    |ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Остатки КАК ВТ_Остатки
    |ПО ВТ_БлижайшиеДатыОстатков.ПериодРО = ВТ_Остатки.Период
    |И ВТ_БлижайшиеДатыОстатков.Номенклатура = ВТ_Остатки.Номенклатура
    |ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Обороты(&ДатаНачала, &ДатаОкончания, Регистратор, Номенклатура = &Номенклатура) КАК ТоварыНаСкладахОбороты
    |ПО ВТ_Остатки.Период = НАЧАЛОПЕРИОДА(ТоварыНаСкладахОбороты.Период, ДЕНЬ)

    2. Отсутствие запятых между полями в выборке
    В блоке выбора полей:

    |ВЫБОР … КОНЕЦ КАК КоличествоРасход,
    |ВТ_Остатки.КоличествоКонечныйОстаток
    |ТоварыНаСкладахОбороты.Регистратор

    Между КоличествоКонечныйОстаток и ТоварыНаСкладахОбороты.Регистратор отсутствует запятая.

    Добавьте запятую:

    |ВЫБОР … КОНЕЦ КАК КоличествоРасход,
    |ВТ_Остатки.КоличествоКонечныйОстаток,
    |ТоварыНаСкладахОбороты.Регистратор

    3. Дублирование соединений с ВТ_Остатки и ТоварыНаСкладахОбороты
    В запросе дважды повторяются соединения с ВТ_Остатки и ТоварыНаСкладахОбороты, что избыточно и вызовет ошибку.

    Удалите повторяющиеся соединения, оставьте по одному соединению каждого.

    4. Рекомендация по построению таблицы дат
    Ваш способ построения таблицы дат через разряды — классический и рабочий. Убедитесь, что параметры &ДатаНачала и &ДатаОкончания корректны.

    —

    ### Итог: исправленный фрагмент с соединениями и выборкой

    |ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Остатки КАК ВТ_Остатки
    |ПО ВТ_БлижайшиеДатыОстатков.ПериодРО = ВТ_Остатки.Период
    |И ВТ_БлижайшиеДатыОстатков.Номенклатура = ВТ_Остатки.Номенклатура
    |ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Обороты(&ДатаНачала, &ДатаОкончания, Регистратор, Номенклатура = &Номенклатура) КАК ТоварыНаСкладахОбороты
    |ПО ВТ_Остатки.Период = НАЧАЛОПЕРИОДА(ТоварыНаСкладахОбороты.Период, ДЕНЬ)

    —

    |ВЫБРАТЬ
    | ВТ_БлижайшиеДатыОстатков.ТДПериод КАК ТДПериод,
    | ВТ_Остатки.Номенклатура,
    | ВЫБОР
    | КОГДА ТДПериод = ВТ_Остатки.Период
    | ТОГДА ВТ_Остатки.КоличествоНачальныйОстаток
    | ИНАЧЕ ВТ_Остатки.КоличествоКонечныйОстаток
    | КОНЕЦ КАК КоличествоНачальныйОстаток,
    | ВЫБОР
    | КОГДА ТДПериод = ВТ_Остатки.Период
    | ТОГДА ВТ_Остатки.КоличествоПриход
    | ИНАЧЕ 0
    | КОНЕЦ КАК КоличествоПриход,
    | ВЫБОР
    | КОГДА ТДПериод = ВТ_Остатки.Период
    | ТОГДА ВТ_Остатки.КоличествоРасход
    | ИНАЧЕ 0
    | КОНЕЦ КАК КоличествоРасход,
    | ВТ_Остатки.КоличествоКонечныйОстаток,
    | ТоварыНаСкладахОбороты.Регистратор
    |ИЗ
    | ВТ_БлижайшиеДатыОстатков КАК ВТ_БлижайшиеДатыОстатков
    | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Остатки КАК ВТ_Остатки
    | ПО ВТ_БлижайшиеДатыОстатков.ПериодРО = ВТ_Остатки.Период
    | И ВТ_БлижайшиеДатыОстатков.Номенклатура = ВТ_Остатки.Номенклатура
    | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Обороты(&ДатаНачала, &ДатаОкончания, Регистратор, Номенклатура = &Номенклатура) КАК ТоварыНаСкладахОбороты
    | ПО ВТ_Остатки.Период = НАЧАЛОПЕРИОДА(ТоварыНаСкладахОбороты.Период, ДЕНЬ)
    |УПОРЯДОЧИТЬ ПО
    | ТДПериод

    —

    Если нужно, могу помочь с полным исправленным текстом запроса.

    База знаний 1С