8.х Отбор по срезпоследних в СКД

Тема в разделе "Система компоновки данных (СКД)", создана пользователем 161a, 21 янв 2016.

  1. TopicStarter Overlay
    161a
    Offline

    161a

    Регистрация:
    24 мар 2014
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
    Всем привет! Совсем сломал остатки мосХа. Облазил кучу форумов, а воз и ныне там... :(
    Имеется Розница на УФ. Потребовалось для своих нужд добавить учет по статусам товаров. Был добавлен независимый периодический (секунда) регистр "Статусы товаров" с измерениями "Номенклатура","Характеристики Номенклатуры" и ресурсом "Статус".
    В отчет на СКД "Ведомость по товарам на складах" потребовалось вставить отбор по товарам, у которых на конец периода статус равен условию.
    Вот код стандартного отчета:
    Код:
    ВЫБРАТЬ РАЗРЕШЕННЫЕ
        ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
        ТоварыНаСкладахОстаткиИОбороты.Характеристика КАК Характеристика,
        ТоварыНаСкладахОстаткиИОбороты.Склад КАК Склад,
        ТоварыНаСкладахОстаткиИОбороты.Склад.Магазин КАК Магазин,
        ВЫБОР
            КОГДА ТоварыНаСкладахОстаткиИОбороты.Регистратор = НЕОПРЕДЕЛЕНО
                ТОГДА NULL
            ИНАЧЕ ТоварыНаСкладахОстаткиИОбороты.Регистратор
        КОНЕЦ КАК Регистратор,
        ТоварыНаСкладахОстаткиИОбороты.ПериодСекунда КАК ПериодСекунда,
        ТоварыНаСкладахОстаткиИОбороты.ПериодДень КАК ПериодДень,
        ТоварыНаСкладахОстаткиИОбороты.ПериодНеделя КАК ПериодНеделя,
        ТоварыНаСкладахОстаткиИОбороты.ПериодДекада КАК ПериодДекада,
        ТоварыНаСкладахОстаткиИОбороты.ПериодМесяц КАК ПериодМесяц,
        ТоварыНаСкладахОстаткиИОбороты.ПериодКвартал КАК ПериодКвартал,
        ТоварыНаСкладахОстаткиИОбороты.ПериодГод КАК ПериодГод,
        ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток КАК КонечныйОстаток,
        ТоварыНаСкладахОстаткиИОбороты.КоличествоОборот КАК Оборот,
        ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход КАК Приход,
        ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход КАК Расход,
        ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток КАК НачальныйОстаток
    ИЗ
        РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(, , Авто, , ) КАК ТоварыНаСкладахОстаткиИОбороты
    Еслибы период отбора был задан четко ДатаНачала/ДатаКонца, то проблем бы не было, а так...
    уже пробовал и так
    Код:
    ВЫБРАТЬ
        СтатусыТоваров.Номенклатура КАК Номенклатура,
        СтатусыТоваров.Статус КАК ПоследнийСтатус,
        СтатусыИМЕИ.ХарактеристикиНоменклатуры КАК Характеристика,
        Даты.ДатаПоследнегоИзменения КАК ДатаПоследнегоИзменения
    ИЗ
        РегистрСведений.СтатусыТоваров.СрезПоследних(КОНЕЦПЕРИОДА(&Период, ДЕНЬ), Статус = &Статус) КАК СтатусыТоваров
            ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                Периоды.Номенклатура КАК Номенклатура,
                Периоды.ХарактеристикиНоменклатуры КАК Характеристика,
                МАКСИМУМ(Периоды.Период) КАК ДатаПоследнегоИзменения
            ИЗ
                РегистрСведений.СтатусыТоваров.СрезПоследних(КОНЕЦПЕРИОДА(&Период, ДЕНЬ), ) КАК Периоды
           
            СГРУППИРОВАТЬ ПО
                Периоды.Номенклатура,
                Периоды.ХарактеристикиНоменклатуры) КАК Даты
            ПО (Даты.Номенклатура = СтатусыИМЕИ.Номенклатура)
                И СтатусыТоваров.ХарактеристикиНоменклатуры = Даты.Характеристика
                И СтатусыТоваров.Период = Даты.ДатаПоследнегоИзменения
    и так
    Код:
            ВЫБРАТЬ
        &Дата КАК Дата,
        СтатусыТоваровСрезПоследних.Номенклатура КАК Номенклатура,
        СтатусыТоваровСрезПоследних.ХарактеристикиНоменклатуры КАК Характеристика,
        СтатусыТоваровСрезПоследних.Статус КАК Статус
    {ВЫБРАТЬ
        Дата,
        Номенклатура.*,
        Статус.*}
    ИЗ
        РегистрСведений.СтатусыТоваров.СрезПоследних(
                &Дата,
                Номенклатура = &Номенклатура
                    И Статус = &Статус) КАК СтатусыТоваровСрезПоследних
        
    и еще кучей разных способов...
    Подскажите, ПЛИИИИЗ, как правильно сделать-то...
  2. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.559
    Симпатии:
    716
    Баллы:
    204
    Забудьте про СрезПоследних. Нужно делать свой динамический срез последних, можно найти поиском по форуму.

    В общих чертах это выглядит так:
    Код:
    Выбрать
    Таб1.Поле1,
    Таб1.Поле2,
    Таб2.Поле3
    ИЗ
    (Выбрать
    Таб1.Поле1,
    Таб1.Поле2,
    Максимум(Таб2.Поле2)
    КАК Поле3
    Из
    Таб1 КАК Таб1
    Левое Соединение Таб2 КАК Таб2
    По Таб1.Поле1 = Таб2.Поле1
    И Таб1.Поле2 >= Таб2.Поле2) КАК Таб1
    Левое Соединение Таб2 КАК Таб2
    ПО Таб1.Поле1 = Таб2.Поле1
    И Таб1.Поле3 = Таб2.Поле2
  3. TopicStarter Overlay
    161a
    Offline

    161a

    Регистрация:
    24 мар 2014
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
    Вы рекомендуете сделать в се в одном наборе данных? или все же в двух?
  4. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.559
    Симпатии:
    716
    Баллы:
    204
    Вероятно, 1 набор данных, но возможны и несколько - зависит от....
  5. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.638
    Симпатии:
    948
    Баллы:
    204
  6. TopicStarter Overlay
    161a
    Offline

    161a

    Регистрация:
    24 мар 2014
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
    у меня никак не получается связать конечную дату периода по статусам и остатков. по моему разумению сначала должны отобраться товары по определенному статусу, а потом этот список передаться как скорректированный в запрос по остаткам. Т.е. если например выбрана группа "Пром. товары", а в ней с остатками, на конец периода, 100 товаров, то если отобрать по статусу, например, "На реализации", то их в отбор по остаткам должно попасть, например, 20.
    меня сбивает с толку
    Код:
    ТоварыНаСкладахОстаткиИОбороты.ПериодСекунда КАК ПериодСекунда,
        ТоварыНаСкладахОстаткиИОбороты.ПериодДень КАК ПериодДень,
        ТоварыНаСкладахОстаткиИОбороты.ПериодНеделя КАК ПериодНеделя,
        ТоварыНаСкладахОстаткиИОбороты.ПериодДекада КАК ПериодДекада,
        ТоварыНаСкладахОстаткиИОбороты.ПериодМесяц КАК ПериодМесяц,
        ТоварыНаСкладахОстаткиИОбороты.ПериодКвартал КАК ПериодКвартал,
        ТоварыНаСкладахОстаткиИОбороты.ПериодГод КАК ПериодГод,
    .
    как к ней привязать конец периода по статусу.
  7. TopicStarter Overlay
    161a
    Offline

    161a

    Регистрация:
    24 мар 2014
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
    мдя-с... одни гуру собрались.
  8. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.638
    Симпатии:
    948
    Баллы:
    204
    Всмысле не понял Вашего последнего сообщения.

    Я те правильно понмаю что у Вас образно говоря таблицы Товары и Статусы это срез РС и Вам надо связать товары со сРезом на дату и по товару
    Так что Вам мешает сразу делать срез последних с нужными отборами и потом связывать его. о чем вы и пишите.
  9. TopicStarter Overlay
    161a
    Offline

    161a

    Регистрация:
    24 мар 2014
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
    Статусы это периодический РС, а товары это РН.
  10. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.638
    Симпатии:
    948
    Баллы:
    204
    Ну и я и написал "Статусы это срез РС"
  11. TopicStarter Overlay
    161a
    Offline

    161a

    Регистрация:
    24 мар 2014
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
    в общем сделал так
    Код:
    ВЫБРАТЬ
        СтатусыТоваров.Номенклатура КАК Номенклатура,
        СтатусыТоваров.Статус КАК ПоследнийСтатус,
        СтатусыТоваров.ХарактеристикиНоменклатуры КАК Характеристика,
        Даты.ДатаПоследнегоИзменения КАК ДатаПоследнегоИзменения
    ПОМЕСТИТЬ втСТ
    ИЗ
        РегистрСведений.ИзменениеСтатусовТоваров.СрезПоследних(&ПериодСтатусыТоваров, ) КАК СтатусыТоваров
            ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                Периоды.Номенклатура КАК Номенклатура,
                Периоды.ХарактеристикиНоменклатуры КАК Характеристика,
                МАКСИМУМ(Периоды.Период) КАК ДатаПоследнегоИзменения
            ИЗ
                РегистрСведений.ИзменениеСтатусовТоваров.СрезПоследних(&ПериодДаты, ) КАК Периоды
            ГДЕ
                Периоды.Статус В(&Статус)
            //    И Периоды.Период = КОНЕЦПЕРИОДА(Периоды.Период, ДЕНЬ)
           
            СГРУППИРОВАТЬ ПО
                Периоды.Номенклатура,
                Периоды.ХарактеристикиНоменклатуры) КАК Даты
            ПО (Даты.Номенклатура = СтатусыТоваров.Номенклатура)
                И СтатусыТоваров.ХарактеристикиНоменклатуры = Даты.Характеристика
                И СтатусыТоваров.Период = Даты.ДатаПоследнегоИзменения
    ГДЕ
        СтатусыТоваров.Статус = &Статус
    //    И СтатусыТоваров.Период = КОНЕЦПЕРИОДА(СтатусыТоваров.Период, ДЕНЬ)
    ;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ РАЗРЕШЕННЫЕ
        ПродажиОбороты.Регистратор КАК Регистратор,
        ПродажиОбороты.ДокументПродажи КАК ДокументПродажи,
        ПродажиОбороты.Склад КАК Склад,
        ПродажиОбороты.Склад.Организация КАК Организация,
        ПродажиОбороты.Магазин КАК Магазин,
        ПродажиОбороты.Номенклатура КАК Номенклатура,
        ПродажиОбороты.ЗаказПокупателя КАК ЗаказПокупателя,
        ПродажиОбороты.Характеристика КАК Характеристика,
        ПродажиОбороты.Продавец КАК Продавец,
        ПродажиОбороты.КоличествоОборот КАК КоличествоТоваров,
        ПродажиОбороты.СтоимостьОборот КАК СуммаПродажСоСкидкой,
        ПродажиОбороты.СтоимостьБезСкидокОборот КАК СуммаПродажБезСкидки,
        ПродажиОбороты.НомерСтроки,
        ПродажиОбороты.ПериодСекунда,
        ПродажиОбороты.ПериодМинута,
        ПродажиОбороты.ПериодЧас,
        ПродажиОбороты.ПериодДень,
        ПродажиОбороты.ПериодНеделя,
        ПродажиОбороты.ПериодДекада,
        ПродажиОбороты.ПериодМесяц,
        ПродажиОбороты.ПериодКвартал,
        ПродажиОбороты.ПериодПолугодие,
        ПродажиОбороты.ПериодГод,
        втСТ.ПоследнийСтатус КАК Статус
    {ВЫБРАТЬ
        Организация.* КАК Организация,
        Магазин.* КАК Магазин,
        Номенклатура.* КАК Номенклатура,
        Характеристика.* КАК Характеристика,
        Продавец.* КАК Продавец,
        Регистратор.* КАК Регистратор,
        ДокументПродажи.* КАК ДокументПродажи,
        КоличествоТоваров КАК КоличествоТоваров,
        СуммаПродажСоСкидкой КАК СуммаПродажСоСкидкой,
        СуммаПродажБезСкидки КАК СуммаПродажБезСкидки}
    ИЗ
        втСТ КАК втСТ
            ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты({(&НачалоПериода)}, {(&КонецПериода)}, Авто, {(Склад).* КАК Склад, (Номенклатура).* КАК Номенклатура, (Характеристика).* КАК Характеристика, (ДокументПродажи).* КАК ДокументПродажи, (Продавец).* КАК Продавец, (Магазин).* КАК Магазин, (Склад.Организация).* КАК Организация}) КАК ПродажиОбороты
            ПО втСТ.Номенклатура = ПродажиОбороты.Номенклатура
                И втСТ.Характеристика = ПродажиОбороты.Характеристика
    ГДЕ
        втСТ.ПоследнийСтатус = &ПоследнийСтатус
    {ГДЕ
        ПродажиОбороты.КоличествоОборот КАК КоличествоТоваров,
        ПродажиОбороты.СтоимостьОборот КАК СуммаПродажСоСкидкой,
        ПродажиОбороты.СтоимостьБезСкидокОборот КАК СуммаПродажБезСкидки}
    
    теперь выскакивает такая ошибка :
    "{(7,2)}Ошибка обработки представления "РегистрСведений.ИзменениеСтатусовТоваров.СрезПоследних: Несоответствие типов(Параметр номер ""1"")" <<?>> РегистрСведений.ИзменениеСтатусовТоваров.СрезПоследних(П, ) КАК СтатусыТоваров"
  12. TopicStarter Overlay
    161a
    Offline

    161a

    Регистрация:
    24 мар 2014
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
    в общем, почти решил я этот впрос
    Код:
    ВЫБРАТЬ
        СтатусыИМЕИ.Номенклатура КАК Номенклатура,
        СтатусыИМЕИ.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры,
        СтатусыИМЕИ.Период КАК Период,
        СтатусыИМЕИ.Статус
    ПОМЕСТИТЬ втИМЕИ
    {ВЫБРАТЬ
        Номенклатура.*,
        ХарактеристикиНоменклатуры.*,
        Период}
    ИЗ
        РегистрСведений.ИзменениеСтатусовИМЕИ.СрезПоследних(&КонецПериода {(&КонецПериода)}, {(Статус).* КАК Статус}) КАК СтатусыИМЕИ
            ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                Периоды.Номенклатура КАК Номенклатура,
                Периоды.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры,
                МАКСИМУМ(Периоды.Период) КАК ДатаПоследнегоИзменения,
                Периоды.Статус КАК Статус
            {ВЫБРАТЬ
                Номенклатура.*,
                ХарактеристикиНоменклатуры.*,
                ДатаПоследнегоИзменения}
            ИЗ
                РегистрСведений.ИзменениеСтатусовИМЕИ.СрезПоследних(&КонецПериода {(&КонецПериода)}, {(Статус).* КАК Статус}) КАК Периоды
            {ГДЕ
                Периоды.Статус.*}
           
            СГРУППИРОВАТЬ ПО
                Периоды.Номенклатура,
                Периоды.ХарактеристикиНоменклатуры,
                Периоды.Статус) КАК ДАТЫ
            ПО (ДАТЫ.Номенклатура = СтатусыИМЕИ.Номенклатура)
                И (ДАТЫ.ХарактеристикиНоменклатуры = СтатусыИМЕИ.ХарактеристикиНоменклатуры)
                И (ДАТЫ.ДатаПоследнегоИзменения = СтатусыИМЕИ.Период)
    {ГДЕ
        СтатусыИМЕИ.Статус.*,
        ДАТЫ.Статус.*}
    ;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ РАЗРЕШЕННЫЕ
        ПродажиОбороты.Регистратор КАК Регистратор,
        ПродажиОбороты.ДокументПродажи КАК ДокументПродажи,
        ПродажиОбороты.Склад КАК Склад,
        ПродажиОбороты.Склад.Организация КАК Организация,
        ПродажиОбороты.Магазин КАК Магазин,
        ПродажиОбороты.Номенклатура КАК Номенклатура,
        ПродажиОбороты.ЗаказПокупателя КАК ЗаказПокупателя,
        ПродажиОбороты.Характеристика КАК Характеристика,
        ПродажиОбороты.Продавец КАК Продавец,
        ПродажиОбороты.КоличествоОборот КАК КоличествоТоваров,
        ПродажиОбороты.СтоимостьОборот КАК СуммаПродажСоСкидкой,
        ПродажиОбороты.СтоимостьБезСкидокОборот КАК СуммаПродажБезСкидки,
        ПродажиОбороты.НомерСтроки,
        ПродажиОбороты.ПериодСекунда,
        ПродажиОбороты.ПериодМинута,
        ПродажиОбороты.ПериодЧас,
        ПродажиОбороты.ПериодДень,
        ПродажиОбороты.ПериодНеделя,
        ПродажиОбороты.ПериодДекада,
        ПродажиОбороты.ПериодМесяц,
        ПродажиОбороты.ПериодКвартал,
        ПродажиОбороты.ПериодПолугодие,
        ПродажиОбороты.ПериодГод,
        ВтИМЕИ.Статус
    {ВЫБРАТЬ
        Организация.* КАК Организация,
        Магазин.* КАК Магазин,
        Номенклатура.* КАК Номенклатура,
        Характеристика.* КАК Характеристика,
        Продавец.* КАК Продавец,
        Регистратор.* КАК Регистратор,
        ДокументПродажи.* КАК ДокументПродажи,
        КоличествоТоваров КАК КоличествоТоваров,
        СуммаПродажСоСкидкой КАК СуммаПродажСоСкидкой,
        СуммаПродажБезСкидки КАК СуммаПродажБезСкидки}
    ИЗ
        РегистрНакопления.Продажи.Обороты({(&НачалоПериода)}, {(&КонецПериода)}, Авто, {(Склад).* КАК Склад, (Номенклатура).* КАК Номенклатура, (Характеристика).* КАК Характеристика, (ДокументПродажи).* КАК ДокументПродажи, (Продавец).* КАК Продавец, (Магазин).* КАК Магазин, (Склад.Организация).* КАК Организация}) КАК ПродажиОбороты
            ЛЕВОЕ СОЕДИНЕНИЕ втИМЕИ КАК ВтИМЕИ
            ПО ПродажиОбороты.Характеристика = ВтИМЕИ.ХарактеристикиНоменклатуры
                И ПродажиОбороты.Номенклатура = ВтИМЕИ.Номенклатура
    {ГДЕ
        ПродажиОбороты.КоличествоОборот КАК КоличествоТоваров,
        ПродажиОбороты.СтоимостьОборот КАК СуммаПродажСоСкидкой,
        ПродажиОбороты.СтоимостьБезСкидокОборот КАК СуммаПродажБезСкидки}
    
    только теперь он выводит мне ВСЕ значения статуса номенклатуры, которая продавалась в заданный период, если нет отбора по статусу. Как же сделать так, что бы он выводил только последнее значение?
    Последнее редактирование: 24 янв 2016
Похожие темы
  1. MyNameNoName
    Ответов:
    8
    Просмотров:
    577
Загрузка...

Поделиться этой страницей