СКД Соединение РН ОстаткиИОбороты Итоги по остаткам

1. Shaldryn 24.06.19 16:31 Сейчас в теме
Добрый день, помогите парни, никак не могу победить остатки, чтобы корректно их показывала СКД, делаю отчет для КА1:
ВЫБРАТЬ
	ТоварыНаСкладахОстаткиИОбороты.НомерСтроки,
	ТоварыНаСкладахОстаткиИОбороты.Регистратор,
	ТоварыНаСкладахОстаткиИОбороты.ПериодСекунда,
	ТоварыНаСкладахОстаткиИОбороты.ПериодМинута,
	ТоварыНаСкладахОстаткиИОбороты.ПериодЧас,
	ТоварыНаСкладахОстаткиИОбороты.ПериодДень,
	ТоварыНаСкладахОстаткиИОбороты.ПериодНеделя,
	ТоварыНаСкладахОстаткиИОбороты.ПериодДекада,
	ТоварыНаСкладахОстаткиИОбороты.ПериодМесяц,
	ТоварыНаСкладахОстаткиИОбороты.ПериодКвартал,
	ТоварыНаСкладахОстаткиИОбороты.ПериодПолугодие,
	ТоварыНаСкладахОстаткиИОбороты.ПериодГод,
	ТоварыНаСкладахОстаткиИОбороты.Склад,
	ТоварыНаСкладахОстаткиИОбороты.Номенклатура,
	ТоварыНаСкладахОстаткиИОбороты.Качество,
	ТоварыНаСкладахОстаткиИОбороты.ХарактеристикаНоменклатуры,
	ТоварыНаСкладахОстаткиИОбороты.СерияНоменклатуры,
	ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток КАК НачальныйОстаток,
	ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток КАК КонечныйОстаток,
	ТоварыНаСкладахОстаткиИОбороты.КоличествоОборот,
	ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход КАК Приход,
	ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход КАК Расход
ПОМЕСТИТЬ ВТ_ОстаткиОбороты
ИЗ
	РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&ДатаНачала, &ДатаОкончания, Авто, , Склад = &Склад) КАК ТоварыНаСкладахОстаткиИОбороты

ИНДЕКСИРОВАТЬ ПО
	ТоварыНаСкладахОстаткиИОбороты.Номенклатура
;

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

ОБЪЕДИНИТЬ ВСЕ

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

ОБЪЕДИНИТЬ ВСЕ

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

ОБЪЕДИНИТЬ ВСЕ

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

ИНДЕКСИРОВАТЬ ПО
	Номенклатура
;

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

ОБЪЕДИНИТЬ ВСЕ

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

ОБЪЕДИНИТЬ ВСЕ

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

ОБЪЕДИНИТЬ ВСЕ

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

ОБЪЕДИНИТЬ ВСЕ

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

ИНДЕКСИРОВАТЬ ПО
	Номенклатура
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ_ОстаткиОбороты.Регистратор,
	ВТ_ОстаткиОбороты.Номенклатура КАК Номенклатура,
	ВТ_ОстаткиОбороты.ХарактеристикаНоменклатуры,
	ВТ_ОстаткиОбороты.СерияНоменклатуры,
	ВТ_ОстаткиОбороты.Приход,
	ВТ_ОстаткиОбороты.Расход,
	ВТ_ОстаткиОбороты.КоличествоОборот КАК ОборотПрочее
ПОМЕСТИТЬ ВТ_Прочее
ИЗ
	ВТ_ОстаткиОбороты КАК ВТ_ОстаткиОбороты
ГДЕ
	НЕ ВТ_ОстаткиОбороты.Регистратор В
				(ВЫБРАТЬ
					ВТ_Приход.Регистратор
				ИЗ
					ВТ_Приход КАК ВТ_Приход
		
				ОБЪЕДИНИТЬ ВСЕ
		
				ВЫБРАТЬ
					ВТ_Расход.Регистратор
				ИЗ
					ВТ_Расход КАК ВТ_Расход)
	И ВТ_ОстаткиОбороты.Склад = &Склад

ИНДЕКСИРОВАТЬ ПО
	Номенклатура
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ_ОстаткиОбороты.НомерСтроки,
	ВТ_ОстаткиОбороты.Регистратор,
	ВТ_ОстаткиОбороты.ПериодСекунда,
	ВТ_ОстаткиОбороты.ПериодМинута,
	ВТ_ОстаткиОбороты.ПериодЧас,
	ВТ_ОстаткиОбороты.ПериодДень,
	ВТ_ОстаткиОбороты.ПериодНеделя,
	ВТ_ОстаткиОбороты.ПериодДекада,
	ВТ_ОстаткиОбороты.ПериодМесяц,
	ВТ_ОстаткиОбороты.ПериодКвартал,
	ВТ_ОстаткиОбороты.ПериодПолугодие,
	ВТ_ОстаткиОбороты.ПериодГод,
	ВТ_ОстаткиОбороты.Склад,
	ВТ_ОстаткиОбороты.Номенклатура,
	ВТ_ОстаткиОбороты.Качество,
	ВТ_ОстаткиОбороты.ХарактеристикаНоменклатуры,
	ВТ_ОстаткиОбороты.СерияНоменклатуры,
	ВТ_ОстаткиОбороты.НачальныйОстаток,
	ВТ_Приход.ОборотПрихода,
	ВТ_Расход.ОборотРасхода,
	ВТ_Прочее.ОборотПрочее,
	ВТ_ОстаткиОбороты.КонечныйОстаток
ИЗ
	ВТ_ОстаткиОбороты КАК ВТ_ОстаткиОбороты
		ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Приход КАК ВТ_Приход
		ПО ВТ_ОстаткиОбороты.Номенклатура = ВТ_Приход.Номенклатура
			И ВТ_ОстаткиОбороты.ХарактеристикаНоменклатуры = ВТ_Приход.ХарактеристикаНоменклатуры
			И ВТ_ОстаткиОбороты.СерияНоменклатуры = ВТ_Приход.СерияНоменклатуры
			И ВТ_ОстаткиОбороты.Регистратор = ВТ_Приход.Регистратор
		ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Расход КАК ВТ_Расход
		ПО ВТ_ОстаткиОбороты.Номенклатура = ВТ_Расход.Номенклатура
			И ВТ_ОстаткиОбороты.ХарактеристикаНоменклатуры = ВТ_Расход.ХарактеристикаНоменклатуры
			И ВТ_ОстаткиОбороты.СерияНоменклатуры = ВТ_Расход.СерияНоменклатуры
			И ВТ_ОстаткиОбороты.Регистратор = ВТ_Расход.Регистратор
		ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Прочее КАК ВТ_Прочее
		ПО ВТ_ОстаткиОбороты.Номенклатура = ВТ_Прочее.Номенклатура
			И ВТ_ОстаткиОбороты.ХарактеристикаНоменклатуры = ВТ_Прочее.ХарактеристикаНоменклатуры
			И ВТ_ОстаткиОбороты.СерияНоменклатуры = ВТ_Прочее.СерияНоменклатуры
			И ВТ_ОстаткиОбороты.Регистратор = ВТ_Прочее.Регистратор
Показать


Мне в общем необходимо получить начальный остаток, приход по условию, расход по условию, прочее по условию и конечный остаток. Взял типовой отчет товары на складах, где все настроено в СКД, роли, измерения, остатки. Получается добавляются только ресурсы. Но при выводе получается ерунда в остатках. Может я и запрос шняговский написал?
По теме из базы знаний
Найденные решения
7. Shaldryn 25.06.19 08:35 Сейчас в теме
Да, спасибо всем за направление поиска, разобрался, СКД "упростила" запрос, убирала Регистратор и ПериодСекунда, сделал их обязательными и все сошлось
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. VmvLer 24.06.19 16:59 Сейчас в теме
левые соединения по регистратору оборотов мне кажутся подозрительными
когда подозрения будут развеяны - тогда и остатки будут ок.

Из практики: в наборах данных СКД с временными таблицами и отборами на номенклатуру меняйте синоним Номенклатура на что-то вроде ТоварОтбора чтобы умная СКД не накидала своих отборов в регистры оборотов.
3. VictorRGB2 14 24.06.19 19:56 Сейчас в теме
а зачем так много объединений?
можно же проще - КоличествоОборот > 0 - расход, КоличествоОборот < 0 - приход

раз так в пять запрос сократится

а чтобы не именовать в СКД одинаковые поля по разному во временных таблицах, можно выполнить запрос отдельно, а в СКД уже передать готовый результат для пост обработки
4. Shaldryn 24.06.19 23:19 Сейчас в теме
(3) Мне необходимо не по всем документам выводить результат, много нюансов по ведению документооборота в предприятии, что считают приходом от поставщика иностранного, русского, что возвратами, поэтому разбил так.
Можно было конечно условия в поля затолкать, типа взять типовой и добавить поле, так:
ВЫБРАТЬ РАЗРЕШЕННЫЕ
	ТоварыНаСкладахОстаткиИОбороты.НомерСтроки,
	ТоварыНаСкладахОстаткиИОбороты.Регистратор,
	ТоварыНаСкладахОстаткиИОбороты.ПериодСекунда,
	ТоварыНаСкладахОстаткиИОбороты.ПериодМинута,
	ТоварыНаСкладахОстаткиИОбороты.ПериодЧас,
	ТоварыНаСкладахОстаткиИОбороты.ПериодДень,
	ТоварыНаСкладахОстаткиИОбороты.ПериодНеделя,
	ТоварыНаСкладахОстаткиИОбороты.ПериодДекада,
	ТоварыНаСкладахОстаткиИОбороты.ПериодМесяц,
	ТоварыНаСкладахОстаткиИОбороты.ПериодКвартал,
	ТоварыНаСкладахОстаткиИОбороты.ПериодПолугодие,
	ТоварыНаСкладахОстаткиИОбороты.ПериодГод,
	ТоварыНаСкладахОстаткиИОбороты.Склад,
	ТоварыНаСкладахОстаткиИОбороты.Номенклатура,
	ТоварыНаСкладахОстаткиИОбороты.Качество,
	ТоварыНаСкладахОстаткиИОбороты.ХарактеристикаНоменклатуры,
	ТоварыНаСкладахОстаткиИОбороты.СерияНоменклатуры,
	ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток,
	ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток,
	ТоварыНаСкладахОстаткиИОбороты.КоличествоОборот,
	ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход,
	ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход,
	ВЫБОР
		КОГДА ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг
					И ТоварыНаСкладахОбороты.Регистратор.СкладОрдер = &Склад
				ИЛИ ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.ПриходныйОрдерНаТовары
					И ТоварыНаСкладахОбороты.Регистратор.Склад = &Склад
					И (ТоварыНаСкладахОбороты.Регистратор.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийПриходныйОрдер.ОтПоставщика)
						ИЛИ ТоварыНаСкладахОбороты.Регистратор.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийПриходныйОрдер.Перемещение))
				ИЛИ ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.ВыпускПродукции
					И ТоварыНаСкладахОбороты.Регистратор.Склад = &Склад
				ИЛИ ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.ПеремещениеТоваров
					И ТоварыНаСкладахОбороты.Регистратор.СкладПолучатель = &Склад
					И ТоварыНаСкладахОбороты.Регистратор.СкладОтправитель В (&СкладОтправитель)
			ТОГДА ТоварыНаСкладахОбороты.КоличествоОборот
		ИНАЧЕ 0
	КОНЕЦ КАК ОборотПриход
ИЗ
	РегистрНакопления.ТоварыНаСкладах.Обороты(, , Авто, ) КАК ТоварыНаСкладахОбороты
Показать


То есть до моего поля остатки корректно рассчитываются по группировке "Номенклатура", стоит добавить мое поле "ОборотПриход" как тут же остатки летят. Вот мне и интересно, что еще надо донастроить.

На счет
а чтобы не именовать в СКД одинаковые поля по разному во временных таблицах, можно выполнить запрос отдельно, а в СКД уже передать готовый результат для пост обработки
это вы про набор данных - объект?
6. VictorRGB2 14 25.06.19 08:33 Сейчас в теме
(4) да
мне в некоторых случаях сильно выручало, основной запрос без обработки его СКД выполняется отдельно, а в СКД передается результат в виде таблицы
правда при этом нужно все условия запроса, включая отборы наложить на основной запрос, а установить их через СКД, что немного муторно, но результат стоит того
5. toypaul 63 25.06.19 07:59 Сейчас в теме
Начать надо наверное с проверки в какой-нибудь консоли запросов. Может быть два исхода

- в консоли все нормально - тогда смотрим уже в другой консоли (компоновки данных). СКД умеет "испортить" запрос по своему усмотрению
- в консоли все плохо - тогда нужно пройтись по типовым ошибкам связанным с получением данных из регистров (на диске ИТС). на 1й взгляд вроде таковых нет - но мало ли что.
7. Shaldryn 25.06.19 08:35 Сейчас в теме
Да, спасибо всем за направление поиска, разобрался, СКД "упростила" запрос, убирала Регистратор и ПериодСекунда, сделал их обязательными и все сошлось
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот