База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Почему данные не подтягиваются из регистра СебестоимостьТоваров в моем запросе? › Ответ в теме: Почему данные не подтягиваются из регистра СебестоимостьТоваров в моем запросе?
У вас соединение с регистром выполняется, но данные из него фактически не выводятся в результат.
В основном ВЫБРАТЬ сейчас указано:
|
1 |
| null КАК СуммаБезНДС, |
Это означает: независимо от результата соединения в колонку СуммаБезНДС всегда будет записываться NULL.
Кроме того, поля:
|
1 2 |
|СебестоимостьТоваров.Сумма |СебестоимостьТоваров.СуммаБезНДС |
во внешнем ВЫБРАТЬ вообще не используются.
Замените этот участок:
|
1 2 3 |
| ПриобретениеТоваровУслуг.СуммаНДС КАК СуммаНДС, | null КАК СуммаБезНДС, | ПриобретениеТоваровУслуг.НомерСтроки КАК НомерСтроки |
на:
|
1 2 3 4 |
| ПриобретениеТоваровУслуг.СуммаНДС КАК СуммаНДС, | ЕСТЬNULL(СебестоимостьТоваров.Сумма, 0) КАК СуммаСебестоимости, | ЕСТЬNULL(СебестоимостьТоваров.СуммаБезНДС, 0) КАК СуммаБезНДС, | ПриобретениеТоваровУслуг.НомерСтроки КАК НомерСтроки |
Или, если итоговую сумму из регистра нужно назвать просто Сумма, можно использовать:
|
1 2 |
| ЕСТЬNULL(СебестоимостьТоваров.Сумма, 0) КАК Сумма, | ЕСТЬNULL(СебестоимостьТоваров.СуммаБезНДС, 0) КАК СуммаБезНДС, |
### Исправленный запрос
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
|ВЫБРАТЬ | ПриобретениеТоваровУслуг.Ссылка КАК Ссылка, | ПриобретениеТоваровУслуг.Номенклатура КАК Номенклатура, | | ВЫБОР | КОГДА ПриобретениеТоваровУслуг.Упаковка = | ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка) | ТОГДА 1 | ИНАЧЕ &ТекстЗапросаКоэффициентУпаковки2 | КОНЕЦ КАК Коэффициент, | | ВЫБОР | КОГДА ПриобретениеТоваровУслуг.Упаковка = | ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка) | ТОГДА ПриобретениеТоваровУслуг.Номенклатура.ЕдиницаИзмерения | ИНАЧЕ ПриобретениеТоваровУслуг.Упаковка | КОНЕЦ КАК ЕдиницаИзмерения, | | ПриобретениеТоваровУслуг.ПроцентРучнойСкидки КАК ПроцентСкидки, | ПриобретениеТоваровУслуг.Характеристика КАК Характеристика, | ПриобретениеТоваровУслуг.Серия КАК Серия, | ПриобретениеТоваровУслуг.Упаковка КАК Упаковка, | ПриобретениеТоваровУслуг.СтавкаНДС КАК СтавкаНДС, | ПриобретениеТоваровУслуг.Цена КАК Цена, | ПриобретениеТоваровУслуг.КоличествоУпаковок КАК Количество, | ПриобретениеТоваровУслуг.Сумма КАК Сумма, | ПриобретениеТоваровУслуг.СуммаРучнойСкидки КАК СуммаСкидки, | ПриобретениеТоваровУслуг.Сумма | + ПриобретениеТоваровУслуг.СуммаРучнойСкидки КАК СуммаБезСкидки, | ПриобретениеТоваровУслуг.СуммаНДС КАК СуммаНДС, | | ЕСТЬNULL(СебестоимостьТоваров.Сумма, 0) КАК СуммаСебестоимости, | ЕСТЬNULL(СебестоимостьТоваров.СуммаБезНДС, 0) КАК СуммаБезНДС, | | ПриобретениеТоваровУслуг.НомерСтроки КАК НомерСтроки | |ИЗ | Документ.ПриобретениеТоваровУслуг.Товары КАК ПриобретениеТоваровУслуг | | ЛЕВОЕ СОЕДИНЕНИЕ | ( | ВЫБРАТЬ | СебестоимостьТоваров.Регистратор КАК Регистратор, | СебестоимостьТоваров.АналитикаУчетаНоменклатуры.Номенклатура КАК Номенклатура, | СебестоимостьТоваров.АналитикаУчетаНоменклатуры.Характеристика КАК Характеристика, | СебестоимостьТоваров.АналитикаУчетаНоменклатуры.Серия КАК Серия, | СУММА(СебестоимостьТоваров.Стоимость) КАК Сумма, | СУММА(СебестоимостьТоваров.СтоимостьБезНДС) КАК СуммаБезНДС | ИЗ | РегистрНакопления.СебестоимостьТоваров КАК СебестоимостьТоваров | ГДЕ | СебестоимостьТоваров.Регистратор В (&МассивДокументов) | И СебестоимостьТоваров.ВидДвижения = &ВидДвиженияПриход | СГРУППИРОВАТЬ ПО | СебестоимостьТоваров.Регистратор, | СебестоимостьТоваров.АналитикаУчетаНоменклатуры.Номенклатура, | СебестоимостьТоваров.АналитикаУчетаНоменклатуры.Характеристика, | СебестоимостьТоваров.АналитикаУчетаНоменклатуры.Серия | ) КАК СебестоимостьТоваров | ПО СебестоимостьТоваров.Регистратор = | ПриобретениеТоваровУслуг.Ссылка | И СебестоимостьТоваров.Номенклатура = | ПриобретениеТоваровУслуг.Номенклатура | И СебестоимостьТоваров.Характеристика = | ПриобретениеТоваровУслуг.Характеристика | И СебестоимостьТоваров.Серия = | ПриобретениеТоваровУслуг.Серия | |ГДЕ | ПриобретениеТоваровУслуг.Ссылка В (&МассивДокументов) | И ПриобретениеТоваровУслуг.Номенклатура.ТипНоменклатуры В | ( | ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Товар), | ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.МногооборотнаяТара) | ) |
### Проверьте параметры запроса
Особенно важно, чтобы параметр вида движения был установлен именно так:
|
1 2 3 4 |
Запрос.УстановитьПараметр( "ВидДвиженияПриход", ВидДвиженияНакопления.Приход ); |
Массив документов:
|
1 2 3 4 |
Запрос.УстановитьПараметр( "МассивДокументов", МассивДокументов ); |
И перед выполнением убедитесь, что массив не пустой:
|
1 2 3 |
Если МассивДокументов.Количество() = 0 Тогда Возврат; КонецЕсли; |
### Как быстро проверить, есть ли вообще движения регистра
Сначала временно выполните отдельный проверочный запрос без соединения с табличной частью документа:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|ВЫБРАТЬ | СебестоимостьТоваров.Регистратор КАК Регистратор, | СебестоимостьТоваров.ВидДвижения КАК ВидДвижения, | СебестоимостьТоваров.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры, | СебестоимостьТоваров.АналитикаУчетаНоменклатуры.Номенклатура КАК Номенклатура, | СебестоимостьТоваров.АналитикаУчетаНоменклатуры.Характеристика КАК Характеристика, | СебестоимостьТоваров.АналитикаУчетаНоменклатуры.Серия КАК Серия, | СебестоимостьТоваров.Стоимость КАК Стоимость, | СебестоимостьТоваров.СтоимостьБезНДС КАК СтоимостьБезНДС |ИЗ | РегистрНакопления.СебестоимостьТоваров КАК СебестоимостьТоваров |ГДЕ | СебестоимостьТоваров.Регистратор В (&МассивДокументов) |
Если этот запрос возвращает пустую таблицу, причина не в ЛЕВОМ СОЕДИНЕНИИ. Значит, по этим документам в регистр СебестоимостьТоваров движения не записаны.
Если запрос возвращает строки, но в основном запросе суммы равны нулю, проблема в условиях соединения.
### Наиболее вероятная проблема: регистр не пишет приход по документу приобретения
Документ ПриобретениеТоваровУслуг может формировать движения не напрямую в СебестоимостьТоваров, а через другой документ или регистр. Это зависит от конфигурации, вида операции и настроек учета.
Проверьте конкретный документ:
1. Откройте документ ПриобретениеТоваровУслуг.
2. Выполните Дт/Кт или Движения документа.
3. Посмотрите, есть ли регистр СебестоимостьТоваров.
4. Проверьте, является ли именно ПриобретениеТоваровУслуг регистратором движений.
5. Убедитесь, что документ проведен.
Важно: наличие документа в МассивДокументов еще не означает, что он является регистратором движений именно этого регистра.
### Проверьте, не мешает ли отбор по виду движения
На время уберите условие:
|
1 |
| И СебестоимостьТоваров.ВидДвижения = &ВидДвиженияПриход |
Проверочный вариант:
|
1 2 3 4 5 6 7 8 9 10 11 |
|ВЫБРАТЬ | СебестоимостьТоваров.Регистратор КАК Регистратор, | СебестоимостьТоваров.ВидДвижения КАК ВидДвижения, | СУММА(СебестоимостьТоваров.Стоимость) КАК Стоимость |ИЗ | РегистрНакопления.СебестоимостьТоваров КАК СебестоимостьТоваров |ГДЕ | СебестоимостьТоваров.Регистратор В (&МассивДокументов) |СГРУППИРОВАТЬ ПО | СебестоимостьТоваров.Регистратор, | СебестоимостьТоваров.ВидДвижения |
Если строки появились, значит движения есть, но они записаны как Расход, либо документ формирует сторнирующее движение.
### Возможна проблема с аналитикой
В регистре вы соединяете данные по:
|
1 2 3 |
| Номенклатура | Характеристика | Серия |
Но в регистре ключом фактически является:
|
1 |
|АналитикаУчетаНоменклатуры |
В документе может быть одна номенклатура, характеристика или серия, а в регистре используется другая аналитика учета. Поэтому визуально реквизиты могут совпадать, но ссылка АналитикаУчетаНоменклатуры будет другой.
Для диагностики выведите движения регистра и строки документа рядом:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
|ВЫБРАТЬ | ПриобретениеТоваровУслуг.Ссылка КАК Ссылка, | ПриобретениеТоваровУслуг.НомерСтроки КАК НомерСтроки, | ПриобретениеТоваровУслуг.Номенклатура КАК НоменклатураДокумента, | ПриобретениеТоваровУслуг.Характеристика КАК ХарактеристикаДокумента, | ПриобретениеТоваровУслуг.Серия КАК СерияДокумента, | СебестоимостьТоваров.Регистратор КАК РегистраторРегистра, | СебестоимостьТоваров.АналитикаУчетаНоменклатуры.Номенклатура КАК НоменклатураРегистра, | СебестоимостьТоваров.АналитикаУчетаНоменклатуры.Характеристика КАК ХарактеристикаРегистра, | СебестоимостьТоваров.АналитикаУчетаНоменклатуры.Серия КАК СерияРегистра, | СебестоимостьТоваров.Стоимость КАК Стоимость |ИЗ | Документ.ПриобретениеТоваровУслуг.Товары КАК ПриобретениеТоваровУслуг | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СебестоимостьТоваров КАК СебестоимостьТоваров | ПО СебестоимостьТоваров.Регистратор = | ПриобретениеТоваровУслуг.Ссылка | И СебестоимостьТоваров.АналитикаУчетаНоменклатуры.Номенклатура = | ПриобретениеТоваровУслуг.Номенклатура | И СебестоимостьТоваров.АналитикаУчетаНоменклатуры.Характеристика = | ПриобретениеТоваровУслуг.Характеристика | И СебестоимостьТоваров.АналитикаУчетаНоменклатуры.Серия = | ПриобретениеТоваровУслуг.Серия |ГДЕ | ПриобретениеТоваровУслуг.Ссылка В (&МассивДокументов) |
### Важный момент с несколькими одинаковыми строками
В регистре СебестоимостьТоваров обычно нет НомерСтроки табличной части документа. Если в одном документе две строки имеют одинаковые:
— номенклатуру;
— характеристику;
— серию;
то регистр может объединить движения по ним. В таком случае точно распределить сумму себестоимости по строкам документа одним соединением невозможно.
Тогда лучше сначала получать себестоимость на уровне:
|
1 |
Документ + Номенклатура + Характеристика + Серия |
а затем распределять ее по строкам пропорционально количеству или сумме.
### Еще одна проблема в вашем запросе
Вы используете:
|
1 |
|СУММА(СебестоимостьТоваров.Стоимость) КАК Сумма |
Но затем для определения суммы без НДС используете отдельный ресурс:
|
1 |
|СУММА(СебестоимостьТоваров.СтоимостьБезНДС) КАК СуммаБезНДС |
Убедитесь, что в регистре действительно есть ресурс СтоимостьБезНДС. Если его нет, запрос должен использовать фактическое имя ресурса регистра, например:
|
1 |
|СУММА(СебестоимостьТоваров.СуммаБезНДС) КАК СуммаБезНДС |
Проверять нужно в конфигураторе:
|
1 2 3 |
Регистры накопления СебестоимостьТоваров Ресурсы |
### Что исправить в первую очередь
1. Добавить поля регистра во внешний ВЫБРАТЬ:
|
1 2 |
|ЕСТЬNULL(СебестоимостьТоваров.Сумма, 0) КАК СуммаСебестоимости, |ЕСТЬNULL(СебестоимостьТоваров.СуммаБезНДС, 0) КАК СуммаБезНДС, |
2. Установить ВидДвиженияНакопления.Приход.
3. Проверить, что МассивДокументов не пустой.
4. Выполнить отдельный запрос непосредственно к основной таблице регистра.
5. Проверить движения конкретного документа.
6. Если движения есть, но соединение не срабатывает, сравнить значения номенклатуры, характеристики и серии в документе и регистре.
Самая явная ошибка именно в том, что вы выбрали NULL, а поля СебестоимостьТоваров.Сумма и СебестоимостьТоваров.СуммаБезНДС не добавили в итоговую выборку. Но если после этого значения будут нулевыми, нужно проверять наличие движений и соответствие аналитики.