Запрос по остаткам в разрезе серий и характеристик

1. qwert werty (request4t) 03.01.17 12:38 Сейчас в теме
Всем привет и с Новым Годом! :)

Имеется запрос по остаткам ТМЦ в разрезе серий. Необходимо дописать его, чтобы учитывались еще и характеристики. Научите, плз) Спасибо.

ТекстЗапроса = "
	|ВЫБРАТЬ
	|	ИСТИНА КАК Печать,
	|	СпрНоменклатура.Номенклатура КАК Номенклатура,
	|	СпрНоменклатура.СерияНоменклатуры КАК СерияНоменклатуры,
	|	СпрНоменклатура.Номенклатура.ЕдиницаХраненияОстатков КАК ЕдиницаИзмерения,
	|	0 КАК Цена,
	|	1 КАК Количество
	|ИЗ
	|	(ВЫБРАТЬ
	|		СпрНоменклатура.Ссылка КАК Номенклатура,
	|		ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка) КАК СерияНоменклатуры
	|	ИЗ
	|		Справочник.Номенклатура КАК СпрНоменклатура
	|	ГДЕ НЕ СпрНоменклатура.ЭтоГруппа
	|	{ГДЕ
	|		СпрНоменклатура.Ссылка.* КАК Номенклатура}
	|	ОБЪЕДИНИТЬ ВСЕ
	|	ВЫБРАТЬ
	|		СпрСерии.Владелец,
	|		СпрСерии.Ссылка
	|	ИЗ
	|		Справочник.СерииНоменклатуры КАК СпрСерии
	|	{ГДЕ
	|		СпрСерии.Владелец.* КАК Номенклатура,
	|		СпрСерии.Ссылка.* КАК СерияНоменклатуры}
	|	) КАК СпрНоменклатура
	|";
	
	Если ТолькоИмеющиесяВНаличии Тогда
		ТекстЗапроса = ТекстЗапроса + "
		|ЛЕВОЕ СОЕДИНЕНИЕ
		|	(ВЫБРАТЬ
		|		НаСкладе.Номенклатура,
		|		НаСкладе.СерияНоменклатуры,
		|		СУММА(НаСкладе.Количество) КАК Количество
		|	ИЗ
		|		(ВЫБРАТЬ
		|			НаСкладе.Номенклатура,
		|			НаСкладе.СерияНоменклатуры,
		|			НаСкладе.КоличествоОстаток КАК Количество
		|		ИЗ
		|			РегистрНакопления.ТоварыНаСкладах.Остатки(, {Номенклатура.* КАК Номенклатура,
		|			   СерияНоменклатуры.* КАК СерияНоменклатуры, 
		|			   Склад.* КАК Склад}) КАК НаСкладе
		|		ОБЪЕДИНИТЬ ВСЕ
		|		ВЫБРАТЬ
		|			ВРознице.Номенклатура,
		|			ВРознице.СерияНоменклатуры,
		|			ВРознице.КоличествоОстаток КАК Количество
		|		ИЗ
		|			РегистрНакопления.ТоварыВРознице.Остатки(, {Номенклатура.* КАК Номенклатура,
		|			   СерияНоменклатуры.* КАК СерияНоменклатуры, 
		|			   Склад.* КАК Склад}) КАК ВРознице
		|		ОБЪЕДИНИТЬ ВСЕ
		|		ВЫБРАТЬ
		|			ВНТТ.Номенклатура,
		|			ВНТТ.СерияНоменклатуры,
		|			ВНТТ.КоличествоОстаток КАК Количество
		|		ИЗ
		|			РегистрНакопления.ТоварыВНТТ.Остатки(, {Номенклатура.* КАК Номенклатура,
		|			   СерияНоменклатуры.* КАК СерияНоменклатуры, 
		|			   Склад.* КАК Склад}) КАК ВНТТ
		|		) КАК НаСкладе
		|	СГРУППИРОВАТЬ ПО
		|		НаСкладе.Номенклатура,
		|		НаСкладе.СерияНоменклатуры
		|	) КАК НаСкладе
		|ПО
		|	СпрНоменклатура.Номенклатура = НаСкладе.Номенклатура
		|	И СпрНоменклатура.СерияНоменклатуры = НаСкладе.СерияНоменклатуры
		|ГДЕ
		|	ЕСТЬNULL(НаСкладе.Количество, 0) > 0
		|";
	КонецЕсли;

...Показать Скрыть
Ответы
2. Вадим . (ice-net) 03.01.17 15:07 Сейчас в теме
ТекстЗапроса = "
    |ВЫБРАТЬ
    |    ИСТИНА КАК Печать,
    |    СпрНоменклатура.Номенклатура КАК Номенклатура,
// {
|    СпрНоменклатура.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
// }
    |    СпрНоменклатура.СерияНоменклатуры КАК СерияНоменклатуры,
    |    СпрНоменклатура.Номенклатура.ЕдиницаХраненияОстатков КАК ЕдиницаИзмерения,
    |    0 КАК Цена,
    |    1 КАК Количество
    |ИЗ
    |    (ВЫБРАТЬ
    |        СпрНоменклатура.Ссылка КАК Номенклатура,
// {
| ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка) КАК ХарактеристикаНоменклатуры,
// }
    |        ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка) КАК СерияНоменклатуры
    |    ИЗ
    |        Справочник.Номенклатура КАК СпрНоменклатура
    |    ГДЕ НЕ СпрНоменклатура.ЭтоГруппа
    |    {ГДЕ
    |        СпрНоменклатура.Ссылка.* КАК Номенклатура}
    |    ОБЪЕДИНИТЬ ВСЕ
    |    ВЫБРАТЬ
    |        СпрСерии.Владелец,
// {
| ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка),
// }
    |        СпрСерии.Ссылка
    |    ИЗ
    |        Справочник.СерииНоменклатуры КАК СпрСерии
    |    {ГДЕ
    |        СпрСерии.Владелец.* КАК Номенклатура,
    |        СпрСерии.Ссылка.* КАК СерияНоменклатуры}
// { 
|    ОБЪЕДИНИТЬ ВСЕ
|    ВЫБРАТЬ 
|    СпрХарактеристики.Владелец,
|    СпрХарактеристики.Ссылка,
|    ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
|    ИЗ
|        Справочник.ХарактеристикиНоменклатуры КАК СпрХарактеристики
|    {ГДЕ
|        СпрХарактеристики.Владелец.* КАК Номенклатура,
|        СпрХарактеристики.Ссылка.* КАК ХарактеристикаНоменклатуры}
// }
    |    ) КАК СпрНоменклатура
    |";
    
    Если ТолькоИмеющиесяВНаличии Тогда
        ТекстЗапроса = ТекстЗапроса + "
        |ЛЕВОЕ СОЕДИНЕНИЕ
        |    (ВЫБРАТЬ
        |        НаСкладе.Номенклатура,
// {
|        НаСкладе.ХарактеристикаНоменклатуры,
// }
        |        НаСкладе.СерияНоменклатуры,
        |        СУММА(НаСкладе.Количество) КАК Количество
        |    ИЗ
        |        (ВЫБРАТЬ
        |            НаСкладе.Номенклатура,
// {
| НаСкладе.ХарактеристикаНоменклатуры,
// }
        |            НаСкладе.СерияНоменклатуры,
        |            НаСкладе.КоличествоОстаток КАК Количество
        |        ИЗ
        |            РегистрНакопления.ТоварыНаСкладах.Остатки(, {Номенклатура.* КАК Номенклатура,
// {
|ХарактеристикаНоменклатуры.* КАК ХарактеристикаНоменклатуры,
// }
        |               СерияНоменклатуры.* КАК СерияНоменклатуры, 
        |               Склад.* КАК Склад}) КАК НаСкладе
        |        ОБЪЕДИНИТЬ ВСЕ
        |        ВЫБРАТЬ
        |            ВРознице.Номенклатура,
// {
| ВРознице.ХарактеристикаНоменклатуры,
// }
        |            ВРознице.СерияНоменклатуры,
        |            ВРознице.КоличествоОстаток КАК Количество
        |        ИЗ
        |            РегистрНакопления.ТоварыВРознице.Остатки(, {Номенклатура.* КАК Номенклатура,
// {
|ХарактеристикаНоменклатуры.* КАК ХарактеристикаНоменклатуры,
// }
        |               СерияНоменклатуры.* КАК СерияНоменклатуры, 
        |               Склад.* КАК Склад}) КАК ВРознице
        |        ОБЪЕДИНИТЬ ВСЕ
        |        ВЫБРАТЬ
        |            ВНТТ.Номенклатура,
// {
| ВНТТ.ХарактеристикаНоменклатуры,
// }
        |            ВНТТ.СерияНоменклатуры,
        |            ВНТТ.КоличествоОстаток КАК Количество
        |        ИЗ
        |            РегистрНакопления.ТоварыВНТТ.Остатки(, {Номенклатура.* КАК Номенклатура,
// {
|ХарактеристикаНоменклатуры.* КАК ХарактеристикаНоменклатуры,
// }
        |               СерияНоменклатуры.* КАК СерияНоменклатуры, 
        |               Склад.* КАК Склад}) КАК ВНТТ
        |        ) КАК НаСкладе
        |    СГРУППИРОВАТЬ ПО
        |        НаСкладе.Номенклатура,
// {
| НаСкладе.ХарактеристикаНоменклатуры,
// }
        |        НаСкладе.СерияНоменклатуры
        |    ) КАК НаСкладе
        |ПО
        |    СпрНоменклатура.Номенклатура = НаСкладе.Номенклатура
// {
|    И СпрНоменклатура.ХарактеристикаНоменклатуры= НаСкладе.ХарактеристикаНоменклатуры
// }
        |    И СпрНоменклатура.СерияНоменклатуры = НаСкладе.СерияНоменклатуры
        |ГДЕ
        |    ЕСТЬNULL(НаСкладе.Количество, 0) > 0
        |";
    КонецЕсли;
...Показать Скрыть
3. qwert werty (request4t) 03.01.17 17:32 Сейчас в теме
(2) спасибо за развернутый ответ) протестю, отпишу.
4. Вадим . (ice-net) 03.01.17 18:06 Сейчас в теме
(3) можете нажать на "+", если помогло)
5. qwert werty (request4t) 04.01.17 10:45 Сейчас в теме
(4) не сработало. прилагаю обработку, может так будет легче разобраться. запрос в процедуре ЗаполнитьПостроительОтчета() модуля.
Прикрепленные файлы:
ПечатьЦенников.epf
6. Вадим . (ice-net) 04.01.17 11:17 Сейчас в теме
(4) Что именно не сработало? Какая у Вас конфигурация?

Если ругается на запрос, значит надо разбираться со структурой регистров из запроса.
В регистрах накопления: ТоварыВНТТ, ТоварыВРознице, ТоварыНаСкладах должно быть Измерение "ХарактеристикаНоменклатуры". Соответственно должен быть еще и справочник "ХарактеристикиНоменклатуры" подчиненный справочнику "Номенклатура".

В моем случае ошибок в запросе нет. Типовая УТ.
baracuda; +1 Ответить
7. Вадим . (ice-net) 04.01.17 11:26 Сейчас в теме
А вот при попытке заполнить ТЧ по установленным отборам - возникает ошибка на строчке 97 модуля формы вашего примера.

//рек
для каждого стр из товары цикл
	стр.ХарактеристикаНоменклатуры = стр.СерияНоменклатуры.ХарактеристикаНоменклатуры;
	//....
конеццикла;
...Показать Скрыть


В моей конфигурации Справочники ХарактеристикаНоменклатуры и СерииНоменклатуры абсолютно разные и связаны между собой только по владельцу => У элемента справочника "СерияНоменклатуры" нет реквизита "ХарактеристикаНоменклатуры".

Второй момент, какой смысл этой сточки, если несколькими строчками выше у вас стоит

//...
Товары.Загрузить(ПостроительОтчета.Результат.Выгрузить());
//...
...Показать Скрыть


При выгрузке результата из построителя отчетов у вас уже есть все данные с характеристиками, ведь мы модернизировали текст запроса построителя и добавили туда характеристики.
8. qwert werty (request4t) 05.01.17 10:22 Сейчас в теме
(4) извините, не предоставил всю информацию...

конфигурация УТП для Украины.

в моем случае не заполняется таблица после "заполнить - по установленным отборам". сообщения об ошибке нет.

позже проверю работу обработки еще раз, отпишу. спасибо за помощь)
9. qwert werty (request4t) 05.01.17 13:19 Сейчас в теме
(7) В моей конфигурации справочники тоже имеют владельца Спр.Номенклатура, но в Спр.Серии есть элемент "ХарактеристикаНоменклатуры". Таблица заполняется только, если не стоит флажок "Только имеющиеся в наличии". В обратном случае таблица заполняется всеми характеристиками и сериями, которые есть у товара.
10. Анна Бондаренко (Ann.prog1C) 05.01.17 13:38 Сейчас в теме
(9) В типовой конфигурации УТП для Украины также как и в других типовых конфигурациях в справочнике СерииНоменклатуры нет реквизита ХарактеристикаНоменклатуры. Характеристику можно получить путем соедиения таблиц Номенклатура и ХарактеристикиНоменклатуры по Владельцу. Аналогично Серию номенклатуры можно получить соединением в запросе таблиц СерииНоменклатуры и Номенклатура по владельцу.

11. qwert werty (request4t) 05.01.17 13:42 Сейчас в теме
(10) Значит моя конфигурация дописана. Я, честно говоря, впервые тесно работаю с ней. Соединять таблицы пока не научился( Поэтому и прошу помощи.
12. Вадим . (ice-net) 05.01.17 14:02 Сейчас в теме
(11) Вы кстати так и не написали что за ошибка у Вас выскакивает..
13. qwert werty (request4t) 05.01.17 15:23 Сейчас в теме
(12) писал ;) ошибки нет никакой. просто не заполняется таблица.
14. Вадим . (ice-net) 05.01.17 15:28 Сейчас в теме
(13)
просто не заполняется таблица


А отбор по характеристике ставили?
15. qwert werty (request4t) 05.01.17 15:53 Сейчас в теме
(14) Не-а. Отбор должен производиться по складу.
16. qwert werty (request4t) 09.01.17 12:50 Сейчас в теме
Друзья, проблема все еще ожидает решения. Есть желающие помочь?
17. Andrey Erastov (tailer2) 09.01.17 13:53 Сейчас в теме
(16) совсем уже было возникло, но сломалсо на этом:

		|		) КАК НаСкладе
		|	СГРУППИРОВАТЬ ПО
		|		НаСкладе.Номенклатура,
		|		НаСкладе.ХарактеристикаНоменклатуры,
		|		НаСкладе.СерияНоменклатуры
		|	) КАК НаСкладе
...Показать Скрыть


плюньте, сделайте на СКД
быстрее выйдет
18. qwert werty (request4t) 09.01.17 18:53 Сейчас в теме
19. qwert asdfg (bad_wag) 10.01.17 14:14 Сейчас в теме
Проверил на типовой конфе, нажл заполнить по отборам - все заполнилось. Единственное пришлось закоментить строку стр.ХарактеристикаНоменклатуры = стр.СерияНоменклатуры.ХарактеристикаНоменклатуры, т.к. в типовом такого нет реквизита. Возможно в ней дело, попробуйте так же ее закомментировать.
Прикрепленные файлы:
Оставьте свое сообщение