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

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

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

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

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

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

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

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

УПОРЯДОЧИТЬ ПО
    Реализция УБЫВ,
    Номенклатура
ИТОГИ
    КОЛИЧЕСТВО(Реализция),
    КОЛИЧЕСТВО(Возврат)
ПО
    Номенклатура
АВТОУПОРЯДОЧИВАНИЕ
1 VladZ
 
15.05.20
09:48
(0) Не понял постановку задачи. Попробуй еще раз объяснить.
2 Bon Jovi
 
15.05.20
09:51
Нужно в список параметров добавить кол-во возвратов, с изменяемым кол-вом. по умолчанию значение = 3. Анализируем заданное значение и по запуску запроса в табличной части отображаем результат где кол-во документов с нулевым оборотом >= "выставленного значения".
3 K1RSAN
 
15.05.20
09:52
Меня смущает левое соединение во втором запросе. Как вариант, сформируй в консоли запросов данные по второму запросу, только "имеющие" перенеси в поле запроса, и увидишь, какое количество туда попадает. И оттуда уже смотри, почему туда попадает не то, что ты хочешь
4 Bon Jovi
 
15.05.20
11:23
(3) Не подскажите, почему когда я условие вставляю:
ВЫБОР
    КОГДА &КоличествоВозвратов = 0
        ТОГДА КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ПродажиОбороты.Регистратор) >= 3
    ИНАЧЕ КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ПродажиОбороты.Регистратор) >= &КоличествоВозвратов
КОНЕЦ

мне выдаётся ошибка:
"операция не разрешена в предложении имеющие"???
5 K1RSAN
 
15.05.20
11:27
(4) КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ПродажиОбороты.Регистратор) >= 3
это что? Условие?
6 K1RSAN
 
15.05.20
11:29
Вы посмотрите, что без ваших "имеющих" во втором запросе попадает, а потом уже думайте над условиями.
7 Bon Jovi
 
15.05.20
12:12
(6) Во второй запрос попадают документы возврата: https://ibb.co/qxLP6jK
8 Bon Jovi
 
15.05.20
12:12
(6) И теперь к этому результату мне нужно задать условие: Нужно в список параметров добавить кол-во возвратов, с изменяемым кол-вом. по умолчанию значение = 3. Анализируем заданное значение и по запуску запроса в табличной части отображаем результат где кол-во документов с нулевым оборотом >= "выставленного значения".
9 dezss
 
15.05.20
12:24
(8) Зачем эту константу пихать в запрос?
Не проще ли так:
Запрос.УстановитьПараметр("КоличествоВозвратов", ?(КоличествоВозвратов = 0, 3, КоличествоВозвратов));
10 Bon Jovi
 
15.05.20
12:25
(9) Так как стоит задача, доделать именно запрос
11 Bon Jovi
 
15.05.20
12:28
(6) Возможно ли задать условие на "ПЕРВЫЕ". То есть, если параметр = 3, то показать первые 3. Если 5, то первые 5???
12 K1RSAN
 
15.05.20
12:32
(7) Добавь ко второму запросу  КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ПродажиОбороты.Регистратор)
Узнаешь. И если там везде 0 да 1 - откуда взять 3?
13 Bon Jovi
 
15.05.20
12:50
(12) Просто мне нужно определить если возвратов было больше 3 (например), тогда выводить
14 Bon Jovi
 
15.05.20
12:52
(13) Грубо говоря, когда итог подводишь, то отображается, что у этой номенклатуры за такой то период было такое то количество возвратов. и если это количество больше 3 (например), то выводить
15 Bon Jovi
 
20.05.20
11:42
Мне нужно оставить только ту номенклатуру, у который за период было количество возвратов больше либо равно моего указанного значения.
Вот например мой результат: https://ibb.co/VLMnfMg. По итогам у номенклатуры 10 документов возврата. Значит она попадает в условие >= &значения. Но как это задать, я не знаю. Условие по ИТОГОМ вроде нельзя задавать.
16 Bon Jovi
 
25.05.20
16:53
Нашёл решение. Готовый запрос:
ВЫБРАТЬ
    ПродажиОбороты.Номенклатура КАК Номенклатура,
    СУММА(ПродажиОбороты.КоличествоОборот) КАК КоличествоОборот
ПОМЕСТИТЬ ЗапросПоНоменклатуре
ИЗ
    РегистрНакопления.Продажи.Обороты(&Дата_Начала, &Дата_Окончания, Регистратор, ) КАК ПродажиОбороты

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

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

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

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

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

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

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

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

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

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

УПОРЯДОЧИТЬ ПО
    Реализация УБЫВ,
    Номенклатура
ИТОГИ
    КОЛИЧЕСТВО(Реализация),
    КОЛИЧЕСТВО(Возврат)
ПО
    Номенклатура
АВТОУПОРЯДОЧИВАНИЕ
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn