Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Как добавить в запрос кол-во заказов по номенклатуре за опр. период? (СКД)

Как добавить в запрос кол-во заказов по номенклатуре за опр. период? (СКД)
Я
   Shecurok
 
02.07.19 - 12:00
Задача сделать отчет. С помощью форумчан отчет сделал, но в Остатках по складам вылезала какая-то не понятная фигня. Данные то задваивались, то затраивались. При этом там мы вывели строчки с количеством заказов за определенный период которые показывали верные значения. Но проблема с остатками никуда не ушла.

Код такой:

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

Полночи сидел исправлял - не исправил.Плюнул, взял за основу СКД стандартного отчета (остатки и доступность по складам). Там все можно настроить только проблема с кол-ом заказов. Я пытался добавить по аналогии с моим отчетом, но насколько я понял в колонку Наличие попадали тогда вообще все заказы. Поместил тогда Заказы с теми же данными во временную таблицу и теперь не пойму как две эти таблицы объединить в пакете запросов 4. Я так понимаю этот запрос формирует данные и итоговые поля. В него я изначально и добавил ЗаказыКлиентов но космические цифры вылезали в колонке Наличие. Убрал оттуда - стало как надо. Я так понимаю надо добавить временную таблицу (что я уже и сделал) и в вычисляемых полях добавить наши 3 колонки. Верно?

Код там такой:

<CODE>ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
    Сегменты.Номенклатура КАК Номенклатура,
    Сегменты.Характеристика КАК Характеристика,
    ИСТИНА КАК ИспользуетсяОтборПоСегментуНоменклатуры
ПОМЕСТИТЬ ОтборПоСегментуНоменклатуры
ИЗ
    РегистрСведений.НоменклатураСегмента КАК Сегменты
{ГДЕ
    Сегменты.Сегмент.* КАК СегментНоменклатуры,
    Сегменты.Номенклатура.* КАК Номенклатура,
    Сегменты.Характеристика.* КАК Характеристика}

ИНДЕКСИРОВАТЬ ПО
    Номенклатура,
    Характеристика,
    ИспользуетсяОтборПоСегментуНоменклатуры
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
    Набор.Номенклатура КАК Номенклатура,
    Набор.Характеристика КАК Характеристика,
    Набор.Склад КАК Склад,
    СУММА(Набор.ВНаличии) КАК ВНаличии,
    СУММА(Набор.ВРезервеСоСклада) КАК ВРезервеСоСклада,
    СУММА(Набор.ВРезервеПодЗаказ) КАК ВРезервеПодЗаказ,
    СУММА(Набор.КОтгрузке) КАК КОтгрузке
ПОМЕСТИТЬ ВтСвободныеОстатки
ИЗ
    (ВЫБРАТЬ
        Таблица.Номенклатура КАК Номенклатура,
        Таблица.Характеристика КАК Характеристика,
        Таблица.Склад КАК Склад,
        Таблица.ВНаличииОстаток КАК ВНаличии,
        Таблица.ВРезервеСоСкладаОстаток КАК ВРезервеСоСклада,
        Таблица.ВРезервеПодЗаказОстаток КАК ВРезервеПодЗаказ,
        0 КАК КОтгрузке
    ИЗ
        РегистрНакопления.СвободныеОстатки.Остатки(, {((Номенклатура, Характеристика) В
                    (ВЫБРАТЬ
                        ТаблицаОтбора.Номенклатура КАК Номенклатура,
                        ТаблицаОтбора.Характеристика КАК Характеристика
                    ИЗ
                        ОтборПоСегментуНоменклатуры КАК ТаблицаОтбора
                    ГДЕ
                        ТаблицаОтбора.ИспользуетсяОтборПоСегментуНоменклатуры = &ИспользуетсяОтборПоСегментуНоменклатуры)), (Склад).*, (Номенклатура).*, (Характеристика).*}) КАК Таблица
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        Таблица.Номенклатура,
        Таблица.Характеристика,
        Таблица.Склад,
        Таблица.КОтгрузкеОстаток,
        0,
        0,
        Таблица.КОтгрузкеОстаток
    ИЗ
        РегистрНакопления.ТоварыКОтгрузке.Остатки(, {((Номенклатура, Характеристика) В
                    (ВЫБРАТЬ
                        ТаблицаОтбора.Номенклатура КАК Номенклатура,
                        ТаблицаОтбора.Характеристика КАК Характеристика
                    ИЗ
                        ОтборПоСегментуНоменклатуры КАК ТаблицаОтбора
                    ГДЕ
                        ТаблицаОтбора.ИспользуетсяОтборПоСегментуНоменклатуры = &ИспользуетсяОтборПоСегментуНоменклатуры)), (Склад).*, (Номенклатура).*, (Характеристика).*}) КАК Таблица) КАК Набор

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

ИНДЕКСИРОВАТЬ ПО
    Номенклатура,
    Характеристика,
    Склад
;

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
    Набор.Номенклатура КАК Номенклатура,
    Набор.Характеристика КАК Характеристика,
    Набор.Склад КАК Склад,
    МАКСИМУМ(&ТекстЗапросаВесНоменклатуры) КАК Вес,
    МАКСИМУМ(&ТекстЗапросаОбъемНоменклатуры) КАК Объем,
    МАКСИМУМ(Набор.Номенклатура.ЕдиницаИзмерения) КАК ЕдиницаХранения,
    МАКСИМУМ(Набор.Номенклатура.ЕдиницаДляОтчетов) КАК ЕдиницаДляОтчетов,
    МАКСИМУМ(Набор.Номенклатура.КоэффициентЕдиницыДляОтчетов) КАК КоэффициентЕдиницыДляОтчетов,
    СУММА(Набор.ВНаличии) КАК ВНаличии,
    СУММА(Набор.ПриходОсновной) КАК ПриходОсновной,
    СУММА(Набор.РасходОсновной) КАК РасходОсновной,
    СУММА(Набор.ВРезервеСоСкладаИПодЗаказ) КАК ВРезервеСоСкладаИПодЗаказ,
    СУММА(Набор.ВРезервеСоСкладаИПодЗаказ) + СУММА(Набор.ВРезервеГрафика) КАК ВРезерве,
    СУММА(Набор.КОтгрузке) КАК Котгрузке
ИЗ
    (ВЫБРАТЬ
        Таблица.Номенклатура КАК Номенклатура,
        Таблица.Характеристика КАК Характеристика,
        Таблица.Склад КАК Склад,
        Таблица.ВНаличии КАК ВНаличии,
        0 КАК ПриходОсновной,
        Таблица.ВРезервеПодЗаказ + Таблица.ВРезервеСоСклада + Таблица.КОтгрузке КАК РасходОсновной,
        Таблица.ВРезервеПодЗаказ + Таблица.ВРезервеСоСклада КАК ВРезервеСоСкладаИПодЗаказ,
        0 КАК ВРезервеГрафика,
        Таблица.КОтгрузке КАК КОтгрузке
    ИЗ
        ВтСвободныеОстатки КАК Таблица
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        Таблица.Номенклатура,
        Таблица.Характеристика,
        Таблица.Склад,
        0,
        Таблица.КоличествоИзЗаказовОстаток,
        0,
        0,
        0,
        0
    ИЗ
        РегистрНакопления.ГрафикПоступленияТоваров.Остатки(, {((Номенклатура, Характеристика) В
                    (ВЫБРАТЬ
                        ТаблицаОтбора.Номенклатура КАК Номенклатура,
                        ТаблицаОтбора.Характеристика КАК Характеристика
                    ИЗ
                        ОтборПоСегментуНоменклатуры КАК ТаблицаОтбора
                    ГДЕ
                        ТаблицаОтбора.ИспользуетсяОтборПоСегментуНоменклатуры = &ИспользуетсяОтборПоСегментуНоменклатуры)), (Склад).*, (Номенклатура).*, (Характеристика).*}) КАК Таблица
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        Таблица.Номенклатура,
        Таблица.Характеристика,
        Таблица.Склад,
        0,
        0,
        Таблица.КоличествоИзЗаказовОстаток,
        0,
        0,
        0
    ИЗ
        РегистрНакопления.ГрафикОтгрузкиТоваров.Остатки(, {((Номенклатура, Характеристика) В
                    (ВЫБРАТЬ
                        ТаблицаОтбора.Номенклатура КАК Номенклатура,
                        ТаблицаОтбора.Характеристика КАК Характеристика
                    ИЗ
                        ОтборПоСегментуНоменклатуры КАК ТаблицаОтбора
                    ГДЕ
                        ТаблицаОтбора.ИспользуетсяОтборПоСегментуНоменклатуры = &ИспользуетсяОтборПоСегментуНоменклатуры)), (Склад).*, (Номенклатура).*, (Характеристика).*}) КАК Таблица
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        Таблица.Номенклатура,
        Таблица.Характеристика,
        Таблица.Склад,
        0,
        0,
        0,
        0,
        -Таблица.Количество,
        0
    ИЗ
        РегистрСведений.ДоступныеОстаткиПланируемыхПоступлений КАК Таблица
    ГДЕ
        Таблица.Количество < 0
        И Таблица.ДатаДоступности = ДАТАВРЕМЯ(1, 1, 1)
    {ГДЕ
        ((Таблица.Номенклатура, Таблица.Характеристика) В
                (ВЫБРАТЬ
                    ТаблицаОтбора.Номенклатура КАК Номенклатура,
                    ТаблицаОтбора.Характеристика КАК Характеристика
                ИЗ
                    ОтборПоСегментуНоменклатуры КАК ТаблицаОтбора
                ГДЕ
                    ТаблицаОтбора.ИспользуетсяОтборПоСегментуНоменклатуры = &ИспользуетсяОтборПоСегментуНоменклатуры)),
        Таблица.Склад.* КАК Склад,
        Таблица.Номенклатура.* КАК Номенклатура,
        Таблица.Характеристика.* КАК Характеристика}) КАК Набор

СГРУППИРОВАТЬ ПО
    Набор.Номенклатура,
    Набор.Характеристика,
    Набор.Склад
</CODE>

Изначально в первом отчете в вычисляемых полях для 30, 60, 90 дней писал такой код:

<CODE>Выбор когда ДатаЗаказа >= ДобавитьКДате(&ДатаКон, "День", -30) Тогда Заказано Иначе 0 Конец</CODE>

Если необходимо могу два отчета кинуть на почту или файлообменник, кому как удобнее.
 
 
   Shecurok
 
1 - 02.07.19 - 12:00
А еще хз как тут код оформлять. Делал по образцу форматирования

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует