Унифицировать склад в СКД

Внимание! Тема закрыта. Добавлять сообщения в закрытую тему запрещено.
1. Lehha 7 02.04.13 14:51 Сейчас в теме
Дядьки, чего то я в жизни недопонимаю. Запилил отчет, который считает остатки на складе по последней закупочной цене (Такой уж тут учет), а так же продажи и закупки за период. Все просто. Щас хочу добавить в настройки СКД группировку по складам. Теперь сам трабл: если я беру склад, например, из регистра остаткиТовара, то в отчет попадают только те склады, на которых есть остаток. Если беру склад из продаж, то попадают только те склады, по которым были продажи. Как мне так сделать то, чтобы группировка была по всем складам без исключения?

Мой текст запроса:
ВЫБРАТЬ
ТоварыНаСкладахОстатки.Номенклатура,
ТоварыНаСкладахОстатки.КоличествоОстаток,
ЦеныНоменклатурыСрезПоследних.Цена,
ПродажиОбороты.КоличествоОборот КАК КоличествоПродаж,
ЗакупкиОбороты.КоличествоОборот КАК КоличествоЗакупок
ИЗ
РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
ПО ТоварыНаСкладахОстатки.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты
ПО ТоварыНаСкладахОстатки.Номенклатура = ПродажиОбороты.Номенклатура
ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.Закупки.Обороты КАК ЗакупкиОбороты
ПО ТоварыНаСкладахОстатки.Номенклатура = ЗакупкиОбороты.Номенклатура
ГДЕ
ЦеныНоменклатурыСрезПоследних.ТипЦен.Наименование = "Закупочная"
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
15. SamNeSvoy 8 04.04.13 12:53 Сейчас в теме
Цены сам прикрутишь :)
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. deniseek77 86 02.04.13 15:15 Сейчас в теме
(1) Lehha, Его нужно брать из справочника МестаХранения или Склады (Не знаю как у вас называется) и соединять одновременно и с регистром ОстаткиТовара и с Продажами.
3. Lehha 7 02.04.13 15:17 Сейчас в теме
.. и с закупками. Регистры к справочнику или справочник к регистру?
4. Lehha 7 03.04.13 08:08 Сейчас в теме
Итак, попробовал соединить регистры со справочником "Склады". 1 регистр соединяю без проблем (Любой), при попытке присоединить второй, выдает ошибку "Противоречивая связь" (скриншот во вложении).
Не могу понять, чем же она противоречит...
Подскажите, как присоеденить справочник склады ко всем регистрам так, чтоб СКД не ругалась?
Сам запрос до ошибки:
ВЫБРАТЬ
ТоварыНаСкладахОстатки.Номенклатура,
ТоварыНаСкладахОстатки.КоличествоОстаток,
ЦеныНоменклатурыСрезПоследних.Цена,
ПродажиОбороты.КоличествоОборот КАК КоличествоПродаж,
ЗакупкиОбороты.КоличествоОборот КАК КоличествоЗакупок,
Склады.Ссылка КАК Склад
ИЗ
Справочник.Склады КАК Склады
ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
ПО ТоварыНаСкладахОстатки.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты
ПО ТоварыНаСкладахОстатки.Номенклатура = ПродажиОбороты.Номенклатура
ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.Закупки.Обороты КАК ЗакупкиОбороты
ПО ТоварыНаСкладахОстатки.Номенклатура = ЗакупкиОбороты.Номенклатура
ПО Склады.Ссылка = ТоварыНаСкладахОстатки.Склад
ГДЕ
ЦеныНоменклатурыСрезПоследних.ТипЦен.Наименование = "Закупочная"
Прикрепленные файлы:
5. SamNeSvoy 8 03.04.13 08:49 Сейчас в теме
А если предварительно выборку поместить во временную таблицу, а потом уже соединять
ВЫБРАТЬ
ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
ТоварыНаСкладахОстатки.КоличествоОстаток КАК Остаток,
ЦеныНоменклатурыСрезПоследних.Цена КАК Цена,
ЗакупкиОбороты.КоличествоОборот КАК КоличествоЗакупок КАК Закупки,
Склады.Ссылка КАК Склад
ПОМЕСТИТЬ ВнОстаткиЗакупки
ИЗ
Справочник.Склады КАК Склады
ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
ПО ТоварыНаСкладахОстатки.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.Закупки.Обороты КАК ЗакупкиОбороты
ПО ТоварыНаСкладахОстатки.Номенклатура = ЗакупкиОбороты.Номенклатура
ПО Склады.Ссылка = ТоварыНаСкладахОстатки.Склад
ГДЕ
ЦеныНоменклатурыСрезПоследних.ТипЦен.Наименование = "Закупочная" 
;
ВЫБРАТЬ
ПродажиОбороты.КоличествоОборот КАК КоличествоПродаж,
ОстаткиЗакупки.Номенклатура,
ОстаткиЗакупки.Склад,
ОстаткиЗакупки.Остатки,
ОстаткиЗакупки.Закупки
ИЗ ВнОстаткиЗакупки КАК ОстаткиЗакупки
ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты
ПО ОстаткиЗакупки.Номенклатура = ПродажиОбороты.Номенклатура
ПО ОстаткиЗакупки.Склад = ПродажиОбороты.ДокументПродажи.Склад

Показать


Как-то так. Писал без проверки конструктором. не обессудьте ;)
6. Lehha 7 03.04.13 12:55 Сейчас в теме
(5) SamNeSvoy, Спасибо, пнул в нужную сторону
Запилил через вложенный запрос. Теперь все как бы правильно, кроме остатков. Видимо, как то неправильно я их получаю.
Помогите подправить запрос, отдам в отзывчивые руки свой виртуальный бакс :))
Запрос:
ВЫБРАТЬ
ВложенныйЗапрос.КоличествоОстаток,
ВложенныйЗапрос.КоличествоПродаж КАК КоличествоПродажи,
ВложенныйЗапрос.КоличествоЗакупок КАК КоличествоЗакупки,
Склады.Ссылка КАК Склад,
ЦеныНоменклатурыСрезПоследних.Цена,
ЦеныНоменклатурыСрезПоследних.Номенклатура
ИЗ
(ВЫБРАТЬ
ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток,
ПродажиОбороты.КоличествоОборот КАК КоличествоПродаж,
ЗакупкиОбороты.КоличествоОборот КАК КоличествоЗакупок,
ПродажиОбороты.ДокументПродажи.Склад КАК ДокументПродажиСклад,
ТоварыНаСкладахОстатки.Склад КАК Склад,
ЗакупкиОбороты.ДокументЗакупки.Склад КАК ДокументЗакупкиСклад,
ЗакупкиОбороты.Номенклатура КАК Номенклатура,
ПродажиОбороты.Номенклатура КАК Номенклатура1,
ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура2
ИЗ
РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты
ПО ТоварыНаСкладахОстатки.Номенклатура = ПродажиОбороты.Номенклатура
И ТоварыНаСкладахОстатки.Склад = ПродажиОбороты.ДокументПродажи.Склад
ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.Закупки.Обороты КАК ЗакупкиОбороты
ПО (ПродажиОбороты.Номенклатура = ЗакупкиОбороты.Номенклатура)
И ТоварыНаСкладахОстатки.Склад = ЗакупкиОбороты.ДокументЗакупки.Склад) КАК ВложенныйЗапрос
ПОЛНОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
ПО (ЦеныНоменклатурыСрезПоследних.Номенклатура = ВложенныйЗапрос.Номенклатура
ИЛИ ЦеныНоменклатурыСрезПоследних.Номенклатура = ВложенныйЗапрос.Номенклатура1
ИЛИ ЦеныНоменклатурыСрезПоследних.Номенклатура = ВложенныйЗапрос.Номенклатура2)
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Склады КАК Склады
ПО (Склады.Ссылка = ВложенныйЗапрос.Склад
ИЛИ Склады.Ссылка = ВложенныйЗапрос.ДокументЗакупкиСклад
ИЛИ Склады.Ссылка = ВложенныйЗапрос.ДокументПродажиСклад)
ГДЕ
ЦеныНоменклатурыСрезПоследних.ТипЦен.Наименование = "Закупочная"
7. SamNeSvoy 8 04.04.13 08:37 Сейчас в теме
Похоже здесь не подходит ПОЛНОЕ СОЕДИНЕНИЕ
вот к примеру: Тов1 на остатке 2, а продаж его не было, соответственно он не попадет в выборку.
Так что внимательно проанализируй соединения. На вскидку, замени на ЛЕВОЕ
9. Lehha 7 04.04.13 09:08 Сейчас в теме
(7) SamNeSvoy, полное соединение получает же данные из обоих таблиц, если данные встречаются хотя бы в одной, нет? То, что ты описал вроде как внутреннее соединение. Со временными таблицами щас попробую
10. SamNeSvoy 8 04.04.13 09:38 Сейчас в теме
(9) Lehha, Сорь.. что-то никак не проснусь)) Конечно же ПОЛНОЕ как раз подходит.
11. Lehha 7 04.04.13 10:16 Сейчас в теме
(10) SamNeSvoy, Подходить то оно подходит... но не подходит. Запилил через ВТ, все равно считает коряво, причем все измерения. что я делаю не так? :))

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

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
Склады.Ссылка КАК Склад,
ЦеныНоменклатурыСрезПоследних.Цена,
ЦеныНоменклатурыСрезПоследних.Номенклатура,
ВТ.КоличествоЗакупка,
ВТ.КоличествоПродажи,
ВТ.КоличествоОстаток
ИЗ
Справочник.Склады КАК Склады
ЛЕВОЕ СОЕДИНЕНИЕ ВТ КАК ВТ
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
ПО (ЦеныНоменклатурыСрезПоследних.Номенклатура = ВТ.Номенклатура
ИЛИ ЦеныНоменклатурыСрезПоследних.Номенклатура = ВТ.Номенклатура1
ИЛИ ЦеныНоменклатурыСрезПоследних.Номенклатура = ВТ.Номенклатура2)
ПО (ВТ.Склад = Склады.Ссылка
ИЛИ ВТ.Склад1 = Склады.Ссылка
ИЛИ ВТ.Склад2 = Склады.Ссылка)
ГДЕ
ЦеныНоменклатурыСрезПоследних.ТипЦен.Наименование = "Закупочная"
12. stanru1 91 04.04.13 10:28 Сейчас в теме
(11) Lehha, ты пробовал по одному товару смотреть, что у тебя получается? проще как мне кажется найти ошибку будет.
13. Lehha 7 04.04.13 11:23 Сейчас в теме
(12) stanru1, Только по одному и смотрю. Вообще, если без разбивки по складам у меня нормуль все отрабатывается. Стоит добавить склады, и все, понеслась... ЩАс еще чего нить гениального попробую "смастерить" и посмотрю. В общем то, мне понятно, что проблема в связях, но, как мне кажется, связи я верно указываю....
8. SamNeSvoy 8 04.04.13 08:40 Сейчас в теме
А вообще.. много раз встречал, что вложенные запросы не рекомендуется использовать, они сильно влияют на скорость выборки данных. Так что альтернатива - временные таблицы.
14. SamNeSvoy 8 04.04.13 12:51 Сейчас в теме
вот рабочий вариант

ВЫБРАТЬ
	ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
	ТоварыНаСкладахОстатки.Склад КАК Склад,
	СУММА(ТоварыНаСкладахОстатки.КоличествоОстаток) КАК КоличествоОстаток,
	СУММА(0) КАК КоличествоПродажа,
	СУММА(0) КАК КоличествоЗакупка
ПОМЕСТИТЬ втОстатки
ИЗ
	РегистрНакопления.ТоварыНаСкладах.Остатки(&НачалоПериода, ) КАК ТоварыНаСкладахОстатки

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

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

ВЫБРАТЬ
	ПродажиОбороты.Номенклатура,
	ПродажиОбороты.ДокументПродажи.Склад,
	СУММА(0),
	СУММА(ПродажиОбороты.КоличествоОборот),
	СУММА(0)
ИЗ
	РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, , ) КАК ПродажиОбороты

СГРУППИРОВАТЬ ПО
	ПродажиОбороты.Номенклатура,
	ПродажиОбороты.ДокументПродажи.Склад

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

ВЫБРАТЬ
	ЗакупкиОбороты.Номенклатура,
	ЗакупкиОбороты.ДокументЗакупки.СкладОрдер,
	СУММА(0),
	СУММА(0),
	СУММА(ЗакупкиОбороты.КоличествоОборот)
ИЗ
	РегистрНакопления.Закупки.Обороты(&НачалоПериода, &КонецПериода, , ) КАК ЗакупкиОбороты

СГРУППИРОВАТЬ ПО
	ЗакупкиОбороты.ДокументЗакупки.СкладОрдер,
	ЗакупкиОбороты.Номенклатура
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	втОстатки.Номенклатура,
	втОстатки.Склад,
	СУММА(втОстатки.КоличествоОстаток) КАК КоличествоОстаток,
	СУММА(втОстатки.КоличествоПродажа) КАК КоличествоПродажа,
	СУММА(втОстатки.КоличествоЗакупка) КАК КоличествоЗакупка
ПОМЕСТИТЬ втРезультатПоСкладам
ИЗ
	втОстатки КАК втОстатки

СГРУППИРОВАТЬ ПО
	втОстатки.Склад,
	втОстатки.Номенклатура
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	Склады.Ссылка,
	втРезультатПоСкладам.Номенклатура,
	втРезультатПоСкладам.КоличествоОстаток,
	втРезультатПоСкладам.КоличествоПродажа,
	втРезультатПоСкладам.КоличествоЗакупка
ИЗ
	Справочник.Склады КАК Склады
		ЛЕВОЕ СОЕДИНЕНИЕ втРезультатПоСкладам КАК втРезультатПоСкладам
		ПО Склады.Ссылка = втРезультатПоСкладам.Склад

Показать
15. SamNeSvoy 8 04.04.13 12:53 Сейчас в теме
Цены сам прикрутишь :)
16. Lehha 7 04.04.13 13:02 Сейчас в теме
(15) SamNeSvoy, Спасибо большое. Щас сижу и обтекаю))) Почему то есть небольшой разбег по продажам, но это я уже поищу сам. Цены тоже прикручу, ога. Все равно над запросом медитировать, дабы проникнуться :) как и обещал - отдаю виртуальный бакс
19. Lehha 7 04.04.13 19:49 Сейчас в теме
(15) SamNeSvoy, Все правильно твой запрос считал, в него просто не попадали данные по продажам "мимо" склада. Откуда такая жесть взялась в учете - я хЗ, так что еще раз спасибо
17. Sevens 6 04.04.13 13:58 Сейчас в теме
18. Lehha 7 04.04.13 19:47 Сейчас в теме
20. SamNeSvoy 8 04.04.13 23:17 Сейчас в теме
Оставьте свое сообщение

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