Запрос - "поступления/продажи в разрезе топа"
Добрый день. Начинающий программист. Попробовал решить задачу и вроде бы всё верно, но руководитель говорит, что есть ошибка. Я уже голову сломал, но не могу её найти. Вроде результат верный получается. Хотелось бы услышать мнения грамотных людей, может быть Вы сможете мне помочь?:
на входе задаем параметры:
период - начало ___ дата
период - окончание ___ дата
ТОР GP - ___ EX
Система анализирует кол-во поступлений товара с привязкой по заданному ТОПУ, и если кол-во документов "поступлений товара" больше 1, за указанный период времени. На выходе получаем КОЛОНКИ:
1. бренд (сортировка от А до Я)
2. код
3. номенклатура
4. сумма (по кол-ву) закупаемого товара
5. сумма (по кол-ву) проданного товара. (продажа-возврат, не равно продажа) ЕСЛИ ПРОДАЖ НЕ БЫЛО, ТО = ПУСТО.
6. TOP GP
Вот мой код:
на входе задаем параметры:
период - начало ___ дата
период - окончание ___ дата
ТОР GP - ___ EX
Система анализирует кол-во поступлений товара с привязкой по заданному ТОПУ, и если кол-во документов "поступлений товара" больше 1, за указанный период времени. На выходе получаем КОЛОНКИ:
1. бренд (сортировка от А до Я)
2. код
3. номенклатура
4. сумма (по кол-ву) закупаемого товара
5. сумма (по кол-ву) проданного товара. (продажа-возврат, не равно продажа) ЕСЛИ ПРОДАЖ НЕ БЫЛО, ТО = ПУСТО.
6. TOP GP
Вот мой код:
ВЫБРАТЬ
Закупки.Номенклатура КАК Номенклатура,
СУММА(Закупки.Количество) КАК КоличествоЗакупаемогоТовара,
ЗначенияСвойствОбъектов.Свойство КАК TOPGP
ПОМЕСТИТЬ Закупки
ИЗ
РегистрНакопления.Закупки КАК Закупки
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
ПО Закупки.Номенклатура = ЗначенияСвойствОбъектов.Объект
ГДЕ
Закупки.Период МЕЖДУ &ПериодНачало И &ПериодОкончание
И ЗначенияСвойствОбъектов.Значение = &TOPGP
И Закупки.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг
СГРУППИРОВАТЬ ПО
Закупки.Номенклатура,
ЗначенияСвойствОбъектов.Свойство
ИМЕЮЩИЕ
КОЛИЧЕСТВО(Закупки.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг) > 1
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ПродажиОбороты.Номенклатура КАК Номенклатура,
ПродажиОбороты.КоличествоОборот КАК КоличествоПроданногоТовара
ПОМЕСТИТЬ Продажи
ИЗ
РегистрНакопления.Продажи.Обороты(&ПериодНачало, &ПериодОкончание, , ) КАК ПродажиОбороты
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Закупки.Номенклатура.Бренд КАК Бренд,
Закупки.Номенклатура.Код КАК Код,
Закупки.Номенклатура КАК Номенклатура,
Закупки.КоличествоЗакупаемогоТовара КАК КоличествоЗакупаемогоТовара,
Продажи.КоличествоПроданногоТовара КАК КоличествоПроданногоТовара,
Закупки.TOPGP КАК TOPGP
ИЗ
Закупки КАК Закупки
ЛЕВОЕ СОЕДИНЕНИЕ Продажи КАК Продажи
ПО Закупки.Номенклатура = Продажи.Номенклатура
УПОРЯДОЧИТЬ ПО
НоменклатураБренд
ПоказатьПо теме из базы знаний
- Конфигурация "Весовая ред. 3.0" для Платформы 1С 8.3
- 1С:Хлебобулочное и кондитерское производство. Модуль для 1С:ERP и 1С:КА
- Расширенная форма списка Номенклатура и Корзина для УТ11, ERP и КА
- Концепция автоматизации многопрофильного Холдинга в системе АУБ на платформе 1С
- CRM-система в 1С для автоматизации отдела продаж. Почему 1С – это лучшая платформа для CRM-системы?
Найденные решения
Нашёл ошибку. Нужно
заменить на
, так как если будет Поступление товаров и услуг, от которого пойдет более одного движения в Регистр.Закупки с TOPGP, то каждое из этих движений увеличит результат функции . То есть, документ будет один, а движений несколько. А в задаче условие "и если кол-во документов "поступлений товара" больше 1", нужно считать именно документы Поступления, а не сами поступления.
ИМЕЮЩИЕ
КОЛИЧЕСТВО(Закупки.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг) > 1
заменить на
ИМЕЮЩИЕ
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Закупки.Регистратор) > 1
, так как если будет Поступление товаров и услуг, от которого пойдет более одного движения в Регистр.Закупки с TOPGP, то каждое из этих движений увеличит результат функции
КОЛИЧЕСТВО(Закупки.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг)
ВЫБРАТЬ
Закупки.Номенклатура КАК Номенклатура,
СУММА(Закупки.Количество) КАК КоличествоЗакупаемогоТовара
ПОМЕСТИТЬ Закупки
ИЗ
РегистрНакопления.Закупки КАК Закупки
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
ПО Закупки.Номенклатура = ЗначенияСвойствОбъектов.Объект
ГДЕ
Закупки.Период МЕЖДУ &ПериодНачало И &ПериодОкончание
И ЗначенияСвойствОбъектов.Значение = &TOPGP
И Закупки.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг
СГРУППИРОВАТЬ ПО
Закупки.Номенклатура
ИМЕЮЩИЕ
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Закупки.Регистратор) > 1
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ПродажиОбороты.Номенклатура КАК Номенклатура,
ПродажиОбороты.КоличествоОборот КАК КоличествоПроданногоТовара
ПОМЕСТИТЬ Продажи
ИЗ
РегистрНакопления.Продажи.Обороты(&ПериодНачало, &ПериодОкончание, , ) КАК ПродажиОбороты
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Закупки.Номенклатура.Бренд КАК Бренд,
Закупки.Номенклатура.Код КАК Код,
Закупки.Номенклатура КАК Номенклатура,
Закупки.КоличествоЗакупаемогоТовара КАК КоличествоЗакупаемогоТовара,
Продажи.КоличествоПроданногоТовара КАК КоличествоПроданногоТовара
ИЗ
Закупки КАК Закупки
ЛЕВОЕ СОЕДИНЕНИЕ Продажи КАК Продажи
ПО Закупки.Номенклатура = Продажи.Номенклатура
УПОРЯДОЧИТЬ ПО
Бренд
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(8) При условии у меня останутся ТОЛЬКО документы ПоступлениеТоваровУслуг, следовательно в колонке КоличествоДокументовПоступления будут одни единицы. И чем в таком случае эта информация мне поможет? А если же убрать условие , то выведутся и остальные документы регистраторы, которые мне вовсе не нужны.
Поэтому условие пока самое оптимальное, так как я сверялся с РН и если за указанный период было меньше двух документов ПоступлениеТоваровУслуг, то тогда в учёт эти данные не брались.
Закупки.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг
Закупки.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг
Поэтому условие
ИМЕЮЩИЕ
КОЛИЧЕСТВО(Закупки.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг) > 1
(12) Сделал по вашему совету. Результат получился идентичный моему результату плюс даже время одинаковое было затрачено.
Пробовал заменить на
но в таком случае больше затрачивается времени на вычисление результата.
ВЫБРАТЬ
Закупки.Номенклатура КАК Номенклатура,
СУММА(Закупки.Количество) КАК КоличествоЗакупаемогоТовара,
ЗначенияСвойствОбъектов.Свойство КАК TOPGP,
СУММА(ВЫБОР
КОГДА Закупки.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг
ТОГДА 1
ИНАЧЕ 0
КОНЕЦ) КАК КоличествоДокументовПоступления
ПОМЕСТИТЬ Закупки
ИЗ
РегистрНакопления.Закупки КАК Закупки
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
ПО Закупки.Номенклатура = ЗначенияСвойствОбъектов.Объект
ГДЕ
Закупки.Период МЕЖДУ &ПериодНачало И &ПериодОкончание
И ЗначенияСвойствОбъектов.Значение = &TOPGP
СГРУППИРОВАТЬ ПО
Закупки.Номенклатура,
ЗначенияСвойствОбъектов.Свойство
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ПродажиОбороты.Номенклатура КАК Номенклатура,
ПродажиОбороты.КоличествоОборот КАК КоличествоПроданногоТовара
ПОМЕСТИТЬ Продажи
ИЗ
РегистрНакопления.Продажи.Обороты(&ПериодНачало, &ПериодОкончание, , ) КАК ПродажиОбороты
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Закупки.Номенклатура.Бренд КАК Бренд,
Закупки.Номенклатура.Код КАК Код,
Закупки.Номенклатура КАК Номенклатура,
Закупки.КоличествоЗакупаемогоТовара КАК КоличествоЗакупаемогоТовара,
Продажи.КоличествоПроданногоТовара КАК КоличествоПроданногоТовара,
Закупки.TOPGP КАК TOPGP
ИЗ
Закупки КАК Закупки
ЛЕВОЕ СОЕДИНЕНИЕ Продажи КАК Продажи
ПО Закупки.Номенклатура = Продажи.Номенклатура
ГДЕ
Закупки.КоличествоДокументовПоступления > 1
УПОРЯДОЧИТЬ ПО
Бренд
ПоказатьПробовал
ГДЕ
Закупки.КоличествоДокументовПоступления > 1
ИМЕЮЩИЕ
СУММА(ВЫБОР
КОГДА Закупки.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг
ТОГДА 1
ИНАЧЕ 0
КОНЕЦ) > 1
но в таком случае больше затрачивается времени на вычисление результата.
Нашёл ошибку. Нужно
заменить на
, так как если будет Поступление товаров и услуг, от которого пойдет более одного движения в Регистр.Закупки с TOPGP, то каждое из этих движений увеличит результат функции . То есть, документ будет один, а движений несколько. А в задаче условие "и если кол-во документов "поступлений товара" больше 1", нужно считать именно документы Поступления, а не сами поступления.
ИМЕЮЩИЕ
КОЛИЧЕСТВО(Закупки.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг) > 1
заменить на
ИМЕЮЩИЕ
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Закупки.Регистратор) > 1
, так как если будет Поступление товаров и услуг, от которого пойдет более одного движения в Регистр.Закупки с TOPGP, то каждое из этих движений увеличит результат функции
КОЛИЧЕСТВО(Закупки.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг)
ВЫБРАТЬ
Закупки.Номенклатура КАК Номенклатура,
СУММА(Закупки.Количество) КАК КоличествоЗакупаемогоТовара
ПОМЕСТИТЬ Закупки
ИЗ
РегистрНакопления.Закупки КАК Закупки
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
ПО Закупки.Номенклатура = ЗначенияСвойствОбъектов.Объект
ГДЕ
Закупки.Период МЕЖДУ &ПериодНачало И &ПериодОкончание
И ЗначенияСвойствОбъектов.Значение = &TOPGP
И Закупки.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг
СГРУППИРОВАТЬ ПО
Закупки.Номенклатура
ИМЕЮЩИЕ
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Закупки.Регистратор) > 1
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ПродажиОбороты.Номенклатура КАК Номенклатура,
ПродажиОбороты.КоличествоОборот КАК КоличествоПроданногоТовара
ПОМЕСТИТЬ Продажи
ИЗ
РегистрНакопления.Продажи.Обороты(&ПериодНачало, &ПериодОкончание, , ) КАК ПродажиОбороты
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Закупки.Номенклатура.Бренд КАК Бренд,
Закупки.Номенклатура.Код КАК Код,
Закупки.Номенклатура КАК Номенклатура,
Закупки.КоличествоЗакупаемогоТовара КАК КоличествоЗакупаемогоТовара,
Продажи.КоличествоПроданногоТовара КАК КоличествоПроданногоТовара
ИЗ
Закупки КАК Закупки
ЛЕВОЕ СОЕДИНЕНИЕ Продажи КАК Продажи
ПО Закупки.Номенклатура = Продажи.Номенклатура
УПОРЯДОЧИТЬ ПО
Бренд
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот