Не работает ЕстьNull в СКД

1. Redempty 26.09.22 06:06 Сейчас в теме
Здравствуйте, в течение 4-ех дней уже бьюсь над задачей, перелопатил большое количество форумов, схожих обсуждений, книг и тем не менее, не могу справиться с задачей. Прошу вас, максимально подробно ответить на вопрос. Любители поумничать и рассказать о том где и что почитать - можете не засорять ветку, нужны ответы по делу, а не бесполезные язвительные вбросы. Чтож, сама задача стоит так:
Я выбираю из регистра накопления обороты по продажам, пытаюсь свести значения за разные года в один отчет. Реализовал это через СКД, сделав три запроса. Мне нужно, чтобы в тех полях, где значение регистра отсутствует на текущий год, выводилось не пустое поле, а 0 и при этом оно считалось. Цель в том, чтобы получить разницу между годами и в итоге получить прибыль/убыль от продаж продукции. Саму формулу расчета добавил в ресурсы.
Запрос для первого года:
Код
ВЫБРАТЬ
   ПродажиОбороты.Номенклатура,
   ПродажиОбороты.Контрагент,
   ЕСТЬNULL(ПродажиОбороты.СтоимостьОборот, 0) КАК СтоимостьОборот,
   ПродажиОбороты.Организация,
   ЕстьNull(ПродажиОбороты.НДСОборот, 0) КАК НДСОборот
ИЗ
   РегистрНакопления.Продажи.Обороты(ДОБАВИТЬКДАТЕ(&ДатаОтчета, ГОД, -1), ДОБАВИТЬКДАТЕ(&ДатаОтчета, ДЕНЬ, -1), , ) КАК ПродажиОбороты
Показать полностью

Запрос для второго года:
Код
ВЫБРАТЬ
   ПродажиОбороты.Номенклатура КАК Номенклатура,
   ПродажиОбороты.Контрагент КАК Контрагент,
   ЕСТЬNULL(ПродажиОбороты.СтоимостьОборот, 0) КАК СтоимостьОборот,
   ПродажиОбороты.Организация КАК Организация,
   ЕСТЬNULL(ПродажиОбороты.НДСОборот, 0) КАК НДСОборот
{ВЫБРАТЬ
   Номенклатура.* КАК НоменклатураПред,
   Контрагент.* КАК КонтрагентПред,
   СтоимостьОборот КАК СтоимостьОборотПред,
   Организация.* КАК ОрганизацияПред,
   НДСОборот КАК НДСОборотПред}
ИЗ
   РегистрНакопления.Продажи.Обороты(ДОБАВИТЬКДАТЕ(&ДатаОтчета, ГОД, -2), ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(&ДатаОтчета, ГОД, -1), ДЕНЬ, -1), , ) КАК ПродажиОбороты
Показать полностью


Запрос для общего набора, который является родителем для двух вышеуказанных:
Код
ВЫБРАТЬ
   ПродажиОбороты.Номенклатура КАК Номенклатура,
   ПродажиОбороты.Контрагент КАК Контрагент,
   ПродажиОбороты.СтоимостьОборот КАК СтоимостьОборот,
   ПродажиОбороты.Организация КАК Организация,
   ПродажиОбороты.НДСОборот КАК НДСОборот
{ВЫБРАТЬ
   Номенклатура.* КАК НоменклатураОбщая,
   Контрагент.* КАК КонтрагентОбщий,
   Организация.* КАК ОрганизацияОбщая,
   СтоимостьОборот КАК СтоимостьОборотОбщая,
   НДСОборот КАК НДСОборотОбщий}
ИЗ
   РегистрНакопления.Продажи.Обороты(ДОБАВИТЬКДАТЕ(&ДатаОтчета, ГОД, -2), , , ) КАК ПродажиОбороты
Показать полностью


Пример вычисления поля в ресурсах:
Код
(ВычислитьВыражение("Сумма(СтоимостьОборот)","НоменклатураОбщая", "ОбщийИтог")-ВычислитьВыражение("Сумма(НДСОборот)","НоменклатураОбщая", "ОбщийИтог")) - (ВычислитьВыражение("Сумма(СтоимостьОборотПред)","НоменклатураОбщая", "ОбщийИтог")-ВычислитьВыражение("Сумма(НДСОборотПред)","НоменклатураОбщая", "ОбщийИтог"))
Показать полностью


Повторюсь, в итоговом отчете считаются поля корректно, только для тех строк, где заполнены оба значения. Если где-то пустое значение, то расчет не производится. Изгалялся уже разными способами, ничего не помогло.
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
10. dehro 5 26.09.22 07:02 Сейчас в теме
(6)Так же как и везде.

ВЫБРАТЬ
   ПродажиОбороты.Номенклатура,
   ПродажиОбороты.Контрагент,
   ЕСТЬNULL(ПродажиОбороты.СтоимостьОборот, 0) КАК СтоимостьОборот,
   ПродажиОбороты.Организация,
   ЕстьNull(ПродажиОбороты.НДСОборот, 0) КАК НДСОборот
ПОМЕСТИТЬ ВТ1
ИЗ
   РегистрНакопления.Продажи.Обороты(ДОБАВИТЬКДАТЕ(&ДатаОтчета, ГОД, -1), ДОБАВИТЬКДАТЕ(&ДатаОтчета, ДЕНЬ, -1), , ) КАК ПродажиОбороты
;
ВЫБРАТЬ
   ПродажиОбороты.Номенклатура КАК Номенклатура,
   ПродажиОбороты.Контрагент КАК Контрагент,
   ЕСТЬNULL(ПродажиОбороты.СтоимостьОборот, 0) КАК СтоимостьОборот,
   ПродажиОбороты.Организация КАК Организация,
   ЕСТЬNULL(ПродажиОбороты.НДСОборот, 0) КАК НДСОборот
ПОМЕСТИТЬ ВТ2
ИЗ
   РегистрНакопления.Продажи.Обороты(ДОБАВИТЬКДАТЕ(&ДатаОтчета, ГОД, -2), ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(&ДатаОтчета, ГОД, -1), ДЕНЬ, -1), , ) КАК ПродажиОбороты
;
Выбрать 
ЕстьNULL(ВТ1.Организация, ВТ2.Организация) КАК Организация,
ЕстьNULL(ВТ1.Контрагент, ВТ2.Контрагент) КАК Контрагент,
ЕстьNULL(ВТ1.Номенклатура, ВТ2.Номенклатура) КАК Номенклатура,
ЕСТЬNULL(ВТ1.СтоимостьОборот, ВТ2.СтоимостьОборот,) КАК СтоимостьОборот,
ЕСТЬNULL(ВТ1.НДСОборот, ВТ2.НДСОборот,) КАК НДСОборот
ИЗ ВТ1 как ВТ1
Полное Соединение
ВТ2 как ВТ2
по 
ВТ1.Организация = ВТ2.Организация
И ВТ1.Контрагент = ВТ2.Контрагент
И ВТ1.Номенклатура = ВТ2.Номенклатура
Показать


Это не решение конкретной задачи (даже не вдумывался в неё), это пример использования временных таблиц.
11. muskul 26.09.22 07:21 Сейчас в теме
ВЫБРАТЬ
	ВыручкаТекущийПериод.АналитикаУчетаПоПартнерам.Партнер КАК Клиент,
	ВыручкаТекущийПериод.АналитикаУчетаНоменклатуры.Номенклатура КАК Номенклатура,
	ВыручкаТекущийПериод.Менеджер КАК Менеджер,
	ЕСТЬNULL(ВыручкаТекущийПериод.КоличествоОборот, 0) КАК КоличествоПродаж,
	ЕСТЬNULL(ВыручкаТекущийПериод.СуммаВыручкиОборот, 0) КАК СуммаПродаж,
	ВыручкаТекущийПериод.КоличествоОборот * ВЫБОР
		КОГДА ЕСТЬNULL(ВыручкаТекущийПериод.АналитикаУчетаНоменклатуры.Номенклатура.ВесЗнаменатель, 0) <> 0
			ТОГДА ЕСТЬNULL(ВыручкаТекущийПериод.АналитикаУчетаНоменклатуры.Номенклатура.ВесЧислитель, 0) / ЕСТЬNULL(ВыручкаТекущийПериод.АналитикаУчетаНоменклатуры.Номенклатура.ВесЗнаменатель, 1)
		ИНАЧЕ 0
	КОНЕЦ КАК Вес,
	0 КАК КоличествоПродажПП,
	0 КАК СуммаПродажПП,
	0 КАК ВесПП
ПОМЕСТИТЬ ВТ_Объеденить
ИЗ
	РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(&ПериодНачало, &ПериодКонец, Авто, ) КАК ВыручкаТекущийПериод

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

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

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

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

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ_Готовая.Клиент КАК Клиент,
	ВТ_Готовая.Номенклатура КАК Номенклатура,
	ВТ_Готовая.Менеджер КАК Менеджер,
	ВТ_Готовая.КоличествоПродаж КАК КоличествоПродаж,
	ВТ_Готовая.КоличествоПродажПП КАК КоличествоПродажПП,
	ВЫБОР
		КОГДА ВТ_Готовая.КоличествоПродажПП = 0
			ТОГДА 0
		ИНАЧЕ (ВТ_Готовая.КоличествоПродаж - ВТ_Готовая.КоличествоПродажПП) * 100 / ВТ_Готовая.КоличествоПродажПП
	КОНЕЦ КАК КоличествоПроцент,
	ВЫБОР
		КОГДА ВТ_Готовая.ВесПП = 0
			ТОГДА 0
		ИНАЧЕ (ВТ_Готовая.Вес - ВТ_Готовая.ВесПП) * 100 / ВТ_Готовая.ВесПП
	КОНЕЦ КАК ВесПроцент,
	ВЫБОР
		КОГДА ВТ_Готовая.СуммаПродажПП = 0
			ТОГДА 0
		ИНАЧЕ (ВТ_Готовая.СуммаПродаж - ВТ_Готовая.СуммаПродажПП) * 100 / ВТ_Готовая.СуммаПродажПП
	КОНЕЦ КАК СуммаПроцент,
	ВТ_Готовая.СуммаПродаж КАК СуммаПродаж,
	ВТ_Готовая.СуммаПродажПП КАК СуммаПродажПП,
	ВТ_Готовая.Вес КАК Вес,
	ВТ_Готовая.ВесПП КАК ВесПП
ИЗ
	ВТ_Готовая КАК ВТ_Готовая
Показать


Только надо проверить цифры, иногда может выбрать только 1 из периодов.
20. Redempty 26.09.22 12:48 Сейчас в теме
До ума довести осталось немного, кто сможет, ткните пальцем, где и из-за чего может быть ошибка? Подробно описал в пункте 18 данной ветки.

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

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ПродажиОбороты.Номенклатура КАК Номенклатура,
	ПродажиОбороты.Контрагент КАК Контрагент,
	ЕСТЬNULL(ПродажиОбороты.СтоимостьОборот, 0) КАК СтоимостьОборот,
	ПродажиОбороты.Организация КАК Организация,
	ЕСТЬNULL(ПродажиОбороты.НДСОборот, 0) КАК НДСОборот
ПОМЕСТИТЬ ВТ2
ИЗ
	РегистрНакопления.Продажи.Обороты(ДОБАВИТЬКДАТЕ(&ДатаОтчета, ГОД, -2), ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(&ДатаОтчета, ГОД, -1), ДЕНЬ, -1), , ) КАК ПродажиОбороты
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ЕСТЬNULL(ВТ1.Организация, ВТ2.Организация) КАК Организация,
	ЕСТЬNULL(ВТ1.Контрагент, ВТ2.Контрагент) КАК Контрагент,
	ЕСТЬNULL(ВТ1.Номенклатура, ВТ2.Номенклатура) КАК Номенклатура,
	ЕСТЬNULL(ВТ1.СтоимостьОборот, ВТ2.СтоимостьОборот) КАК СтоимостьОборот,
	ЕСТЬNULL(ВТ1.СтоимостьОборот-ВТ1.НДСОборот, 0) - ЕСТЬNULL(ВТ2.СтоимостьОборот-ВТ2.НДСОборот, 0) КАК РостПадение,
	(ЕСТЬNULL(ВТ1.СтоимостьОборот-ВТ1.НДСОборот, 0) - ЕСТЬNULL(ВТ2.СтоимостьОборот-ВТ2.НДСОборот, 0)) / ЕСТЬNULL(ВТ2.СтоимостьОборот-ВТ2.НДСОборот, ВТ1.СтоимостьОборот-ВТ1.НДСОборот) * 100 КАК РостПадениеПроцент,
	ВТ1.СтоимостьОборот-ВТ1.НДСОборот КАК ПродажиПрошлыйГод,
	ВТ2.СтоимостьОборот-ВТ2.НДСОборот КАК ПродажиПозапрошлыйГод
ИЗ
	ВТ1 КАК ВТ1
		ПОЛНОЕ СОЕДИНЕНИЕ ВТ2 КАК ВТ2
		ПО ВТ1.Организация = ВТ2.Организация
			И ВТ1.Контрагент = ВТ2.Контрагент
			И ВТ1.Номенклатура = ВТ2.Номенклатура
Показать
21. muskul 27.09.22 02:04 Сейчас в теме
(18)в группировках нужно тоже формулу написать.
Прикрепленные файлы:
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. minarenko 26.09.22 06:33 Сейчас в теме
Если нет оборотов за какой то период, то там не будет ни 0, ни null.
Нужно таблицу оборотов связывать с таблицей нужных периодов
3. Redempty 26.09.22 06:34 Сейчас в теме
(2) Вот, я думал, что впринципе не получается обратиться к этому полю, так как значения нет. Подскажите, как их связать можно?
8. Redempty 26.09.22 06:58 Сейчас в теме
(4) Прочитал всю ветку вместе с комментариями. В основном запросе темы говорится, что нужен регистр сведений РегламентированныйПроизводственныйКалендарь. Конфигурация находится на поддержке, и добавление новых элементов не приветствуется, тем более начинающим специалистом. Есть еще интересный запрос в комментариях, но он скорее всего выполняется в модуле объекта, не знаю, подойдет ли мне такой вариант, если мне нужен отчет, который я пилю через СКД?
19. Kovekh 26.09.22 12:43 Сейчас в теме
(8) Если конфа на поддержке, то там, скорее всего, есть курсы валют, которые сами делаются каждый день - можете к ним привязаться. Вроде, курс валют ведётся ежедневно, даже если договора ИТС действительного нет
5. dehro 5 26.09.22 06:49 Сейчас в теме
ЕСТЬNULL в приведённых запросах бесполезен. Либо не будет записи, либо будет 0.
ЕСТЬNULL нужно использовать при соединениях, в том случае, если во второй таблице не найдено значение по условию соединения.

А зачем три набора? Может один запрос пакетный? Эти во временные таблицы, потом соединить и, при соединении, ЕСТЬNULL и указать.
6. Redempty 26.09.22 06:55 Сейчас в теме
(5)
потом соединить и, при

Вся проблема заключается в том, что не приходилось в ВУЗе работать с временными таблицами ни разу, и очень страшно к ним прикасаться. Вот и работаю с тем, что более менее могу сделать самостоятельно. Не могли бы вы подсказать, как их реализовать в СКД?
10. dehro 5 26.09.22 07:02 Сейчас в теме
(6)Так же как и везде.

ВЫБРАТЬ
   ПродажиОбороты.Номенклатура,
   ПродажиОбороты.Контрагент,
   ЕСТЬNULL(ПродажиОбороты.СтоимостьОборот, 0) КАК СтоимостьОборот,
   ПродажиОбороты.Организация,
   ЕстьNull(ПродажиОбороты.НДСОборот, 0) КАК НДСОборот
ПОМЕСТИТЬ ВТ1
ИЗ
   РегистрНакопления.Продажи.Обороты(ДОБАВИТЬКДАТЕ(&ДатаОтчета, ГОД, -1), ДОБАВИТЬКДАТЕ(&ДатаОтчета, ДЕНЬ, -1), , ) КАК ПродажиОбороты
;
ВЫБРАТЬ
   ПродажиОбороты.Номенклатура КАК Номенклатура,
   ПродажиОбороты.Контрагент КАК Контрагент,
   ЕСТЬNULL(ПродажиОбороты.СтоимостьОборот, 0) КАК СтоимостьОборот,
   ПродажиОбороты.Организация КАК Организация,
   ЕСТЬNULL(ПродажиОбороты.НДСОборот, 0) КАК НДСОборот
ПОМЕСТИТЬ ВТ2
ИЗ
   РегистрНакопления.Продажи.Обороты(ДОБАВИТЬКДАТЕ(&ДатаОтчета, ГОД, -2), ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(&ДатаОтчета, ГОД, -1), ДЕНЬ, -1), , ) КАК ПродажиОбороты
;
Выбрать 
ЕстьNULL(ВТ1.Организация, ВТ2.Организация) КАК Организация,
ЕстьNULL(ВТ1.Контрагент, ВТ2.Контрагент) КАК Контрагент,
ЕстьNULL(ВТ1.Номенклатура, ВТ2.Номенклатура) КАК Номенклатура,
ЕСТЬNULL(ВТ1.СтоимостьОборот, ВТ2.СтоимостьОборот,) КАК СтоимостьОборот,
ЕСТЬNULL(ВТ1.НДСОборот, ВТ2.НДСОборот,) КАК НДСОборот
ИЗ ВТ1 как ВТ1
Полное Соединение
ВТ2 как ВТ2
по 
ВТ1.Организация = ВТ2.Организация
И ВТ1.Контрагент = ВТ2.Контрагент
И ВТ1.Номенклатура = ВТ2.Номенклатура
Показать


Это не решение конкретной задачи (даже не вдумывался в неё), это пример использования временных таблиц.
12. Redempty 26.09.22 09:19 Сейчас в теме
(10) Попробовал сделать, как в вашем примере. Для примера вывел столбцы ВТ1.СтоимостьОборот и ВТ2.СтоимостьОборот, а также их разницу. Как видно из отчета, пустые поля все равно сохранились, я что-то сделал не так?
Прикрепленные файлы:
7. muskul 26.09.22 06:57 Сейчас в теме
нужно делать через несколько вт и в них уже считать разницу. не так давно делал похожую задачу, нужно было посчитать отношение периодов. если делать и считать в объедение, то ошибка, а если выбирать уже во временной таблице где уже 0 то все проходит
9. Redempty 26.09.22 07:00 Сейчас в теме
(7) Можете подсказать подробнее, как вообще инициализировать эти ВТ и что в них пихать? Будут ли в них работать условные операторы или ЕстьNull, как привязать их к СКД и получить в нее данные из вт? Никогда не приходилось с ними сталкиваться
11. muskul 26.09.22 07:21 Сейчас в теме
ВЫБРАТЬ
	ВыручкаТекущийПериод.АналитикаУчетаПоПартнерам.Партнер КАК Клиент,
	ВыручкаТекущийПериод.АналитикаУчетаНоменклатуры.Номенклатура КАК Номенклатура,
	ВыручкаТекущийПериод.Менеджер КАК Менеджер,
	ЕСТЬNULL(ВыручкаТекущийПериод.КоличествоОборот, 0) КАК КоличествоПродаж,
	ЕСТЬNULL(ВыручкаТекущийПериод.СуммаВыручкиОборот, 0) КАК СуммаПродаж,
	ВыручкаТекущийПериод.КоличествоОборот * ВЫБОР
		КОГДА ЕСТЬNULL(ВыручкаТекущийПериод.АналитикаУчетаНоменклатуры.Номенклатура.ВесЗнаменатель, 0) <> 0
			ТОГДА ЕСТЬNULL(ВыручкаТекущийПериод.АналитикаУчетаНоменклатуры.Номенклатура.ВесЧислитель, 0) / ЕСТЬNULL(ВыручкаТекущийПериод.АналитикаУчетаНоменклатуры.Номенклатура.ВесЗнаменатель, 1)
		ИНАЧЕ 0
	КОНЕЦ КАК Вес,
	0 КАК КоличествоПродажПП,
	0 КАК СуммаПродажПП,
	0 КАК ВесПП
ПОМЕСТИТЬ ВТ_Объеденить
ИЗ
	РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(&ПериодНачало, &ПериодКонец, Авто, ) КАК ВыручкаТекущийПериод

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

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

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

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

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ_Готовая.Клиент КАК Клиент,
	ВТ_Готовая.Номенклатура КАК Номенклатура,
	ВТ_Готовая.Менеджер КАК Менеджер,
	ВТ_Готовая.КоличествоПродаж КАК КоличествоПродаж,
	ВТ_Готовая.КоличествоПродажПП КАК КоличествоПродажПП,
	ВЫБОР
		КОГДА ВТ_Готовая.КоличествоПродажПП = 0
			ТОГДА 0
		ИНАЧЕ (ВТ_Готовая.КоличествоПродаж - ВТ_Готовая.КоличествоПродажПП) * 100 / ВТ_Готовая.КоличествоПродажПП
	КОНЕЦ КАК КоличествоПроцент,
	ВЫБОР
		КОГДА ВТ_Готовая.ВесПП = 0
			ТОГДА 0
		ИНАЧЕ (ВТ_Готовая.Вес - ВТ_Готовая.ВесПП) * 100 / ВТ_Готовая.ВесПП
	КОНЕЦ КАК ВесПроцент,
	ВЫБОР
		КОГДА ВТ_Готовая.СуммаПродажПП = 0
			ТОГДА 0
		ИНАЧЕ (ВТ_Готовая.СуммаПродаж - ВТ_Готовая.СуммаПродажПП) * 100 / ВТ_Готовая.СуммаПродажПП
	КОНЕЦ КАК СуммаПроцент,
	ВТ_Готовая.СуммаПродаж КАК СуммаПродаж,
	ВТ_Готовая.СуммаПродажПП КАК СуммаПродажПП,
	ВТ_Готовая.Вес КАК Вес,
	ВТ_Готовая.ВесПП КАК ВесПП
ИЗ
	ВТ_Готовая КАК ВТ_Готовая
Показать


Только надо проверить цифры, иногда может выбрать только 1 из периодов.
13. Redempty 26.09.22 09:29 Сейчас в теме
(11) То есть, вы считаете значения столбцов сразу в ВТ, не используя ресурсы? Мне нужно объеденить две ВТ, а потом уже считать сумму для каждого поля и помещать это в другую ВТ?
15. muskul 26.09.22 09:47 Сейчас в теме
(13)у меня там другая сложность была. постоянное деление на ноль. хотя все было в есть нулл
16. Redempty 26.09.22 10:17 Сейчас в теме
(15) Вот у меня как раз сейчас возникла проблема деления на 0. Думал, избавлюсь от проблемы следующим образом: Если значение не заполнено, то подставлю значение другого поля в знаменатель и при делении получится 1. При умножении на 100 выйдет как раз 100% роста или падения. Но не тут-то было, на примере одной строки на скриншоте видно, что почему то выдает значение 700, вместо 100. Можете подсказать, в чем ошибка?

Код расчета столбца:
(ЕСТЬNULL(ВТ1.СтоимостьОборот, 0) - ЕСТЬNULL(ВТ2.СтоимостьОборот, 0)) / ЕСТЬNULL(ВТ2.СтоимостьОборот, ВТ1.СтоимостьОборот) * 100 КАК РостПадениеПроцент,


Ну, и соответственно, в ресурсах для вывода этого столбца беру Сумма(РостПадениеПроцент), иначе не получается вывести этот столбец в отчет
Прикрепленные файлы:
17. Redempty 26.09.22 10:53 Сейчас в теме
(16) Решил попытать счастья и в ресурсах сделал вместо суммы Среднее(РостПадениеПроцент). Данные стали получаться верные, но в общих итогах процент все равно получился неверно посчитанным. По идее, должен выйти 75,49%

UPD: Убрал в ресурсах в принципе какую-либо функцию, получилось почти верно, только общий процент опять же посчитан неверно и встречаются пустые поля для РостПадение, хотя данные для обоих годов есть...
Прикрепленные файлы:
18. Redempty 26.09.22 12:35 Сейчас в теме
(15) Подскажите, пожалуйста, в чем может быть ошибка. Что выводит поля с пустым значением в столбце РостПадениеПроцент, и почему в самой группе проценты считаются верно, а в итогах общий процент выводится неверно? Вывожу поле РостПадениеПроцент через ресурс, в нем никакую функцию не указываю, так и вывожу РостПадениеПроцент

Формула для расчета процента:
(ЕСТЬNULL(ВТ1.СтоимостьОборот-ВТ1.НДСОборот, 0) - ЕСТЬNULL(ВТ2.СтоимостьОборот-ВТ2.НДСОборот, 0)) / ЕСТЬNULL(ВТ2.СтоимостьОборот-ВТ2.НДСОборот, ВТ1.СтоимостьОборот-ВТ1.НДСОборот) * 100 КАК РостПадениеПроцент


Поля с ошибками подчеркнул на скриншотах. Всю голову уже сломал, не могу понять, что может быть не так
Прикрепленные файлы:
21. muskul 27.09.22 02:04 Сейчас в теме
(18)в группировках нужно тоже формулу написать.
Прикрепленные файлы:
22. Redempty 27.09.22 07:02 Сейчас в теме
(21) Спасибо огромное, все получилось
14. Redempty 26.09.22 09:40 Сейчас в теме
Всё вроде заработало, сейчас дособираю тогда отчет и готовое решение залью, тему закрою. Если будут вопросы, напишу. Спасибо огромное!
20. Redempty 26.09.22 12:48 Сейчас в теме
До ума довести осталось немного, кто сможет, ткните пальцем, где и из-за чего может быть ошибка? Подробно описал в пункте 18 данной ветки.

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

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ПродажиОбороты.Номенклатура КАК Номенклатура,
	ПродажиОбороты.Контрагент КАК Контрагент,
	ЕСТЬNULL(ПродажиОбороты.СтоимостьОборот, 0) КАК СтоимостьОборот,
	ПродажиОбороты.Организация КАК Организация,
	ЕСТЬNULL(ПродажиОбороты.НДСОборот, 0) КАК НДСОборот
ПОМЕСТИТЬ ВТ2
ИЗ
	РегистрНакопления.Продажи.Обороты(ДОБАВИТЬКДАТЕ(&ДатаОтчета, ГОД, -2), ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(&ДатаОтчета, ГОД, -1), ДЕНЬ, -1), , ) КАК ПродажиОбороты
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ЕСТЬNULL(ВТ1.Организация, ВТ2.Организация) КАК Организация,
	ЕСТЬNULL(ВТ1.Контрагент, ВТ2.Контрагент) КАК Контрагент,
	ЕСТЬNULL(ВТ1.Номенклатура, ВТ2.Номенклатура) КАК Номенклатура,
	ЕСТЬNULL(ВТ1.СтоимостьОборот, ВТ2.СтоимостьОборот) КАК СтоимостьОборот,
	ЕСТЬNULL(ВТ1.СтоимостьОборот-ВТ1.НДСОборот, 0) - ЕСТЬNULL(ВТ2.СтоимостьОборот-ВТ2.НДСОборот, 0) КАК РостПадение,
	(ЕСТЬNULL(ВТ1.СтоимостьОборот-ВТ1.НДСОборот, 0) - ЕСТЬNULL(ВТ2.СтоимостьОборот-ВТ2.НДСОборот, 0)) / ЕСТЬNULL(ВТ2.СтоимостьОборот-ВТ2.НДСОборот, ВТ1.СтоимостьОборот-ВТ1.НДСОборот) * 100 КАК РостПадениеПроцент,
	ВТ1.СтоимостьОборот-ВТ1.НДСОборот КАК ПродажиПрошлыйГод,
	ВТ2.СтоимостьОборот-ВТ2.НДСОборот КАК ПродажиПозапрошлыйГод
ИЗ
	ВТ1 КАК ВТ1
		ПОЛНОЕ СОЕДИНЕНИЕ ВТ2 КАК ВТ2
		ПО ВТ1.Организация = ВТ2.Организация
			И ВТ1.Контрагент = ВТ2.Контрагент
			И ВТ1.Номенклатура = ВТ2.Номенклатура
Показать
Оставьте свое сообщение

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