Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Реализация = Возврат (нулевой оборот при наличии продаж)          
Bon Jovi Подменю пользователя
сообщение 15.05.20, 8:37
Сообщение #1

Общительный
**
Группа: Пользователи
Сообщений: 40
Спасибо сказали: 2 раз
Рейтинг: 0

Конфигурация: Trade (10.3.29.1) (http://v8.1c.ru/trade/), версия: 8.3.11.2867, обычные формы.
Добрый день. Начинающий программист. Подскажите пожалуйста, в чём может быть проблема. Есть запрос, мне нужно сделать так, чтобы когда я задавал параметр (число) он анализировал заданное значение и по запуску запроса в табличной части отображался результат где кол-во документов с нулевым оборотом >= "выставленного значения" (за указанный день). Если в качестве параметра я указываю 0 или 1, то выдаётся такой результат: [необходимо зарегистрироваться для просмотра ссылки]. Как я понимаю, за указанную дату по номенклатуре было проведено два возврата, то есть условие >= 0 или 1, работает. Но стоит мне изменить на 2 и выше, то результат пустой. Подскажите, где я совершил ошибку?
ВЫБРАТЬ
    ПродажиОбороты.Номенклатура КАК Номенклатура,
    СУММА(ПродажиОбороты.КоличествоОборот) КАК КоличествоОборот
ПОМЕСТИТЬ ЗапросПоНоменклатуре
ИЗ
    РегистрНакопления.Продажи.Обороты(&Дата_Начала, &Дата_Окончания, Регистратор, ) КАК ПродажиОбороты

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

ИМЕЮЩИЕ
    СУММА(ПродажиОбороты.КоличествоОборот) = 0
;

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

СГРУППИРОВАТЬ ПО
    ПродажиОбороты.Регистратор

ИМЕЮЩИЕ
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ПродажиОбороты.Регистратор) >= &КоличествоВозвратов
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
    ВозвратТоваровОтПокупателяТовары.Номенклатура КАК Номенклатура,
    ВозвратТоваровОтПокупателяТовары.ДокументПартии КАК Реализция,
    ВозвратТоваровОтПокупателяТовары.Ссылка КАК Возврат,
    ВозвратТоваровОтПокупателяТовары.Склад КАК СкладВозврата
ИЗ
    Документ.ВозвратТоваровОтПокупателя.Товары КАК ВозвратТоваровОтПокупателяТовары
ГДЕ
    ВозвратТоваровОтПокупателяТовары.Ссылка В
            (ВЫБРАТЬ
                ЗапросПоВозвратам.Регистратор КАК Регистратор
            ИЗ
                ЗапросПоВозвратам КАК ЗапросПоВозвратам)

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

УПОРЯДОЧИТЬ ПО
    Реализция УБЫВ,
    Номенклатура
ИТОГИ
    КОЛИЧЕСТВО(Реализция),
    КОЛИЧЕСТВО(Возврат)
ПО
    Номенклатура
АВТОУПОРЯДОЧИВАНИЕ

TohaMonster Подменю пользователя
сообщение 18.05.20, 11:25
Сообщение #2

Говорящий
***
Группа: Пользователи
Сообщений: 67
Спасибо сказали: 28 раз
Рейтинг: 28

Обычно, понять, что делает чужая программа тяжелее, чем написать свою. С запросами та же фигня
Не сочтите за менторство, но попробуйте ответить на несколько вопросов:

1. Зачем Вам периодичность Регистратор в первом запросе?
2. Зачем Вам левое соединение во втором запросе? Нельзя ли Номенклатуру передать как отбор в виртуальной таблице?
3. Не получится ли как либо оптимизировать во втором запросе "Обороты(&Дата_Начала, &Дата_Окончания, ...)" и "ГДЕ ... НАЧАЛОПЕРИОДА(ПродажиОбороты.Период, ДЕНЬ) = &ДатаВозврата"?
4. Во второй временной таблице Регистратор нужен для группировки или для вычисления агрегатной функции в условии?
5. Если ответ на 4й вопрос (или хотя бы часть ответа): "для агрегатной функции", то не нужно ли здесь еще добавить какую-то группировку?

Предполагаю, что ответы на 4й и 5й вопросы - ключевые для решения Вашей проблемы

fly Подменю пользователя
сообщение 18.05.20, 14:56
Сообщение #3

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 234
Спасибо сказали: 51 раз
Рейтинг: 48

Bon Jovi @ 15.05.20, 8:37 * ,
СГРУППИРОВАТЬ ПО
    ПродажиОбороты.Регистратор
ИМЕЮЩИЕ
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ПродажиОбороты.Регистратор) >= &КоличествоВозвратов
;


вы получаете 1 регистратор, или 0 регистраторов.

2а не может быть.

если бы вы группировали по Номенклатуре, то вероятнее всего могло быть и больше.

Сообщение отредактировал fly - 18.05.20, 14:58

Bon Jovi Подменю пользователя
сообщение 20.05.20, 10:40
Сообщение #4

Общительный
**
Группа: Пользователи
Сообщений: 40
Спасибо сказали: 2 раз
Рейтинг: 0

TohaMonster @ 18.05.20, 12:25 * ,

Честно, не скажу, так как дали доработать запрос и на сколько я понял на мой результат не влияет.
Мне нужно оставить только ту номенклатуру, у который за период было количество возвратов больше либо равно моего указанного значения.
Вот например мой результат:


По итогам у номенклатуры 10 документов возврата. Значит она попадает в условие >= &значения. Но как это задать, я не знаю. Условие по ИТОГОМ вроде нельзя задавать.

fly @ 18.05.20, 15:56 * ,

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

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

ИМЕЮЩИЕ
    СУММА(ПродажиОбороты.КоличествоОборот) = 0
;

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

СГРУППИРОВАТЬ ПО
    ПродажиОбороты.Регистратор
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВозвратТоваровОтПокупателяТовары.Номенклатура КАК Номенклатура,
    ВозвратТоваровОтПокупателяТовары.ДокументПартии КАК Реализция,
    ВозвратТоваровОтПокупателяТовары.Ссылка КАК Возврат
ИЗ
    Документ.ВозвратТоваровОтПокупателя.Товары КАК ВозвратТоваровОтПокупателяТовары
ГДЕ
    ВозвратТоваровОтПокупателяТовары.Ссылка В
            (ВЫБРАТЬ
                ЗапросПоВозвратам.Регистратор КАК Регистратор
            ИЗ
                ЗапросПоВозвратам КАК ЗапросПоВозвратам)

УПОРЯДОЧИТЬ ПО
    Реализция УБЫВ,
    Номенклатура
ИТОГИ
    КОЛИЧЕСТВО(Реализция),
    КОЛИЧЕСТВО(Возврат)
ПО
    Номенклатура
АВТОУПОРЯДОЧИВАНИЕ



 ! 

Правила: 8
 


Сообщение отредактировал Vofka - 21.05.20, 8:38

Bon Jovi Подменю пользователя
сообщение 25.05.20, 15:52
Сообщение #5

Общительный
**
Группа: Пользователи
Сообщений: 40
Спасибо сказали: 2 раз
Рейтинг: 0

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

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

ИМЕЮЩИЕ
    СУММА(ПродажиОбороты.КоличествоОборот) = 0
;

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

СГРУППИРОВАТЬ ПО
    ПродажиОбороты.Регистратор
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВозвратТоваровОтПокупателяТовары.Номенклатура КАК Номенклатура
ПОМЕСТИТЬ ВозвратыЗаДату
ИЗ
    Документ.ВозвратТоваровОтПокупателя.Товары КАК ВозвратТоваровОтПокупателяТовары
ГДЕ
    ВозвратТоваровОтПокупателяТовары.Ссылка В
            (ВЫБРАТЬ
                ЗапросПоВозвратам.Регистратор КАК Регистратор
            ИЗ
                ЗапросПоВозвратам КАК ЗапросПоВозвратам)
    И НАЧАЛОПЕРИОДА(ВозвратТоваровОтПокупателяТовары.Ссылка.Дата, ДЕНЬ) = &ДатаВозврата
;

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

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

ИМЕЮЩИЕ
    КОЛИЧЕСТВО(ВозвратТоваровОтПокупателяТовары.Ссылка) >= ВЫБОР
        КОГДА &КоличествоВозвратов = 0
            ТОГДА 3
        ИНАЧЕ &КоличествоВозвратов
    КОНЕЦ
;

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
    ПоследниеВозвраты.Номенклатура КАК Номенклатура,
    ТЗНоменклатуры.TOPGP КАК TOPGP,
    ПоследниеВозвраты.Реализация КАК Реализация,
    ПоследниеВозвраты.Возврат КАК Возврат,
    ПоследниеВозвраты.Склад КАК Склад
ИЗ
    ТЗНоменклатуры КАК ТЗНоменклатуры
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПоследниеВозвраты КАК ПоследниеВозвраты
        ПО ТЗНоменклатуры.Номенклатура = ПоследниеВозвраты.Номенклатура

УПОРЯДОЧИТЬ ПО
    Реализация УБЫВ,
    Номенклатура
ИТОГИ
    КОЛИЧЕСТВО(Реализация),
    КОЛИЧЕСТВО(Возврат)
ПО
    Номенклатура
АВТОУПОРЯДОЧИВАНИЕ

Спасибо сказали: Vofka,

andr_andrey Подменю пользователя
сообщение 26.05.20, 15:53
Сообщение #6

Почти ветеран
Иконка группы
Группа: Местный
Сообщений: 623
Спасибо сказали: 166 раз
Рейтинг: 130.8

Цитата(Bon Jovi @ 25.05.20, 16:52) *
ЗначенияСвойствОбъектов.Свойство.Код = "000000467"

"Магические" константы правят миром smile.gif


Signature
#define private public
enum BOOL { FALSE, TRUE, FILENOTFOUND } is made my day

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 29.03.24, 0:56
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!