Запрос - "поступления/продажи в разрезе топа"

1. Jovi 08.05.20 10:12 Сейчас в теме
Добрый день. Начинающий программист. Попробовал решить задачу и вроде бы всё верно, но руководитель говорит, что есть ошибка. Я уже голову сломал, но не могу её найти. Вроде результат верный получается. Хотелось бы услышать мнения грамотных людей, может быть Вы сможете мне помочь?:

на входе задаем параметры:
период - начало ___ дата
период - окончание ___ дата
ТОР GP - ___ EX

Система анализирует кол-во поступлений товара с привязкой по заданному ТОПУ, и если кол-во документов "поступлений товара" больше 1, за указанный период времени. На выходе получаем КОЛОНКИ:

1. бренд (сортировка от А до Я)
2. код
3. номенклатура
4. сумма (по кол-ву) закупаемого товара
5. сумма (по кол-ву) проданного товара. (продажа-возврат, не равно продажа) ЕСЛИ ПРОДАЖ НЕ БЫЛО, ТО = ПУСТО.
6. TOP GP

Вот мой код:
ВЫБРАТЬ
	Закупки.Номенклатура КАК Номенклатура,
	СУММА(Закупки.Количество) КАК КоличествоЗакупаемогоТовара,
	ЗначенияСвойствОбъектов.Свойство КАК TOPGP
ПОМЕСТИТЬ Закупки
ИЗ
	РегистрНакопления.Закупки КАК Закупки
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
		ПО Закупки.Номенклатура = ЗначенияСвойствОбъектов.Объект
ГДЕ
	Закупки.Период МЕЖДУ &ПериодНачало И &ПериодОкончание
	И ЗначенияСвойствОбъектов.Значение = &TOPGP
	И Закупки.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг

СГРУППИРОВАТЬ ПО
	Закупки.Номенклатура,
	ЗначенияСвойствОбъектов.Свойство

ИМЕЮЩИЕ
	КОЛИЧЕСТВО(Закупки.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг) > 1
;

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

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

УПОРЯДОЧИТЬ ПО
	НоменклатураБренд
Показать
По теме из базы знаний
Найденные решения
14. Jovi 08.05.20 16:01 Сейчас в теме
Нашёл ошибку. Нужно
ИМЕЮЩИЕ
    КОЛИЧЕСТВО(Закупки.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг) > 1

заменить на
ИМЕЮЩИЕ
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Закупки.Регистратор) > 1

, так как если будет Поступление товаров и услуг, от которого пойдет более одного движения в Регистр.Закупки с TOPGP, то каждое из этих движений увеличит результат функции
КОЛИЧЕСТВО(Закупки.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг)
. То есть, документ будет один, а движений несколько. А в задаче условие "и если кол-во документов "поступлений товара" больше 1", нужно считать именно документы Поступления, а не сами поступления.
ВЫБРАТЬ
	Закупки.Номенклатура КАК Номенклатура,
	СУММА(Закупки.Количество) КАК КоличествоЗакупаемогоТовара
ПОМЕСТИТЬ Закупки
ИЗ
	РегистрНакопления.Закупки КАК Закупки
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
		ПО Закупки.Номенклатура = ЗначенияСвойствОбъектов.Объект
ГДЕ
	Закупки.Период МЕЖДУ &ПериодНачало И &ПериодОкончание
	И ЗначенияСвойствОбъектов.Значение = &TOPGP
	И Закупки.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг

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

ИМЕЮЩИЕ
	КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Закупки.Регистратор) > 1
;

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

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

УПОРЯДОЧИТЬ ПО
	Бренд
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. alex-l19041 8 08.05.20 10:35 Сейчас в теме
(1)
ИМЕЮЩИЕ
КОЛИЧЕСТВО(Закупки.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг) > 1
- объясните смысл этого условия ?
5. Jovi 08.05.20 10:39 Сейчас в теме
(2)
и если кол-во документов "поступлений товара" больше 1
8. alex-l19041 8 08.05.20 10:43 Сейчас в теме
(5) делайте Выбор Когда Закупки.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг Тогда 1 Иначе 0 Конец КАК КоличествоДокументовПоступления

и затем анализируйте это значение
11. Jovi 08.05.20 11:18 Сейчас в теме
(8) При условии
Закупки.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг
у меня останутся ТОЛЬКО документы ПоступлениеТоваровУслуг, следовательно в колонке КоличествоДокументовПоступления будут одни единицы. И чем в таком случае эта информация мне поможет? А если же убрать условие
Закупки.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг
, то выведутся и остальные документы регистраторы, которые мне вовсе не нужны.
Поэтому условие
ИМЕЮЩИЕ
КОЛИЧЕСТВО(Закупки.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг) > 1
пока самое оптимальное, так как я сверялся с РН и если за указанный период было меньше двух документов ПоступлениеТоваровУслуг, то тогда в учёт эти данные не брались.
12. alex-l19041 8 08.05.20 11:22 Сейчас в теме
(11)
будут одни единицы
- суммируйте при группировке - будет количество регистраторов
13. Jovi 08.05.20 11:31 Сейчас в теме
(12) Сделал по вашему совету. Результат получился идентичный моему результату плюс даже время одинаковое было затрачено.
ВЫБРАТЬ
	Закупки.Номенклатура КАК Номенклатура,
	СУММА(Закупки.Количество) КАК КоличествоЗакупаемогоТовара,
	ЗначенияСвойствОбъектов.Свойство КАК TOPGP,
	СУММА(ВЫБОР
			КОГДА Закупки.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг
				ТОГДА 1
			ИНАЧЕ 0
		КОНЕЦ) КАК КоличествоДокументовПоступления
ПОМЕСТИТЬ Закупки
ИЗ
	РегистрНакопления.Закупки КАК Закупки
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
		ПО Закупки.Номенклатура = ЗначенияСвойствОбъектов.Объект
ГДЕ
	Закупки.Период МЕЖДУ &ПериодНачало И &ПериодОкончание
	И ЗначенияСвойствОбъектов.Значение = &TOPGP

СГРУППИРОВАТЬ ПО
	Закупки.Номенклатура,
	ЗначенияСвойствОбъектов.Свойство
;

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

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

УПОРЯДОЧИТЬ ПО
	Бренд
Показать


Пробовал
ГДЕ
	Закупки.КоличествоДокументовПоступления > 1
заменить на
ИМЕЮЩИЕ
	СУММА(ВЫБОР
			КОГДА Закупки.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг
				ТОГДА 1
			ИНАЧЕ 0
		КОНЕЦ) > 1

но в таком случае больше затрачивается времени на вычисление результата.
3. Salavat 15 08.05.20 10:37 Сейчас в теме
(1)
Вы сможете мне помочь?
чем помочь-то?
6. Jovi 08.05.20 10:40 Сейчас в теме
(3)
руководитель говорит, что есть ошибка.

не могу её найти
9. Salavat 15 08.05.20 11:03 Сейчас в теме
(6)так - спросите руководителя, что ему надо.
(я ошибки не вижу, кроме
Что за конфига?
у меня (в УПП) нет поля "Бренд"
[1C-CODE]Закупки.Номенклатура.Бренд КАК Бренд
,
[/1C-CODE])
10. Jovi 08.05.20 11:07 Сейчас в теме
(9) Ну говорит мол, ищи сам.
Что за конфига?
Trade (10.3.29.1)
4. alex-l19041 8 08.05.20 10:38 Сейчас в теме
(1)
Закупки.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг
- возвращает ИСТИНА когда тип регистратора ПоступлениеТоваровУслуг иначе - ЛОЖЬ
7. Jovi 08.05.20 10:42 Сейчас в теме
(4) верно,мне это и нужно, чтобы из всех документов, которые есть в Закупки.Регистратор вывел только ПоступлениеТоваровУслуг
14. Jovi 08.05.20 16:01 Сейчас в теме
Нашёл ошибку. Нужно
ИМЕЮЩИЕ
    КОЛИЧЕСТВО(Закупки.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг) > 1

заменить на
ИМЕЮЩИЕ
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Закупки.Регистратор) > 1

, так как если будет Поступление товаров и услуг, от которого пойдет более одного движения в Регистр.Закупки с TOPGP, то каждое из этих движений увеличит результат функции
КОЛИЧЕСТВО(Закупки.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг)
. То есть, документ будет один, а движений несколько. А в задаче условие "и если кол-во документов "поступлений товара" больше 1", нужно считать именно документы Поступления, а не сами поступления.
ВЫБРАТЬ
	Закупки.Номенклатура КАК Номенклатура,
	СУММА(Закупки.Количество) КАК КоличествоЗакупаемогоТовара
ПОМЕСТИТЬ Закупки
ИЗ
	РегистрНакопления.Закупки КАК Закупки
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
		ПО Закупки.Номенклатура = ЗначенияСвойствОбъектов.Объект
ГДЕ
	Закупки.Период МЕЖДУ &ПериодНачало И &ПериодОкончание
	И ЗначенияСвойствОбъектов.Значение = &TOPGP
	И Закупки.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг

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

ИМЕЮЩИЕ
	КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Закупки.Регистратор) > 1
;

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

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

УПОРЯДОЧИТЬ ПО
	Бренд
Показать
Оставьте свое сообщение

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