[РЕШЕНО] СКД

Тема в разделе "Система компоновки данных (СКД)", создана пользователем Bonny, 2 фев 2015.

  1. TopicStarter Overlay
    Bonny
    Offline

    Bonny Опытный в 1С

    Регистрация:
    15 янв 2015
    Сообщения:
    56
    Симпатии:
    0
    Баллы:
    26
    Добрый день! Заранее извиняюсь за глупые вопросы - только начала осваивать СКД, да и 1с в целом.
    Задача такая - из регистра ЦеныНоменклатуры выбрать цены по датам (НачальнаяДата, КонечнаяДата). Получается коряво:
    1) Выводит две записи вместо одной (см рисунок)
    2) Когда пользователь вводит даты - то берет почему-то предыдущие записи в регистре (см рисунок).

    [​IMG]
    http://download.files.namba.net/files/68351301


    Код:
    ВЫБРАТЬ
        ЦеныНоменклатурыСрезПоследних.Период КАК ПериодНач,
        NULL КАК ПериодКон,
        ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
        ЦеныНоменклатурыСрезПоследних.Цена КАК ПлановаяСебестоимостьНач,
        NULL КАК ПлановаяСебестоимостьКон
    ПОМЕСТИТЬ Цены
    ИЗ
        РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&НачальнаяДата, ТипЦен.Код = "000000007") КАК ЦеныНоменклатурыСрезПоследних
    
    СГРУППИРОВАТЬ ПО
        ЦеныНоменклатурыСрезПоследних.Период,
        ЦеныНоменклатурыСрезПоследних.Цена,
        ЦеныНоменклатурыСрезПоследних.Номенклатура
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        NULL,
        ЦеныНоменклатурыСрезПоследних.Период,
        ЦеныНоменклатурыСрезПоследних.Номенклатура,
        NULL,
        ЦеныНоменклатурыСрезПоследних.Цена
    ИЗ
        РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&КонечнаяДата, ТипЦен.Код = "000000007") КАК ЦеныНоменклатурыСрезПоследних
    ГДЕ
        ЦеныНоменклатурыСрезПоследних.Номенклатура В ИЕРАРХИИ(&ОП)
    
    СГРУППИРОВАТЬ ПО
        ЦеныНоменклатурыСрезПоследних.Номенклатура,
        ЦеныНоменклатурыСрезПоследних.Период,
        ЦеныНоменклатурыСрезПоследних.Цена
    ;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
        Цены.Номенклатура.Наименование,
        Цены.ПериодНач,
        Цены.ПлановаяСебестоимостьНач,
        Цены.ПериодКон,
        Цены.ПлановаяСебестоимостьКон
    ИЗ
        Цены КАК Цены
    
    
    Последнее редактирование: 2 фев 2015
  2. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    Вот две темы
    http://1c-pro.ru/threads/podskazhit...ilno-sostavit-zapros-v-skd.52722/#post-339534
    http://1c-pro.ru/threads/otchet-v-skd.52275/#post-336378
    Там есть пример отчета

    Ну там на каждую дату получается остаток. У Вас же я задачу не понял. Надо на кадую дату получить цену или за период получить все установленные цены?

    Ну так же на СКД это можно сделать через доплнения периодов
    Bonny нравится это.
  3. TopicStarter Overlay
    Bonny
    Offline

    Bonny Опытный в 1С

    Регистрация:
    15 янв 2015
    Сообщения:
    56
    Симпатии:
    0
    Баллы:
    26
    Мне нужно получить на конкретную дату цену - одну.
  4. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    Ну тогда просто срез последних на дату. Зачем объединение? и зачем тогда Вас два праметра Дата началда и дата окончания?
  5. TopicStarter Overlay
    Bonny
    Offline

    Bonny Опытный в 1С

    Регистрация:
    15 янв 2015
    Сообщения:
    56
    Симпатии:
    0
    Баллы:
    26
    Один вопрос снимается - почему выдаются предпоследние записи - там еще время цепляется. С этим все понятно.
    Две даты - две цены, я так понимаю. А как с периодом быть?
    А объединяю для того, чтобы посчитать Рост цен. Сейчас выложу код. "Рост" ничего не выдает, ну и записи снова две.
    А мне надо чтобы одна номенклатура и две цены в одну строку.
    Код:
    ВЫБРАТЬ
        ЦеныНоменклатурыСрезПоследних.Период КАК ПериодНач,
        NULL КАК ПериодКон,
        ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
        ЦеныНоменклатурыСрезПоследних.Цена КАК ПлановаяСебестоимостьНач,
        NULL КАК ПлановаяСебестоимостьКон
    ПОМЕСТИТЬ Цены
    ИЗ
        РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&НачальнаяДата, ТипЦен.Код = "000000007") КАК ЦеныНоменклатурыСрезПоследних
    
    СГРУППИРОВАТЬ ПО
        ЦеныНоменклатурыСрезПоследних.Период,
        ЦеныНоменклатурыСрезПоследних.Цена,
        ЦеныНоменклатурыСрезПоследних.Номенклатура
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        NULL,
        ЦеныНоменклатурыСрезПоследних.Период,
        ЦеныНоменклатурыСрезПоследних.Номенклатура,
        NULL,
        ЦеныНоменклатурыСрезПоследних.Цена
    ИЗ
        РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&КонечнаяДата, ТипЦен.Код = "000000007") КАК ЦеныНоменклатурыСрезПоследних
    ГДЕ
        ЦеныНоменклатурыСрезПоследних.Номенклатура В ИЕРАРХИИ(&ОП)
    
    СГРУППИРОВАТЬ ПО
        ЦеныНоменклатурыСрезПоследних.Номенклатура,
        ЦеныНоменклатурыСрезПоследних.Период,
        ЦеныНоменклатурыСрезПоследних.Цена
    ;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
        Цены.ПериодНач,
        Цены.ПлановаяСебестоимостьНач,
        Цены.ПериодКон,
        Цены.ПлановаяСебестоимостьКон,
        Цены.Номенклатура,
        (Цены.ПлановаяСебестоимостьКон / Цены.ПлановаяСебестоимостьНач - 1) * 100 КАК Рост
    ИЗ
        Цены КАК Цены
  6. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    Вы задачу опишите. А то в посте выше Вы просто написали "Мне нужно получить на конкретную дату цену - одну."

    С датами все просто решается
    вот это
    ЦеныНоменклатурыСрезПоследних.Период,

    Меняйте на

    НачалоПериода(ЦеныНоменклатурыСрезПоследних.Период,День) Как ...

    Что бы у вас дата к началу дня приводилась

    Тогда все схлопнится
  7. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    А сколько их должно быть если в первой временной таблице у вас 2 строки?

    Хрень вы написали, убирайте все. Там один запрос нужен без всяких временных таблиц и объединений.
    Справочник Номенклатура. Левое соединение к нему РС Цены номенклатуры (два раза, по двум датам). Сразу вычисляете рост. Задание периода для виртуальной таблицы в СКД через {}.
  8. TopicStarter Overlay
    Bonny
    Offline

    Bonny Опытный в 1С

    Регистрация:
    15 янв 2015
    Сообщения:
    56
    Симпатии:
    0
    Баллы:
    26
    На одну Номенклатуру из регистра ЦеныНоменклатуры нужно получить цену на разные даты. После того как получили нужно посчитать рост либо снижение цены.
    Чтобы выводилось в одну строчку вроде разобралась - запихнула номенклатуру вниз (максимум) в группировке. Но как-то меня такой подход смущает.
  9. TopicStarter Overlay
    Bonny
    Offline

    Bonny Опытный в 1С

    Регистрация:
    15 янв 2015
    Сообщения:
    56
    Симпатии:
    0
    Баллы:
    26
    Так я пробовала, но у меня выдает ошибку на связь справочника и регистра. Сейчас код выложу.

    Код:
    ВЫБРАТЬ
        Номенклатура.Наименование КАК Номенклатура,
        ЦеныНоменклатурыСрезПоследних.Цена КАК ПлановаяСебестоимостьНач,
        ЦеныНоменклатурыСрезПоследних.Цена КАК ПлановаяСебестоимостьКон
    ИЗ
        РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ТипЦен.Код = "000000007") КАК ЦеныНоменклатурыСрезПоследних
            ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура
            ПО ЦеныНоменклатурыСрезПоследних.Номенклатура = Номенклатура.Ссылка
    Ошибка "Неоднозначное поле "Номенклатура.Ссылка" ПО ЦеныНоменклатурыСрезПоследних.Номенклатура = <<?>>Номенклатура.Ссылка
  10. TopicStarter Overlay
    Bonny
    Offline

    Bonny Опытный в 1С

    Регистрация:
    15 янв 2015
    Сообщения:
    56
    Симпатии:
    0
    Баллы:
    26
    Даты так сделала - ничего не изменилось. Да Бог с ними - мне бы привести к одной строчке. Группировка помогла, но рост не правильно считает - рост в группировке вниз попадает - иначе записи в две строки выводит. Снимок.JPG
    Последнее редактирование: 3 фев 2015
  11. TopicStarter Overlay
    Bonny
    Offline

    Bonny Опытный в 1С

    Регистрация:
    15 янв 2015
    Сообщения:
    56
    Симпатии:
    0
    Баллы:
    26
    Решение такое - в первой временной сгруппировала без роста. выгрузила во вторую - там добавила рост и посчитала.
  12. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    Вот такой запрос вставьте в СКД:
    Код:
    ВЫБРАТЬ
       спрНоменклатура.Ссылка КАК Номенклатура,
       ЦеныНоменклатурыСрезПоследних1.Период КАК ПериодНач,
       ЦеныНоменклатурыСрезПоследних1.Цена КАК ПлановаяСебестоимостьНач,
       ЦеныНоменклатурыСрезПоследних2.Период КАК ПериодКон,
       ЦеныНоменклатурыСрезПоследних2.Цена КАК ПлановаяСебестоимостьКон,
       (ЦеныНоменклатурыСрезПоследних2.Цена / ЦеныНоменклатурыСрезПоследних1.Цена - 1) * 100 КАК Рост
    ИЗ
       Справочник.Номенклатура КАК спрНоменклатура
         ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних({(&НачальнаяДата)}, ТипЦен.Код = "000000007" {(Номенклатура).* КАК Номенклатура}) КАК ЦеныНоменклатурыСрезПоследних1
         ПО спрНоменклатура.Ссылка = ЦеныНоменклатурыСрезПоследних1.Номенклатура
         ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних({(&КонечнаяДата)}, ТипЦен.Код = "000000007" {(Номенклатура).* КАК Номенклатура}) КАК ЦеныНоменклатурыСрезПоследних2
         ПО спрНоменклатура.Ссылка = ЦеныНоменклатурыСрезПоследних2.Номенклатура
    ГДЕ
       НЕ спрНоменклатура.ЭтоГруппа
    {ГДЕ
       спрНоменклатура.Ссылка.* КАК Номенклатура}
    
  13. TopicStarter Overlay
    Bonny
    Offline

    Bonny Опытный в 1С

    Регистрация:
    15 янв 2015
    Сообщения:
    56
    Симпатии:
    0
    Баллы:
    26
    Вот так сделала:

    Код:
    ВЫБРАТЬ
        ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
        ЦеныНоменклатурыСрезПоследних.Цена КАК ПлановаяСебестоимостьНач,
        NULL КАК ПлановаяСебестоимостьКон
    ПОМЕСТИТЬ Цены
    ИЗ
        РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&НачальнаяДата, ТипЦен.Код = "000000007") КАК ЦеныНоменклатурыСрезПоследних
    ГДЕ
        ЦеныНоменклатурыСрезПоследних.Номенклатура В ИЕРАРХИИ(&ОП)
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        ЦеныНоменклатурыСрезПоследних.Номенклатура,
        NULL,
        ЦеныНоменклатурыСрезПоследних.Цена
    ИЗ
        РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&КонечнаяДата, ТипЦен.Код = "000000007") КАК ЦеныНоменклатурыСрезПоследних
    ГДЕ
        ЦеныНоменклатурыСрезПоследних.Номенклатура В ИЕРАРХИИ(&ОП)
    ;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
        СУММА(Цены.ПлановаяСебестоимостьНач) КАК ПлановаяСебестоимостьНач,
        СУММА(Цены.ПлановаяСебестоимостьКон) КАК ПлановаяСебестоимостьКон,
        Цены.Номенклатура КАК Номенклатура
    ПОМЕСТИТЬ ЦеныГруппированные
    ИЗ
        Цены КАК Цены
    
    СГРУППИРОВАТЬ ПО
        Цены.Номенклатура
    ;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
        ЦеныГруппированные.ПлановаяСебестоимостьНач,
        ЦеныГруппированные.ПлановаяСебестоимостьКон,
        ЦеныГруппированные.Номенклатура,
        (ЦеныГруппированные.ПлановаяСебестоимостьКон / ЦеныГруппированные.ПлановаяСебестоимостьНач - 1) * 100 КАК Рост
    ИЗ
        ЦеныГруппированные КАК ЦеныГруппированные
  14. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    Bonny я же написал вам готовый запрос.
    Bonny нравится это.
  15. TopicStarter Overlay
    Bonny
    Offline

    Bonny Опытный в 1С

    Регистрация:
    15 янв 2015
    Сообщения:
    56
    Симпатии:
    0
    Баллы:
    26
    Спасибо большое, просто я уже сделала когда Вы написали. Я обязательно попробую его, чуть позже.

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