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

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

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

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

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

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

В моем случае ошибок в запросе нет. Типовая УТ.
baracuda; +1 Ответить
8. request4t 05.01.17 10:22 Сейчас в теме
(4) извините, не предоставил всю информацию...

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

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

позже проверю работу обработки еще раз, отпишу. спасибо за помощь)
7. ice-net 19 04.01.17 11:26 Сейчас в теме
А вот при попытке заполнить ТЧ по установленным отборам - возникает ошибка на строчке 97 модуля формы вашего примера.

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


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

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

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


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

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


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

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


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

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)

Программист 1С
Москва
зарплата от 250 000 руб.
Полный день