Имя: Пароль:
1C
 
Простейший запрос какую-то дичь выдает
0 Темный
 
20.09.23
20:18
Добрый вечер, коллеги! Есть простенький запрос:

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

УПОРЯДОЧИТЬ ПО
	Период


С таблицей "ПродажиСПериодамиИЗаявками" - все ок, 12 аккуратных записей. У меня переодичность - месяц, а период отчета год.
А вот виртуальная таблица возвращает дичь. За первый месяц кол-во 51 при продажах 1, в феврале - 2 при продажах 2, в апреле - 4 при продажах 2
Вроде, все правильно в запросе?
1 RomanYS
 
20.09.23
18:17
Вроде, все правильно в запросе?
Зависит от того, что ты хочешь получить. Может не стоит соединять с 4 таблицами, если используется одна из них? Ну или в соединениях отборы прикрутить...
2 Новиков
 
20.09.23
19:54
(0) Тут сама логика ошибочна: ВТ ПродажиСпериодамиИЗаявками, судя по названию и так должна содержать продажи, и какая то надежда на это есть вроде в поле КоличествоИтогом, но для чего её "разворачивать" оборотами по РН ВыручкаИСебестоимостьПродаж - абсолютно не ясно. Какая здесь логика, если откуда-то в запрос приходит таблица "свёрнутая", которую потом именно по оборотам, через ключ аналитики, нужно развернуть? Если Вам этот разворот так необходим, так поменяйте местами эти таблицы, и клейте к развернутой - свернутую ВТ.
3 Темный
 
21.09.23
06:46
(1) 4 таблицы потому, что периодичность пользователь может разную выбирать.
4 Темный
 
21.09.23
06:50
(2) В ВТ "ПродажиСПериодамиИЗаявками" - кол-во нарастающим итогом по каждый период. А справа - продажи за этот период. Вот:
Дата Нарастающий Продажи
01.22         1        1
02.22         2        0
03.22         2        3
04.22         5        1
05.22         6        0
И т.д.
5 Темный
 
21.09.23
06:55
Вопрос не про это. Вопрос такой: Соединяя таблицы из 12 строк в этом запросе, я получаю под сотню строк в результирующем. КАК такое может быть? т. е. таблица оборотов возвращает не одну запись за период, а несколько. В январе возвращает 50 записей, где слева - пусто. И одну, где слева есть соответствующая запись левой таблица. В феврале - две записи по единице. Так и есть, в феврале 2 продажи. Но почему не просто двойка? В апреле - 2 продажи, в результате - 4 записи по единице.
6 АНДР
 
21.09.23
07:08
(4) Почему нарастающий в январе - 1 шт. и феврале - 2 шт. разный, если была продажа только в январе - 1 шт?
7 Темный
 
21.09.23
07:10
(6) Ну да, верно. Это я сейчас тут на коленке написал, просто для примера, что я хочу. Да, нарастающий на 1 меньше
8 АНДР
 
21.09.23
07:14
(4) и (5) что-то у тебя данные по продажам, как минимум за февраль, расходятся в постах.

Добавь в условие соединения выбор ложь или истина в зависимости от того, какая из присоединяемых таблиц нужна в результате.
9 Темный
 
21.09.23
08:52
Ладно, упростим задачу. Вот запрос:
ВЫБРАТЬ
    ВыручкаИСебестоимостьПродажОбороты.КоличествоОборот КАК КоличествоОборот,
    ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаНоменклатуры.Номенклатура КАК АналитикаУчетаНоменклатурыНоменклатура
ИЗ
    РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(&НачалоПериода, &КонецПериода, Месяц, АналитикаУчетаНоменклатуры.Номенклатура = &Номенклатура) КАК ВыручкаИСебестоимостьПродажОбороты

НачалоПериода - 01.02.2022 00:00:00
КонецПериода - 28.02.2022 23:59:59
Результат:
КоличествоОборот    АналитикаУчетаНоменклатурыНоменклатура
1    Планшетный режущий плоттер iECHO PK0705 PLUS
1    Планшетный режущий плоттер iECHO PK0705 PLUS

Почему 2 записи?
10 Гена
 
21.09.23
09:07
(9) А если ВЫБРАТЬ РАЗЛИЧНЫЕ
то сколько выдаёт записей?
11 Темный
 
21.09.23
09:10
(10)
1    01.02.2022 0:00:00    Планшетный режущий плоттер iECHO PK0705 PLUS
12 BDA80
 
21.09.23
09:20
(11) Аналитику в выходные поля добавьте ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры
13 RomanYS
 
21.09.23
09:52
ВТ Обороты выдает свернутые по запрашиваемым измерениям данные. В твоем случае это АналитикаУчетаНоменклатуры, сворачивать до АналитикаУчетаНоменклатуры.Номенклатура ты должен сам явной группировкой
14 АНДР
 
21.09.23
10:12
(12) Регистратор будет информативнее
15 Темный
 
21.09.23
17:27
(12) (13) Да, верно. Из-за этого
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.