8.х Помогите разобраться как написать запрос

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем АлексейВМ, 23 июн 2017.

  1. TopicStarter Overlay
    АлексейВМ
    Offline

    АлексейВМ

    Регистрация:
    25 май 2017
    Сообщения:
    19
    Симпатии:
    0
    Баллы:
    1
    Добрый день.
    Помогите, пожалуйста с запросом.
    Проблема такая -
    Имею регистр сведений ЦеныНоменклатуры. Мне надо посчитать на каждый регистратор суммарное изменение цены товара в определенный период. Т.е.

    Если я имею

    Регистратор1 Товар 1 100р
    Регистратор1 Товар 2 200р
    Регистратор1 Товар 3 60р
    Регистратор1 Товар 4 90р
    Регистратор2 Товар 1 120р
    Регистратор2 Товар 2 230р
    Регистратор2 Товар 3 50р
    Регистратор2 Товар 4 98р
    Регистратор3 Товар 1 120р
    Регистратор3 Товар 2 230р
    Регистратор3 Товар 3 50р
    Регистратор3 Товар 4 98р

    То мне надо вывести так

    Регистратор1 450 (100+200+60+90)
    Регистратор2 48 ((120+230+50+98)-450)
    Регистратор3 0 ((120+230+50+98)-(120+230+50+98))
    Только учусь писать запросы, не могу понять как это сделать. Начинал по-разному, но всегда безуспешно.
    Вот например я нашел весь нужный мне товар с ценами (нужный товар, который есть на складе). А что делать дальше не пойму
    Код:
    ВЫБРАТЬ
        ЦеныНоменклатуры.Период КАК Период,
        ЦеныНоменклатуры.Регистратор КАК Регистратор,
        ЦеныНоменклатуры.Номенклатура КАК Номенклатура,
        ЦеныНоменклатуры.Характеристика КАК Характеристика,
        ЦеныНоменклатуры.Цена КАК Цена
    ИЗ
        РегистрНакопления.ТоварыОрганизаций.Обороты(
                ,
                ,
                Регистратор,
                Склад = &Склад
                    И Организация = &Организация) КАК ТоварыОрганизацийОбороты
            ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
            ПО (ТоварыОрганизацийОбороты.Номенклатура = ЦеныНоменклатуры.Номенклатура)
                И (ТоварыОрганизацийОбороты.Характеристика = ЦеныНоменклатуры.Характеристика)
    ГДЕ
        ЦеныНоменклатуры.ВидЦены = &ВидЦены
    
    СГРУППИРОВАТЬ ПО
        ЦеныНоменклатуры.Период,
        ЦеныНоменклатуры.Регистратор,
        ЦеныНоменклатуры.Номенклатура,
        ЦеныНоменклатуры.Характеристика,
        ЦеныНоменклатуры.Цена
    
    УПОРЯДОЧИТЬ ПО
        Период
  2. Bkmz
    Offline

    Bkmz Опытный в 1С

    Регистрация:
    6 июл 2013
    Сообщения:
    430
    Симпатии:
    12
    Баллы:
    29
    Предполагаю что из блока сгруппировать надо убрать
    ЦеныНоменклатуры.Цена, а в блок Выбрать вместо
    ЦеныНоменклатуры.Цена КАК Цена использовать агрегатную функцию СУММА(ЦеныНоменклатуры.Цена) КАК Цена
    Плюс у тебя группировка по периоду не даст просуммировать по регистратору. Или ты убираеш период из выбранных полей. Или убираешь и блока сгруппировать период а в блоке выбрать накладываеш агрегатную функцию МАКСИМУМ или МИНИМУМ также как на Цену

    Проще всего:
    Код:
    ВЫБРАТЬ
        ЦеныНоменклатуры.Регистратор КАК Регистратор,
        СУММА(ЦеныНоменклатуры.Цена КАК Цена)
    ИЗ
        РегистрНакопления.ТоварыОрганизаций.Обороты(
                ,
                ,
                Регистратор,
                Склад = &Склад
                    И Организация = &Организация) КАК ТоварыОрганизацийОбороты
            ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
            ПО (ТоварыОрганизацийОбороты.Номенклатура = ЦеныНоменклатуры.Номенклатура)
                И (ТоварыОрганизацийОбороты.Характеристика = ЦеныНоменклатуры.Характеристика)
    ГДЕ
        ЦеныНоменклатуры.ВидЦены = &ВидЦены
    
    СГРУППИРОВАТЬ ПО
        ЦеныНоменклатуры.Регистратор
    
    УПОРЯДОЧИТЬ ПО
        Период
    По запросам могу порекомендовать книгу Хрусталевой
    Видео хорошее Артема Кузнецова.

    Чистова неплохие

    Крусы Гилева по запросам говно.
    Вообще лучше книги Хрусталевой ничего нет.
    Мое мнение.
    Последнее редактирование: 23 июн 2017
  3. oksana20077
    Offline

    oksana20077 Новичок в 1С

    Регистрация:
    20 апр 2017
    Сообщения:
    40
    Симпатии:
    2
    Баллы:
    4
    оставь только регистратор и цена. Группировка - регистратор, Сумма - цена. Порядок по регистратору

    Далее в цикле выводи в макет и там запоминай предыдущую цену, что бы её вычесть.

    как то так:
    ТабДок = Новый ТабличныйДокумент;
    Макет = ПолучитьМакет("Макет");
    запомнить= 0;
    для каждого стр из выборка
    Область= макет.ПолучитьОбласть("Область");
    Область.Параметры.Регистратор = Стр.Регистратор;
    Область.Параметры.значение = Стр.цена - запомить;
    ТабДок.Вывести(Область);
    ЗАПОМНИТЬ= Стр.цена;
    конеццикла
  4. TopicStarter Overlay
    АлексейВМ
    Offline

    АлексейВМ

    Регистрация:
    25 май 2017
    Сообщения:
    19
    Симпатии:
    0
    Баллы:
    1
    Я в консоли запросов делаю, мне надо чтобы результат был только запросом
    --- Объединение сообщений, 23 июн 2017 ---
    Строк осталось столько же, только цена на некоторую номенклатуру поменялась
    --- Объединение сообщений, 23 июн 2017 ---
    Я немножко неправильно условие написал, не все изменения цен содержат все товары, например регистратор1 содержит товары 1,2,3,4, регистратор 2 содержит товары 3 и 4, а регистратор 3 содержит товары 1 и 2, и мне надо получить суммарное изменение цены для регистратор2 только для товара 3 и 4, а для регистратор3 только по товару 1 и 2

    Регистратор1 Товар 1 100р
    Регистратор1 Товар 2 200р
    Регистратор1 Товар 3 60р
    Регистратор1 Товар 4 90р
    Регистратор2 Товар 3 50р
    Регистратор2 Товар 4 98р
    Регистратор3 Товар 1 120р
    Регистратор3 Товар 2 230р

    То мне надо вывести так

    Регистратор1 450 (100+200+60+90)
    Регистратор2 -2 ((98+50)-(90+60))
    Регистратор3 50 ((120+230)-(100+200))
    --- Объединение сообщений, 23 июн 2017 ---
    тут я думаю одним запросом не отделаюсь) надо будет результаты нескольких объединять (наверное)
    Последнее редактирование: 23 июн 2017
  5. Bkmz
    Offline

    Bkmz Опытный в 1С

    Регистрация:
    6 июл 2013
    Сообщения:
    430
    Симпатии:
    12
    Баллы:
    29
    Код:
    ВЫБРАТЬ
        ЦеныНоменклатуры.Регистратор КАК Регистратор,
        СУММА(ЦеныНоменклатуры.Цена КАК Цена)
    ИЗ
        РегистрНакопления.ТоварыОрганизаций.Обороты(
                ,
                ,
                Регистратор,
                Склад = &Склад
                    И Организация = &Организация) КАК ТоварыОрганизацийОбороты
            ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
            ПО (ТоварыОрганизацийОбороты.Номенклатура = ЦеныНоменклатуры.Номенклатура)
                И (ТоварыОрганизацийОбороты.Характеристика = ЦеныНоменклатуры.Характеристика)
    ГДЕ
        ЦеныНоменклатуры.ВидЦены = &ВидЦены
    
    СГРУППИРОВАТЬ ПО
        ЦеныНоменклатуры.Регистратор
    
    УПОРЯДОЧИТЬ ПО
        Период
    --- Объединение сообщений, 23 июн 2017 ---
    Такой шахермахер в запросе ты не сделаешь. Там для группировок агрегатные функции: СУММА, МИНИМУМ, МАКСИМУМ, КОЛИЧЕСТВО, РАЗЛИЧНЫЕ.
    Наверное это нужно делать в другом месте. Возможно после запроса где-то в коде.
    Последнее редактирование: 23 июн 2017
  6. TopicStarter Overlay
    АлексейВМ
    Offline

    АлексейВМ

    Регистрация:
    25 май 2017
    Сообщения:
    19
    Симпатии:
    0
    Баллы:
    1
    Считает неправильно
  7. oksana20077
    Offline

    oksana20077 Новичок в 1С

    Регистрация:
    20 апр 2017
    Сообщения:
    40
    Симпатии:
    2
    Баллы:
    4
    работает ? скобка на месте ?
  8. TopicStarter Overlay
    АлексейВМ
    Offline

    АлексейВМ

    Регистрация:
    25 май 2017
    Сообщения:
    19
    Симпатии:
    0
    Баллы:
    1
    я заметил и передвинул)
  9. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.400
    Симпатии:
    973
    Баллы:
    204
    Одним запросом, конечно, можно попробовать упороться и сделать, но квалификации ТС явно не хватит для этого.
    Поэтому кодом обработать результат запроса будет проще и быстрее :)
  10. TopicStarter Overlay
    АлексейВМ
    Offline

    АлексейВМ

    Регистрация:
    25 май 2017
    Сообщения:
    19
    Симпатии:
    0
    Баллы:
    1
    ну ок буду думать как сделать это только посредством запросов, знаю человека, который это сделал в консоли запросов, получилось 7 пакетов запросов. Если скинет мне код, покажу. А пока буду пытаться сделать сам
  11. Bkmz
    Offline

    Bkmz Опытный в 1С

    Регистрация:
    6 июл 2013
    Сообщения:
    430
    Симпатии:
    12
    Баллы:
    29
    Это как-то через ВЫБОР КОГДА ?
  12. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.400
    Симпатии:
    973
    Баллы:
    204
    Нет, это нужно наделать временных таблиц, потом их объединять и соединять.
  13. TopicStarter Overlay
    АлексейВМ
    Offline

    АлексейВМ

    Регистрация:
    25 май 2017
    Сообщения:
    19
    Симпатии:
    0
    Баллы:
    1
    Вообще суть задачи была в следующем (написал не все, т.к. половину уже сделал). Мне нужно было вывести общую ценность склада сумма(колв-во номенклатуры*цена) за указанный период на товары от конкретной организации с отображением документов, которые изменили ценность (у каждого документа показывать на сколько изменилась общая ценность).
    Должно быть что-то вроде этого
    [​IMG]
    А есть на данный момент [​IMG]

    Как видно, почти все впорядке, нет только установки цен. Вот как ее посчитать не могу понять.
    Вот код пока того, что есть. Далее буду думать как добавить установку.

    Код:
    ВЫБРАТЬ
        ЦеныНоменклатуры.Период КАК Период,
        ЦеныНоменклатуры.Регистратор КАК Регистратор,
        ЦеныНоменклатуры.Номенклатура КАК Номенклатура,
        ЦеныНоменклатуры.Характеристика КАК Характеристика,
        ЦеныНоменклатуры.Цена КАК Цена
    ПОМЕСТИТЬ ВсеЦеныНаНужныеТовары
    ИЗ
        РегистрНакопления.ТоварыОрганизаций.Обороты(
                ,
                ,
                Регистратор,
                Склад = &Склад
                    И Организация = &Организация) КАК ТоварыОрганизацийОбороты
            ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
            ПО (ТоварыОрганизацийОбороты.Номенклатура = ЦеныНоменклатуры.Номенклатура)
                И (ТоварыОрганизацийОбороты.Характеристика = ЦеныНоменклатуры.Характеристика)
    ГДЕ
        ЦеныНоменклатуры.ВидЦены = &ВидЦены
    
    СГРУППИРОВАТЬ ПО
        ЦеныНоменклатуры.Регистратор,
        ЦеныНоменклатуры.Номенклатура,
        ЦеныНоменклатуры.Характеристика,
        ЦеныНоменклатуры.Цена,
        ЦеныНоменклатуры.Период
    ;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
        ТоварыОрганизаций.Регистратор КАК РегистраторТО,
        ТоварыОрганизаций.Номенклатура КАК НоменклатураТО,
        ТоварыОрганизаций.Период КАК Период,
        МАКСИМУМ(ВсеЦены.Период) КАК ПериодТО,
        ТоварыОрганизаций.Характеристика КАК ХарактеристикаТО,
        ТоварыОрганизаций.КоличествоОборот
    ПОМЕСТИТЬ ЦеныТоваровИВремяПоследнейЦены
    ИЗ
        РегистрНакопления.ТоварыОрганизаций.Обороты(
                ,
                ,
                Регистратор,
                Склад = &Склад
                    И Организация = &Организация) КАК ТоварыОрганизаций
            ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВсеЦеныНаНужныеТовары КАК ВсеЦены
            ПО (ВсеЦены.Период <= ТоварыОрганизаций.Период)
                И (ВсеЦены.Номенклатура = ТоварыОрганизаций.Номенклатура)
                И (ВсеЦены.Характеристика = ТоварыОрганизаций.Характеристика)
    
    СГРУППИРОВАТЬ ПО
        ТоварыОрганизаций.Номенклатура,
        ТоварыОрганизаций.Характеристика,
        ТоварыОрганизаций.Регистратор,
        ТоварыОрганизаций.Период,
        ТоварыОрганизаций.КоличествоОборот
    ;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
        "Остаток на начало периода" КАК Регистратор,
        СУММА(ТоварыДо.КоличествоОборот * ЦеныДо.Цена) КАК Оценка
    ИЗ
        (ВЫБРАТЬ
            ТоварыОрганизацийОбороты.Номенклатура КАК Номенклатура,
            ТоварыОрганизацийОбороты.Характеристика КАК Характеристика,
            ТоварыОрганизацийОбороты.КоличествоОборот КАК КоличествоОборот,
            ТоварыОрганизацийОбороты.Регистратор КАК Регистратор
        ИЗ
            РегистрНакопления.ТоварыОрганизаций.Обороты(
                    ,
                    &НачПер,
                    Регистратор,
                    Склад = &Склад
                        И Организация = &Организация) КАК ТоварыОрганизацийОбороты) КАК ТоварыДо
            ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
                ЦеныНоменклатурыСрезПоследних.Характеристика КАК Характеристика,
                ЦеныНоменклатурыСрезПоследних.Цена КАК Цена
            ИЗ
                РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&НачПер, ВидЦены = &ВидЦены) КАК ЦеныНоменклатурыСрезПоследних) КАК ЦеныДо
            ПО (ТоварыДо.Номенклатура = ЦеныДо.Номенклатура)
                И (ТоварыДо.Характеристика = ЦеныДо.Характеристика)
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        ЦеныТоваровИВремяПоследнейЦены.РегистраторТО,
        СУММА(ЦеныНоменклатуры.Цена * ЦеныТоваровИВремяПоследнейЦены.КоличествоОборот)
    ИЗ
        ЦеныТоваровИВремяПоследнейЦены КАК ЦеныТоваровИВремяПоследнейЦены
            ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
            ПО (ЦеныТоваровИВремяПоследнейЦены.НоменклатураТО = ЦеныНоменклатуры.Номенклатура)
                И (ЦеныТоваровИВремяПоследнейЦены.ХарактеристикаТО = ЦеныНоменклатуры.Характеристика)
                И (ЦеныТоваровИВремяПоследнейЦены.ПериодТО = ЦеныНоменклатуры.Период)
    ГДЕ
        ЦеныНоменклатуры.ВидЦены = &ВидЦены
        И ЦеныТоваровИВремяПоследнейЦены.Период МЕЖДУ &НачПер И &КонПер
    
    СГРУППИРОВАТЬ ПО
        ЦеныТоваровИВремяПоследнейЦены.РегистраторТО
    
    УПОРЯДОЧИТЬ ПО
        Регистратор
    ИТОГИ ПО
        ОБЩИЕ
    Я думаю, надо делать так: посчитать сумму для всех товаров на складе на момент изменения цены (по новой цене), потом посчитать сумму для всех товаров на складе до изменения цены (по предыдущей цене) и вычесть из 1 2ую и все будет нормально. Я бы сделал это, если бы была всего 1 установка цены, а их много. Поэтому не могу понять как сделать. Да еще и цена меняется не на все товары
    Последнее редактирование: 23 июн 2017
  14. TopicStarter Overlay
    АлексейВМ
    Offline

    АлексейВМ

    Регистрация:
    25 май 2017
    Сообщения:
    19
    Симпатии:
    0
    Баллы:
    1
    Вот вроде получилось, небольшой косяк остался, если начало периода указать, изменение цен неправильно считает, а если за весь период, то все правильно.
    Код:
    ВЫБРАТЬ
        ЦеныНоменклатуры.Период КАК Период,
        ЦеныНоменклатуры.Регистратор КАК Регистратор,
        ЦеныНоменклатуры.Номенклатура КАК Номенклатура,
        ЦеныНоменклатуры.Характеристика КАК Характеристика,
        ЦеныНоменклатуры.ВидЦены КАК ВидЦены,
        ЦеныНоменклатуры.Цена КАК Цена
    ПОМЕСТИТЬ ВсеЦеныНаНужныеТовары
    ИЗ
        РегистрНакопления.ТоварыОрганизаций.Обороты(
                ,
                ,
                Регистратор,
                Склад = &Склад
                    И Организация = &Организация) КАК ТоварыОрганизацийОбороты
            ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
            ПО (ТоварыОрганизацийОбороты.Номенклатура = ЦеныНоменклатуры.Номенклатура)
                И (ТоварыОрганизацийОбороты.Характеристика = ЦеныНоменклатуры.Характеристика)
    ГДЕ
        ЦеныНоменклатуры.ВидЦены = &ВидЦены
    
    СГРУППИРОВАТЬ ПО
        ЦеныНоменклатуры.Регистратор,
        ЦеныНоменклатуры.Номенклатура,
        ЦеныНоменклатуры.Характеристика,
        ЦеныНоменклатуры.ВидЦены,
        ЦеныНоменклатуры.Цена,
        ЦеныНоменклатуры.Период
    ;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
        ТоварыОрганизаций.Регистратор КАК РегистраторТО,
        ТоварыОрганизаций.Номенклатура КАК НоменклатураТО,
        ТоварыОрганизаций.Период КАК Период,
        МАКСИМУМ(ВсеЦены.Период) КАК ПериодТО,
        ТоварыОрганизаций.Характеристика КАК ХарактеристикаТО,
        ТоварыОрганизаций.КоличествоОборот
    ПОМЕСТИТЬ ЦеныТоваровИВремяПоследнейЦены
    ИЗ
        РегистрНакопления.ТоварыОрганизаций.Обороты(
                ,
                ,
                Регистратор,
                Склад = &Склад
                    И Организация = &Организация) КАК ТоварыОрганизаций
            ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВсеЦеныНаНужныеТовары КАК ВсеЦены
            ПО ТоварыОрганизаций.Период >= ВсеЦены.Период
                И (ВсеЦены.Номенклатура = ТоварыОрганизаций.Номенклатура)
                И (ВсеЦены.Характеристика = ТоварыОрганизаций.Характеристика)
    
    СГРУППИРОВАТЬ ПО
        ТоварыОрганизаций.Номенклатура,
        ТоварыОрганизаций.Характеристика,
        ТоварыОрганизаций.Регистратор,
        ТоварыОрганизаций.Период,
        ТоварыОрганизаций.КоличествоОборот
    ;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
        МАКСИМУМ(ЦеныНоменклатуры.Период) КАК Период,
        МАКСИМУМ(ЦеныДоИзменения.Период) КАК ПериодДо,
        ЦеныНоменклатуры.Регистратор КАК Регистратор,
        ЦеныНоменклатуры.Номенклатура КАК Номенклатура,
        ЦеныНоменклатуры.Характеристика КАК Характеристика
    ПОМЕСТИТЬ ТаблицаЦен
    ИЗ
        ВсеЦеныНаНужныеТовары КАК ЦеныНоменклатуры
            ЛЕВОЕ СОЕДИНЕНИЕ ВсеЦеныНаНужныеТовары КАК ЦеныДоИзменения
            ПО ЦеныНоменклатуры.Период > ЦеныДоИзменения.Период
                И (ЦеныДоИзменения.Номенклатура = ЦеныНоменклатуры.Номенклатура)
                И (ЦеныДоИзменения.Характеристика = ЦеныНоменклатуры.Характеристика)
    
    СГРУППИРОВАТЬ ПО
        ЦеныНоменклатуры.Регистратор,
        ЦеныНоменклатуры.Номенклатура,
        ЦеныНоменклатуры.Характеристика
    ;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
        ТаблицаЦен.Регистратор КАК Регистратор,
        ТаблицаЦен.Номенклатура КАК Номенклатура,
        ТаблицаЦен.Характеристика КАК Характеристика,
        ВсеЦеныНаНужныеТовары.Цена КАК Цена,
        ТаблицаЦен.Период КАК Период
    ПОМЕСТИТЬ ТаблицаНовыхЦен
    ИЗ
        ТаблицаЦен КАК ТаблицаЦен
            ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВсеЦеныНаНужныеТовары КАК ВсеЦеныНаНужныеТовары
            ПО ТаблицаЦен.Период = ВсеЦеныНаНужныеТовары.Период
                И (ВсеЦеныНаНужныеТовары.Номенклатура = ТаблицаЦен.Номенклатура)
                И (ВсеЦеныНаНужныеТовары.Характеристика = ТаблицаЦен.Характеристика)
    
    СГРУППИРОВАТЬ ПО
        ТаблицаЦен.Регистратор,
        ТаблицаЦен.Номенклатура,
        ТаблицаЦен.Характеристика,
        ВсеЦеныНаНужныеТовары.Цена,
        ТаблицаЦен.Период
    ;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
        ТаблицаЦен.Регистратор КАК Регистратор,
        ТаблицаЦен.Номенклатура КАК Номенклатура,
        ТаблицаЦен.Характеристика КАК Характеристика,
        ВсеЦеныНаНужныеТовары.Цена КАК Цена
    ПОМЕСТИТЬ ТаблицаСтарыхЦен
    ИЗ
        ТаблицаЦен КАК ТаблицаЦен
            ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВсеЦеныНаНужныеТовары КАК ВсеЦеныНаНужныеТовары
            ПО ТаблицаЦен.Номенклатура = ВсеЦеныНаНужныеТовары.Номенклатура
                И ТаблицаЦен.Характеристика = ВсеЦеныНаНужныеТовары.Характеристика
                И ТаблицаЦен.ПериодДо = ВсеЦеныНаНужныеТовары.Период
    
    СГРУППИРОВАТЬ ПО
        ТаблицаЦен.Регистратор,
        ТаблицаЦен.Номенклатура,
        ТаблицаЦен.Характеристика,
        ВсеЦеныНаНужныеТовары.Цена
    ;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
        ТаблицаНовыхЦен.Регистратор КАК Регистратор,
        ТаблицаНовыхЦен.Номенклатура КАК Номенклатура,
        ТаблицаНовыхЦен.Характеристика КАК Характеристика,
        ТаблицаНовыхЦен.Цена - ТаблицаСтарыхЦен.Цена КАК Цена,
        ТаблицаНовыхЦен.Период КАК Период
    ПОМЕСТИТЬ ФинальныеЦены
    ИЗ
        ТаблицаСтарыхЦен КАК ТаблицаСтарыхЦен
            ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаНовыхЦен КАК ТаблицаНовыхЦен
            ПО ТаблицаСтарыхЦен.Номенклатура = ТаблицаНовыхЦен.Номенклатура
                И ТаблицаСтарыхЦен.Характеристика = ТаблицаНовыхЦен.Характеристика
    ГДЕ
        ТаблицаНовыхЦен.Регистратор = ТаблицаСтарыхЦен.Регистратор
    ;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
        "Остаток на начало периода" КАК Регистратор,
        СУММА(ТоварыДо.КоличествоОборот * ЦеныДо.Цена) КАК Оценка
    ПОМЕСТИТЬ ДокументыПоПоследнейЦене
    ИЗ
        (ВЫБРАТЬ
            ТоварыОрганизацийОбороты.Номенклатура КАК Номенклатура,
            ТоварыОрганизацийОбороты.Характеристика КАК Характеристика,
            ТоварыОрганизацийОбороты.КоличествоОборот КАК КоличествоОборот,
            ТоварыОрганизацийОбороты.Регистратор КАК Регистратор
        ИЗ
            РегистрНакопления.ТоварыОрганизаций.Обороты(
                    ,
                    &НачПер,
                    Регистратор,
                    Склад = &Склад
                        И Организация = &Организация) КАК ТоварыОрганизацийОбороты) КАК ТоварыДо
            ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
                ЦеныНоменклатурыСрезПоследних.Характеристика КАК Характеристика,
                ЦеныНоменклатурыСрезПоследних.Цена КАК Цена
            ИЗ
                РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&НачПер, ВидЦены = &ВидЦены) КАК ЦеныНоменклатурыСрезПоследних) КАК ЦеныДо
            ПО ТоварыДо.Номенклатура = ЦеныДо.Номенклатура
                И ТоварыДо.Характеристика = ЦеныДо.Характеристика
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        ЦеныТоваровИВремяПоследнейЦены.РегистраторТО,
        СУММА(ЦеныНоменклатуры.Цена * ЦеныТоваровИВремяПоследнейЦены.КоличествоОборот)
    ИЗ
        ЦеныТоваровИВремяПоследнейЦены КАК ЦеныТоваровИВремяПоследнейЦены
            ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВсеЦеныНаНужныеТовары КАК ЦеныНоменклатуры
            ПО ЦеныТоваровИВремяПоследнейЦены.НоменклатураТО = ЦеныНоменклатуры.Номенклатура
                И ЦеныТоваровИВремяПоследнейЦены.ХарактеристикаТО = ЦеныНоменклатуры.Характеристика
                И ЦеныТоваровИВремяПоследнейЦены.ПериодТО = ЦеныНоменклатуры.Период
    ГДЕ
        ЦеныНоменклатуры.ВидЦены = &ВидЦены
        И ЦеныТоваровИВремяПоследнейЦены.Период МЕЖДУ &НачПер И &КонПер
    
    СГРУППИРОВАТЬ ПО
        ЦеныТоваровИВремяПоследнейЦены.РегистраторТО
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        ФинальныеЦены.Регистратор КАК Регистратор,
        СУММА(ФинальныеЦены.Цена * ТоварыОрганизацийОбороты.КоличествоОборот) КАК Поле1,
        ФинальныеЦены.Период КАК Период
    ИЗ
        ФинальныеЦены КАК ФинальныеЦены
            ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыОрганизаций.Обороты(
                    &НачПер,
                    &КонПер,
                    Регистратор,
                    Склад = &Склад
                        И Организация = &организация) КАК ТоварыОрганизацийОбороты
            ПО ФинальныеЦены.Номенклатура = ТоварыОрганизацийОбороты.Номенклатура
                И ФинальныеЦены.Характеристика = ТоварыОрганизацийОбороты.Характеристика
                И ФинальныеЦены.Период >= ТоварыОрганизацийОбороты.Период
    
    СГРУППИРОВАТЬ ПО
        ФинальныеЦены.Регистратор,
        ФинальныеЦены.Период
    
    --- Объединение сообщений, 26 июн 2017 ---
    А все, исправил условие ФинальныеЦены.Период > &НачПер добавил
    Последнее редактирование: 26 июн 2017
  15. TopicStarter Overlay
    АлексейВМ
    Offline

    АлексейВМ

    Регистрация:
    25 май 2017
    Сообщения:
    19
    Симпатии:
    0
    Баллы:
    1
    Тему можно закрыть

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