Разработка и оптимизация запросов в 1С:Предприятие 8.3. Модуль 9. Сложные случаи написания запросов

На данной странице задавайте вопросы по материалам и практическим заданиям девятого модуля курса «Разработка и оптимизация запросов в 1С:Предприятие 8.3».

Практические задания

К сожалению, у Вас недостаточно прав для дальнейшего просмотра.

Если Вы приобрели курс, но еще не активировали токен — пожалуйста, активируйте доступ по инструкциям, высланным на Ваш email после покупки.

Если Вы не залогинены на сайте — залогиньтесь, вернитесь на эту страницу и обновите ее.

Если Вы залогинены, у Вас активирован токен доступа, но Вы все равно видите эту запись — напишите нам на e-mail поддержки.

Комментарии / обсуждение (506):

  1. Akorg

    В задачах на УТ11 используется следующие механизмы работы с измерениями ВТ ВыручкаИСебестоимостьПродаж.Обороты:
    Отбор делается не по АналитикаУчетаНоменклатуры.Номнеклатура = &Номенклатура, а по вхождению КлючиАналитикиУчетаНоменклатуры в выборку, содержащую нужную номенклатуру. Этот вариант проверялся, как более эффективный? (Мы вроде бы решали аналогичную задачу с подобием и там предварительное создание временной таблицы с выборкой по нужным должностям проигрывало варианту с непосредственным фильтром на подобие в ВТ).
    Вместо соединения через точку АналитикаУчетаПоПартнеру.Партнер используется явное соединение со справочником КлючиАналитикиУчетаПоПартнерам. А это почему именно так делается? Вроде бы, как мы проверяли, в последних платформах процедура разыменования выполняется достаточно эффективно.

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

      • Akorg

        Во это да! Я уже 3 годя, работая с ЕРП, все время выбирал номенклатуру и контрагента непосредственно из РН через точку из соответствующего ключа аналитики. Это могло приводить к ошибкам? Можно поподробнее объяснить зачем в ЕРП (УТ11) нужны одновременно и РС и справочник для этих целей?

        • Василий Ханевич


          (текст комментария доступен только участникам Мастер-группы)

          • Akorg

            Я так и не понял: обращение через точку может привести к ошибкам? Если да, то в каких случаях?

            • Василий Ханевич


              (текст комментария доступен только участникам Мастер-группы)

  2. Akorg

    Не имея доступа к материалам курса, пытался самостоятельно решить задачу нумерации элементов произвольной таблицы запросом. Думал долго, но решения так и не нашел. Сегодня с интересом стал смотреть видеоуроки на эту тему и с сожалением обнаружил, что эта задача решается только для конкретных таблиц, содержащих «сравнимые» записи. Я правильно понял, что для произвольных таблиц эта задача неразрешима?

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  3. Akorg

    Вопрос по задаче 37. Для чего нам понадобилось создавать ВТ из параметра &Сумма (а потом еще и устраивать пляски по поводу ее вычитания из другой таблицы)? На мой взгляд, все решается простым использованием параметра &Сумма. Вот фрагмент пакета:

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

    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
        &Сумма - СУММА(Распределение.Доля) КАК Доля
    ПОМЕСТИТЬ Остаток
    ИЗ
        Распределение КАК Распределение
    ;
    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  4. Akorg

    Соображения по приведенным вариантам решения задачи 33. У меня есть замечания к каждому из 3 приведенных вариантов. Первый — дублирование кода, а значит проблемы с любым изменением запроса. Второй — использование условия Или в параметрах ВТ, что, как я слышал, может приводить к проблемам производительности, третий — не сильно понятный и читаемый, а также я ни разу не видел, чтобы он применялся в типовых конфигурациях. Мне больше всего нравится способ, который повсеместно используется в конфигурации ERP: текст запроса корректируется с использованием функции СтрЗаменить. Т.е. конструктором создается запрос так, как если бы номенклатура была задана, а потом, если это не так, фрагмент «Номенклатура = &Номенклатура» заменяется на пустую строку. Запрос в любом случае получается оптимальным, мы можем продолжать менять его конструктором запроса, и он достаточно нагляден. А Ваше мнение по этим четырем вариантам?

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  5. zxcv398

    День добрый, в п.2 периодичность регистра = 1 день, мы нашли максимальную дату. Зачем дополнительно получаем максимальный регистратор?

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  6. Afi

    Добрый день! вопрос по практ.заданию 23 : зачем обращаться к срезу последних, ведь нам нужно данные за все время. Чем хуже вариант-выбор всех записей с «руководитель», наложить условие БЕЗ ПОВТОРЯЮЩИХСЯ ?
    вопрос по 24 заданию: чем хуже ниже предлагаемый вариант:
    ВЫБРАТЬ
    ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
    &ТипЦен1 КАК ТипЦен,
    ЦеныНоменклатурыСрезПоследних.Цена КАК Цена
    ПОМЕСТИТЬ Закуп
    ИЗ
    РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ТипЦен = &ТипЦен1) КАК ЦеныНоменклатурыСрезПоследних
    ;

    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
    &ТипЦен2 КАК ТипЦен,
    ЦеныНоменклатурыСрезПоследних.Цена КАК Цена
    ПОМЕСТИТЬ Прод
    ИЗ
    РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ТипЦен = &ТипЦен2) КАК ЦеныНоменклатурыСрезПоследних
    ;

    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    ЕСТЬNULL(Закуп.Номенклатура, Прод.Номенклатура) КАК Номенклатура,
    Закуп.ТипЦен КАК ТипЦен,
    Закуп.Цена КАК Цена,
    Прод.ТипЦен КАК ТипЦен1,
    Прод.Цена КАК Цена1,
    ВЫБОР
    КОГДА Закуп.Цена ЕСТЬ NULL
    ТОГДА 0
    ИНАЧЕ 100 * (Прод.Цена / Закуп.Цена) — 100
    КОНЕЦ КАК Наценка
    ИЗ
    Прод КАК Прод
    ПОЛНОЕ СОЕДИНЕНИЕ Закуп КАК Закуп
    ПО (Закуп.Номенклатура = Прод.Номенклатура)

    УПОРЯДОЧИТЬ ПО
    Номенклатура

    Спасибо и с Новым годом!

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  7. sergr78@mail.ru

    Добрый день! В 23 видео 9 модуля, в первом запросе проиндексировали НаправлениеДеятельности. А если бы не индексировали, чтобы изменилось?

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  8. sergr78@mail.ru

    Добрый день! В 22 видео 9 модуля, про премии. Продажи составили 230 000 руб в феврале, премия 10 %, а сумма премии 21 500 руб. Как она получилась?

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  9. sergr78@mail.ru

    Добрый день!
    В задании 32, в третьем запросе РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ВТ_год.ГОД, ГОД), КОНЕЦПЕРИОДА(ВТ_год.ГОД, ГОД), ДЕНЬ) > 364. А почему нельзя оставить РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&Дата1, ГОД), КОНЕЦПЕРИОДА(&Дата2, ГОД), ДЕНЬ) > 364. ?

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  10. sergr78@mail.ru

    Добрый день!
    В первом видео 9 модуля, поле Цена выбираем при соединения временной таблицы ВТ_Товары и таблицы ЦеныТоваров, а почему поле Цена не выбрать сразу при соединении временной таблицы ВТ_Продажи и таблицы ЦеныТоваров ?

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  11. sergr78@mail.ru

    Добрый день! Задачка.Необходимо сделать распределение суммы заработной платы сотрудника, которая указана в поле «Сумма заработной платы сотрудника», пропорционально стоимости выполненных работ из таблицы «Трудозатраты сотрудника». Распределять необходимо только на 5 самых дорогих работ. Стоимость работ считается как произведение количества часов (колонка «Затрачено часов») и Цены типа работ, цены типов работ указаны в таблице «Цены типов работ».
    Необходимо сделать отчет по получившемуся распределению, в котором будет список работ с суммами ЗП распределенными на них и итоговая сумма ЗП.
    Проблема как выбрать 5 наиболее дорогих работ? Данные загнать в таблицу значений?

     &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
        ПервоначальноеЗаполнениеТабиц();
    КонецПроцедуры

    &НаСервере
    Процедура ПервоначальноеЗаполнениеТабиц()
        ЗаполнитьЗначенияСвойств(ТрудозатратыСотрудника.Добавить(), Новый Структура("ТипРабот,ВидРабот,ЗатраченоЧасов","Поддержка","Задача 25154",8.25));
        ЗаполнитьЗначенияСвойств(ТрудозатратыСотрудника.Добавить(), Новый Структура("ТипРабот,ВидРабот,ЗатраченоЧасов","Разработка","Отчет по затратам",10.83));
        ЗаполнитьЗначенияСвойств(ТрудозатратыСотрудника.Добавить(), Новый Структура("ТипРабот,ВидРабот,ЗатраченоЧасов","Разработка","Добкумент Чек ККМ",23.5));
        ЗаполнитьЗначенияСвойств(ТрудозатратыСотрудника.Добавить(), Новый Структура("ТипРабот,ВидРабот,ЗатраченоЧасов","Поддержка","Задача 32454",13.3));
        ЗаполнитьЗначенияСвойств(ТрудозатратыСотрудника.Добавить(), Новый Структура("ТипРабот,ВидРабот,ЗатраченоЧасов","Поддержка","Задача 25225",39.6));
        ЗаполнитьЗначенияСвойств(ТрудозатратыСотрудника.Добавить(), Новый Структура("ТипРабот,ВидРабот,ЗатраченоЧасов","Разработка","Выгрузка в ЗУП",11.11));
        ЗаполнитьЗначенияСвойств(ТрудозатратыСотрудника.Добавить(), Новый Структура("ТипРабот,ВидРабот,ЗатраченоЧасов","Сложная разработка","Обмен с УПП",33.22));
        ЗаполнитьЗначенияСвойств(ТрудозатратыСотрудника.Добавить(), Новый Структура("ТипРабот,ВидРабот,ЗатраченоЧасов","Разработка","Отчет по себестоимости",12.02));
        ЗаполнитьЗначенияСвойств(ТрудозатратыСотрудника.Добавить(), Новый Структура("ТипРабот,ВидРабот,ЗатраченоЧасов","Сложная разработка","Распределение затрат Бух",21.06));
        ЗаполнитьЗначенияСвойств(ТрудозатратыСотрудника.Добавить(), Новый Структура("ТипРабот,ВидРабот,ЗатраченоЧасов","Поддержка","Задача 14342",1.27));
       
        ЗаполнитьЗначенияСвойств(ЦеныТиповРабот.Добавить(), Новый Структура("ТипРабот,Цена","Поддержка",133));
        ЗаполнитьЗначенияСвойств(ЦеныТиповРабот.Добавить(), Новый Структура("ТипРабот,Цена","Разработка",321));
        ЗаполнитьЗначенияСвойств(ЦеныТиповРабот.Добавить(), Новый Структура("ТипРабот,Цена","Сложная разработка",525.5));

    КонецПроцедуры //ПервоначальноеЗаполнениеТабиц

    &НаКлиенте
    Процедура РаспределитьЗП(Команда)
       
         РаспределитьНаСервере();

    КонецПроцедуры

    &НаСервере
    Процедура РаспределитьНаСервере()
        Сумма = 0;
        Таблица = Новый ТаблицаЗначений;
        Таблица.Колонки.Добавить("ТипРабот" );
        Таблица.Колонки.Добавить("ВидРабот" );
        Таблица.Колонки.Добавить("Сумма");
       
        СтрТаб =  Таблица.Добавить();


    Для Каждого ТекСтрока из ЦеныТиповРабот Цикл
    Отбор = Новый Структура("ТипРабот", ТекСтрока.ТипРабот);
    НайденныеСтроки = ТрудозатратыСотрудника.НайтиСтроки(Отбор);

    //СтрТаб.ТипРабот = НайденныеСтроки;
    //СтрТаб.ТипРабот = ТекСтрока.ТипРабот;
    Для Каждого НайденнаяСтрока из НайденныеСтроки Цикл
    Сумма = Сумма + НайденнаяСтрока.ЗатраченоЧасов * ТекСтрока.Цена;


    СтрТаб.ВидРабот = НайденнаяСтрока.ВидРабот;
    СтрТаб.Сумма = Сумма;
    КонецЦикла;
    КонецЦикла;

    Для Каждого Стр Из Таблица Цикл
            Сообщить(Сумма);
        КонецЦикла;
     
        КонецПроцедуры
    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

      • sergr78@mail.ru

        Отсортировать необходимо ТрудозатратыСотрудника, это структура, ее мы не можем отсортировать или выбрать из нее данные, необходимо выгрузить структуру в таблицу значений?
        Проверьте. Что не так, в таблице значений только одна строка

        Таблица = Новый ТаблицаЗначений;
        Таблица.Колонки.Добавить(«ТипРабот»,Новый ОписаниеТипов(«Строка»));
        Таблица.Колонки.Добавить(«ВидРабот»,Новый ОписаниеТипов(«Строка»));
        Таблица.Колонки.Добавить(«ЗатраченоЧасов»,Новый ОписаниеТипов(«Число»));
        СтрТаб = Таблица.Добавить();

        Для Каждого ТекСтр из ТрудозатратыСотрудника Цикл
        СтрТаб.ТипРабот =ТекСтр.ТипРабот;
        СтрТаб.ВидРабот =ТекСтр.ВидРабот;
        СтрТаб.ЗатраченоЧасов =ТекСтр.ЗатраченоЧасов;

        КонецЦикла;

        Запрос = Новый Запрос;
        Запрос.УстановитьПараметр(«ТЗ»,Таблица);
        Запрос.Текст=»ВЫБРАТЬ
        | ТЗ.ТипРабот,
        | ТЗ.ВидРабот,
        | ТЗ.ЗатраченоЧасов
        |ПОМЕСТИТЬ ТаблЗнач
        |ИЗ
        | &ТЗ КАК ТЗ
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ ПЕРВЫЕ 5
        | ТаблЗнач.ТипРабот КАК ТипРабот,
        | ТаблЗнач.ВидРабот КАК ВидРабот,
        | ТаблЗнач.ЗатраченоЧасов КАК ЗатраченоЧасов
        |ИЗ
        | ТаблЗнач КАК ТаблЗнач
        |
        |УПОРЯДОЧИТЬ ПО
        | ТаблЗнач.ЗатраченоЧасов УБЫВ»;
        Выборка = Запрос.Выполнить().Выгрузить();

        • Василий Ханевич


          (текст комментария доступен только участникам Мастер-группы)

          • sergr78@mail.ru

            А если соединить две таблицы значений запросом через левое соединение:

            Таблица = Новый ТаблицаЗначений;
            Таблица.Колонки.Добавить("ТипРабот",Новый ОписаниеТипов("Строка"));
            Таблица.Колонки.Добавить("ВидРабот",Новый ОписаниеТипов("Строка"));
            Таблица.Колонки.Добавить("ЗатраченоЧасов",Новый ОписаниеТипов("Число"));
            Таблица.Колонки.Добавить("Стоимость",Новый ОписаниеТипов("Число"));
            Таблица.Колонки.Добавить("Цена",Новый ОписаниеТипов("Число"));

            Для Каждого ТекСтр из ТрудозатратыСотрудника Цикл
            СтрТаб = Таблица.Добавить();
            СтрТаб.ТипРабот =ТекСтр.ТипРабот;
            СтрТаб.ВидРабот =ТекСтр.ВидРабот;
            СтрТаб.ЗатраченоЧасов =ТекСтр.ЗатраченоЧасов;

            КонецЦикла;

            ТаблицаЦена = Новый ТаблицаЗначений;
            ТаблицаЦена.Колонки.Добавить("ТипРабот",Новый ОписаниеТипов("Строка"));
            ТаблицаЦена.Колонки.Добавить("Цена",Новый ОписаниеТипов("Число"));

            Для Каждого ТекСт из ЦеныТиповРабот Цикл
            СтТаб = ТаблицаЦена.Добавить();
            СтТаб.ТипРабот =ТекСт.ТипРабот;
            СтТаб.Цена =ТекСт.Цена;

            КонецЦикла;

            Запрос = Новый Запрос;
            Запрос.УстановитьПараметр("Таблица",Таблица);
            Запрос.УстановитьПараметр("ТаблицаЦена",ТаблицаЦена);
            Запрос.Текст="ВЫБРАТЬ
            | Таблица.ТипРабот КАК ТипРабот,
            | ТаблицаЦена.ТипРабот КАК ТипРаботЦена,
            | ТаблицаЦена.Цена КАК Цена,
            | Таблица.ВидРабот КАК ВидРабот,
            | Таблица.ЗатраченоЧасов КАК ЗатраченоЧасов
            |ИЗ
            | &Таблица КАК Таблица
            | ЛЕВОЕ СОЕДИНЕНИЕ &ТаблицаЦена КАК ТаблицаЦена
            | ПО Таблица.ТипРабот = ТаблицаЦена.ТипРабот";
            Выборка = Запрос.Выполнить().Выгрузить();

            Выдает ошибку. Скриншот

            %D0%9E%D1%88%D0%B8%D0%B1%D0%BA%D0%B0.jpg

            • Василий Ханевич


              (текст комментария доступен только участникам Мастер-группы)

            • sergr78@mail.ru

              Использовать менеджер временных таблиц ?

              • Василий Ханевич


                (текст комментария доступен только участникам Мастер-группы)

                • sergr78@mail.ru

                  1) В скриншоте две таблицы, хочу в ТрудоЗатратыСотрудника добавить колонку Цена из Цены типов работ. Соединить их запросом по колонке ТипРабот. Соответственно, чтобы цены установились на соответствующий Тип работ.Судя из 6 урока, это сделать нельзя в запросе? Нужно программно производить соединение?
                  Или можно соединить левым соединением? А потом выгрузить в таблицу значений?
                  2) Если возможно соединить запросом, возможно ли запросом перемножить две колонки и поместить результат в третью и из таблицы выбрать по это колонке 5 больших чисел?

                  1.jpg

                  • Василий Ханевич


                    (текст комментария доступен только участникам Мастер-группы)

                • sergr78@mail.ru

                  Таблицы соединились, полученная выгрузилась в Таблицу значений. Теперь есть возможность добавить еще колонку и туда записать произведение двух других колонок, но при обходе таблицы значений тип значений этих колонок не «Число», как в таком случае поступить, загрузить в новую таблицу значений?

                  Запрос = Новый Запрос;
                  МВТ = Новый МенеджерВременныхТаблиц;
                  Запрос.УстановитьПараметр(«Таблица»,РеквизитФормыВЗначение(«ТрудозатратыСотрудника»));
                  Запрос.УстановитьПараметр(«ЦеныТиповРабот»,РеквизитФормыВЗначение(«ЦеныТиповРабот»));
                  Запрос.МенеджерВременныхТаблиц = МВТ;
                  //Запрос.УстановитьПараметр(«ТаблицаЦена»,ТаблицаЦена);
                  Запрос.Текст=»ВЫБРАТЬ
                  | Таблица.ТипРабот КАК ТипРабот,
                  | Таблица.ВидРабот КАК ВидРабот,
                  | Таблица.ЗатраченоЧасов КАК ЗатраченоЧасов
                  |ПОМЕСТИТЬ ВТ_Таблица
                  |ИЗ
                  | &Таблица КАК Таблица
                  |;
                  |
                  |////////////////////////////////////////////////////////////////////////////////
                  |ВЫБРАТЬ
                  | ВЫРАЗИТЬ(ВТ_Таблица.ТипРабот КАК СТРОКА(150)) КАК ТипРабот,
                  | ВЫРАЗИТЬ(ВТ_Таблица.ВидРабот КАК СТРОКА(150)) КАК ВидРабот,
                  | СУММА(ВТ_Таблица.ЗатраченоЧасов) КАК ЗатраченоЧасов
                  |ИЗ
                  | ВТ_Таблица КАК ВТ_Таблица
                  |
                  |СГРУППИРОВАТЬ ПО
                  | ВЫРАЗИТЬ(ВТ_Таблица.ТипРабот КАК СТРОКА(150)),
                  | ВЫРАЗИТЬ(ВТ_Таблица.ВидРабот КАК СТРОКА(150))
                  |
                  |УПОРЯДОЧИТЬ ПО
                  | ТипРабот,
                  | ВидРабот
                  |;
                  |
                  |////////////////////////////////////////////////////////////////////////////////
                  |ВЫБРАТЬ
                  | ЦеныТиповРабот.ТипРабот КАК ТипРабот,
                  | ЦеныТиповРабот.Цена КАК Цена
                  |ПОМЕСТИТЬ ВТ_ЦеныТиповРабот
                  |ИЗ
                  | &ЦеныТиповРабот КАК ЦеныТиповРабот
                  |;
                  |
                  |////////////////////////////////////////////////////////////////////////////////
                  |ВЫБРАТЬ
                  | ВЫРАЗИТЬ(ВТ_Таблица.ТипРабот КАК СТРОКА(150)) КАК ТипРабот,
                  | ВЫРАЗИТЬ(ВТ_Таблица.ВидРабот КАК СТРОКА(150)) КАК ВидРабот,
                  | ВТ_Таблица.ЗатраченоЧасов КАК ЗатраченоЧасов,
                  | ВТ_ЦеныТиповРабот.Цена КАК Цена
                  |ИЗ
                  | ВТ_Таблица КАК ВТ_Таблица
                  | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ЦеныТиповРабот КАК ВТ_ЦеныТиповРабот
                  | ПО ВТ_Таблица.ТипРабот = ВТ_ЦеныТиповРабот.ТипРабот
                  |
                  |УПОРЯДОЧИТЬ ПО
                  | ТипРабот,
                  | ВидРабот»;
                  Выборка = Запрос.Выполнить().Выгрузить();

                  • Василий Ханевич


                    (текст комментария доступен только участникам Мастер-группы)

                • sergr78@mail.ru

                  Вот так получилось, может конечно не оптимально…
                  Вопрос, в другой процедуре этой формы, как получить таблицу значений Итоговая. Для того чтобы ее вывести в печатную форму?

                  Выборка = Запрос.Выполнить().Выгрузить();
                  Итоговая = Новый ТаблицаЗначений;
                  Итоговая.Колонки.Добавить(«ТипРабот»,Новый ОписаниеТипов(«Строка»));
                  Итоговая.Колонки.Добавить(«ВидРабот»,Новый ОписаниеТипов(«Строка»));
                  Итоговая.Колонки.Добавить(«ЗатраченоЧасов»,Новый ОписаниеТипов(«Число»));
                  Итоговая.Колонки.Добавить(«Цена»,Новый ОписаниеТипов(«Число»));
                  Итоговая.Колонки.Добавить(«Стоимость»,Новый ОписаниеТипов(«Число»));

                  Для Каждого стр из Выборка цикл
                  Строка =Итоговая.Добавить();
                  Строка.ТипРабот = стр.ТипРабот;
                  Строка.ВидРабот = стр.ВидРабот;
                  Строка.ЗатраченоЧасов = стр.ЗатраченоЧасов;
                  Строка.Цена = стр.Цена;
                  Строка.Стоимость = Строка.Цена *Строка.ЗатраченоЧасов;
                  КонецЦикла;

                  • Василий Ханевич


                    (текст комментария доступен только участникам Мастер-группы)

                • sergr78@mail.ru

                  В другой процедуре переменная Выборка выдает ошибку не определена….Таблицу значений передать через ЗначениеВРеквизитФормы ?

                  • Василий Ханевич


                    (текст комментария доступен только участникам Мастер-группы)

  12. kit_kor

    В вашей учебной базе цены номенклатуры введены позднее документов реализации, поэтому пример со срезом последних на каждую дату вернул пустые цены. И сами метаданные в видео отличаются от базы: ЦеныТоваров в видео и ЦеныНоменклатуры в базе.

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

      • kit_kor

        А где она лежит? В архивах с уроками и практическими не нашёл.

        • Василий Ханевич


          (текст комментария доступен только участникам Мастер-группы)

  13. shttd

    Уточняющий вопрос по видеоуроку 9.20. Прием, похожий на показанный в уроке я встречал ранее в практике под названием «Тэта-соединение». Так ли это?

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  14. shttd

    Задачу 33 решил подобным образом:

    Запрос.Текст =
            "ВЫБРАТЬ
            |   ПродажиОбороты.Номенклатура,
            |   ПродажиОбороты.СуммаОборот
            |ИЗ
            |   РегистрНакопления.Продажи.Обороты(&ДатаНачала, &ДатаОкончания, Регистратор, Номенклатура В ИЕРАРХИИ (&Товар)) КАК ПродажиОбороты";

    В видео подобное решение описано не было, почему? Методологически не верно?

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  15. Lena_P

    Здравствуйте.
    Модуль9. Задача- работа с журналом регистрации.
    Не получилось подключится к файлу 1cv8.lgd
    DRIVER={SQLite3 ODBC Driver}; Database=D:\Base1C8\1С_курсы_Запросы\БД_Модуль2\1Cv8Log\1Cv8.lgd; Biglnt=1
    Ошибка: ODBC.SQLSTATE:IM002 Источник данных не найден.
    Может драйвер установлен не тот. Куда посмотреть?
    Спасибо.

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

      • Lena_P

        Все получилось. Переустановила драйвер.

      • Lena_P

        Если бы тексты запросов всех рассмотренных задач можно было бы посмотреть в текстовом документе, то это очень помогло бы в обучении.
        Спасибо. Курс очень интересный и полезный.

        • Василий Ханевич


          (текст комментария доступен только участникам Мастер-группы)

  16. Lena_P

    Здравствуйте.
    Задача «Список потенциальных покупателей».
    Почему для выбора партнера необходимо связывать с РегистрСведений.АналитикаУчетаПоПартнерам, а не выбирать
    из ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаПоПартнерам.Партнер?

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  17. dlop@mail.ru

    Вопрос по 38 задаче. Там указываются параметры подключения к базе, но на экране их очень плохо видно, поэтому вопрос, где их взять? а еще более актуальный вопрос, где взять этот самый драйвер SQLite с хотя бы минимальными инструкциями по установке и настройке.

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  18. Lena_P

    Здравствуйте.
    Я не могу найти ИБ для разбора задач модуля 9:
    Расчет премии сотрудникам
    Взаиморасчеты по направлениям деятельности.

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  19. Александр

    Добрый день.
    Вопрос по видео 32, отчет по продажам. Для чего создаются две временных таблица со счетами 9001 и 50? Почему в условиях запроса к таблице «ХозрасчетныйОбороты» нельзя было указать «Счет в иерархии &Счет9001»?
    Аналогично в 33 видео. Мне кажется логичней передать в параметрах массив счетов «91.02, 90.04, 90.05 и т.д.» чем в запросе через «ИЛИ» создавать ВТ.
    Это для наглядности так сделано или такой подход более оптимизирован?

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  20. Dmitlion

    Добрый день. Столкнулся с проблемой в универсальном отчете. В УПП формирую отчет «Валовая прибыль». Если получить данные запросом в консоли, то в него попадают суммы документов корректировки реализации (количество = 0). Если делать отчетом — нет сумм. Причем запрос беру из ПостроительОтчета.Текст. Но получаю разный результат. Отборы проверил. Границы дат тоже ни при чем.
    Подскажите пожалуйста куда копать?

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

      • Dmitlion

        Вот кусок модуля универсального отчета:

                ОтборПериодичность = ДобавитьОтборПериодичность();
               
                ПостроительОтчета.Макет = ПолучитьМакетПостротеляОтчета();
                ПостроительОтчета.МакетОформления = _ПолучитьМакетОформления();
                ПостроительОтчета.ОформитьМакет();
               
                ПостроительОтчета.Параметры.Вставить("ДатаНач", ?(ДатаНач = Дата('00010101000000'), ДатаНач, Новый Граница(НачалоДня(ДатаНач), ВидГраницы.Включая)));
                ПостроительОтчета.Параметры.Вставить("ДатаКон", ?(ДатаКон = Дата('00010101000000'), ДатаКон, Новый Граница(КонецДня(ДатаКон), ВидГраницы.Включая)));
                ПостроительОтчета.Параметры.Вставить("ДатаНачала", ?(ДатаНач = Дата('00010101000000'), ДатаНач, НачалоДня(ДатаНач)));
                ПостроительОтчета.Параметры.Вставить("ДатаКонца", ?(ДатаКон = Дата('00010101000000'), Дата("39991231"), КонецДня(ДатаКон)));
               
                СвязанныеПоля = ДобавитьСвязанныеПоля();
                ПоляПорядка = ДобавитьПоляПорядка();
               
                ПостроительОтчета.Выполнить();
                ПостроительОтчета.Вывести(ТабличныйДокумент);
               
                УдалитьПоляПорядка(ПоляПорядка);
                УдалитьСвязанныеПоля(СвязанныеПоля);
                УдалитьОтборПериодичность(ОтборПериодичность);
               
                ОформитьЗаголовок(ТабличныйДокумент);

        А это запрос, получаемый в точке «ПостроительОтчета.Выполнить();» из параметра ПостроительОтчета.Текст

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

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

        ////////////////////////////////////////////////////////////////////////////////
        ВЫБРАТЬ РАЗРЕШЕННЫЕ
            ВложенныйЗапрос.Организация КАК Организация,
            ВложенныйЗапрос.Проект КАК Проект,
            ВложенныйЗапрос.Подразделение КАК Подразделение,
            ВложенныйЗапрос.Покупатель КАК Покупатель,
            ВложенныйЗапрос.ДоговорПокупателя КАК ДоговорПокупателя,
            ВложенныйЗапрос.Номенклатура КАК Номенклатура,
            ВложенныйЗапрос.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
            ВложенныйЗапрос.ЗаказПокупателя КАК ЗаказПокупателя,
            ВложенныйЗапрос.Регистратор КАК Регистратор,
            ПРЕДСТАВЛЕНИЕ(ВложенныйЗапрос.Организация) КАК ОрганизацияПредставление,
            ПРЕДСТАВЛЕНИЕ(ВложенныйЗапрос.Проект) КАК ПроектПредставление,
            ПРЕДСТАВЛЕНИЕ(ВложенныйЗапрос.Подразделение) КАК ПодразделениеПредставление,
            ПРЕДСТАВЛЕНИЕ(ВложенныйЗапрос.Покупатель) КАК ПокупательПредставление,
            ПРЕДСТАВЛЕНИЕ(ВложенныйЗапрос.ДоговорПокупателя) КАК ДоговорПокупателяПредставление,
            ПРЕДСТАВЛЕНИЕ(ВложенныйЗапрос.Номенклатура) КАК НоменклатураПредставление,
            ПРЕДСТАВЛЕНИЕ(ВложенныйЗапрос.ХарактеристикаНоменклатуры) КАК ХарактеристикаНоменклатурыПредставление,
            ПРЕДСТАВЛЕНИЕ(ВложенныйЗапрос.ЗаказПокупателя) КАК ЗаказПокупателяПредставление,
            ПРЕДСТАВЛЕНИЕ(ВложенныйЗапрос.Регистратор) КАК РегистраторПредставление,
            ВложенныйЗапрос.Период КАК Период,
            ВложенныйЗапрос.ПериодДень КАК ПериодДень,
            ВложенныйЗапрос.ПериодНеделя КАК ПериодНеделя,
            ВложенныйЗапрос.ПериодДекада КАК ПериодДекада,
            ВложенныйЗапрос.ПериодМесяц КАК ПериодМесяц,
            ВложенныйЗапрос.ПериодКвартал КАК ПериодКвартал,
            ВложенныйЗапрос.ПериодПолугодие КАК ПериодПолугодие,
            ВложенныйЗапрос.ПериодГод КАК ПериодГод,
            ВложенныйЗапрос.Количество КАК Количество,
            ВложенныйЗапрос.КоличествоЕдиницОтчетов КАК КоличествоЕдиницОтчетов,
            ВложенныйЗапрос.КоличествоБазовыхЕдиниц КАК КоличествоБазовыхЕдиниц,
            ВложенныйЗапрос.СтоимостьБезНДС КАК СтоимостьБезНДС,
            ВложенныйЗапрос.НДС КАК НДС,
            ВложенныйЗапрос.Стоимость КАК Стоимость,
            ВложенныйЗапрос.Себестоимость КАК Себестоимость,
            ВложенныйЗапрос.ВаловаяПрибыль КАК ВаловаяПрибыль,
            ВложенныйЗапрос.Эффективность КАК Эффективность,
            ВложенныйЗапрос.Рентабельность КАК Рентабельность,
            ВложенныйЗапрос.ABCКлассНоменклатуры,
            ВложенныйЗапрос.ПорядокСортировки КАК ПорядокСортировки,
            ВложенныйЗапрос.ABCКлассПокупателя,
            ВложенныйЗапрос.ПорядокСортировки1 КАК ПорядокСортировки1
        {ВЫБРАТЬ
            Организация.*,
            Проект.*,
            Подразделение.*,
            Покупатель.*,
            ДоговорПокупателя.*,
            Номенклатура.*,
            ХарактеристикаНоменклатуры.*,
            ЗаказПокупателя.*,
            Регистратор.*,
            Период,
            ПериодДень,
            ПериодНеделя,
            ПериодДекада,
            ПериодМесяц,
            ПериодКвартал,
            ПериодПолугодие,
            ПериодГод,
            Количество,
            КоличествоЕдиницОтчетов,
            КоличествоБазовыхЕдиниц,
            СтоимостьБезНДС,
            НДС,
            Стоимость,
            Себестоимость,
            ВаловаяПрибыль,
            Эффективность,
            Рентабельность,
            ABCКлассНоменклатуры,
            ABCКлассПокупателя}
        ИЗ
            (ВЫБРАТЬ
                ВложенныйЗапрос.Организация КАК Организация,
                ВложенныйЗапрос.Проект КАК Проект,
                ВложенныйЗапрос.Подразделение КАК Подразделение,
                ВложенныйЗапрос.Покупатель КАК Покупатель,
                ВложенныйЗапрос.ДоговорПокупателя КАК ДоговорПокупателя,
                ВложенныйЗапрос.Номенклатура КАК Номенклатура,
                ВложенныйЗапрос.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
                ВложенныйЗапрос.ЗаказПокупателя КАК ЗаказПокупателя,
                ВложенныйЗапрос.Регистратор КАК Регистратор,
                ВложенныйЗапрос.Период КАК Период,
                НАЧАЛОПЕРИОДА(ВложенныйЗапрос.Период, ДЕНЬ) КАК ПериодДень,
                НАЧАЛОПЕРИОДА(ВложенныйЗапрос.Период, НЕДЕЛЯ) КАК ПериодНеделя,
                НАЧАЛОПЕРИОДА(ВложенныйЗапрос.Период, ДЕКАДА) КАК ПериодДекада,
                НАЧАЛОПЕРИОДА(ВложенныйЗапрос.Период, МЕСЯЦ) КАК ПериодМесяц,
                НАЧАЛОПЕРИОДА(ВложенныйЗапрос.Период, КВАРТАЛ) КАК ПериодКвартал,
                НАЧАЛОПЕРИОДА(ВложенныйЗапрос.Период, ПОЛУГОДИЕ) КАК ПериодПолугодие,
                НАЧАЛОПЕРИОДА(ВложенныйЗапрос.Период, ГОД) КАК ПериодГод,
                СУММА(ВложенныйЗапрос.Количество) КАК Количество,
                СУММА(ВложенныйЗапрос.КоличествоЕдиницОтчетов) КАК КоличествоЕдиницОтчетов,
                СУММА(ВложенныйЗапрос.КоличествоБазовыхЕдиниц) КАК КоличествоБазовыхЕдиниц,
                СУММА(ВложенныйЗапрос.СтоимостьБезНДС) КАК СтоимостьБезНДС,
                СУММА(ВложенныйЗапрос.НДС) КАК НДС,
                СУММА(ВложенныйЗапрос.Стоимость) КАК Стоимость,
                СУММА(ВложенныйЗапрос.Себестоимость) КАК Себестоимость,
                ВЫБОР
                    КОГДА &НеВключатьНДСВСтоимостьПартий
                        ТОГДА СУММА(ВложенныйЗапрос.СтоимостьБезНДС)
                    ИНАЧЕ СУММА(ВложенныйЗапрос.Стоимость)
                КОНЕЦ - СУММА(ВложенныйЗапрос.Себестоимость) КАК ВаловаяПрибыль,
                100 * ВЫБОР
                    КОГДА &НеВключатьНДСВСтоимостьПартий
                        ТОГДА ВЫБОР
                                КОГДА СУММА(ВложенныйЗапрос.Себестоимость) <> 0
                                    ТОГДА (СУММА(ВложенныйЗапрос.СтоимостьБезНДС) - СУММА(ВложенныйЗапрос.Себестоимость)) / СУММА(ВложенныйЗапрос.Себестоимость)
                                ИНАЧЕ 0
                            КОНЕЦ
                    ИНАЧЕ ВЫБОР
                            КОГДА СУММА(ВложенныйЗапрос.Себестоимость) <> 0
                                ТОГДА (СУММА(ВложенныйЗапрос.Стоимость) - СУММА(ВложенныйЗапрос.Себестоимость)) / СУММА(ВложенныйЗапрос.Себестоимость)
                            ИНАЧЕ 0
                        КОНЕЦ
                КОНЕЦ КАК Эффективность,
                100 * ВЫБОР
                    КОГДА &НеВключатьНДСВСтоимостьПартий
                        ТОГДА ВЫБОР
                                КОГДА СУММА(ВложенныйЗапрос.СтоимостьБезНДС) <> 0
                                    ТОГДА (СУММА(ВложенныйЗапрос.СтоимостьБезНДС) - СУММА(ВложенныйЗапрос.Себестоимость)) / СУММА(ВложенныйЗапрос.СтоимостьБезНДС)
                                ИНАЧЕ 0
                            КОНЕЦ
                    ИНАЧЕ ВЫБОР
                            КОГДА СУММА(ВложенныйЗапрос.Стоимость) <> 0
                                ТОГДА (СУММА(ВложенныйЗапрос.Стоимость) - СУММА(ВложенныйЗапрос.Себестоимость)) / СУММА(ВложенныйЗапрос.Стоимость)
                            ИНАЧЕ 0
                        КОНЕЦ
                КОНЕЦ КАК Рентабельность,
                ВложенныйЗапрос.ABCКлассНоменклатуры КАК ABCКлассНоменклатуры,
                ВложенныйЗапрос.ПорядокСортировки КАК ПорядокСортировки,
                ВложенныйЗапрос.ABCКлассПокупателя КАК ABCКлассПокупателя,
                ВложенныйЗапрос.ПорядокСортировки1 КАК ПорядокСортировки1
            {ВЫБРАТЬ
                Организация,
                Проект,
                Подразделение,
                Покупатель,
                ДоговорПокупателя,
                Номенклатура,
                ХарактеристикаНоменклатуры,
                ЗаказПокупателя,
                Регистратор,
                Период,
                ПериодДень,
                ПериодНеделя,
                ПериодДекада,
                ПериодМесяц,
                ПериодКвартал,
                ПериодПолугодие,
                ПериодГод,
                ABCКлассНоменклатуры,
                ABCКлассПокупателя.*}
            ИЗ
                (ВЫБРАТЬ
                    ПродажиОбороты.Проект КАК Проект,
                    ПродажиОбороты.Подразделение КАК Подразделение,
                    ПродажиОбороты.Контрагент КАК Покупатель,
                    ПродажиОбороты.ДоговорКонтрагента КАК ДоговорПокупателя,
                    ПродажиОбороты.Номенклатура КАК Номенклатура,
                    ПродажиОбороты.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
                    ПродажиОбороты.ЗаказПокупателя КАК ЗаказПокупателя,
                    ПродажиОбороты.Организация КАК Организация,
                    ПродажиОбороты.Регистратор КАК Регистратор,
                    ПродажиОбороты.Период КАК Период,
                    ПродажиОбороты.КоличествоОборот КАК Количество,
                    ПродажиОбороты.КоличествоОборот * ЕСТЬNULL(ПродажиОбороты.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент, 1) / ЕСТЬNULL(ПродажиОбороты.Номенклатура.ЕдиницаДляОтчетов.Коэффициент, 1) КАК КоличествоЕдиницОтчетов,
                    ПродажиОбороты.КоличествоОборот * ЕСТЬNULL(ПродажиОбороты.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент, 1) КАК КоличествоБазовыхЕдиниц,
                    (ЕСТЬNULL(РасчетыПоРеализацииОрганизации.СуммаСНДС, 0) - ЕСТЬNULL(РасчетыПоРеализацииОрганизации.СуммаНДС, 0)) * ЕСТЬNULL(РасчетыПоРеализацииВУсловныхЕдиницахОрганизацииОбороты.СуммаРегРасход, 0) / ЕСТЬNULL(ВложенныйЗапрос.СуммаСНДС, 1) КАК СтоимостьБезНДС,
                    ЕСТЬNULL(РасчетыПоРеализацииОрганизации.СуммаНДС, 0) * ЕСТЬNULL(РасчетыПоРеализацииВУсловныхЕдиницахОрганизацииОбороты.СуммаРегРасход, 0) / ЕСТЬNULL(ВложенныйЗапрос.СуммаСНДС, 1) КАК НДС,
                    ЕСТЬNULL(РасчетыПоРеализацииОрганизации.СуммаСНДС, 0) * ЕСТЬNULL(РасчетыПоРеализацииВУсловныхЕдиницахОрганизацииОбороты.СуммаРегРасход, 0) / ЕСТЬNULL(ВложенныйЗапрос.СуммаСНДС, 1) КАК Стоимость,
                    ЕСТЬNULL(ТаблицаРегистраПродажиСебестоимость.СтоимостьОборот, 0) КАК Себестоимость,
                    ABCКлассификацияНоменклатуры.ABCКлассНоменклатуры КАК ABCКлассНоменклатуры,
                    ВЫБОР
                        КОГДА ABCКлассификацияНоменклатуры.ABCКлассНоменклатуры = &AКласс
                            ТОГДА 1
                        КОГДА ABCКлассификацияНоменклатуры.ABCКлассНоменклатуры = &BКласс
                            ТОГДА 2
                        КОГДА ABCКлассификацияНоменклатуры.ABCКлассНоменклатуры = &CКласс
                            ТОГДА 3
                        ИНАЧЕ 0
                    КОНЕЦ КАК ПорядокСортировки,
                    ABCКлассификацияПокупателей.ABCКлассПокупателя КАК ABCКлассПокупателя,
                    ВЫБОР
                        КОГДА ABCКлассификацияПокупателей.ABCКлассПокупателя = &AКласс
                            ТОГДА 1
                        КОГДА ABCКлассификацияПокупателей.ABCКлассПокупателя = &BКласс
                            ТОГДА 2
                        КОГДА ABCКлассификацияПокупателей.ABCКлассПокупателя = &CКласс
                            ТОГДА 3
                        ИНАЧЕ 0
                    КОНЕЦ КАК ПорядокСортировки1
                ИЗ
                    ВТ_Продажи КАК ПродажиОбороты
                        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                            ПартииТоваровНаСкладахБухгалтерскийУчет.Номенклатура КАК Номенклатура,
                            ПартииТоваровНаСкладахБухгалтерскийУчет.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
                            ВЫБОР
                                КОГДА ПартииТоваровНаСкладахБухгалтерскийУчет.ДокументДвижения <> НЕОПРЕДЕЛЕНО
                                    ТОГДА ПартииТоваровНаСкладахБухгалтерскийУчет.ДокументДвижения
                                ИНАЧЕ ПартииТоваровНаСкладахБухгалтерскийУчет.Регистратор
                            КОНЕЦ КАК Регистратор,
                            СУММА(ВЫБОР
                                    КОГДА ПартииТоваровНаСкладахБухгалтерскийУчет.Регистратор ССЫЛКА Документ.ВозвратТоваровОтПокупателя
                                        ТОГДА ПартииТоваровНаСкладахБухгалтерскийУчет.Стоимость * -1
                                    ИНАЧЕ ПартииТоваровНаСкладахБухгалтерскийУчет.Стоимость
                                КОНЕЦ) КАК СтоимостьОборот
                        ИЗ
                            РегистрНакопления.ПартииТоваровНаСкладахБухгалтерскийУчет КАК ПартииТоваровНаСкладахБухгалтерскийУчет
                       
                        СГРУППИРОВАТЬ ПО
                            ПартииТоваровНаСкладахБухгалтерскийУчет.Номенклатура,
                            ВЫБОР
                                КОГДА ПартииТоваровНаСкладахБухгалтерскийУчет.ДокументДвижения <> НЕОПРЕДЕЛЕНО
                                    ТОГДА ПартииТоваровНаСкладахБухгалтерскийУчет.ДокументДвижения
                                ИНАЧЕ ПартииТоваровНаСкладахБухгалтерскийУчет.Регистратор
                            КОНЕЦ,
                            ПартииТоваровНаСкладахБухгалтерскийУчет.ХарактеристикаНоменклатуры) КАК ТаблицаРегистраПродажиСебестоимость
                        ПО (ТаблицаРегистраПродажиСебестоимость.Номенклатура = ПродажиОбороты.Номенклатура)
                            И (ТаблицаРегистраПродажиСебестоимость.ХарактеристикаНоменклатуры = ПродажиОбороты.ХарактеристикаНоменклатуры)
                            И (ТаблицаРегистраПродажиСебестоимость.Регистратор = ПродажиОбороты.Регистратор)
                        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ABCКлассификацияНоменклатуры.СрезПоследних(&ДатаКон, ) КАК ABCКлассификацияНоменклатуры
                        ПО ПродажиОбороты.Номенклатура = ABCКлассификацияНоменклатуры.Номенклатура
                        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ABCКлассификацияПокупателей.СрезПоследних(&ДатаКон, ) КАК ABCКлассификацияПокупателей
                        ПО ПродажиОбороты.Контрагент = ABCКлассификацияПокупателей.Контрагент
                        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                            РасчетыПоРеализацииОрганизации.Регистратор КАК Регистратор,
                            СУММА(РасчетыПоРеализацииОрганизации.СуммаСНДС) КАК СуммаСНДС
                        ИЗ
                            РегистрСведений.РасчетыПоРеализацииОрганизации КАК РасчетыПоРеализацииОрганизации
                        ГДЕ
                            РасчетыПоРеализацииОрганизации.Регистратор В
                                    (ВЫБРАТЬ
                                        ВТ_Продажи.Регистратор
                                    ИЗ
                                        ВТ_Продажи КАК ВТ_Продажи)
                       
                        СГРУППИРОВАТЬ ПО
                            РасчетыПоРеализацииОрганизации.Регистратор) КАК ВложенныйЗапрос
                        ПО ПродажиОбороты.Регистратор = ВложенныйЗапрос.Регистратор
                        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                            СУММА(РасчетыПоРеализацииВУсловныхЕдиницахОрганизацииОбороты.СуммаРегРасход) КАК СуммаРегРасход,
                            РасчетыПоРеализацииВУсловныхЕдиницахОрганизацииОбороты.Регистратор КАК Регистратор,
                            РасчетыПоРеализацииВУсловныхЕдиницахОрганизацииОбороты.Сделка КАК Сделка,
                            РасчетыПоРеализацииВУсловныхЕдиницахОрганизацииОбороты.Организация КАК Организация,
                            РасчетыПоРеализацииВУсловныхЕдиницахОрганизацииОбороты.Контрагент КАК Контрагент
                        ИЗ
                            РегистрНакопления.РасчетыПоРеализацииВУсловныхЕдиницахОрганизации.Обороты(
                                    &ДатаНач,
                                    &ДатаКон,
                                    Регистратор,
                                    (Контрагент, Организация) В
                                        (ВЫБРАТЬ
                                            ВТ_Продажи.Контрагент,
                                            ВТ_Продажи.Организация
                                        ИЗ
                                            ВТ_Продажи КАК ВТ_Продажи)) КАК РасчетыПоРеализацииВУсловныхЕдиницахОрганизацииОбороты
                       
                        СГРУППИРОВАТЬ ПО
                            РасчетыПоРеализацииВУсловныхЕдиницахОрганизацииОбороты.Регистратор,
                            РасчетыПоРеализацииВУсловныхЕдиницахОрганизацииОбороты.Контрагент,
                            РасчетыПоРеализацииВУсловныхЕдиницахОрганизацииОбороты.Организация,
                            РасчетыПоРеализацииВУсловныхЕдиницахОрганизацииОбороты.Сделка) КАК РасчетыПоРеализацииВУсловныхЕдиницахОрганизацииОбороты
                        ПО ПродажиОбороты.Контрагент = РасчетыПоРеализацииВУсловныхЕдиницахОрганизацииОбороты.Контрагент
                            И ПродажиОбороты.Организация = РасчетыПоРеализацииВУсловныхЕдиницахОрганизацииОбороты.Организация
                            И ПродажиОбороты.Регистратор = РасчетыПоРеализацииВУсловныхЕдиницахОрганизацииОбороты.Регистратор
                            И (ВЫБОР
                                КОГДА ПродажиОбороты.ЗаказПокупателя.ДоговорКонтрагента.ВедениеВзаиморасчетов = ЗНАЧЕНИЕ(Перечисление.ВедениеВзаиморасчетовПоДоговорам.ПоДоговоруВЦелом)
                                    ТОГДА ИСТИНА
                                ИНАЧЕ ПродажиОбороты.ЗаказПокупателя = РасчетыПоРеализацииВУсловныхЕдиницахОрганизацииОбороты.Сделка
                            КОНЕЦ)
                        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РасчетыПоРеализацииОрганизации КАК РасчетыПоРеализацииОрганизации
                        ПО ПродажиОбороты.Период = РасчетыПоРеализацииОрганизации.Период
                            И ПродажиОбороты.Регистратор = РасчетыПоРеализацииОрганизации.Регистратор
                            И ПродажиОбороты.Контрагент = РасчетыПоРеализацииОрганизации.Контрагент
                            И ПродажиОбороты.Номенклатура = РасчетыПоРеализацииОрганизации.Номенклатура
                            И ПродажиОбороты.Организация = РасчетыПоРеализацииОрганизации.Организация
                            И (ВЫБОР
                                КОГДА РасчетыПоРеализацииОрганизации.РасчетыВозврат <> ЗНАЧЕНИЕ(Перечисление.РасчетыВозврат.Возврат)
                                        И НЕ ПродажиОбороты.Регистратор ССЫЛКА Документ.КорректировкаРеализации
                                    ТОГДА ПродажиОбороты.ДокументПродажи = РасчетыПоРеализацииОрганизации.Документ
                                ИНАЧЕ ИСТИНА
                            КОНЕЦ)
                            И (ВЫБОР
                                КОГДА ПродажиОбороты.ЗаказПокупателя.ДоговорКонтрагента.ВедениеВзаиморасчетов = ЗНАЧЕНИЕ(Перечисление.ВедениеВзаиморасчетовПоДоговорам.ПоДоговоруВЦелом)
                                    ТОГДА ИСТИНА
                                ИНАЧЕ ПродажиОбороты.ЗаказПокупателя = РасчетыПоРеализацииОрганизации.Сделка
                            КОНЕЦ)) КАК ВложенныйЗапрос
           
            СГРУППИРОВАТЬ ПО
                ВложенныйЗапрос.Организация,
                ВложенныйЗапрос.Проект,
                ВложенныйЗапрос.Подразделение,
                ВложенныйЗапрос.Покупатель,
                ВложенныйЗапрос.ДоговорПокупателя,
                ВложенныйЗапрос.Номенклатура,
                ВложенныйЗапрос.ХарактеристикаНоменклатуры,
                ВложенныйЗапрос.ЗаказПокупателя,
                ВложенныйЗапрос.Регистратор,
                ВложенныйЗапрос.Период,
                ВложенныйЗапрос.ABCКлассНоменклатуры,
                ВложенныйЗапрос.ПорядокСортировки,
                ВложенныйЗапрос.ABCКлассПокупателя,
                ВложенныйЗапрос.ПорядокСортировки1
           
            ИМЕЮЩИЕ
                (СУММА(ВложенныйЗапрос.Количество) <> 0
                    ИЛИ СУММА(ВложенныйЗапрос.Стоимость) <> 0
                    ИЛИ СУММА(ЕСТЬNULL(ВложенныйЗапрос.Себестоимость, 0)) <> 0)) КАК ВложенныйЗапрос
        {ГДЕ
            ВложенныйЗапрос.Регистратор.*,
            ВложенныйЗапрос.Период,
            ВложенныйЗапрос.ПериодДень,
            ВложенныйЗапрос.ПериодНеделя,
            ВложенныйЗапрос.ПериодДекада,
            ВложенныйЗапрос.ПериодМесяц,
            ВложенныйЗапрос.ПериодКвартал,
            ВложенныйЗапрос.ПериодПолугодие,
            ВложенныйЗапрос.ПериодГод,
            ВложенныйЗапрос.Количество,
            ВложенныйЗапрос.КоличествоЕдиницОтчетов,
            ВложенныйЗапрос.КоличествоБазовыхЕдиниц,
            ВложенныйЗапрос.СтоимостьБезНДС,
            ВложенныйЗапрос.НДС,
            ВложенныйЗапрос.Стоимость,
            ВложенныйЗапрос.Себестоимость,
            ВложенныйЗапрос.ВаловаяПрибыль,
            ВложенныйЗапрос.Эффективность,
            ВложенныйЗапрос.Рентабельность,
            ВложенныйЗапрос.ABCКлассНоменклатуры,
            ВложенныйЗапрос.ABCКлассПокупателя}

        УПОРЯДОЧИТЬ ПО
            ПорядокСортировки,
            ПорядокСортировки1
        {УПОРЯДОЧИТЬ ПО
            Организация.*,
            Проект.*,
            Подразделение.*,
            Покупатель.*,
            ДоговорПокупателя.*,
            Номенклатура.*,
            ХарактеристикаНоменклатуры.*,
            ЗаказПокупателя.*,
            Регистратор.*,
            Период,
            ПериодДень,
            ПериодНеделя,
            ПериодДекада,
            ПериодМесяц,
            ПериодКвартал,
            ПериодПолугодие,
            ПериодГод,
            Количество,
            КоличествоЕдиницОтчетов,
            КоличествоБазовыхЕдиниц,
            СтоимостьБезНДС,
            НДС,
            Стоимость,
            Себестоимость,
            ВаловаяПрибыль,
            Эффективность,
            Рентабельность,
            ABCКлассНоменклатуры,
            ABCКлассПокупателя}
        ИТОГИ
            СУММА(Количество),
            СУММА(КоличествоЕдиницОтчетов),
            СУММА(КоличествоБазовыхЕдиниц),
            СУММА(СтоимостьБезНДС),
            СУММА(НДС),
            СУММА(Стоимость),
            СУММА(Себестоимость),
            ВЫБОР
                КОГДА &НеВключатьНДСВСтоимостьПартий
                    ТОГДА СУММА(СтоимостьБезНДС)
                ИНАЧЕ СУММА(Стоимость)
            КОНЕЦ - СУММА(Себестоимость) КАК ВаловаяПрибыль,
            100 * ВЫБОР
                КОГДА &НеВключатьНДСВСтоимостьПартий
                    ТОГДА ВЫБОР
                            КОГДА СУММА(Себестоимость) <> 0
                                ТОГДА (СУММА(СтоимостьБезНДС) - СУММА(Себестоимость)) / СУММА(Себестоимость)
                            ИНАЧЕ 0
                        КОНЕЦ
                ИНАЧЕ ВЫБОР
                        КОГДА СУММА(Себестоимость) <> 0
                            ТОГДА (СУММА(Стоимость) - СУММА(Себестоимость)) / СУММА(Себестоимость)
                        ИНАЧЕ 0
                    КОНЕЦ
            КОНЕЦ КАК Эффективность,
            100 * ВЫБОР
                КОГДА &НеВключатьНДСВСтоимостьПартий
                    ТОГДА ВЫБОР
                            КОГДА СУММА(СтоимостьБезНДС) <> 0
                                ТОГДА (СУММА(СтоимостьБезНДС) - СУММА(Себестоимость)) / СУММА(СтоимостьБезНДС)
                            ИНАЧЕ 0
                        КОНЕЦ
                ИНАЧЕ ВЫБОР
                        КОГДА СУММА(Стоимость) <> 0
                            ТОГДА (СУММА(Стоимость) - СУММА(Себестоимость)) / СУММА(Стоимость)
                        ИНАЧЕ 0
                    КОНЕЦ
            КОНЕЦ КАК Рентабельность
        ПО
            ОБЩИЕ
        {ИТОГИ ПО
            Организация.*,
            Проект.*,
            Подразделение.*,
            Покупатель.*,
            ДоговорПокупателя.*,
            Номенклатура.*,
            ХарактеристикаНоменклатуры.*,
            ЗаказПокупателя.*,
            Регистратор.*,
            Период,
            ПериодДень,
            ПериодНеделя,
            ПериодДекада,
            ПериодМесяц,
            ПериодКвартал,
            ПериодПолугодие,
            ПериодГод,
            ABCКлассНоменклатуры,
            ABCКлассПокупателя}
        АВТОУПОРЯДОЧИВАНИЕ
        • Dmitlion

          Этот отчет «Валовая прибыль (руб)» создан из стандартного отчета «Валовая прибыль». Сравнение показало, что отличия есть только в запросе и строчка ВалютаУпр=глЗначениеПеременной(«ВалютаУправленческогоУчета»);
          меняется на
          ВалютаУпр=глЗначениеПеременной(«ВалютаРегламентированногоУчета»);

          Стандартный отчет работает корректно, показывая суммы корректировок, а доработанный совсем не учитывает корректировки. То есть разворот по регистратору показывает их отсутствие. НО! запрос в консоли дает все суммы корректно. Мистика…

          • Василий Ханевич


            (текст комментария доступен только участникам Мастер-группы)

  21. konstanciy7708

    Добрый день.
    Модуль 9. Урок 27. Список потенциальных покупателей.
    Почему в запросе, когда работаем с таблицей ВыручкаИСебестоимостьПродажОброты вы делаете отбор с помощью запроса в условии. Почему нельзя сделать условие ВыручкаИСебестоимостьПродажОброты.АналитикаУчета Номенклатуры.Номенклатура = НоменклатураА ?
    Заранее спасибо.

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  22. Dmitlion

    Добрый день. Для чего в RLS запросы содержат «где ЛОЖЬ»? Например в УПП есть такое право:
    Роль.ПользовательЧтение.Права.Документы.СчетФактураВыданный.Чтение
    Поля:
    Ограничение доступа: СчетФактураВыданный ГДЕ ЛОЖЬ

    По идее такая добавка к запросу его «обнулит» (то есть результат будет пустой)

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  23. Polina.Z

    Добрый день!
    Почему при записи движений в регистры Вы пишете следующий код:
    Движения.ВзаиморасчетыСКонтрагентами.Записывать = Истина;
    Движения.ВзаиморасчетыСКонтрагентами.Записать();
    Объясните, пожалуйста, подробнее механизм работы данного кода.
    Спасибо!

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  24. novka

    Добрый день, во 2-ом уроке Вы получаете МАКСИМУМ от ссылочного значения (Документ), хотелось бы по подробнее узнать по какому алгоритму платформа получает этот самый максимум, для документов, справочников и т.д. Спасибо.

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  25. Dmitlion

    Добрый день. Попытался сделать запрос к журналу регистрации. В поле date внешнего источника данных получил значение 2 147 483 647. Догадываюсь, что это максимально возможное значение типа int. То есть мы уперлись в математическое ограничение. Как у вас получилось посчитать реальную дату из журнала регистрации?

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

      • Dmitlion

        Получилось почему-то на 3 часа меньше, чем в журнале регистрации). Может быть сталкивались?

        • Василий Ханевич


          (текст комментария доступен только участникам Мастер-группы)

  26. SinO

    Добрый день Василий!

    В модуле 9, уроки 23,24(Списание по партиям) строиться запрос по ТЧ документа и регистру Партии Товаров,
    Подскажите пожалуйста, а как построить запрос «своих»партий,т.е.
    нужно узнать : По Складу №1 Номенклатуре А остаток 156 шт, а в разрезе каких документов поступления:
    Док1 56 шт от 01.09.16,
    Док2 80 шт от 03.09.16
    Док3 20 шт от 05.09.16.

    Дело в том, что в комплексной автоматизации 1.1 режим ведения учета РАУЗ и посмотреть ведомость по партиям товаров
    нет возможности, а в оборотно сальдовой ведомости у счета 41 нет третьего субконто «Партии»
    как к примеру в бухгалтерии 2.0, а стоит задача построить такой отчет, чтоб было видно какие доки. поступления
    соответствуют остаткам на определенную дату по определенной номенклатуре.

    В моем отчете не получается оставить только те документы поступления на которые действительно есть остатки.

    Подскажите пожалуйста как сделать правильно?

    Отчет и скриншоты прилагаю.

    С Уважением,
    Олег.

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  27. Шпаер Дмитрий

    Всем привет!
    Подскажите, а как построить «универсальный запрос» следующего вида.
    Есть справочник (2 уровня — группы и элементы, все элементы в группах). Количество групп и элементов — любое.
    Хочется запросов вывести табличку в виде:
    — шапка таблицы (колонки) — это группы. чем больше групп в справочнике, тем шире таблица.
    — строки таблицы — это элементы справочника. соответственно, каждый элементы выводится в колонке «своей группы». Таким образом, высота таблицы — будет максимальное количество элементов во всех группах. Но могут быть и пустые «клеточки».
    Как подойти к этой задаче? Можно ли сделать запрос в 1 проход и получить табличку? :)

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  28. Кирилл Абрашин

    Василий, здравствуйте!
    Есть вопрос по заданию № 36.В видеоуроке Вы для оптимизации используете событие табличного поля формы «ПриПолученииДанных». Мне же пришла в голову мысль при использовать событие «ПриОбновленииОтображения» самой формы получить все долги контрагентов в таблицу значений, а в событии «ПриВыводеСтроки» табличного поля уже обращаться к таблице долгов. Чем этот способ может быть плох?

    Перем ДолгиКонтрагентов;

    Процедура СправочникСписокПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
       
        СтрокаДолга = ДолгиКонтрагентов.Найти(ДанныеСтроки.Ссылка, "Контрагент");
        Если СтрокаДолга <> Неопределено Тогда     
            ОформлениеСтроки.Ячейки.ДолгКонтрагента.Значение = СтрокаДолга.СуммаОстаток;
            Если СтрокаДолга.СуммаОстаток < 0 Тогда
                ОформлениеСтроки.Ячейки.ДолгКонтрагента.ЦветТекста = WebЦвета.Красный;
            Иначе
                ОформлениеСтроки.Ячейки.ДолгКонтрагента.ЦветТекста = WebЦвета.Синий;
            КонецЕсли;
        КонецЕсли;
       
    КонецПроцедуры

    Процедура ОбновлениеОтображения()
       
        ПолучитьДолгиКонтрагентов();
        Сообщить("Обновлено отображение");
       
    КонецПроцедуры

    Процедура ПолучитьДолгиКонтрагентов()
       
        Запрос = Новый Запрос;
        Запрос.Текст = "ВЫБРАТЬ
                       |    ВзаиморасчетыСКонтрагентамиОстатки.Контрагент,
                       |    ВзаиморасчетыСКонтрагентамиОстатки.СуммаОстаток
                       |ИЗ
                       |    РегистрНакопления.ВзаиморасчетыСКонтрагентами.Остатки КАК ВзаиморасчетыСКонтрагентамиОстатки";
                       
        ДолгиКонтрагентов = Запрос.Выполнить().Выгрузить();
       
    КонецПроцедуры
    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  29. wizard.ilmir

    Здравствуйте, я нашел ошибку во втором кейсе по данному курсу. Где нужно построить валюты с интервалами дат, Ваш запрос не правильно отработает если в начале периода будет не измененный курс. Например строим отчет за январь, в регистре такие данные.
    01.01 25 руб
    03.01 25 руб
    04.01 25 руб
    05.01 26 руб
    во временной таблице ВТ_Курсы вы пишете условие на неравенство текущего и предыдущего курса и получается что записи с 01. по 03 исчезают и как будто получается что курс 25 руб начал действовать только с 04.01.

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

      2015-01-14_23-28-55.png

    • wizard.ilmir

      Спасибо большое, но у меня еще есть замечание. Во втором кейсе по условию задачи нужно определить приращение по формуле ( текущий курс — предыдущий курс), и тогда получается то что первая запись c даты 01.01.2014 по дату 10.01.2014 должна быть равна текущий курс 32.6587 предыдущий курс 0, так записи до 01.01.2014 в базе нет. А у вас тогда получается формула приращения такая (текущий курс — БУДУЩИЙ КУРС).

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

      • Василий Ханевич


        (текст комментария доступен только участникам Мастер-группы)

        • wizard.ilmir

          Спасибо, но это не правильно не только для первой записи и для других тоже, у вас для всех записей такая формула (текущий курс — БУДУЩИЙ КУРС) например для периода c 10.01 по 11.01 правильный вывод будет таким: текущий курс 33.1547 предыдущий курс 32.6587, а НЕ текущий курс 33.1547 предыдущий курс 33.2062(который на самом деле будущий) согласно поставленной задачи У вас не правильный вывод.
          Вот запрос который решает правильно поставленную задачу.

          ВЫБРАТЬ
              КурсыВалют.Период КАК Период,
              КурсыВалют.Курс
          ПОМЕСТИТЬ ВТ_КурсыИсх
          ИЗ
              РегистрСведений.КурсыВалют КАК КурсыВалют
          ГДЕ
              КурсыВалют.Валюта = &Валюта
              И КурсыВалют.Период МЕЖДУ &Дата1 И &Дата2

          ИНДЕКСИРОВАТЬ ПО
              Период
          ;

          ////////////////////////////////////////////////////////////////////////////////
          ВЫБРАТЬ
              ВТ_курсы.Период КАК ПериодС,
              МИНИМУМ(ВТ_курсы1.Период) КАК ПериодПО,
              ВТ_курсы.Курс
          ПОМЕСТИТЬ ВТ_ПериодыДействияКурсовВалют
          ИЗ
              ВТ_КурсыИсх КАК ВТ_курсы
                  ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_КурсыИсх КАК ВТ_курсы1
                  ПО ВТ_курсы.Период < ВТ_курсы1.Период

          СГРУППИРОВАТЬ ПО
              ВТ_курсы.Период,
              ВТ_курсы.Курс
          ;

          ////////////////////////////////////////////////////////////////////////////////
          ВЫБРАТЬ
              ВТ_курсы.Период КАК ТекПериод,
              МАКСИМУМ(ВТ_курсы1.Период) КАК ДатаПредыдущегоКурса
          ПОМЕСТИТЬ ВТ_ПредыдущаяДатаКурса
          ИЗ
              ВТ_КурсыИсх КАК ВТ_курсы
                  ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_КурсыИсх КАК ВТ_курсы1
                  ПО ВТ_курсы.Период > ВТ_курсы1.Период
                      И ВТ_курсы.Курс <> ВТ_курсы1.Курс

          СГРУППИРОВАТЬ ПО
              ВТ_курсы.Период
          ;

          ////////////////////////////////////////////////////////////////////////////////
          ВЫБРАТЬ
              МИНИМУМ(ВТ_ПериодыДействияКурсовВалют.ПериодС) КАК ПериодС,
              МАКСИМУМ(ВТ_ПериодыДействияКурсовВалют.ПериодПО) КАК ПериодПО,
              ВТ_ПериодыДействияКурсовВалют.Курс,
              ВТ_ПредыдущаяДатаКурса.ДатаПредыдущегоКурса
          ПОМЕСТИТЬ ВТ_РеальныеПериодыДействияКурсовВалют
          ИЗ
              ВТ_ПериодыДействияКурсовВалют КАК ВТ_ПериодыДействияКурсовВалют
                  ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПредыдущаяДатаКурса КАК ВТ_ПредыдущаяДатаКурса
                  ПО ВТ_ПериодыДействияКурсовВалют.ПериодС = ВТ_ПредыдущаяДатаКурса.ТекПериод

          СГРУППИРОВАТЬ ПО
              ВТ_ПериодыДействияКурсовВалют.Курс,
              ВТ_ПредыдущаяДатаКурса.ДатаПредыдущегоКурса
          ;

          ////////////////////////////////////////////////////////////////////////////////
          ВЫБРАТЬ
              ВТ_РеальныеПериодыДействияКурсовВалютПериодС.ПериодС КАК ПериодС,
              ВТ_РеальныеПериодыДействияКурсовВалютПериодС.ПериодПО КАК ПериодПО,
              ВТ_РеальныеПериодыДействияКурсовВалютПериодС.Курс КАК ТекущийКурс,
              ВТ_РеальныеПериодыДействияКурсовВалютПериодС.Курс - ЕСТЬNULL(ВТ_РеальныеПериодыДействияКурсовВалютПериодПО.Курс, 0) КАК Приращение,
              РАЗНОСТЬДАТ(ВТ_РеальныеПериодыДействияКурсовВалютПериодС.ПериодС, ЕСТЬNULL(ВТ_РеальныеПериодыДействияКурсовВалютПериодС.ПериодПО, &Дата2), ДЕНЬ) КАК КоличетствоДней
          ИЗ
              ВТ_РеальныеПериодыДействияКурсовВалют КАК ВТ_РеальныеПериодыДействияКурсовВалютПериодС
                  ЛЕВОЕ СОЕДИНЕНИЕ ВТ_РеальныеПериодыДействияКурсовВалют КАК ВТ_РеальныеПериодыДействияКурсовВалютПериодПО
                  ПО ВТ_РеальныеПериодыДействияКурсовВалютПериодС.ПериодС = ВТ_РеальныеПериодыДействияКурсовВалютПериодПО.ПериодПО

          УПОРЯДОЧИТЬ ПО
              ПериодС,
              ПериодПО
          • Василий Ханевич


            (текст комментария доступен только участникам Мастер-группы)

  30. KulikovSV

    Я не понял, где брать конфигурации к 9.2 Расчет премии сотрудникам, Взаиморасчеты по направлениям деятельности? Дальше не смотрел еще.

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  31. elam2009

    Здравствуйте
    Как можно запросом сделать следующее:
    Есть справочник Продукты
    В нем один элемент Продукт№1
    у него табличная часть «Фрукты» — в ней две записи арбуз, тыква
    Второй Элемент Продукт№2
    Нужно получить две строчки
    Продукт1 Арбуз Тыква
    Продукт2

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  32. AxiLLes

    День добрый)
    Есть для меня сложный момент в написании запросов, он связан с иерархией.

    Для примера имеем строку с 2 колонками ЦФО и Сумма:
    ЦФО Сумма
    ЦФО_1_1_1 100

    Требуется получить таблицу

    ЦФО Сумма
    ЦФО_1 100
    ЦФО_1_1 100
    ЦФО_1_1_1 100

    где ЦФО_1 родитель ЦФО_1_1, а ЦФО_1_1 родитель ЦФО_1_1_1.

    Обычно такого типа задачи решаю через «.Родитель», но такое решение строится на предположении уровня вложенности, что является не точным, условие соединения «В ИЕРАРХИИ» запрос не принимает, да и само использование «В ИЕРАРХИИ» является трудоемким для системы.

    Есть ли какие-то приемы для решения задач получения иерархии «вниз и «вверх»?

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  33. xdd

    Спасибо интересные видео про запросы в бухгалтерии. Василий не могли бы вы подсказать как можно построить отчет, который покажет по дням выручку (57.3сч+50сч+51сч) с указанием в т.ч. комиссионного товара и собственного товара в разрезе организаций в бух 3.0?

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  34. noffkj

    Василий Ханевич Здравствуйте

    Подскажите пожалуйста, есть такой запрос.

    ВЫБРАТЬ
    «Иванов» КАК Фамилия,
    1 КАК Номер
    ПОМЕСТИТЬ ВТ1

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    «Иванов»,
    2
    ;

    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    500 КАК Сумма,
    «Иванов» КАК Фамилия
    ПОМЕСТИТЬ ВТ2
    ;

    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    ВТ1.Фамилия,
    ВТ2.Сумма
    ИЗ
    ВТ1 КАК ВТ1
    ЛЕВОЕ СОЕДИНЕНИЕ ВТ2 КАК ВТ2
    ПО ВТ1.Фамилия = ВТ2.Фамилия

    Он в итоге выдает следующее

    Иванов 500
    Иванов 500

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

    Иванов 500
    Иванов

    дополнительные ключи по которым бы можно было однозначно определить поля в данном случае использовать не представляется возможным. Грубо говоря есть только эти данные. и сворачивать тоже нельзя.

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

      • noffkj

        да это сработает, но когда такого условия составить не получается в силу разных причин. как быть?
        то есть заранее не известно какое будет ключевое поле, нужно просто вывести в первое поле.

        • Василий Ханевич


          (текст комментария доступен только участникам Мастер-группы)

          • noffkj

            интересный вариант, но как сделать это запросом… то есть идет выборка данных..
            у нас есть числовое поле скажем номер и 2 поле Фио.
            Далее идет выборка. Иванов, 1
            затем идет Сидоров, 1
            Затем Иванов и тут надо поставить уже цифру 2 в числовое поле. Это вобще реально просто запросом или надо переводить в ТЗ и уже на встроенном языке писать…очень бы конечно хотелось запросом.

            • Василий Ханевич


              (текст комментария доступен только участникам Мастер-группы)

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  35. noffkj

    Василий Ханевич Здравствуйте.

    Подскажите пожалуйста. Есть документ ОперацияБух, в нем есть составной реквизит ТиповаяОперация
    Я пытаюсь запросом выбрать документ из этого реквизита. Допустим так.

    ВЫРАЗИТЬ(ХозрасчетныйОбороты.Регистратор.ТиповаяОперация КАК Документ.РеализацияТоваровУслуг)

    но он возвращает Null хотя документы типа РеализацияТоваровУслуг в этом реквизите присутствуют.
    Как быть в данном случае, подскажите пожалуйста.

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

      • noffkj

        может дело в том что в самом составном типе данных не указан документ Реализация товаров и услуг, а просто стоит галка на всех документах?

        Screenshot_5.png

        • Василий Ханевич


          (текст комментария доступен только участникам Мастер-группы)

          • noffkj

            запрос отрабатывает. Только вот Нулл и все тут

            %D1%82%D0%B5%D1%81%D1%82_1.png%D1%82%D0%B5%D1%81%D1%82_2.png

            • Василий Ханевич


              (текст комментария доступен только участникам Мастер-группы)

                • Василий Ханевич


                  (текст комментария доступен только участникам Мастер-группы)

                • noffkj

                  Наверно он там как то хитро хранится в базе, выбрал все реквизиты.

                  %D1%82%D0%B5%D1%81%D1%82_3.png

                  • Василий Ханевич


                    (текст комментария доступен только участникам Мастер-группы)

  36. xdd

    Вопрос касательно задачи списания по партиям.
    Как должен выглядеть запрос если необходимо, чтобы в регистре так же отображалась партия документа и партия списания?
    Например

    остатки по регистру партий:

    номенклатура п1 10 шт
    номенклатура п2 20 шт
    номенклатура п3 30 шт
    номенклатура п4 40 шт

    Документ:
    номенклатура п1 35 шт
    номенклатура п2 5 шт
    номенклатура 35 шт

    Таблица движений регистра партий:
    Партия списания партия документа Количество
    номенклатура п1 п1 10 шт
    номенклатура п2 п1 15 шт
    номенклатура п3 п1 10 шт
    номенклатура п2 п2 5 шт
    номенклатура п3 20 шт
    номенклатура п4 15 шт

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

      • xdd

        Да это реквизит, а не измерение.
        Сделал вот так правда дорабатывать пришлось не запросы, а код:

        ДокТовары = Товары.Выгрузить(, «Номенклатура,Количество,Партия»);
        Таблица = Товары.Выгрузить(, «Номенклатура,Количество,Партия»);
        Таблица.Очистить();
        ДокТовары.Сортировать(«Партия Убыв»);
        ВыборкаНоменклатуры = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

        Пока ВыборкаНоменклатуры.Следующий() Цикл

        Если ВыборкаНоменклатуры.Количество>ВыборкаНоменклатуры.КоличествоПартии Тогда
        кол = ВыборкаНоменклатуры.Количество- ВыборкаНоменклатуры.КоличествоПартии;
        отказ = Истина;
        Сообщение = Новый СообщениеПользователю;
        Сообщение.Текст = «Товара «+ ВыборкаНоменклатуры.Номенклатура+ » необходимо :» + кол;
        Сообщение.Сообщить();
        Продолжить;
        КонецЕсли;
        ВыборкаПартий = ВыборкаНоменклатуры.Выбрать();
        ОстаткиПартий = ПреобразоватьВыборкуВТЗ(ВыборкаПартий,Таблица);
        ОсталосьСписать = ВыборкаНоменклатуры.Количество;
        Для каждого эл Из ДокТовары Цикл

        Флаг = Истина;

        Для каждого ЭлОст Из ОстаткиПартий Цикл
        Если ЭлОст.Количество = 0 Тогда
        Продолжить;
        КонецЕсли;
        Если эл.Количество = 0 Тогда
        Продолжить;
        КонецЕсли;
        Если эл.Партия = ЭлОст.Партия Тогда

        Если ЭлОст.Количество — эл.Количество >=0 Тогда
        КоличествоСпиания = эл.Количество;
        НоваяСтрокаПартииДвижениеТовара(ЭлОст.Номенклатура,ЭлОст.Партия,эл.Партия,КоличествоСпиания);
        ОсталосьСписать = ОсталосьСписать — КоличествоСпиания;
        ЭлОст.Количество = ЭлОст.Количество — эл.Количество;
        эл.Количество = 0;
        Иначе
        эл.Количество = эл.Количество — ЭлОст.Количество;
        НоваяСтрокаПартииДвижениеТовара(ЭлОст.Номенклатура,ЭлОст.Партия,эл.Партия,ЭлОст.Количество);
        ОсталосьСписать = ОсталосьСписать — ЭлОст.Количество;
        ЭлОст.Количество = 0;
        Флаг = Ложь;
        КонецЕсли;
        ИначеЕсли не Флаг или эл.Партия.Пустая() Тогда
        Если ЭлОст.Количество — эл.Количество >=0 Тогда
        КоличествоСпиания = эл.Количество;
        НоваяСтрокаПартииДвижениеТовара(ЭлОст.Номенклатура,ЭлОст.Партия,эл.Партия,КоличествоСпиания);
        ОсталосьСписать = ОсталосьСписать — КоличествоСпиания;
        ЭлОст.Количество = ЭлОст.Количество — эл.Количество;
        эл.Количество = 0;
        Иначе
        эл.Количество = эл.Количество — ЭлОст.Количество;
        НоваяСтрокаПартииДвижениеТовара(ЭлОст.Номенклатура,ЭлОст.Партия,эл.Партия,ЭлОст.Количество);
        ОсталосьСписать = ОсталосьСписать — ЭлОст.Количество;
        ЭлОст.Количество = 0;
        КонецЕсли;
        КонецЕсли;
        КонецЦикла;

        КонецЦикла;

        КонецЦикла;

        • Василий Ханевич


          (текст комментария доступен только участникам Мастер-группы)

  37. xdd

    Василий подскажите пожалуйста где можно взять консоль запросов, которой вы пользуетесь на видео уроках?

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

        • Василий Ханевич


          (текст комментария доступен только участникам Мастер-группы)

  38. Kubovtsov

    вопрос снят

    на итс есть статья по этому поводу, нужно было финальный запрос выделить в отдельную таблицу и к ней применять настройки СКД, вычисляемые поля , поля условия .

    http://its.1c.ru/db/metod8dev/content/2696/hdoc

    есть запрос (кусок кода), в консоли запроса 1с условия отбора отрабатывает корректно ДатаОтгрузки >= Дата а если это условие наложи Источник: ©Курсы-по-1С.рф

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  39. Kubovtsov

    Коллеги , добрый день
    подскажите пожалуйста

    есть запрос (кусок кода), в консоли запроса 1с условия отбора отрабатывает корректно
    ДатаОтгрузки >= Дата

    а если это условие наложить в режиме 1с в форме настройки отчета на вкладке «Отборы»
    дата ОТгрузки равно Дата
    СКД накладывает условие на первоначальные данные , как если бы мы указали параметр в запросе на получение остатков , например по периоду &Период, а не на конечный результат , где нужно что бы отработал отбор

    решал проблему для скд следующим условием
    ВЫБОР
    КОГДА &ДатаОтгрузки1 ДАТАВРЕМЯ(1, 1, 1)
    ТОГДА ВТ_Пред.ДатаОтгрузки >= &ДатаОтгрузки1
    ИНАЧЕ ИСТИНА
    КОНЕЦ

    смотрел через консоль схемы компоновки данных, но не увидел там , в какое место она пихает данный отбор.

    но не могу же на все поля так делать ???

    =====================

    ВЫБРАТЬ
    ВЫБОР
    КОГДА -РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&ДатаВознЗадолженности, ДЕНЬ), НАЧАЛОПЕРИОДА(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Дата, ДЕНЬ), ДЕНЬ) > ЕСТЬNULL(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности, 0)
    ТОГДА ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.СуммаВзаиморасчетовОстаток
    ИНАЧЕ 0
    КОНЕЦ КАК СуммаПросроченнойЗадолженности,
    ВЫРАЗИТЬ(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Сделка КАК Документ.ЗаказПокупателя) КАК ЗаказПокупателя,
    ВЫРАЗИТЬ(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Сделка КАК Документ.ЗаказПокупателя).ДатаОтгрузки КАК ДатаОтгрузки,
    ВЫРАЗИТЬ(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Сделка КАК Документ.ЗаказПокупателя).Контрагент КАК Контрагент,
    -РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&ДатаВознЗадолженности, ДЕНЬ), НАЧАЛОПЕРИОДА(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Дата, ДЕНЬ), ДЕНЬ) КАК КоличествоДнейПросрочки,
    ВЫРАЗИТЬ(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Сделка КАК Документ.ЗаказПокупателя).СуммаДокумента КАК СуммаПоДокументу
    ПОМЕСТИТЬ ВТ_Пред
    {ВЫБРАТЬ
    СуммаПросроченнойЗадолженности,
    ЗаказПокупателя.*,
    ДатаОтгрузки,
    Контрагент.*,
    КоличествоДнейПросрочки,
    СуммаПоДокументу}
    ИЗ
    РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Остатки(
    {(&Период)},
    (ДоговорКонтрагента.КонтролироватьЧислоДнейЗадолженности, ДоговорКонтрагента.ВестиПоДокументамРасчетовСКонтрагентом) В
    (ВЫБРАТЬ
    ИСТИНА,
    ИСТИНА)) КАК ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки
    ГДЕ
    ВЫБОР
    КОГДА -РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&ДатаВознЗадолженности, ДЕНЬ), НАЧАЛОПЕРИОДА(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Дата, ДЕНЬ), ДЕНЬ) > ЕСТЬNULL(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности, 0)
    ТОГДА ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.СуммаВзаиморасчетовОстаток
    ИНАЧЕ 0
    КОНЕЦ > 0
    И ВЫРАЗИТЬ(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Сделка КАК Документ.ЗаказПокупателя) ССЫЛКА Документ.ЗаказПокупателя
    {ГДЕ
    (ВЫРАЗИТЬ(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Сделка КАК Документ.ЗаказПокупателя)).* КАК ЗаказПокупателя,
    (ВЫРАЗИТЬ(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Сделка КАК Документ.ЗаказПокупателя).ДатаОтгрузки) КАК ДатаОтгрузки,
    (ВЫРАЗИТЬ(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Сделка КАК Документ.ЗаказПокупателя).Контрагент).* КАК Контрагент,
    (-РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&ДатаВознЗадолженности, ДЕНЬ), НАЧАЛОПЕРИОДА(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Дата, ДЕНЬ), ДЕНЬ)) КАК КоличествоДнейПросрочки,
    (ВЫРАЗИТЬ(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Сделка КАК Документ.ЗаказПокупателя).СуммаДокумента) КАК СуммаПоДокументу,
    (ВЫРАЗИТЬ(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Сделка КАК Документ.ЗаказПокупателя).ПС_НеКонтролироватьПДЗ) КАК ПС_НеКонтролироватьПДЗ}

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  40. Панфилов Александр

    Последнее поступление по каждому товару

    Зачем нужен второй запрос в пакете (ВТ_Документы)? Да ещё ни одного отбора! Я бы сразу соединил ВТ_Даты с табличной часть Товары…

    ВЫБРАТЬ
        ПриходТовараТовары.Товар КАК Товар,
        МАКСИМУМ(ПриходТовараТовары.Ссылка.Дата) КАК Дата
    ПОМЕСТИТЬ ВТ_Даты
    ИЗ
        Документ.ПриходТовара.Товары КАК ПриходТовараТовары

    СГРУППИРОВАТЬ ПО
        ПриходТовараТовары.Товар
    ;

    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
        ВТ_Даты.Товар КАК Товар,
        ВТ_Даты.Дата КАК Дата,
        МАКСИМУМ(ПриходТовараТовары.Ссылка) КАК Ссылка
    ИЗ
        ВТ_Даты КАК ВТ_Даты
            ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПриходТовара.Товары КАК ПриходТовараТовары
            ПО ВТ_Даты.Дата = ПриходТовараТовары.Ссылка.Дата
                И ВТ_Даты.Товар = ПриходТовараТовары.Товар

    СГРУППИРОВАТЬ ПО
        ВТ_Даты.Товар,
        ВТ_Даты.Дата

    УПОРЯДОЧИТЬ ПО
        Товар
    АВТОУПОРЯДОЧИВАНИЕ
    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  41. Панфилов Александр

    Расчет накопительных скидок

    Странная структура хранения сведений о скидках. В данном варианте становится бесполезной виртуальная таблица СрезПоследних. Количество возвращаемых записей только СЛУЧАЙНО может быть меньше общего количества записей в регистре сведений.
    Полученный максимальный период можно было использовать не через соединение (настоятельно не рекомендовано), а через параметр виртуальной таблицы во втором срезе последних (рекомендовано ведущими собаководами ;)) ).
    Если сумма продаж будет меньше минимального значения границы, то в результате запроса не будет ни одной строки. Если результ в дальнейшем будет обрабатывать в коде, то программист обязан учесть данный случай через ветвление. Я бы доработал запрос, чтобы он возвращал строку со скидкой 0%. Этот вариант предпочтительнее, особенно если сумма скидки получается в последующем запросе пакета.

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

      • Панфилов Александр

        Как вариант:

        ...
        ВЫБРАТЬ
            МАКСИМУМ(Пороги.Период) КАК Период
        ПОМЕСТИТЬ втПериод
        ИЗ
            РегистрСведений.ПорогиНакопительныхСкидок.СрезПоследних(&КонецПериода, ) КАК Пороги
        ;

        ////////////////////////////////////////////////////////////////////////////////
        ВЫБРАТЬ
            Пороги.НижняяГраница КАК НижняяГраница,
            Пороги.Процент КАК Процент
        ПОМЕСТИТЬ ВТ_Пороги
        ИЗ
            РегистрСведений.ПорогиНакопительныхСкидок.СрезПоследних(
                    ,
                    Период В
                        (ВЫБРАТЬ
                            втПериод.Период
                        ИЗ
                            втПериод)) КАК Пороги
        ...
        • Василий Ханевич


          (текст комментария доступен только участникам Мастер-группы)

  42. Панфилов Александр

    Выбор значений из регистра сведений за период

    Не понятно зачем в объединении нужен ТРЕТИЙ запрос? Любая (!!!) запись, возвращаемая в результате запроса на Дата2, либо попадает в срез последних на Дата1, либо в период с Дата1 по Дата2.
    Русская народная забава — сначала создаём себе трудности, затем доблестно с ними боремся… Что бы избежать дублирования записей, ради которого мы добавили третий запрос, мы используем ОБЪЕДИНИТЬ вместо более быстрого ОБЪЕДИНИТЬ ВСЕ…
    Не понимаю.

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  43. Панфилов Александр

    Остатки в периоде, когда не было движений

    В результате отсутствуют записи по товару Молоко на складе Большой за 1-е и 2-е сентября.
    То есть, если бы какой-то товар отсутствовал на начало месяца, поступил 15-го и был продан полностью 16-го, то в результате было бы лишь ДВЕ записи — за 15-е и 16-е число!
    Считаю, что задача решена частично.

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  44. Панфилов Александр

    Задание 32
    Выражение

    РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ВТ.Год, ГОД), КОНЕЦПЕРИОДА(ВТ.Год, ГОД), ДЕНЬ)

    избыточно, так как мы уже привели дату к началу года в предыдущем запросе. Можно оставить лишь

    РАЗНОСТЬДАТ(ВТ.Год, КОНЕЦПЕРИОДА(ВТ.Год, ГОД), ДЕНЬ)

    А можно вообще использовать другую функцию:

    ГДЕ
        ДЕНЬГОДА(КОНЕЦПЕРИОДА(ВТ.Год, ГОД))=366
    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  45. xdd

    Здравствуйте в модуле 9, в примере 14. Расчет накопительных скидок. В демо конфигурации присутсвуют такие объекты как документ Установка порогов накопительных скидок, РС Пороги накопителных скидок.
    В демонстрационной базе скачанной с сайта users.v8.1c.ru нет таких объектов. Где взять базу где есть данные объекты. Спасибо.

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

        • Василий Ханевич


          (текст комментария доступен только участникам Мастер-группы)

          • xdd

            Первый раз с таким сталкиваюсь. Добавил объекты УстановкаПороговНакопительныхСкидок и РС Пороги накопительных скидок в Query-Homework-Template.dt, добавляю их в подсистему продажи, при этом после сохранения конфигурации не вижу объекты ни в разделе Продажи ни через Все функции. https://gyazo.com/43c296b17a7fe2129b77cd9f0f8bf0da
            https://gyazo.com/43c296b17a7fe2129b77cd9f0f8bf0da
            Такое происходит только с этой конфигурацией.

            • Василий Ханевич


              (текст комментария доступен только участникам Мастер-группы)

  46. Kubovtsov

    Коллеги , добрый день

    подскажите как решить задачу

    на основе запросов из 11 и 13 задания 9 блока
    выбор значений из регистра сведений на начало периода , за период и на конец периода

    такого рода задачи встречаются в блоке из сборника по спец. платформа 8.2, 8.3

    нужно получить таблицу с разбитыми периодами :

    с 01.01.15 по 09.01.15 — 10 тыс
    с 10.01.15 по 14.01.15 — 15 тыс
    с 15.01.15 по 31.01.15 — 20 тыс
    исходные данные:
    01.12.15 — сотрудник оклад 10 тыс
    01.10.15 — сотрудник оклад 15 тыс
    01.15.15 — сотрудник оклад 20 тыс

    из курса по подготовке по спецу 8.3 эта задача решалось путем объединения запросов и последующей программной обработкой выборки,
    а хотелось бы все данные получить запросом

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

      • Kubovtsov

        Спасибо !!!
        вечером попробую . результат выложу на обозрение )

        • Kubovtsov

          Василий спасибо )
          Добрый день, Коллеги

          посмотрите плиз запрос , Василий дал направления для дальнейшей работы. вот что получилось:
          может можно сделать проще , если у кого есть идеи . напишите плиз.

          ===
          РегистрСведений1 — ваш регистр «кадровая история»
          Результат — ваш оклад

          ВЫБРАТЬ
          КадроваяИсторияНач.Сотрудник КАК Сотрудник,
          КадроваяИсторияНач.Период КАК ПериодНач,
          МИНИМУМ(КадроваяИсторияКон.Период) КАК ПериодКон,
          КадроваяИсторияНач.Результат,
          &Период1,
          &Период2
          ПОМЕСТИТЬ ВТ_Врем
          ИЗ
          РегистрСведений.РегистрСведений1 КАК КадроваяИсторияНач
          ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РегистрСведений1 КАК КадроваяИсторияКон
          ПО КадроваяИсторияНач.Сотрудник = КадроваяИсторияКон.Сотрудник
          И КадроваяИсторияНач.Период = &Период1
          И КадроваяИсторияКон.Период <= &Период2

          СГРУППИРОВАТЬ ПО
          КадроваяИсторияНач.Период,
          КадроваяИсторияНач.Сотрудник,
          КадроваяИсторияНач.Результат
          ;

          ////////////////////////////////////////////////////////////////////////////////
          ВЫБРАТЬ
          ВТ_Врем.Сотрудник,
          ВЫБОР
          КОГДА ВТ_Врем.ПериодНач < &Период1
          ТОГДА &Период1
          ИНАЧЕ ВТ_Врем.ПериодНач
          КОНЕЦ КАК НачалоПериода,
          ВЫБОР
          КОГДА ВТ_Врем.ПериодКон < &Период2
          ТОГДА ДОБАВИТЬКДАТЕ(ВТ_Врем.ПериодКон, СЕКУНДА, -1)
          ИНАЧЕ ВТ_Врем.ПериодКон
          КОНЕЦ КАК КонецПериода,
          ВТ_Врем.Результат
          ПОМЕСТИТЬ ВТ_ИзмВПериоде
          ИЗ
          ВТ_Врем КАК ВТ_Врем
          ;

          ////////////////////////////////////////////////////////////////////////////////
          ВЫБРАТЬ
          ВТ_ИзмВПериоде.Сотрудник,
          ВТ_ИзмВПериоде.НачалоПериода КАК НачалоПериода,
          ВТ_ИзмВПериоде.КонецПериода КАК КонецПериода,
          ВТ_ИзмВПериоде.Результат КАК Результат
          ИЗ
          ВТ_ИзмВПериоде КАК ВТ_ИзмВПериоде

          ОБЪЕДИНИТЬ

          ВЫБРАТЬ
          ВТ_ИзмВПериоде.Сотрудник,
          МАКСИМУМ(ДОБАВИТЬКДАТЕ(ВТ_ИзмВПериоде.КонецПериода, СЕКУНДА, 1)),
          КОНЕЦПЕРИОДА(ВТ_ИзмВПериоде.КонецПериода, МЕСЯЦ),
          МАКСИМУМ(РегистрСведений1СрезПоследних.Результат)
          ИЗ
          ВТ_ИзмВПериоде КАК ВТ_ИзмВПериоде
          ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РегистрСведений1.СрезПоследних(&Период2, ) КАК РегистрСведений1СрезПоследних
          ПО ВТ_ИзмВПериоде.Сотрудник = РегистрСведений1СрезПоследних.Сотрудник

          СГРУППИРОВАТЬ ПО
          ВТ_ИзмВПериоде.Сотрудник,
          КОНЕЦПЕРИОДА(ВТ_ИзмВПериоде.КонецПериода, МЕСЯЦ)

          УПОРЯДОЧИТЬ ПО
          НачалоПериода

          • Василий Ханевич


            (текст комментария доступен только участникам Мастер-группы)

            • Kubovtsov

              исходная таблица:

              Период Сотрудник Начисления Результат
              04.02.2015 Шлюзовая ООО Рубли 15 000,00
              10.02.2015 Шлюзовая ООО Рубли 20 000,00
              25.02.2015 Шлюзовая ООО Рубли 30 000,00
              01.03.2015 Шлюзовая ООО Рубли 30 000,00

              выгрузка базы , там эти данные

              https://cloud.mail.ru/public/Bxjk/zAmc2Nnso

              что бы получилась такая таблица

              Сотрудник НачалоПериода КонецПериода Результат
              Шлюзовая ООО 04.02.2015 0:00:00 09.02.2015 23:59:59 15 000
              Шлюзовая ООО 10.02.2015 0:00:00 24.02.2015 23:59:59 20 000
              Шлюзовая ООО 25.02.2015 0:00:00 28.02.2015 23:59:59 30 000

              вот эту строку я получаю соединением с рег. срез последних
              Шлюзовая ООО 25.02.2015 0:00:00 28.02.2015 23:59:59 30 000

              • Василий Ханевич


                (текст комментария доступен только участникам Мастер-группы)

  47. Kubovtsov

    Коллеги , подскажите .
    как наиболее оптимальнее будет построить запрос «срез последних на каждую дату»
    варинат 1 рассмотрен в видео уроке из 9 блока (первое видео)
    на практике применял запрос вида

    ВЫБРАТЬ
    Продажи.Период,
    Продажи.Покупатель,
    Продажи.Товар,
    Продажи.КоличествоОборот,
    Продажи.СуммаОборот,
    ЦеныНоменклатуры.Цена
    ИЗ
    РегистрНакопления.Продажи.Обороты(, , День, ) КАК Продажи
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныТоваров КАК ЦеныНоменклатуры
    ПО Продажи.Товар = ЦеныНоменклатуры.Товар
    И (ЦеныНоменклатуры.ВидЦен = &ВидЦен)
    И (ЦеныНоменклатуры.Период В
    (ВЫБРАТЬ
    МАКСИМУМ(Цены.Период)
    ИЗ
    РегистрСведений.ЦеныТоваров КАК Цены
    ГДЕ
    Цены.Период <= Продажи.Период
    И Цены.Товар = Продажи.Товар
    И Цены.ВидЦен = &ВидЦен))

    либо в конструкции …. Период В
    (ВЫБРАТЬ первые 1 Цены.Период ИЗ РегистрСведений.ЦеныТоваров КАК Цены
    ГДЕ Цены.Период <= Продажи.Период
    И Цены.Товар = Продажи.Товар
    И Цены.ВидЦен = &ВидЦен
    УПОРЯДОЧИТЬ ПО Цены.Период УБЫВ))

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

      • Kubovtsov

        на реальных данных отчет по такой схеме работает. но замер не производил .

        не совсем понял:
        1.
        возможность использовать конструктор запроса для составления вложенного запроса.
        вы имеете ввиду , когда мы в запросе создаем именно вложенный запрос ?
        ССЫЛКА НИЖЕ

        http://screencast.com/t/cIADFf7vE

        2. Открыть такой подзапрос в конструкторе не получится.
        В смысле не получается ?

        • Василий Ханевич


          (текст комментария доступен только участникам Мастер-группы)

  48. spv

    Добрый день

    Требуется подсчитать процент маржи по итоговым полям
    Процент маржи = Наценка / Выручка.

    Проблема в том, что выручка по каким-то позициям может быть нулевая.
    И если в обычном поле я пользуюсь конструкцией ВЫБОР и отсекаю нулевое значение выручки, тем самым избегая ошибки деления на ноль, то для итогов такой прием не проходит.

    Запрос:

    ИТОГИ
    ВЫБОР
    КОГДА СУММА(втВыручкаИЗакупкаССуммами.СуммаВыручки_Итого) = 0
    ТОГДА 0
    ИНАЧЕ СУММА(втВыручкаИЗакупкаССуммами.СуммаНаценки_Итого) /
    СУММА(втВыручкаИЗакупкаССуммами.СуммаВыручки_Итого)
    КОНЕЦ КАК ПроцентМаржи_Итого
    ПО
    ОБЩИЕ,
    втВыручкаИЗакупкаССуммами.Номенклатура

    Выдает ошибку на использование функции ВЫБОР в итогах.

    То есть мне, по сути, нужно в строке итога выдать 0, если суммарная выручка по данной позиции равна нулю, и выражение, составленное из агрегатных функций, в противном случае. Ничего другого, кроме конструкции ВЫБОР на ум не приходит.

    Какой может быть подход к решению данной задачи?

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

      • spv

        Спасибо, я разобрался, в чем была ошибка.

        Ошибка, которая возникала, была следующей: «Невозможно определить поле для записи результата»

        Оказывается, для значений агрегатных функций итоговых полей нужно заранее определить поле, куда будет записываться результат, такое поле к списку выходных полей автоматически не добавляется.

        Исходный запрос, в котором выдает ошибку:

        ВЫБРАТЬ
        ВыручкаИСебестоимостьПродажОбороты.СуммаВыручкиОборот КАК СуммаВыручки,
        ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаНоменклатуры.Характеристика.УАС_ЦенаЗакупкиСНДС
        * ВыручкаИСебестоимостьПродажОбороты.КоличествоОборот КАК СуммаЗакупки,
        ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаПоПартнерам.Контрагент КАК Контрагент

        ИЗ
        РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(&ДатаНачалаПериода, &ДатаКонцаПериода, Авто, ) КАК ВыручкаИСебестоимостьПродажОбороты

        ИТОГИ
        ВЫБОР
        КОГДА СУММА(СуммаВыручки) = 0
        ТОГДА 0
        ИНАЧЕ СУММА(СуммаЗакупки) / СУММА(СуммаВыручки)
        КОНЕЦ КАК ПроцентМаржи

        ПО
        ОБЩИЕ,
        Контрагент

        Запрос становится рабочим, если добавить определение поля ПроцентМаржи, т.е. если в конструкцию ВЫБРАТЬ добавить выражение:

        ВЫБОР
        КОГДА ВыручкаИСебестоимостьПродажОбороты.СуммаВыручкиОборот = 0
        ТОГДА 0
        ИНАЧЕ ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаНоменклатуры.Характеристика.УАС_ЦенаЗакупкиСНДС * ВыручкаИСебестоимостьПродажОбороты.КоличествоОборот
        / ВыручкаИСебестоимостьПродажОбороты.СуммаВыручкиОборот
        КОНЕЦ КАК ПроцентМаржи

        • Василий Ханевич


          (текст комментария доступен только участникам Мастер-группы)

  49. spv

    Добрый день

    Имеется запрос:

    ВЫБРАТЬ
    Товары.Номенклатура КАК Номенклатура,
    Товары.Сумма КАК Сумма,
    Товары.Ссылка КАК Ссылка
    ИЗ
    Документ.Реализация.Товары КАК Товары
    ИТОГИ
    СУММА(Товары.Сумма)
    ПО
    Товары.Номенклатура

    Могу ли я средствами языка запросов упорядочить результат запроса (точнее, упорядочить итоговые строки по номенклатуре в результате запроса) по значению агрегатной функции СУММА(Товары.Сумма)?

    (т.е. чтобы номенклатура выдавалась в порядке возрастания суммы, рассчитанной по документам)

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

Комментарии закрыты