Имя: Пароль:
1C
 
Как настроить запрос в отчете СКД без дублей при использовании товара со сроком годности
0 Cypher
 
naïve
16.03.23
15:45
Здравствуйте! Подскажите кто знает (пожалуйста), как написать во внешнем отчете СКД, чтобы не было дублей при поступлении товара со сроком годности, одна номенклатура, в этой номенклатуре один штрихкод, на него было поступление со сроком годности 2000020507969 до 16.11.22 с количеством 7 штук, он был продан, через время на эту номенклатуру пришло поступление со сроком годности 2000020507969 до 25.03.23 с количеством 10 штук. Когда товар со сроком годности 2000020507969 до 16.11.22 был продан, его в отчете не было, как приняли товар со сроком годности 2000020507969 до 25.03.23 с количеством 10 штук, товар со сроком годности 2000020507969 до 16.11.22 появился в отчете с новым количеством 10 штук, которого в отчете не должно быть.

Скриншот прилагаю: https://i.ibb.co/BC1k0sZ/Otchet-SKD.jpg
1 Cypher
 
naïve
16.03.23
15:49
Запрос отчета:


ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
    СправочникНоменклатура.Ссылка КАК Номенклатура,
    СправочникНоменклатура.Код КАК Код,
    СправочникНоменклатура.Наименование КАК Наименование,
    СправочникНоменклатура.ВидНоменклатуры КАК ВидНоменклатуры,
    СправочникНоменклатура.ТоварнаяКатегория КАК ТоварнаяКатегория,
    СправочникНоменклатура.Марка КАК Марка,
    ВЫБОР
        КОГДА СправочникНоменклатура.ЭтоГруппа
            ТОГДА ВЫБОР
                    КОГДА СправочникНоменклатура.ПометкаУдаления
                        ТОГДА 7
                    ИНАЧЕ 6
                КОНЕЦ
        ИНАЧЕ ВЫБОР
                КОГДА СправочникНоменклатура.ПометкаУдаления
                    ТОГДА 1
                ИНАЧЕ 0
            КОНЕЦ + ВЫБОР
                КОГДА СправочникНоменклатура.ВидНоменклатуры.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(Перечисление.ВариантыВеденияДополнительныхДанныхПоНоменклатуре.НеИспользовать)
                    ТОГДА 0
                ИНАЧЕ 2
            КОНЕЦ
    КОНЕЦ КАК ИндексКартинки,
    СправочникНоменклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
    СправочникНоменклатура.Артикул КАК Артикул,
    СправочникНоменклатура.НаименованиеПолное КАК НаименованиеПолное,
    СправочникНоменклатура.Вес КАК Вес,
    СправочникНоменклатура.СтавкаНДС КАК СтавкаНДС,
    СправочникНоменклатура.ТипНоменклатуры КАК ТипНоменклатуры,
    МАКСИМУМ(ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0)) КАК Остаток1,
    МАКСИМУМ(ЕСТЬNULL(ТоварыНаСкладахОстатки.РезервОстаток, 0)) КАК Резерв,
    ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) - ЕСТЬNULL(ТоварыНаСкладахОстатки.РезервОстаток, 0) КАК СвободныйОстаток,
    МАКСИМУМ(ВЫРАЗИТЬ(NULL КАК ЧИСЛО(15, 2))) КАК Остаток,
    ТоварыНаСкладахОстатки.Склад КАК Склад,
    МАКСИМУМ(Штрихкоды.Штрихкод) КАК Штрихкод,
    Штрихкоды.Владелец КАК Владелец,
    Штрихкоды.Характеристика КАК Характеристика,
    Штрихкоды.Упаковка КАК Упаковка,
    Штрихкоды.ТипШтрихкода КАК ТипШтрихкода,
    Штрихкоды.ПредставлениеШтрихкода КАК ПредставлениеШтрихкода,
    ЦеныНоменклатурыСрезПоследних.Период КАК Период,
    ЦеныНоменклатурыСрезПоследних.ВидЦены КАК ВидЦены,
    ЦеныНоменклатурыСрезПоследних.Цена КАК Цена,
    ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Ссылка,
    ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) * ТоварыНаСкладахОстатки.КоличествоОстаток КАК ОбщаяСуммаТовара,
    ДвиженияСерийТоваровОбороты.Серия КАК Серия,
    ДвиженияСерийТоваровОбороты.Номенклатура КАК Номенклатура1,
    ДвиженияСерийТоваровОбороты.Характеристика КАК Характеристика1,
    ДвиженияСерийТоваровОбороты.Документ КАК Документ,
    ДвиженияСерийТоваровОбороты.Магазин КАК Магазин,
    ДвиженияСерийТоваровОбороты.СкладскаяОперация КАК СкладскаяОперация,
    МАКСИМУМ(ВЫБОР
            КОГДА ДвиженияСерийТоваровОбороты.СкладскаяОперация = ЗНАЧЕНИЕ(Перечисление.СкладскиеОперации.ОтражениеИзлишков)
                    ИЛИ ДвиженияСерийТоваровОбороты.СкладскаяОперация = ЗНАЧЕНИЕ(Перечисление.СкладскиеОперации.ПриемкаКомплектующихПослеРазборки)
                    ИЛИ ДвиженияСерийТоваровОбороты.СкладскаяОперация = ЗНАЧЕНИЕ(Перечисление.СкладскиеОперации.ПриемкаОтПоставщика)
                    ИЛИ ДвиженияСерийТоваровОбороты.СкладскаяОперация = ЗНАЧЕНИЕ(Перечисление.СкладскиеОперации.ПриемкаПоВозвратуОтКлиента)
                    ИЛИ ДвиженияСерийТоваровОбороты.СкладскаяОперация = ЗНАЧЕНИЕ(Перечисление.СкладскиеОперации.ПриемкаПоПеремещению)
                    ИЛИ ДвиженияСерийТоваровОбороты.СкладскаяОперация = ЗНАЧЕНИЕ(Перечисление.СкладскиеОперации.ПриемкаПоПрочемуОприходованию)
                    ИЛИ ДвиженияСерийТоваровОбороты.СкладскаяОперация = ЗНАЧЕНИЕ(Перечисление.СкладскиеОперации.ПриемкаСобранныхКомплектов)
                    ИЛИ ДвиженияСерийТоваровОбороты.СкладскаяОперация = ЗНАЧЕНИЕ(Перечисление.СкладскиеОперации.ВводОстатков)
                        И ДвиженияСерийТоваровОбороты.КоличествоОборот > 0
                    ИЛИ ДвиженияСерийТоваровОбороты.СкладскаяОперация = ЗНАЧЕНИЕ(Перечисление.СкладскиеОперации.ОтражениеРезультатовПересчетов)
                        И ДвиженияСерийТоваровОбороты.КоличествоОборот > 0
                    ИЛИ ДвиженияСерийТоваровОбороты.СкладскаяОперация = ЗНАЧЕНИЕ(Перечисление.СкладскиеОперации.Пересчет)
                        И ДвиженияСерийТоваровОбороты.КоличествоОборот > 0
                ТОГДА ДвиженияСерийТоваровОбороты.КоличествоОборот
            ИНАЧЕ 0
        КОНЕЦ) КАК Приемка,
    МАКСИМУМ(ВЫБОР
            КОГДА ДвиженияСерийТоваровОбороты.СкладскаяОперация = ЗНАЧЕНИЕ(Перечисление.СкладскиеОперации.ОтгрузкаВРозницу)
                    ИЛИ ДвиженияСерийТоваровОбороты.СкладскаяОперация = ЗНАЧЕНИЕ(Перечисление.СкладскиеОперации.ОтгрузкаКлиенту)
                    ИЛИ ДвиженияСерийТоваровОбороты.СкладскаяОперация = ЗНАЧЕНИЕ(Перечисление.СкладскиеОперации.ОтгрузкаКомплектовДляРазборки)
                    ИЛИ ДвиженияСерийТоваровОбороты.СкладскаяОперация = ЗНАЧЕНИЕ(Перечисление.СкладскиеОперации.ОтгрузкаКомплектующихДляСборки)
                    ИЛИ ДвиженияСерийТоваровОбороты.СкладскаяОперация = ЗНАЧЕНИЕ(Перечисление.СкладскиеОперации.ОтгрузкаНаВнутренниеНужды)
                    ИЛИ ДвиженияСерийТоваровОбороты.СкладскаяОперация = ЗНАЧЕНИЕ(Перечисление.СкладскиеОперации.ОтгрузкаПоВозвратуПоставщику)
                    ИЛИ ДвиженияСерийТоваровОбороты.СкладскаяОперация = ЗНАЧЕНИЕ(Перечисление.СкладскиеОперации.ОтгрузкаПоПеремещению)
                    ИЛИ ДвиженияСерийТоваровОбороты.СкладскаяОперация = ЗНАЧЕНИЕ(Перечисление.СкладскиеОперации.ОтражениеНедостач)
                    ИЛИ ДвиженияСерийТоваровОбороты.СкладскаяОперация = ЗНАЧЕНИЕ(Перечисление.СкладскиеОперации.ОтражениеПорчи)
                    ИЛИ ДвиженияСерийТоваровОбороты.СкладскаяОперация = ЗНАЧЕНИЕ(Перечисление.СкладскиеОперации.ВводОстатков)
                        И ДвиженияСерийТоваровОбороты.КоличествоОборот < 0
                    ИЛИ ДвиженияСерийТоваровОбороты.СкладскаяОперация = ЗНАЧЕНИЕ(Перечисление.СкладскиеОперации.ОтражениеРезультатовПересчетов)
                        И ДвиженияСерийТоваровОбороты.КоличествоОборот < 0
                    ИЛИ ДвиженияСерийТоваровОбороты.СкладскаяОперация = ЗНАЧЕНИЕ(Перечисление.СкладскиеОперации.Пересчет)
                        И ДвиженияСерийТоваровОбороты.КоличествоОборот < 0
                ТОГДА ДвиженияСерийТоваровОбороты.КоличествоОборот
            ИНАЧЕ 0
        КОНЕЦ) КАК Отгрузка,
    ДвиженияСерийТоваровОбороты.КоличествоОборот КАК КоличествоОборот,
    МАКСИМУМ(ВЫБОР
            КОГДА ДвиженияСерийТоваровОбороты.СкладскаяОперация = ЗНАЧЕНИЕ(Перечисление.СкладскиеОперации.ВводОстатков)
                ТОГДА 0
            КОГДА ДвиженияСерийТоваровОбороты.СкладскаяОперация = ЗНАЧЕНИЕ(Перечисление.СкладскиеОперации.ПриемкаОтПоставщика)
                ТОГДА 1
            КОГДА ДвиженияСерийТоваровОбороты.СкладскаяОперация = ЗНАЧЕНИЕ(Перечисление.СкладскиеОперации.ПриемкаПоПеремещению)
                ТОГДА 2
            КОГДА ДвиженияСерийТоваровОбороты.СкладскаяОперация = ЗНАЧЕНИЕ(Перечисление.СкладскиеОперации.ОтражениеИзлишков)
                    ИЛИ ДвиженияСерийТоваровОбороты.СкладскаяОперация = ЗНАЧЕНИЕ(Перечисление.СкладскиеОперации.ОтражениеНедостач)
                    ИЛИ ДвиженияСерийТоваровОбороты.СкладскаяОперация = ЗНАЧЕНИЕ(Перечисление.СкладскиеОперации.ОтражениеПорчи)
                    ИЛИ ДвиженияСерийТоваровОбороты.СкладскаяОперация = ЗНАЧЕНИЕ(Перечисление.СкладскиеОперации.ОтражениеРезультатовПересчетов)
                    ИЛИ ДвиженияСерийТоваровОбороты.СкладскаяОперация = ЗНАЧЕНИЕ(Перечисление.СкладскиеОперации.ПриемкаПоПрочемуОприходованию)
                    ИЛИ ДвиженияСерийТоваровОбороты.СкладскаяОперация = ЗНАЧЕНИЕ(Перечисление.СкладскиеОперации.ПриемкаСобранныхКомплектов)
                    ИЛИ ДвиженияСерийТоваровОбороты.СкладскаяОперация = ЗНАЧЕНИЕ(Перечисление.СкладскиеОперации.ОтражениеРезультатовПересчетов)
                    ИЛИ ДвиженияСерийТоваровОбороты.СкладскаяОперация = ЗНАЧЕНИЕ(Перечисление.СкладскиеОперации.ПриемкаКомплектующихПослеРазборки)
                    ИЛИ ДвиженияСерийТоваровОбороты.СкладскаяОперация = ЗНАЧЕНИЕ(Перечисление.СкладскиеОперации.Пересчет)
                ТОГДА 3
            КОГДА ДвиженияСерийТоваровОбороты.СкладскаяОперация = ЗНАЧЕНИЕ(Перечисление.СкладскиеОперации.ОтгрузкаКомплектовДляРазборки)
                    ИЛИ ДвиженияСерийТоваровОбороты.СкладскаяОперация = ЗНАЧЕНИЕ(Перечисление.СкладскиеОперации.ОтгрузкаКомплектующихДляСборки)
                ТОГДА 4
            КОГДА ДвиженияСерийТоваровОбороты.СкладскаяОперация = ЗНАЧЕНИЕ(Перечисление.СкладскиеОперации.ОтгрузкаВРозницу)
                    ИЛИ ДвиженияСерийТоваровОбороты.СкладскаяОперация = ЗНАЧЕНИЕ(Перечисление.СкладскиеОперации.ОтгрузкаКлиенту)
                    ИЛИ ДвиженияСерийТоваровОбороты.СкладскаяОперация = ЗНАЧЕНИЕ(Перечисление.СкладскиеОперации.ОтгрузкаНаВнутренниеНужды)
                    ИЛИ ДвиженияСерийТоваровОбороты.СкладскаяОперация = ЗНАЧЕНИЕ(Перечисление.СкладскиеОперации.ОтгрузкаПоВозвратуПоставщику)
                    ИЛИ ДвиженияСерийТоваровОбороты.СкладскаяОперация = ЗНАЧЕНИЕ(Перечисление.СкладскиеОперации.ОтгрузкаПоПеремещению)
                ТОГДА 5
            КОГДА ДвиженияСерийТоваровОбороты.СкладскаяОперация = ЗНАЧЕНИЕ(Перечисление.СкладскиеОперации.ПриемкаПоВозвратуОтКлиента)
                ТОГДА 6
            ИНАЧЕ 10
        КОНЕЦ) КАК Поле3,
    ЦеныНоменклатурыСрезПоследних.Цена КАК Цена1,
    ЦеныНоменклатурыСрезПоследних.ВидЦены КАК ВидЦены1
ИЗ
    Справочник.Номенклатура КАК СправочникНоменклатура
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
        ПО (ТоварыНаСкладахОстатки.Номенклатура = СправочникНоменклатура.Ссылка)
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Штрихкоды КАК Штрихкоды
        ПО (Штрихкоды.Владелец = СправочникНоменклатура.Ссылка)
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, Период >= &Период) КАК ЦеныНоменклатурыСрезПоследних
        ПО (ЦеныНоменклатурыСрезПоследних.Номенклатура = СправочникНоменклатура.Ссылка)
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ДвиженияСерийТоваров.Обороты КАК ДвиженияСерийТоваровОбороты
        ПО (ДвиженияСерийТоваровОбороты.Номенклатура = СправочникНоменклатура.Ссылка)
ГДЕ
    НЕ СправочникНоменклатура.ЭтоГруппа

СГРУППИРОВАТЬ ПО
    СправочникНоменклатура.Ссылка,
    СправочникНоменклатура.Код,
    СправочникНоменклатура.Наименование,
    СправочникНоменклатура.ВидНоменклатуры,
    СправочникНоменклатура.ТоварнаяКатегория,
    СправочникНоменклатура.Марка,
    СправочникНоменклатура.ЕдиницаИзмерения,
    СправочникНоменклатура.Артикул,
    СправочникНоменклатура.НаименованиеПолное,
    СправочникНоменклатура.Вес,
    СправочникНоменклатура.СтавкаНДС,
    СправочникНоменклатура.ТипНоменклатуры,
    ТоварыНаСкладахОстатки.Склад,
    Штрихкоды.Владелец,
    Штрихкоды.Характеристика,
    Штрихкоды.Упаковка,
    Штрихкоды.ТипШтрихкода,
    Штрихкоды.ПредставлениеШтрихкода,
    ВЫБОР
        КОГДА СправочникНоменклатура.ЭтоГруппа
            ТОГДА ВЫБОР
                    КОГДА СправочникНоменклатура.ПометкаУдаления
                        ТОГДА 7
                    ИНАЧЕ 6
                КОНЕЦ
        ИНАЧЕ ВЫБОР
                КОГДА СправочникНоменклатура.ПометкаУдаления
                    ТОГДА 1
                ИНАЧЕ 0
            КОНЕЦ + ВЫБОР
                КОГДА СправочникНоменклатура.ВидНоменклатуры.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(Перечисление.ВариантыВеденияДополнительныхДанныхПоНоменклатуре.НеИспользовать)
                    ТОГДА 0
                ИНАЧЕ 2
            КОНЕЦ
    КОНЕЦ,
    ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0),
    ЦеныНоменклатурыСрезПоследних.Период,
    ЦеныНоменклатурыСрезПоследних.ВидЦены,
    ЦеныНоменклатурыСрезПоследних.Цена,
    ЦеныНоменклатурыСрезПоследних.Номенклатура,
    ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) * ТоварыНаСкладахОстатки.КоличествоОстаток,
    ДвиженияСерийТоваровОбороты.Серия,
    ДвиженияСерийТоваровОбороты.Номенклатура,
    ДвиженияСерийТоваровОбороты.Характеристика,
    ДвиженияСерийТоваровОбороты.Документ,
    ДвиженияСерийТоваровОбороты.Магазин,
    ДвиженияСерийТоваровОбороты.СкладскаяОперация,
    ДвиженияСерийТоваровОбороты.КоличествоОборот,
    ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) - ЕСТЬNULL(ТоварыНаСкладахОстатки.РезервОстаток, 0),
    ЦеныНоменклатурыСрезПоследних.Цена,
    ЦеныНоменклатурыСрезПоследних.ВидЦены
2 Cypher
 
naïve
16.03.23
15:57
WhiteDragon93 - Можете помочь?
3 Cypher
 
naïve
16.03.23
17:03
Ребята, вариантов вообще нету?
4 Волшебник
 
модератор
16.03.23
17:04
чтобы не было дублей, надо добавить флажок РАЗЛИЧНЫЕ
5 Cypher
 
naïve
16.03.23
17:08
(4) Подскажите, где находиться флажок РАЗЛИЧНЫЕ ?
6 Cypher
 
naïve
16.03.23
17:16
(4) ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
    СправочникНоменклатура.Ссылка КАК Номенклатура,
    СправочникНоменклатура.Код КАК Код,
    СправочникНоменклатура.Наименование КАК Наименование,
    СправочникНоменклатура.ВидНоменклатуры КАК ВидНоменклатуры,
    СправочникНоменклатура.ТоварнаяКатегория КАК ТоварнаяКатегория,
    СправочникНоменклатура.Марка КАК Марка,


Это оно?
7 Мультук
 
гуру
16.03.23
17:38
(6)

Запрос не читал, но критикую (с)

Имхо людям, которые группируют "по всему чему можно" уже ничего не поможет

СГРУППИРОВАТЬ ПО
    ДвиженияСерийТоваровОбороты.КоличествоОборот

Но группировать по количеству...
8 Cypher
 
naïve
16.03.23
18:30
(7) СГРУППИРОВАТЬ ПО
    ДвиженияСерийТоваровОбороты.КоличествоОборот

Но группировать по количеству...

Не сработало, все равно как и было дубль!
9 azernot
 
16.03.23
18:48
Я так понимаю, в ДвиженияСерийТоваров.Обороты  2 строки по двум сериям, в ТоварыНаСкладах.Остатки одна строка с общим остатком по номенклатуре.
В результате соединения без учёта серий, получается, что остаток дублируется.
Всё логично и понятно.

Очевидно, что нужно и остатки товаров тоже в разрезе серий получать. Это у вас ещё остатки видимо на одном складе лежат :)
10 Cypher
 
naïve
17.03.23
14:32
День добрый! Есть кто на форуме?
11 Cypher
 
naïve
17.03.23
14:34
Подскажите другое, как ДвиженияСерийТоваровОбороты.КоличествоОборот - показывать нулевыми, если они проданы?
12 Cypher
 
naïve
17.03.23
14:48
Ошибка? Это не ошибка, это системная функция.