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

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

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

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

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

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

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

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


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

      • KOMPO

        Огромное спасибо)))
        2. Хотел уточнить второй вопрос: даже когда сам код, созданный конструктором, не изменился, а модуль, где он написан поменялся, все равно система не сможет распознать код, созданный конструктором?
        Я создал код, копировал и вставил его немного выше в модуль и после этого система перестала распознавать.

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


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

          • KOMPO

            Спасибо. Да, вы правы , вся сут заключена в этом выражении «//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА»
            Если оно есть, конструктор срабатывает, если его нет, то не срабатывает.
            Еще заметил, что если использовать конструктор в коде, который находится в метках
            «//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА»
            «//}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА»
            конструктор затрёт старый код, ориентируясь на метки. Необходимо, получается использовать конструктор за метками, а потом копировать.

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


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

  1. port8080

    Подскажите пожалуйста, у меня нет «Периодами» и интервала (видео 14).
    И еще вопрос, посоветуйте, где почитать подробнее, как заполнять макеты.

    %D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA.JPG

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


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

  2. evg61

    Здравствуйте! Вопрос по уроку 9: Вывод результата запроса в табличный документ.
    В примере макет получается так: «Макет = РеквизитФормыВЗначение(«Ообъект»).ПолучитьМакет(«Макет»);»

    А если запросе есть параметры «Начало» и «Конец» задающие период выборки данных. Соответственно в «Объекте» создаю реквизиты «НачалоПериода» и «КонецПериода». На форме объекта есть аналогичные реквизиты и указан путь к данным. Как корректно передать значения реквизитов Объекта «НачалоПериода» и «КонецПериода» в реквизиты запроса «Начало» и «Конец»?
    Спасибо!

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


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

      • evg61

        Василий, спасибо! Всё действительно просто…

  3. Сергей

    При использовании метода «Выгрузить» для результата запроса колонки получаемой таблицы значений типизированы. При этом колонка всегда имеет составной тип данных и один тип это обязательно — Null. Можно каким-то способом избавиться от типа Null кроме программной обработки получившейся таблицы значения?

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


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

  4. SeOz

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

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


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

  5. SeOz

    Здравствуйте, Василий.
    В одном из ответов вы пишите: «Эта обработка доступна в архиве с материалами 5-го модуля. Называется КроссТаблица.epf.»
    Подскажите, где этот архив лежит?

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


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

  6. Александр

    Добрый день. Не вполне понимаю как работает рекурсивный вызов.

    Прохожу цикл отладчиком, последний метод в цикле (в процедуре ОбойтиРекурсивно() см. скрин для наглядности)- «ОбойтиРекурсивно(Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией, Выборка.Группировка()))»,который по идее должен вызывать рекурсию,
    при самом первом вхождении в цикл (после того как мы входим в процедуру методом ОбойтиРекурсивно(Выборка) из процедуры РекурсивноНаСервере(), на первых двух шагах цикла видимых действий не выполняет,а на третьем шаге выполняет вызов рекурсии.

    Объясните пожалуйста подробнее, как работает рекурсия для этой конкретной ситуации.

    2018-02-10_19-56-38.png

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


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

  7. ids79

    Добрый день.
    Подскажите пожалуйста, какое назначение у 3 параметра: ГруппировкиДляЗначенийГруппировок метода Выбрать (выборка из результата запроса)?
    Если не сложно приведите пример кода с использованием данного параметра.

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


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

      • ids79

        Добрый вечер. Со значением «ВСЕ» — понятно, спасибо. Но никак не могу понять, в каких случаях в данном параметре указываются значения группировок, и как в таком случае будет вести себя выборка.

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


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

  8. Frostier1958

    Василий, (query — 5 config-13) прошу выложить код обработки макета КроссТаблицы полностью. тяжело отследить по видео.Что-то не могу догнать и результат не получается

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


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

  9. Frostier1958

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

    %D0%91%D0%B5%D0%B7%D1%8B%D0%BC%D1%8F%D0%BD%D0%BD%D1%8B%D0%B9.png

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


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

      • Frostier1958

        Не знал! спасибо!ПошлО! почему-то надо все-время нажимать это сочетание. В видеоуроке как-то все сразу у вас появляется, без этого нажатия

  10. Afi

    Здравствуйте! вопрос по рекурсивному обходу выборки (5-й модуль). Сначала делаем Выборка = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией), потом Выборка (а это папки верхнего уровня) передаем в процедуру рекурсивного обхода, где в цикле делаем перебор записей этой выборки и выполняем рекурсивный вызов этой процедуры ОбойтиРекурсивно(Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией, Выборка.Группировка())). Вопрос: почему в первом случае выполняем метод ВЫБРАТЬ без второго параметра, а во втором-со вторым параметром Выборка.Группировка(). Значение Выборка.Группировка()-это только «товар», другой иерархии в запросе нет. Объясните, пож-та, подробнее все параметры метода ВЫБРАТЬ. спасибо

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


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

  11. derek

    Добрый день Василий. Вопрос решил задать в этом разделе так как не понимаю какой метод больше подойдет для решения задачи. Задача: Создать отчет сравнения цен поступивших товаров (Док Поступление товаров) за период. Отчет должен выглядеть примерно так: Товар — Цена — Предыдущая Цена — Рост/Снижение — Процент.
    Понятно, что источник данных Документ поступления или регистр Товары на складах, но вот как все это в отчет превратить, пока не понимаю.

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


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

      • derek

        Я наверное не совсем верно описал задачу. Пример: В прошлом месяце было несколько Поступлений Товара1. 05.09.2016 06.09.2015 07.09.2015. Первое поступление 500р второе 600 третье поступление 800р. Надо получить результат описанный выше: Товар1 800р 600р Рост %

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


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

          • derek

            За период было несколько поступлений 500 600 700 800р. Из этого списка надо взять последнее и сравнить с предпоследним. 800р и 700р. Вычислить разницу, %.

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


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

              • derek

                Класс! еще вопрос, не понимаю смысл условия:
                ГДЕ
                НЕ (ВТ_Товары.Дата, ВТ_Товары.Номенклатура) В
                (ВЫБРАТЬ
                ВТ_МаксДата.Дата,
                ВТ_МаксДата.Номенклатура
                ИЗ
                ВТ_МаксДата КАК ВТ_МаксДата)

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


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

                • derek

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

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


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

              • derek

                Василий а если немного модифицировать отчет, возможно без потери производительности или нет? Сейчас мы выбираем период скажем с 1 по 10 число. И ищем в нем последнюю дату и предпоследнюю. А если взять тот же период 1-10 в нем найти последнюю дату, а предпоследнюю уже искать не в этом периоде а за всю историю. Бывают случаи когда разрыв между последним и предпоследним документом 2 — 3 года. Технически я решил задачу. Но работает долго. При определении предпоследней даты я обращаюсь к данным без ограничения по датам (за всю историю). Запрос в принципе быстро работал до момента пока не пришлось изменить агрегатные функции Сумма на Максимум. Почему то — пакет запроса начал возвращать 2 раза предпоследние данные, если предпоследний документ попадал в интервал заданный пользователем. Цифры по нему задваивались Количество Цена Сумма.

                ВЫБРАТЬ
                    ПоступлениеТоваровУслугТовары.Ссылка.Дата,
                    ПоступлениеТоваровУслугТовары.Номенклатура,
                    ПоступлениеТоваровУслугТовары.Цена,
                    ПоступлениеТоваровУслугТовары.Ссылка,
                    ПоступлениеТоваровУслугТовары.Количество,
                    ПоступлениеТоваровУслугТовары.Сумма,
                    ПоступлениеТоваровУслугТовары.СтавкаНДС
                ПОМЕСТИТЬ ВТ_Товары
                ИЗ
                    Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
                ГДЕ
                    ПоступлениеТоваровУслугТовары.Ссылка.Дата МЕЖДУ &Дата1 И &Дата2
                ;

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

                СГРУППИРОВАТЬ ПО
                    ВТ_Товары.Номенклатура
                ;

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

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

                СГРУППИРОВАТЬ ПО
                    ПоступлениеТоваровУслугТовары.Номенклатура
                ;

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

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

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

                ВЫБРАТЬ
                    ВТ_ПредпоследнееПоступление.Номенклатура,
                    0,
                    ВТ_ПредпоследнееПоступление.Цена,
                    0,
                    ВТ_ПредпоследнееПоступление.Ссылка,
                    0,
                    ВТ_ПредпоследнееПоступление.Количество,
                    0,
                    ВТ_ПредпоследнееПоступление.Сумма,
                    0,
                    ВТ_ПредпоследнееПоступление.СтавкаНДС
                ИЗ
                    ВТ_ПредпоследнееПоступление КАК ВТ_ПредпоследнееПоступление
                ;

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

                СГРУППИРОВАТЬ ПО
                    ВТ_НесгруппированныеДанные.Номенклатура
                ;

                ////////////////////////////////////////////////////////////////////////////////
                ВЫБРАТЬ
                    ВТ_СгруппированныеДанные.Номенклатура,
                    ВТ_СгруппированныеДанные.Номенклатура.Артикул КАК Артикул,
                    ВТ_СгруппированныеДанные.ПоследнийДок,
                    ВТ_СгруппированныеДанные.ПредпоследнийДок,
                    ВТ_СгруппированныеДанные.КоличествоПоследнее,
                    ВТ_СгруппированныеДанные.КоличествоПредпоследнее,
                    ВТ_СгруппированныеДанные.СуммаПоследняя,
                    ВТ_СгруппированныеДанные.СуммаПредпоследняя,
                    ВТ_СгруппированныеДанные.ПоследнийДок.Контрагент КАК ПоставщикПоследний,
                    ВТ_СгруппированныеДанные.ЦенаПоследняя,
                    ВТ_СгруппированныеДанные.ЦенаПредпоследняя,
                    ВЫБОР
                        КОГДА ВТ_СгруппированныеДанные.ЦенаПоследняя > 0
                            ТОГДА (ВТ_СгруппированныеДанные.ЦенаПоследняя - ВТ_СгруппированныеДанные.ЦенаПредпоследняя) * 100 / ВТ_СгруппированныеДанные.ЦенаПоследняя
                        ИНАЧЕ 100
                    КОНЕЦ КАК Процент,
                    ВТ_СгруппированныеДанные.ЦенаПоследняя - ВТ_СгруппированныеДанные.ЦенаПредпоследняя КАК Разница,
                    ВТ_СгруппированныеДанные.ПредпоследнийДок.Контрагент КАК ПоставщикПредпоследний,
                    ВТ_СгруппированныеДанные.СтавкаНДС,
                    ВТ_СгруппированныеДанные.СтавкаНДСПредпоследняя
                ИЗ
                    ВТ_СгруппированныеДанные КАК ВТ_СгруппированныеДанные
                • Василий Ханевич


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

                • derek

                  Да скорость вернулась. Заменил Где на внутреннее соединение и добавил временную таблицу. Еще пару таких отчетов и можно спутники запросами запускать ))

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


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

  12. SinO

    Добрый день Василий!
    Взяв за основу пример по построению кросс-таблицы
    который вы показывали ранее,

    пытаюсь построить отчет по сравнению таб. части

    в УТ 10.3 Заказа поставщику и Счета на оплату покупателю
    по номенклатуре, количеству, цене и

    расчитываемому полю Разница в процентах от цены
    Заказа поставщику и Счета на оплату покупателю.

    Заказ выбирается в параметре отчета Заказ и
    он всегда один, а Счет выбирается в параметре

    счет и он может быть один или список счетов,
    шапку отчета построить получилось, а вот
    со всем остальным не получается,
    подскажите пожалуйста как сделать правильно?

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

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

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


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

      • SinO

        Добрый день Василий!
        Спасибо за ответ!

        А как теперь правильно рассчитать Разницу от цены? Формулу расчета написал, но разница должна считаться в тех колонках в которых номенклатура заказа и счета совпадает, если нет тогда null?
        как теперь понять какая номенклатура заказа, а какая счета и сравнивая их выводить разницу?
        Пробовал в одной выборке запоминать Номенклатуру заказа в другой номенклатуру счета, проверяю их на равенство и тогда вывожу разницу — эффекта никакого, все равно выводится во всех колонках.

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

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

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

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


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

          • SinO

            Добрый день Василий!
            Спасибо за ответ!

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

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

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


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

  13. Dmitlion

    Не совсем понятна фраза на стр. 131 методического пособия:
    «Способ обхода результата по группировкам сходен с иерархическим обходом, но записи с иерархическими итогами при обходе в нем рассматриваются как детальные, а не как итоговые.»

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


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

  14. Dmitlion

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

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

        ВыборкаСчет = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
       
        Пока ВыборкаСчет.Следующий() Цикл
            Если ВыборкаСчет.ТипЗаписи() = ТипЗаписиЗапроса.ИтогПоИерархии Тогда
                Область = ОбластьСчетИерархия;
            Иначе
                Область = ОбластьСчет;
            КонецЕсли;
       
            Область.Параметры.Заполнить(ВыборкаСчет);
            ТабДок.Вывести(Область, ВыборкаСчет.Уровень());
       
            ВыборкаПериод = ВыборкаСчет.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Период");
       
            Пока ВыборкаПериод.Следующий() Цикл
                ОбластьПериод.Параметры.Заполнить(ВыборкаПериод);
                ТабДок.Вывести(ОбластьПериод, ВыборкаПериод.Уровень());
            КонецЦикла;
        КонецЦикла;
    • Василий Ханевич


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

    • Dmitlion

      Почему не открывается подчиненная выборка стало понятно из ответа к предыдущему посту.

  15. Polina.Z

    Добрый день!
    Вопрос на уроку 5.15. Почему Вы меняете код, сформированный конструктором: ВнешниеОбработки.ДополнениеДат.ПолучитьМакет(«Макет») на РеквизитФормыВЗначение(«Объект»).ПолучитьМакет(«Макет»)?
    Спасибо!

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


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

      • vkul2010

        Здравствуйте, Василий.
        я не переименовывал обработку, не встраивал её и попробовал воспользоваться
        Макет = ВнешниеОбработки.ДополнениеДат.ПолучитьМакет(«Макет»);
        получаю ошибку:
        {ВнешняяОбработка.ДополнениеДат.Форма.Форма.Форма(5)}: Поле объекта не обнаружено (ДополнениеДат)
        Макет = ВнешниеОбработки.ДополнениеДат.ПолучитьМакет(«Макет»);
        В чем секрет?
        Естественно, Макет = РеквизитФормыВЗначение(«Объект»).ПолучитьМакет(«Макет»); работает без ошибок.
        Спасибо.

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


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

  16. SinO

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

    В модуле 5, уроки 12,13(Построение кросс-таблицы) показано как построить кросс таблицу по оборотам,
    взяв за основу ваши примеры пытаюсь построить кросс таблицу с остатками на начало и конец,
    а так же расшифровку по оборотам какими документами был выполнен приход в розничную точку,
    а какими был сделан расход в разрезе складов и номенклатуры. Кросc таблицу строю по РН
    «Товары в рознице» на УТ 10.3. Когда делаю движение по одному наименованию, т.е.
    делаю приход, перемещение, затем продажу, списание номенклатуры все получается хорошо,
    стоить добавить еще одно наименование тут все, таблица начинает ползти и показывать не корректные
    данные.
    Подскажите пожалуйста, что делаю не так?

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

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

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


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

  17. Raeva

    Здравствуйте!
    При очередной попытке увековечить решение задания № 21 в обработке, выводящей значения в таблицу, Процедура &НаСервереБезКонтекста «выдала» мне ошибку: см.рисунок. Почему функция РеквизитФормыВЗначение() даже не присутствует в подсказке &НаСервереБезКонтекста, но после удаления слова «БезКонтекста» всё заработало?

    %D0%92%D0%BD%D0%B5%D1%88%D0%BD%D1%8F%D1%8F%D0%9E%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0%D0%9A%D1%83%D1%80%D1%81%D1%8B%D0%92%D0%B0%D0%BB%D1%8E%D1%82.png

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


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

  18. zaharova

    Здравствуйте! Помогите пожалуйста с запросом. Наша бухгалтерия хочет видеть информацию по начислениям сотрудника, но с его должностью, которая в одном месяце может меняться несколько раз. Я беру регистр расчёта Основные начисления, но как к нему привязать должность из регистра сведений работники организаций? Ведь если например начисление за 15.01.2016 а в регистре расчёта несколько записей с периодом меньше 15.01.2016 и открытым периодом завершения перевода. Как привязать ближайшую дату? Я делала с помощью обращения к функции общего модуля, но мне кажется это нецелесообразно. Конфигурация КОА. Есть ли решение моего вопроса?

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


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

  19. IpotekaLand

    Добрый день.
    Вопрос по Модуль 5 лекция 13 (кросс-таблица)
    Беру обработку, которая из курса лекций, запускаю в ее в Базе для выполнения домашних заданий (предварительно изменив в модуле объекта, в Запросе, — наименование полей ПОКУПАТЕЛЬ на Контрагент, ТОВАР на Номенклатура и разумеется по тексту «Кода»), синтаксических ошибок нет.
    Запускаю обработку и количество полей и строк в Таблице верное, но в макете они пустые (т.е. ячейки есть, но она не заполнены), а вот суммы по полям подсчитаны и выведены. Итоги тоже есть.
    Почему ячейки пустые?
    p.s. При отладке, в Переменной — ВыборкаКлиент и ВыборкаТОвар, значения Номенклатуры и Контрагента Есть, но при формировании макета ячейки пустые.

    %D1%80%D0%B5%D0%B7%D1%83%D0%BB%D1%8C%D1%82%D0%B0%D1%82%D0%9A%D1%80%D0%BE%D1%81%D1%81%D0%A2%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D1%8B.jpg

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


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

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


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

  20. vista77219

    Добрый денЬ!

    1.А корректно писать «Упорядочить по Товар», ведь товар, исходя из текста запроса, это ссылка?

    Я понимаю, что 1С по представлению сделает, но все таки. Или если уж мы хотим по представлению,

    то и надо писать по представлению Упорядочить по Товар.Предсталение.
    Я это, так сказать, к правилам хорошего тона.

    2. На Ваш взгляд, в чем отличие между Объединением ВСЕ и Полным Соединением ?

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

    Я пишу такой запрос
    «ВЫБРАТЬ
    | ЕСТЬNULL(Справочник1.Наименование, Справочник2.Наименование) КАК Поле1,
    | ЕСТЬNULL(Справочник1.Количество, 0) КАК Приход,
    | ЕСТЬNULL(Справочник2.Количество, 0) КАК Расход
    |ИЗ
    | Справочник.Справочник1 КАК Справочник1
    | ПОЛНОЕ СОЕДИНЕНИЕ Справочник.Справочник2 КАК Справочник2
    | ПО Справочник1.Наименование = Справочник2.Наименование»;

    или такой
    «ВЫБРАТЬ
    | Справочник1.Наименование,
    | Справочник1.Количество КАК Приход,
    | 0 КАК Расход
    |ИЗ
    | Справочник.Справочник1 КАК Справочник1
    |
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |ВЫБРАТЬ
    | Справочник2.Наименование,
    | Справочник2.Количество,
    | 0
    |ИЗ
    | Справочник.Справочник2 КАК Справочник2»

    Я не могу сообразить,
    Результат будет одинаков?
    Спасибо

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


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

      • vista77219

        Добрый день!
        1. А зачем может понадобиться сортировка по Ссылке?

        2. Неа. Объединение — это сложение
        Соединение — это перемножение

        Попробуйте

        В таблице 1
        Ложка 10,
        Ложка 11,
        Ложка 22

        В табл 2
        Ложка 5,
        Ложка 15,
        Ложка 20

        Объединение до группировки — 6 записей
        Соединение — 9

        Ну и результат после группировки по сумме будет разный

        Немножко теории в курсе не хватает, мне кажется

        Спасибо

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


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

          • vista77219

            Добрый день!

            Если можно вопрос по курсу администрирования, в котором я был участником( но пропустил дискуссии) , а Вы преподавателем, да?

            У нас два кластера( серверов 1с) 8.2, и 8.3.6.****

            И на кластере 8.3 уже достаточное количество баз навешено

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

            Скажем будет условно 8.3.2153 и 8.3.2240?

            Спасибо

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


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

          • vista77219

            Добрый день!

            Помогите разобраться с объектом последовательность.

            Однозначно определяте на оси времени…… но как?

            По всей видимости ссылки в 1С это то, что в, к примеру, в Т-SQL называется ПОСЛЕДОВАТЕЛЬНЫЕ GUID
            и которые генерятся с помощью NEWSEQUENTIALID.
            Но тогда и сравнивая ссылки( без) привязки ко времени можно понять какая из них позже?
            Зачем поле Дата

            А если ссылки в 1С — это непоследовательные GUID, то как поле дата если оно одинаково с точностью
            до секунды для 2-х ссылок поможет выяснить какая из них( ссылок) создана позже?

            Кстати, в одном из уроком главы 9, ( пример , срез последних из регистра подчиненного Регистратору) Вы используете Максиммум( Регистратор), а не Максимумум( Регистратор.МоментВремени).

            Т.е. Максимум( Регистратор) — это просто Максимум из 16-байтных строк, и никакого поля Даты не нужно,
            чтобы понять какой документ последним устанавливал курс.

            Или все таки правильно Максимум( Регистратор.МоментВремени)

            Спасибо.

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


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

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


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

                • vista77219

                  Добрый день!
                  А у меня удивительный пример , когда при пустом &Список
                  В ИЕРАРХИИ (&Список) выдает все элементы , не срабатывает. И пустой Результат как то более понятен.

                  «ВЫБРАТЬ
                  | Номенклатура.Ссылка
                  |ИЗ
                  | Справочник.Номенклатура КАК Номенклатура
                  |ГДЕ
                  | Номенклатура.Ссылка В ИЕРАРХИИ(&Список)»;

                  Если можно, Ваш комментарий. Или я по памяти не так воспроизвожу ? БАЗА Ут 11, Платформа 8.3.7

                  Спасибо.

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


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

                    • vista77219

                      Благодарю.

                      Прикольно. Что-то «не пустое» является подмножеством «Пустого»

                      Но варианты 2, 3 это скорее недокументированные особенности В ИЕРАРХИИ, да?

                      Или в типовых такой прием используют?

                      Спасибо.

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


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

                    • vista77219

                      Добрый день!
                      Устоявшееся мнение, что обращение «через точку» не есть хорошо, потому, что
                      весь объект считывается в память и т.д…..
                      Но если взять MS SQL, там минимальной единицей считываемой информации является страница( да и то
                      вряд ли с учетом кэширования читается только одна страница) , а это 8Кб.
                      Редко , какой объект в 1С превысит 8К. Так ,что городя огород, составляя запрос на чтение только
                      одного реквизита объекта, мы все равно читаем страницу.

                      Так стоит ли?

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


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

              • vista77219

                Добрый день!

                О, спасибо.
                Если можно , дайте п-та ссылку на источник. Может там что то еще полезное
                найду.

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


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

                  • vista77219

                    Добрый!
                    Да, глубина дискуссии отражает запутанность темы.

                    Спасибо

  21. Igor

    Здравствуйте, Василий. «Видеоурок. Обход результата запроса с дополнительной детализацией по периоду».
    Хотелось бы немного дополнительной информации. Каким образом можно «дополнить» детализацию по периоду, чтобы получать итоги не только по дням, но и по неделям (например). В рассматриваемом видеоуроке мы дополняем период днями и получаем итоги за каждый день. Есть ли возможность одновременно с этим получать и итоги по неделям?
    01.01 — 1000 (итог за день)
    02.01 — 1000
    03.01 — —
    04.01 — 1000
    05.01 — —
    06.01 — —
    07.01 — 1000
    07.01 — 4000 (итог за неделю)
    Спасибо.

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


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

      • Igor

        Спасибо большое, Василий.
        По запросу все стало понятно. Но вот по обходу результата запроса есть вопрос — чтобы «попасть» итогами за день в нужную неделю приходится использовать условие и прогонять все дни, попавшие в запрос, через цикл. Если отчет за год, то это ок.350х52 лишних итераций. Может быть есть другой способ получения дневных итогов, при котором мы бы получали выборку только внутри полученной выборки за неделю? Ну вот как например с детальной выборкой — ВыборкаДетальныеЗаписи = ВыборкаПериодДень.Выбрать() — тут мы получаем данные «внутри» конкретного дня.

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


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

          • Igor

            Спасибо, Василий. Думаю что можно еще попробовать выгружать результат запроса в ТЗ, сортировать ее по периодам, тогда можно последовательно каждую строку выводить в отчет, анализируя уровень.
            Попробовал сделать отчет на СКД — все получилось.
            Забегая вперед — будут ли в данном курсе рассмотрены вопросы использования возможностей СКД, но не для формирования отчетов, а для получения данных, с целью дальнейшего использования их?
            Спасибо.

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


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

      • AlxndrVslv

        Добрый день, Василий!
        В приведенном выше примере не понял, в чем разница:
        ВыборкаПериодДень = ВыборкаПериодНеделя.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, «ПериодДень», «ВСЕ»);
        Или
        ВыборкаПериодДень = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, «ПериодДень», «ВСЕ»);
        В обоих случаях в выборку попадают все дни из РезультатаЗапроса, а не только за неделю.

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


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

  22. spv

    Вопрос к видеоуроку 5.13

    В запросе секция итогов выглядит так:
    ИТОГИ СУММА(Сумма)
    ПО Общие, Покупатель, Товар

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

    Получается, что итоги рассчитываются при выполнении запроса по всем комбинациям следования итогов (ОБЩИЕ-Покупатель-Товар, Покупатель-Товар-ОБЩИЕ, Товар-Покупатель-Общие, и т.п)? Или же итоги рассчитываются при открытии выборки?
    То есть, могу ли я, имея результат запроса с таким текстом (ИТОГИ СУММА(Сумма) ПО Общие, Покупатель, Товар
    ),
    сначала выбрать Товары, получить итоги СУММА(Сумма) по каждому товару в целом, а открыть подчиненную выборку и получить итоги по каждому покупателю для данного товара?

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


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

  23. spv

    Добрый день
    Вопрос по видеоуроку 5.6
    Выбираем иерархически, используя рекурсивную процедуру:

    Выборка = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСиерархией);
    ОбойтиРекурсивно(Выборка);

    Процедура ОбойтиРекурсивно(Выборка)
    Пока Выборка.Следующий() Цикл
    ОбойтиРекурсивно(Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСиерархией), Выборка.Группировка());
    КонецЦикала;
    КонецПроцедуры

    ***

    Здесь не совсем понятно, для чего указывается имя группировки, если это подчиненная группировка — какие ещё возможны варианты использования, разве можно тут указать какую-то иную группировку?

    В примере видно, что при такой группировке вывелись только итоговые записи, а как в этой процедуре вывести ещё и детальные записи?

    Аналогично, если бы в запросе было не одно итоговое поле, а два:

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

    То как вывести все итоги — и по товарам, и по покупателям?

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

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


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

      • spv

        Не совсем понял решение примера 1:

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

        Может быть после ИНАЧЕ следует написать так:
        ОбойтиРекурсивно(Выборка.Выбрать());
        т.е. выбрать именно детальные записи?
        В противном случае непонятно, почему будут выбираться детальные записи, если задана выборка итогов (ПоГруппировкамСИерархией)

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


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

  24. kamalion

    Добрый день!
    Хотел уточнить использование функции Представление(). Например, в видео №13 Пример построения кросс-таблицы, в выбираемые поля запроса входят как ПродажиОбороты.Товар так и Представление(ПродажиОбороты.Товар). В самой задаче используется только представление. Вопрос: является ли использование самой ссылки избыточным, если у нас также выбирается и Представление этой ссылки?

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


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

      • kamalion

        Спасибо, Василий. Надо смотреть видео внимательнее)

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


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

  25. Виктор

    По этой номенклатуре правильный результат получается…

    %D0%91%D0%B5%D0%B7%D0%98%D1%82%D0%BE%D0%B3%D0%BE%D0%B2.png

  26. Виктор

    Здравствуйте, Василий!
    Написал вот такой отчет, опираясь на ваши уроки. Но не могу сделать, так чтобы в запросе выбирать Приход, Расход по месяцам учитывая только Регистраторы: Документ.ПоступлениеТоваровУслуг ИЛИ Документ.РеализацияТоваровУслуг. А значения НачальныйОстаток и КонечныйОстаток с учетом всех регистраторов. Не подскажете, как это возможно сделать?

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

           
        Макет = ОтчетОбъект.ПолучитьМакет("Макет");
        ОбластьШапкаМесяц = Макет.ПолучитьОбласть("Шапка|Месяц");
        ОбластьШапкаТовар = Макет.ПолучитьОбласть("Шапка|Товар");
        ОбластьШапкаИтог = Макет.ПолучитьОбласть("Шапка|Итог");
        ОбластьСтрокаМесяц = Макет.ПолучитьОбласть("Строка|Месяц");
        ОбластьСтрокаТовар = Макет.ПолучитьОбласть("Строка|Товар");
        ОбластьСтрокаИтог = Макет.ПолучитьОбласть("Строка|Итог");
        ОбластьПодвалМесяц = Макет.ПолучитьОбласть("Подвал|Месяц");
        ОбластьПодвалТовар = Макет.ПолучитьОбласть("Подвал|Товар");
        ОбластьПодвалИтог = Макет.ПолучитьОбласть("Подвал|Итог");
       
        РезультатЗапроса = Запрос.Выполнить();
       
        Если РезультатЗапроса.Пустой() Тогда
            Возврат;
        КонецЕсли;
       
        ТабДок.Вывести(ОбластьШапкаТовар);
        ТабДок.НачатьАвтогруппировкуСтрок();
       
        ВыборкаШапкаМесяц = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Месяц", "ВСЕ");
        Пока ВыборкаШапкаМесяц.Следующий() Цикл
            ОбластьШапкаМесяц.Параметры.Заполнить(ВыборкаШапкаМесяц);
            ТабДок.Присоединить(ОбластьШапкаМесяц);
        КонецЦикла;
        ТабДок.Присоединить(ОбластьШапкаИтог);
       
        ВыборкаТовар = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Номенклатура");
        Пока ВыборкаТовар.Следующий() Цикл
       
            ОбластьСтрокаТовар.Параметры.Заполнить(ВыборкаТовар);
            ТабДок.Вывести(ОбластьСтрокаТовар, ВыборкаТовар.Уровень());
           
            ВыборкаМесяц = ВыборкаТовар.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Месяц", "ВСЕ");
            Пока ВыборкаМесяц.Следующий() Цикл
                ОбластьСтрокаМесяц.Параметры.Заполнить(ВыборкаМесяц);
                ТабДок.Присоединить(ОбластьСтрокаМесяц, ВыборкаМесяц.Уровень());
            КонецЦикла;
           
            ОбластьСтрокаИтог.Параметры.Заполнить(ВыборкаТовар);
            ТабДок.Присоединить(ОбластьСтрокаИтог);
       
        КонецЦикла;
       
        ТабДок.ЗакончитьАвтогруппировкуСтрок();
       
        ТабДок.Вывести(ОбластьПодвалТовар);
       
        ВыборкаШапкаМесяц.Сбросить();
        Пока ВыборкаШапкаМесяц.Следующий() Цикл
            ОбластьПодвалМесяц.Параметры.Заполнить(ВыборкаШапкаМесяц);
            ТабДок.Присоединить(ОбластьПодвалМесяц);
            ПредыдущийОстаток = ОбластьПодвалМесяц.Параметры.КонечныйОстаток;
        КонецЦикла;

        ВыборкаОбщийИтог = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
        Если ВыборкаОбщийИтог.Следующий() Тогда
            ОбластьПодвалИтог.Параметры.Заполнить(ВыборкаОбщийИтог);
            ТабДок.Присоединить(ОбластьПодвалИтог);
        КонецЕсли;
    • Василий Ханевич


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

      • Виктор

        Здравствуйте, Василий!
        Спасибо, за это напоминание! У меня получилось! Выводит все ресурсы верно, если выбираю одну номенклатуру в параметре виртуальной таблицы:

        Номенклатура = &Номенклатура

        Но почему-то не показывает значение начального и конечного остатка у некоторых позиций номенклатуры, если в параметре виртуальной таблицы:

        Номенклатура В ИЕРАРХИИ (&Номенклатура)

        Пустой параметр то же без значения начального и конечного остатка…

        Процедура КнопкаСформироватьНажатие(Кнопка)
           
            Если ДатаОтчета = Дата('00010101') Тогда
                ДатаОтчета = ТекущаяДата();   
            КонецЕсли;
                   
            ТабДок = Новый ТабличныйДокумент;
           
            Запрос = Новый Запрос;
            Запрос.Текст = "ВЫБРАТЬ
                           |    ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура,
                           |    ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток КАК НачальныйОстаток,
                           |    0 КАК Приход,
                           |    0 КАК Расход,
                           |    ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток КАК КонечныйОстаток,
                           |    ПартииТоваровНаСкладахОстаткиИОбороты.Период КАК ПериодМесяц
                           |ПОМЕСТИТЬ ВТ
                           |ИЗ
                           |    РегистрНакопления.ПартииТоваровНаСкладах.ОстаткиИОбороты(&Дата1, &Дата2, Месяц, , Номенклатура В ИЕРАРХИИ (&Номенклатура)) КАК ПартииТоваровНаСкладахОстаткиИОбороты
                           |
                           |ОБЪЕДИНИТЬ ВСЕ
                           |
                           |ВЫБРАТЬ
                           |    ПартииТоваровНаСкладахОбороты.Номенклатура,
                           |    0,
                           |    ПартииТоваровНаСкладахОбороты.КоличествоПриход,
                           |    0,
                           |    0,
                           |    НАЧАЛОПЕРИОДА(ПартииТоваровНаСкладахОбороты.Период, МЕСЯЦ)
                           |ИЗ
                           |    РегистрНакопления.ПартииТоваровНаСкладах.Обороты(&Дата1, &Дата2, Регистратор, Номенклатура В ИЕРАРХИИ (&Номенклатура)) КАК ПартииТоваровНаСкладахОбороты
                           |ГДЕ
                           |    ПартииТоваровНаСкладахОбороты.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг
                           |
                           |ОБЪЕДИНИТЬ ВСЕ
                           |
                           |ВЫБРАТЬ
                           |    ПартииТоваровНаСкладахОбороты.Номенклатура,
                           |    0,
                           |    0,
                           |    ПартииТоваровНаСкладахОбороты.КоличествоРасход,
                           |    0,
                           |    НАЧАЛОПЕРИОДА(ПартииТоваровНаСкладахОбороты.Период, МЕСЯЦ)
                           |ИЗ
                           |    РегистрНакопления.ПартииТоваровНаСкладах.Обороты(&Дата1, &Дата2, Регистратор, Номенклатура В ИЕРАРХИИ (&Номенклатура)) КАК ПартииТоваровНаСкладахОбороты
                           |ГДЕ
                           |    ПартииТоваровНаСкладахОбороты.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
                           |;
                           |
                           |////////////////////////////////////////////////////////////////////////////////
                           |ВЫБРАТЬ
                           |    ВТ.Номенклатура КАК Номенклатура,
                           |    ВТ.НачальныйОстаток КАК НачальныйОстаток,
                           |    ВТ.Приход КАК Приход,
                           |    ВТ.Расход КАК Расход,
                           |    ВТ.КонечныйОстаток КАК КонечныйОстаток,
                           |    ВТ.ПериодМесяц КАК Месяц
                           |ИЗ
                           |    ВТ КАК ВТ
                           |
                           |УПОРЯДОЧИТЬ ПО
                           |    Номенклатура,
                           |    Месяц
                           |ИТОГИ
                           |    СУММА(НачальныйОстаток),
                           |    СУММА(Приход),
                           |    СУММА(Расход),
                           |    СУММА(КонечныйОстаток)
                           |ПО
                           |    ОБЩИЕ,
                           |    Месяц ПЕРИОДАМИ(МЕСЯЦ, &Дата1, &Дата2),
                           |    Номенклатура ИЕРАРХИЯ";
           
            Запрос.УстановитьПараметр("Дата1", НачалоГода(ДатаОтчета));
            Запрос.УстановитьПараметр("Дата2", КонецГода(ДатаОтчета));

            Если ЗначениеЗаполнено(ЭлементыФормы.Номенклатура.Значение) Тогда
                Запрос.УстановитьПараметр("Номенклатура", ЭлементыФормы.Номенклатура.Значение);
                Текст = "Номенклатура ";
                Если ПолеВидаСравненияНоменклатура = ВидСравнения.Равно Тогда
                    Текст = Текст+"=";
                ИначеЕсли ПолеВидаСравненияНоменклатура = ВидСравнения.НеРавно Тогда
                    Текст = Текст+"<>";
                ИначеЕсли ПолеВидаСравненияНоменклатура = ВидСравнения.ВСписке Тогда
                    Текст = Текст+"В";
                ИначеЕсли ПолеВидаСравненияНоменклатура = ВидСравнения.НеВСписке Тогда
                    Текст = Текст+"НЕ В";
                ИначеЕсли ПолеВидаСравненияНоменклатура = ВидСравнения.ВИерархии Тогда
                    Текст = Текст+"В ИЕРАРХИИ";
                ИначеЕсли ПолеВидаСравненияНоменклатура = ВидСравнения.НеВИерархии Тогда
                    Текст = Текст+"НЕ В ИЕРАРХИИ";
                КонецЕсли;
                Текст = Текст+" (&Номенклатура)";
                Запрос.Текст = СтрЗаменить(Запрос.Текст, "Номенклатура В ИЕРАРХИИ (&Номенклатура)", Текст);
            Иначе
                Запрос.Текст = СтрЗаменить(Запрос.Текст, "Номенклатура В ИЕРАРХИИ (&Номенклатура)", "");
            КонецЕсли;
               
            Макет = ОтчетОбъект.ПолучитьМакет("Макет");
            ОбластьШапкаМесяц = Макет.ПолучитьОбласть("Шапка|Месяц");
            ОбластьШапкаТовар = Макет.ПолучитьОбласть("Шапка|Товар");
            ОбластьШапкаИтог = Макет.ПолучитьОбласть("Шапка|Итог");
            ОбластьСтрокаМесяц = Макет.ПолучитьОбласть("Строка|Месяц");
            ОбластьСтрокаТовар = Макет.ПолучитьОбласть("Строка|Товар");
            ОбластьСтрокаИтог = Макет.ПолучитьОбласть("Строка|Итог");
            ОбластьПодвалМесяц = Макет.ПолучитьОбласть("Подвал|Месяц");
            ОбластьПодвалТовар = Макет.ПолучитьОбласть("Подвал|Товар");
            ОбластьПодвалИтог = Макет.ПолучитьОбласть("Подвал|Итог");
           
            РезультатЗапроса = Запрос.Выполнить();
           
            Если РезультатЗапроса.Пустой() Тогда
                Возврат;
            КонецЕсли;
           
            ТабДок.Вывести(ОбластьШапкаТовар);
            ТабДок.НачатьАвтогруппировкуСтрок();
           
            ВыборкаШапкаМесяц = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Месяц", "ВСЕ");
            Пока ВыборкаШапкаМесяц.Следующий() Цикл
                ОбластьШапкаМесяц.Параметры.Заполнить(ВыборкаШапкаМесяц);
                ТабДок.Присоединить(ОбластьШапкаМесяц);
            КонецЦикла;
            ТабДок.Присоединить(ОбластьШапкаИтог);
           
            ВыборкаТовар = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Номенклатура");
            Пока ВыборкаТовар.Следующий() Цикл
               
                ОбластьСтрокаТовар.Параметры.Заполнить(ВыборкаТовар);
               
                ОбластьСтрокаТовар.Параметры.ПолноеНаименование = ВыборкаТовар.Номенклатура.НаименованиеПолное;
               
                ТабДок.Вывести(ОбластьСтрокаТовар, ВыборкаТовар.Уровень());
               
                ВыборкаМесяц = ВыборкаТовар.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Месяц", "ВСЕ");
                Пока ВыборкаМесяц.Следующий() Цикл
                    ОбластьСтрокаМесяц.Параметры.Заполнить(ВыборкаМесяц);  
                    ТабДок.Присоединить(ОбластьСтрокаМесяц, ВыборкаМесяц.Уровень());
                КонецЦикла;
               
                ОбластьСтрокаИтог.Параметры.Заполнить(ВыборкаТовар);
                ТабДок.Присоединить(ОбластьСтрокаИтог);
           
            КонецЦикла;
           
            ТабДок.ЗакончитьАвтогруппировкуСтрок();
           
            ТабДок.Вывести(ОбластьПодвалТовар);
           
            ВыборкаШапкаМесяц.Сбросить();
            Пока ВыборкаШапкаМесяц.Следующий() Цикл
                ОбластьПодвалМесяц.Параметры.Заполнить(ВыборкаШапкаМесяц);
                ТабДок.Присоединить(ОбластьПодвалМесяц);
            КонецЦикла;

            ВыборкаОбщийИтог = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
            Если ВыборкаОбщийИтог.Следующий() Тогда
                ОбластьПодвалИтог.Параметры.Заполнить(ВыборкаОбщийИтог);
                ТабДок.Присоединить(ОбластьПодвалИтог);
            КонецЕсли;
           
            ТабДок.ОтображатьЗаголовки = Ложь;
            ТабДок.ОтображатьСетку = Ложь;
            ТабДок.Защита = Истина;
            ТабДок.Показать();
               
        КонецПроцедуры

        Не подскажете в чем ошибка?

        %D0%91%D0%B5%D0%B7%D0%9E%D1%81%D1%82%D0%B0%D1%82%D0%BA%D0%B0%20.png%D0%A1%D0%9E%D1%81%D1%82%D0%B0%D1%82%D0%BA%D0%BE%D0%BC.png

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


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

          • Виктор

            Здравствуйте, Василий!
            Спасибо, что отвечаете. Да, по этой номенклатуре правильный результат получается.

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


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

              • Виктор

                Здравствуйте, Василий!
                Спасибо за участие! На каждый месяц нужны обороты и конечный остаток. И остатки отдельными колонками на начало и конец года.
                Чтобы получить нужный мне вариант я сделал следующее:

                ТабДок = Новый ТабличныйДокумент;
                   
                    Запрос = Новый Запрос;
                    Запрос.Текст = "ВЫБРАТЬ
                                   |    ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура,
                                   |    ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток КАК НачальныйОстаток,
                                   |    0 КАК Приход,
                                   |    0 КАК Расход,
                                   |    ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток КАК КонечныйОстаток,
                                   |    ПартииТоваровНаСкладахОстаткиИОбороты.Период КАК ПериодМесяц
                                   |ПОМЕСТИТЬ ВТ
                                   |ИЗ
                                   |    РегистрНакопления.ПартииТоваровНаСкладах.ОстаткиИОбороты(&Дата1, &Дата2, Месяц, , Номенклатура В ИЕРАРХИИ (&Номенклатура)) КАК ПартииТоваровНаСкладахОстаткиИОбороты
                                   |
                                   |ОБЪЕДИНИТЬ ВСЕ
                                   |
                                   |ВЫБРАТЬ
                                   |    ПартииТоваровНаСкладахОбороты.Номенклатура,
                                   |    0,
                                   |    ПартииТоваровНаСкладахОбороты.КоличествоПриход,
                                   |    0,
                                   |    0,
                                   |    НАЧАЛОПЕРИОДА(ПартииТоваровНаСкладахОбороты.Период, МЕСЯЦ)
                                   |ИЗ
                                   |    РегистрНакопления.ПартииТоваровНаСкладах.Обороты(&Дата1, &Дата2, Регистратор, Номенклатура В ИЕРАРХИИ (&Номенклатура)) КАК ПартииТоваровНаСкладахОбороты
                                   |ГДЕ
                                   |    ПартииТоваровНаСкладахОбороты.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг
                                   |
                                   |ОБЪЕДИНИТЬ ВСЕ
                                   |
                                   |ВЫБРАТЬ
                                   |    ПартииТоваровНаСкладахОбороты.Номенклатура,
                                   |    0,
                                   |    0,
                                   |    ПартииТоваровНаСкладахОбороты.КоличествоРасход,
                                   |    0,
                                   |    НАЧАЛОПЕРИОДА(ПартииТоваровНаСкладахОбороты.Период, МЕСЯЦ)
                                   |ИЗ
                                   |    РегистрНакопления.ПартииТоваровНаСкладах.Обороты(&Дата1, &Дата2, Регистратор, Номенклатура В ИЕРАРХИИ (&Номенклатура)) КАК ПартииТоваровНаСкладахОбороты
                                   |ГДЕ
                                   |    ПартииТоваровНаСкладахОбороты.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
                                   |;
                                   |
                                   |////////////////////////////////////////////////////////////////////////////////
                                   |ВЫБРАТЬ
                                   |    ВТ.Номенклатура КАК Номенклатура,
                                   |    ВТ.НачальныйОстаток КАК НачальныйОстаток,
                                   |    ВТ.Приход КАК Приход,
                                   |    ВТ.Расход КАК Расход,
                                   |    ВТ.КонечныйОстаток КАК КонечныйОстаток,
                                   |    ВТ.ПериодМесяц КАК Месяц
                                   |ИЗ
                                   |    ВТ КАК ВТ
                                   |
                                   |УПОРЯДОЧИТЬ ПО
                                   |    ВТ.Номенклатура.Наименование,
                                   |    Месяц
                                   |ИТОГИ
                                   |    СУММА(НачальныйОстаток),
                                   |    СУММА(Приход),
                                   |    СУММА(Расход),
                                   |    СУММА(КонечныйОстаток)
                                   |ПО
                                   |    Номенклатура ИЕРАРХИЯ,
                                   |    Месяц ПЕРИОДАМИ(МЕСЯЦ, &Дата1, &Дата2)";
                   
                    Запрос.УстановитьПараметр("Дата1", НачалоГода(ДатаОтчета));
                    Запрос.УстановитьПараметр("Дата2", КонецГода(ДатаОтчета));
                Макет = ОтчетОбъект.ПолучитьМакет("Макет");
                    ОбластьШапкаМесяц = Макет.ПолучитьОбласть("Шапка|Месяц");
                    ОбластьШапкаТовар = Макет.ПолучитьОбласть("Шапка|Товар");
                    ОбластьШапкаИтог = Макет.ПолучитьОбласть("Шапка|Итог");
                    ОбластьСтрокаМесяц = Макет.ПолучитьОбласть("Строка|Месяц");
                    ОбластьСтрокаТовар = Макет.ПолучитьОбласть("Строка|Товар");
                    ОбластьСтрокаИтог = Макет.ПолучитьОбласть("Строка|Итог");
                    ОбластьПодвалМесяц = Макет.ПолучитьОбласть("Подвал|Месяц");
                    ОбластьПодвалТовар = Макет.ПолучитьОбласть("Подвал|Товар");
                    ОбластьПодвалИтог = Макет.ПолучитьОбласть("Подвал|Итог");
                   
                    РезультатЗапроса = Запрос.Выполнить();
                   
                    Если РезультатЗапроса.Пустой() Тогда
                        Возврат;
                    КонецЕсли;
                       
                    ТабДок.Вывести(ОбластьШапкаТовар);
                    ТабДок.НачатьАвтогруппировкуСтрок();
                    ПредыдущийОстаток = 0;
                    ОбщийИтог = 0;
                   
                    ПрошлыйОстаток = Новый Соответствие;
                       
                    ВыборкаШапкаМесяц = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Месяц", "ВСЕ");
                    Пока ВыборкаШапкаМесяц.Следующий() Цикл
                        ОбластьШапкаМесяц.Параметры.Заполнить(ВыборкаШапкаМесяц);
                        ТабДок.Присоединить(ОбластьШапкаМесяц);
                    КонецЦикла;
                    ТабДок.Присоединить(ОбластьШапкаИтог);
                   
                    ВыборкаТовар = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Номенклатура");
                    Пока ВыборкаТовар.Следующий() Цикл
                       
                        ОбластьСтрокаТовар.Параметры.Заполнить(ВыборкаТовар);
                        Если ВыборкаТовар.Номенклатура.ЭтоГруппа Тогда
                            ОбластьСтрокаТовар.Параметры.НачальныйОстаток = 0;
                        КонецЕсли;
                        ВыборкаДетальная = ВыборкаТовар.Выбрать();    
                        Пока ВыборкаДетальная.Следующий() Цикл
                            Если ВыборкаДетальная.НачальныйОстаток <> 0 И Месяц(ВыборкаДетальная.Месяц) = 1 И НЕ ВыборкаДетальная.Номенклатура.ЭтоГруппа Тогда
                                ПредыдущийОстаток = ВыборкаДетальная.НачальныйОстаток;
                                ПрошлыйОстаток.Вставить(ВыборкаДетальная.Номенклатура, ПредыдущийОстаток);
                                ОбластьСтрокаТовар.Параметры.НачальныйОстаток = ПредыдущийОстаток;
                                ОбщийИтог = ОбщийИтог + ПредыдущийОстаток;
                                               
                                //Сообщение = Новый СообщениеПользователю;
                                //Сообщение.Текст = "Товар: " + ВыборкаДетальная.Номенклатура + ", НачальныйОстаток: " + ВыборкаДетальная.НачальныйОстаток  +
                                //", Приход: " + ВыборкаДетальная.Приход + ", Расход: " + ВыборкаДетальная.Расход + ", КонечныйОстаток: " + ВыборкаДетальная.КонечныйОстаток  +
                                //", Дата: " + ВыборкаДетальная.Месяц + ", Тип записи: " +
                                //ВыборкаДетальная.ТипЗаписи() + ", Уровень: " + ВыборкаДетальная.Уровень() + ", Группировка: " + ВыборкаДетальная.Группировка();
                                //Сообщение.Сообщить();
                                Прервать;
                            КонецЕсли;
                        КонецЦикла;
                       
                        ОбластьСтрокаТовар.Параметры.ПолноеНаименование = ВыборкаТовар.Номенклатура.НаименованиеПолное;
                       
                        ТабДок.Вывести(ОбластьСтрокаТовар, ВыборкаТовар.Уровень());
                        Был = Ложь;
                        ПредыдущийОстаток = 0;
                        ВыборкаМесяц = ВыборкаТовар.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Месяц", "ВСЕ");
                        Пока ВыборкаМесяц.Следующий() Цикл
                            Если НЕ ВыборкаМесяц.Номенклатура.ЭтоГруппа Тогда
                                ОбластьСтрокаМесяц.Параметры.Заполнить(ВыборкаМесяц);  
                                Если НЕ Был Тогда
                                    ПредыдущийОстаток = ?(ПрошлыйОстаток.Получить(ВыборкаДетальная.Номенклатура) = Неопределено, 0, ПрошлыйОстаток.Получить(ВыборкаМесяц.Номенклатура));      
                                    Был = Истина;
                                КонецЕсли;
                                ОбластьСтрокаМесяц.Параметры.КонечныйОстаток = ПредыдущийОстаток + ПолучитьНоль(ВыборкаМесяц.Приход) - ПолучитьНоль(ВыборкаМесяц.Расход);
                                ПредыдущийОстаток = ПредыдущийОстаток + ПолучитьНоль(ВыборкаМесяц.Приход) - ПолучитьНоль(ВыборкаМесяц.Расход);
                            КонецЕсли;
                            ТабДок.Присоединить(ОбластьСтрокаМесяц, ВыборкаМесяц.Уровень());

                            //ВыборкаДетальная = ВыборкаМесяц.Выбрать();
                            //Пока ВыборкаДетальная.Следующий() Цикл
                            //  Сообщение = Новый СообщениеПользователю;
                            //  Сообщение.Текст = "Товар: " + ВыборкаДетальная.Номенклатура + ", НачальныйОстаток: " + ВыборкаДетальная.НачальныйОстаток  +
                            //  ", Приход: " + ВыборкаДетальная.НачальныйОстаток + ", Расход: " + ВыборкаДетальная.Расход + ", КонечныйОстаток: " + ВыборкаДетальная.КонечныйОстаток  +
                            //  ", Дата: " + ВыборкаДетальная.Месяц + ", Тип записи: " +
                            //  ВыборкаДетальная.ТипЗаписи() + ", Уровень: " + ВыборкаДетальная.Уровень() + ", Группировка: " + ВыборкаДетальная.Группировка();
                            //  Сообщение.Сообщить();
                            //КонецЦикла;
                           
                        КонецЦикла;
                       
                        ОбластьСтрокаИтог.Параметры.Заполнить(ВыборкаТовар);
                        Если ВыборкаТовар.Номенклатура.ЭтоГруппа Тогда
                            ОбластьСтрокаИтог.Параметры.КонечныйОстаток = 0;
                        КонецЕсли;
                        ТабДок.Присоединить(ОбластьСтрокаИтог);
                   
                    КонецЦикла;
                   
                    ТабДок.ЗакончитьАвтогруппировкуСтрок();
                    ОбластьПодвалТовар.Параметры.НачальныйОстаток = ОбщийИтог; 
                    ТабДок.Вывести(ОбластьПодвалТовар);
                   
                    ВыборкаШапкаМесяц.Сбросить();
                    Пока ВыборкаШапкаМесяц.Следующий() Цикл
                        ОбластьПодвалМесяц.Параметры.Заполнить(ВыборкаШапкаМесяц);
                        ОбластьПодвалМесяц.Параметры.КонечныйОстаток = ОбщийИтог + ПолучитьНоль(ВыборкаШапкаМесяц.Приход) - ПолучитьНоль(ВыборкаШапкаМесяц.Расход);
                        ОбщийИтог = ОбщийИтог + ПолучитьНоль(ВыборкаШапкаМесяц.Приход) - ПолучитьНоль(ВыборкаШапкаМесяц.Расход);
                        ТабДок.Присоединить(ОбластьПодвалМесяц);
                    КонецЦикла;

                    ВыборкаОбщийИтог = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
                    Если ВыборкаОбщийИтог.Следующий() Тогда
                        ОбластьПодвалИтог.Параметры.Заполнить(ВыборкаОбщийИтог);
                        ТабДок.Присоединить(ОбластьПодвалИтог);
                    КонецЕсли;
                   
                    ТабДок.ОтображатьЗаголовки = Ложь;
                    ТабДок.ОтображатьСетку = Ложь;
                    ТабДок.Защита = Истина;
                    ТабДок.Показать();

                Я использовал функцию ПолучитьНоль(), так как в результате запроса не вижу значений NULL и подумал, что они появляются в результате дополнения периодов, или я намудрил? В результате отладки я заметил, что нужные мне значения есть в результате запроса, но они не выводятся, даже если использовать СКД. Поэтому я стал использовать дополнительные переменные и условия.
                Как вы думаете, Василий, можно ли решить эту задачу, используя материал из урока «Остатки в периоде, когда не было движений» с эмуляцией дополнения периода и соединения таблицы с самой собой? Подойдет ли такой метод?

                %D0%9E%D1%82%D1%87%D0%B5%D1%82.png

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


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

                • Виктор

                  Спасибо за ваши ответы! При сравнении данных двух товаров (правильному и неправильному) различий в данных не нашел. Спасибо еще раз, что напомнили мне технику получения данных при помощи объединения нескольких запросов! Я еще не все уроки просмотрел и остались практические задания. Начинаю урок «Выбор значений
                  из регистра сведений за период». Успехов вам в вашем деле!

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


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

  27. f_edor

    Правильно ли я понимаю что при выполнении запроса с помощью встроенного языка накладывается ограничение на использование конструкции Контрагенты.Наименование Подобно «%СНАБСЫРЬЕ%» и нужно использовать параметр. проверка синтаксиса сообщает «Переменная не определена (СНАБСЫРЬЕ) Контрагенты.Наименование Подобно «%<>СНАБСЫРЬЕ%»»; (Проверка: Сервер)»

    %D0%9F%D1%80%D0%BE%D0%B1%D0%BB%D0%B5%D0%BC%D0%B0%D0%A1%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%BE%D0%BC.jpg

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


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

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


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

  28. svetlen

    Чем отличается в использовании реквизит обработки и реквизит формы? Реквизит обработки можно ведь тоже вывести на форму

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


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

  29. svetlen

    Можно ссылку на страницу с дистрибутивом демонстрационная конфигурация «Управляемое приложение», что-то я не могу найти

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


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

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


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

      • svetlen

        А почему не разобрали выгрузку результата запроса в дерево значений? С таблицей уже работала. а вот с деревом не знаю как… Можно добавить или хотя бы описать

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


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

    • f_edor

      Хочу предупредить, предложенная по ссылке конфигурация работает только с платформами не ниже 8.3.5. При попытки использования этой конфигурации на учебной платформе 1С:Предприятие 8.3, версии (8.3.3.721) 1с вылетает при запуске, или выдаст сообщение о неугодной платформе при входе в конфигуратор.

  30. Дмитрий

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

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

    Сдавал Специалиста по платформе — экзаменатор на это внимание не обратил (я загружал таблицу), но при подготовке Павел Чистов не советовал использовать промежуточные таблицы, хотя, по моему в базовом курсе (точно не помню уже где, просто фраза врезалась в память), Евгений Гилев утверждает, что в общем случае непосредственная загрузка в регистр будет работать быстрее.

    Или это уже вопрос конкретной оптимизации, в зависимости от объема табличной части документа (количество реквизитов, строк в среднем)? На малом количестве быстрее будет перебор, а для больших документов прямая загрузка?

    Сам поэкспериментирую, но хочется услышать Ваше мнение =)

    Спасибо!

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


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

  31. nog01

    Василий, добрый день!
    Вопрос по видеоуроку Query-5-Config-15.
    В запросе там рассчитываются итоги по периоду, но в самом отчете итоговых сумм для дня нет. Почему?

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


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

      • nog01

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

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


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

  32. AndreyM

    Добрый день! Можете более подробно рассказать про расчет итогов по полям остатка? Желательно на примере нашей конфигурации (Демонстрационная конфигурация «Управляемое приложение» ), чтобы можно было воспроизвести.

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


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

      • AndreyM

        Теперь стало все понятно. Спасибо большое!

  33. FreeArcher

    Добрый день!
    Скажите Василий, а чем отличаются конструкции, в которых в формуле уже присутствует агрегатные функции?

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

    От такой же конструкции, но без «СУММА».

    ВЫБОР
    КОГДА ВыручкаИСебестоимостьПродажОбороты.СуммаВыручкиОборот 0
    ТОГДА (ВыручкаИСебестоимостьПродажОбороты.СуммаВыручкиОборот — ВыручкаИСебестоимостьПродажОбороты.СебестоимостьОборот) — ВыручкаИСебестоимостьПродажОбороты.СуммаДополнительныхРасходовОборот) / ВыручкаИСебестоимостьПродажОбороты.СуммаВыручкиОборот
    ИНАЧЕ 0
    КОНЕЦ

    В результате данные разные. Не совсем понятно, что суммируется в первом случае?
    (запрос из УТ 11 по регистру ВыручкаИСебестоимость)

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


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

  34. BarkinI

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

    Подскажите не могу понять как сделать. Хочу сделать выборку с группировкой по контрагенту, номенклатуре (с иерархией) и периоды (например месяц). Но месяцы должны быть как колонки. И все это выгрузить в таблицу значений.

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


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

      • BarkinI

        Василий добрый день.
        Про СКД ясно. Вопрос мне нужно потом чтобы пользователь интерактивно поработал с полученными данными (что выделил, установил флажки, внес какие свои замечания) затем происходит обработка (к примеру формируется файл ексел). Насколько удобно (и быстро с точки зрения разработки) будет это сделать в отчете на СКД, чем например данные были бы выгружены в таблицу значений (или дерево) на форме и также потом были обработаны?

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


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

  35. Informtech

    Добрый день Василий!
    Есть запрос
    «ВЫБРАТЬ

    УсловияОплатыПоДоговору.ДатаЗаключения,
    ФормулыВидовРасчетаСрезПоследних.Датаот,
    ФормулыВидовРасчетаСрезПоследних.ВидРасчета,
    ФормулыВидовРасчетаСрезПоследних.Формула
    ПОМЕСТИТЬ Договора
    ИЗ
    РегистрСведений.УсловияОплатыПоДоговору КАК УсловияОплатыПоДоговору
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФормулыВидовРасчета.СрезПоследних КАК ФормулыВидовРасчетаСрезПоследних
    ПО УсловияОплатыПоДоговоруАренды.ДатаЗаключения >= ФормулыВидовРасчетаСрезПоследних.Датаот»
    Результат запроса выводит все записи из РС, где ДатаЗаключения >=Датаот?
    Мне нужна только последняя, то есть где дата максимальная.
    Могу ли я накладывать условия на связываемое поле-тип Дата?

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


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

  36. FreeArcher

    Добрый день!
    Скажите, Василий, а дополнение итогов (то что можно дополнить периоды в обходе результата запроса в коде) работает в отчетах СКД?

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


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

  37. Informtech

    Функции Следующий() и СледующийПоЗначениполя(). Очень удобная вторая функция, но не совсем понятно как запрос работает?
    __ Вариант когда СледующийПоЗначениполя(«Товар») и Следующий()
    Идет по строкам:
    Товар -bosh1234
    Покупатель- Попов Б.В.
    Товар — bosh15
    Покупатель- Попов Б.В.
    Товар — sonyK34
    Покупатель- Шполовая ООО
    Товар — sonyK34 ////Тут опять идет на товар sonyK34, хотя должна идти на строку veko34,почему?
    Покупатель- Шполовая ООО
    Не понимаю вашу фразу «Будут выбраны все записи с разным значением поля, который в данный момент находится в выборке полученной с помощью выборки СледующийПоЗначениполя». Почему внутренняя выборка по Покупателю важнее выборки по Товару?

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


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

      • DasTPID

        Непонятно почему завершается вложенный цикл

        Пока Выборка.Следующий() Цикл
            ...
          КонецЦикла;

        Если Выборка.Следующий() просто передвигает «курсор» на одну запись вниз то ЛОЖЬ он должен вернуть только когда доберётся до завершающей записи. После этого Выборка.СледующийПоЗначениюПоля(«Товар») опять-таки должен вернуть ЛОЖЬ, ведь внутренний цикл уже спозиционировал курсор на нижнюю запись. Но такого не происходит. Почему?

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


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

          • DasTPID

            Ммм всё равно ничего не понятно.
            По поводу Выборка.Следующий() в справке ничего не написано о том, что его поведение меняется в зависимости от того, была или не была вызвана до этого Выборка.СледующийПоЗначениюПоля(). И ещё непонятно это поведение является «реквизитом» самой выборки или оно так же зависит от места, откуда оно вызвано? Грубо говоря, получили выборку, вызвали функцию общего модуля, в этой функции сделали Выборка.СледующийПоЗначениюПоля(«Товар»), вернулись из общего модуля и в цикле перебрали Выборка.Следующий(); переберутся ли в таком случае все записи или только те, у которых «товар».

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


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

  38. man_14

    Вопрос по полям, имеющим тип РезультатЗапроса (например, табличная часть документа).
    Вы говорили, что будет выполнен запрос к табличной части документа. Так вот этот запрос будет выполняться многократно (на каждой записи запроса к документу) или будет построен один запрос?

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


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

  39. Informtech

    Добрый день Василий! Есть РН, в котором присутствуют запись Реквизиты:НачалоПериода=02.03.2013, КонецПериода=31.12.13, Ресурс Сумма=16500,12. Возможно ли разбить эту строку(которых в РН много) на периоды-кварталы( то есть должно получится четыре строки) 1 квартал -02.03.2013 -31.12.13 сумма =16500,12/304*29, то есть сумма делилась пропорционально дням в квартале? 2 квартал 01.04.13-30.06.13, сумма также пропорциональна дням?

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


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

      • Informtech

        Спасибо Василий что так оперативно ответили!
        Из вашего запроса я не совсем поняла 4 и 5 пакет.
        Почему в 4 запросе 9 цифр?

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


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

      • Informtech

        Вы знаете Василий, я не могу понять, почему в этом запросе, который вроде бы правильно разбивает период на кварталы, не могу посчитать количество дней между этими датами в кварталах -2,3, и 4 , а в первом квартале все получается.
        Внизу закоментировала строки, где пытаюсь добавить поле, но конструктор сообщает , что «НЕВЕРНЫЕ ПАРАМЕТРЫ «Разностьдат»».

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

        ////////////////////////////////////////////////////////////////////////////////
        ВЫБРАТЬ
        ВЫБОР
        КОГДА Квартал1.датаО = Квартал1.ДатаОкончанияПериода
        ТОГДА 0
        ИНАЧЕ ДОБАВИТЬКДАТЕ(Квартал1.датаО, ДЕНЬ, 1)
        КОНЕЦ КАК ДатаН,
        ВЫБОР
        КОГДА КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(Квартал1.датаО, ДЕНЬ, 1), КВАРТАЛ) < Квартал1.ДатаОкончанияПериода
        ТОГДА КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(Квартал1.датаО, ДЕНЬ, 1), КВАРТАЛ)
        ИНАЧЕ Квартал1.ДатаОкончанияПериода
        КОНЕЦ КАК ДатаО,
        Квартал1.ДоговорАрендыНаОбъектИмущества,
        Квартал1.ДатаНачалаПериода,
        Квартал1.ДатаОкончанияПериода,
        Квартал1.Сумма
        ПОМЕСТИТЬ Квартал2
        ИЗ
        Квартал1 КАК Квартал1
        ;

        ////////////////////////////////////////////////////////////////////////////////
        ВЫБРАТЬ
        ВЫБОР
        КОГДА Квартал2.ДатаО = Квартал2.ДатаОкончанияПериода
        ТОГДА 0
        ИНАЧЕ ДОБАВИТЬКДАТЕ(Квартал2.ДатаО, ДЕНЬ, 1)
        КОНЕЦ КАК ДатаН,
        ВЫБОР
        КОГДА КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(Квартал2.ДатаО, ДЕНЬ, 1), КВАРТАЛ) < Квартал2.ДатаОкончанияПериода
        ТОГДА КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(Квартал2.ДатаО, ДЕНЬ, 1), КВАРТАЛ)
        ИНАЧЕ Квартал2.ДатаОкончанияПериода
        КОНЕЦ КАК ДатаО,
        Квартал2.ДоговорАрендыНаОбъектИмущества,
        Квартал2.ДатаНачалаПериода,
        Квартал2.ДатаОкончанияПериода,
        Квартал2.Сумма
        ПОМЕСТИТЬ Квартал3
        ИЗ
        Квартал2 КАК Квартал2
        ;

        ////////////////////////////////////////////////////////////////////////////////
        ВЫБРАТЬ
        ВЫБОР
        КОГДА Квартал3.ДатаО = Квартал3.ДатаОкончанияПериода
        ТОГДА 0
        ИНАЧЕ ДОБАВИТЬКДАТЕ(Квартал3.ДатаО, ДЕНЬ, 1)
        КОНЕЦ КАК ДатаН,
        ВЫБОР
        КОГДА КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(Квартал3.ДатаО, ДЕНЬ, 1), КВАРТАЛ) < Квартал3.ДатаОкончанияПериода
        ТОГДА КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(Квартал3.ДатаО, ДЕНЬ, 1), КВАРТАЛ)
        ИНАЧЕ Квартал3.ДатаОкончанияПериода
        КОНЕЦ КАК ДатаО,
        Квартал3.ДоговорАрендыНаОбъектИмущества,
        Квартал3.ДатаНачалаПериода,
        Квартал3.ДатаОкончанияПериода,
        Квартал3.Сумма
        ПОМЕСТИТЬ Квартал4
        ИЗ
        Квартал3 КАК Квартал3
        ;

        ////////////////////////////////////////////////////////////////////////////////
        ВЫБРАТЬ
        Квартал1.ДатаН КАК ДатаН,
        Квартал1.датаО КАК датаО,
        РАЗНОСТЬДАТ(Квартал1.ДатаН, Квартал1.датаО, ДЕНЬ) КАК КолДней
        ИЗ
        Квартал1 КАК Квартал1
        ГДЕ
        Квартал1.ДатаН 0

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

        ВЫБРАТЬ
        Квартал2.ДатаН,
        Квартал2.ДатаО,
        NULL////////*********Вот вместо NULL пытаюсь записать РАЗНОСТЬДАТ(Квартал2.ДатаН, Квартал2.датаО, ДЕНЬ) КАК КолДней//***********************
        ИЗ
        Квартал2 КАК Квартал2
        ГДЕ
        Квартал2.ДатаН 0

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

        ВЫБРАТЬ
        Квартал3.ДатаН,
        Квартал3.ДатаО,
        NULL
        ИЗ
        Квартал3 КАК Квартал3
        ГДЕ
        Квартал3.ДатаН 0

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

        ВЫБРАТЬ
        Квартал4.ДатаН,
        Квартал4.ДатаО,
        NULL
        ИЗ
        Квартал4 КАК Квартал4
        ГДЕ
        Квартал4.ДатаН 0

        УПОРЯДОЧИТЬ ПО
        ДатаН

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


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

      • Informtech

        По вашему запросу и пор своему запросу все получилось, спасибо!

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


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

  40. mashkov

    Уважаемый Василий. В обработке «Запросы (весь модуль 5)» используется напр. документ РасходТовара, а
    в БД Query-Homework-Template есть только документ РеализацияТоваров. Скажите,откуда взять нужную для курса БД. Юрий

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


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

      • svetlen

        а можно ссылку на ту страницу, что-то я не могу найти

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


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

  41. 13jaguar

    Обратил внимание, что запрос

    ВЫБРАТЬ
        ПоступлениеТоваровТовары.Номенклатура,
        Представление(ПоступлениеТоваровТовары.Номенклатура)
    ИЗ
        Документ.ПоступлениеТоваров.Товары КАК ПоступлениеТоваровТовары

    выполняется заметно быстрее, чем запрос:

    ВЫБРАТЬ
        ПоступлениеТоваровТовары.Номенклатура,
        ПоступлениеТоваровТовары.Номенклатура.Представление
    ИЗ
        Документ.ПоступлениеТоваров.Товары КАК ПоступлениеТоваровТовары

    Хотя план запроса меняется незначительно. Почему это происходит?

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


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

      • 13jaguar

        Да, проверял пока только на файловой, разница получилась около 40%. На клиент-серверной только в выходные смогу попробовать, если получу доступ к серверу. Как раз хотел проверить ограничения использования оператора ПОДОБНО на СУБД IBM DB2.

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


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

  42. Алексей

    Добрый день!

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

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


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

      • Алексей

        В бесплатных видеоуроках по СКД был рассмотрен пример построения собственной иерархии (справочник «ИерархияДокументов» и соответствующий реквизит в Документе).
        Хотелось бы в дальнейшем посмотреть решение этой задачи без использования СКД в Вашем курсе.

        Спасибо!

        %D0%91%D0%B5%D0%B7%D1%8B%D0%BC%D1%8F%D0%BD%D0%BD%D1%8B%D0%B9.png

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


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

  43. NICKATE

    При выполнении запроса
    ВЫБРАТЬ
    РеализацияТоваровТовары.Номенклатура КАК Товар,
    РеализацияТоваровТовары.Количество КАК Количество
    ИЗ
    Документ.РеализацияТоваров.Товары КАК РеализацияТоваровТовары

    УПОРЯДОЧИТЬ ПО
    Товар
    ИТОГИ
    СУММА(Количество)
    ПО
    Товар ТОЛЬКО ИЕРАРХИЯ
    АВТОУПОРЯДОЧИВАНИЕ
    Получаю: Преобразование значения к типу Число не может быть
    выполнено
    Без иерархии работает!?

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


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

      • NICKATE

        Спасибо!
        ошибку получала и в консоли, пришлось сделать в модуле менеджера спр Номенклатура
        //СтандартнаяОбработка=Ложь;
        //Представление= Данные.Артикул +» — «+Данные.Наименование;

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


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

  44. Владислав

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

    • Владислав

      Вот пример. Для поля ХозрасчетныйОстаткиИОбороты. СуммаОборот итоги рассчитываются корректно. А если заменить функцию в итогах с СУММА() на КОЛИЧЕСТВО(), то для остатков количество всегда будет равно 1.

      505607c5fb95a28a735247e31d71b898.jpg

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


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

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


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

      • Владислав

        Спасибо! Думаю было бы уместно добавить в 5-й модуль упоминание о такой особенности расчёта итогов.

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


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

  45. n.poymanov

    Видеоурок 13, построение кросс таблицы.

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

    |ПО
    |ОБЩИЕ,
    |Покупатель,
    |Товар

    Или в результатах запроса группировке в каком-то другом порядке строятся? Что вообще (визуально) из себя представляет результат запроса с итогами по группировкам?

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


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

  46. natzelv

    Здравствуйте! Скажите, пожалуйста, а нельзя получить в материалах по модулю 5 обработку Кросс -Таблица (Видео — урок 13 — Пример построения кросс-таблицы). По другим урокам обработки в материалах есть, а по этому уроку нет.

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


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

  47. Максим

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

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


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

      • n.poymanov

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

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


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

  48. n.poymanov

    Какой вы видите практический смысл в применении анимации для диаграмм?

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


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

  49. n.poymanov

    Пытаюсь понять разницу между ОбходРезультатЗапроса.ПоГруппировкам и ОбходРезультатЗапроса.ПоГруппировкамСИерархией.

    Вопрос 1) Использовать данные свойства имеет смысл только для иерархических объектов? Потому что у вас в видеопримерах итоги собираются по Номенклатура ИЕРАРХИЯ. Если у нас объект неиерархический, мы обходим его прямым обходом?

    2) Есть текст запроса:

    https://titanpad.com/zufYxOypLs

    После выполнения обхожу результаты с помощью «ОбходРезультатЗапроса.ПоГруппировкам», получаю следующий результат:

    https://titanpad.com/ZHLHKVyM7A

    Здесь полностью представлена иерархия реквизита номенклатура со всеми-всеми группами. Вопрос — какой смысл использовать ОбходРезультатЗапроса.ПоГруппировкамСИерархией, если и так все работает?

    Не могу никак понять, поясните, пожалуйста.

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


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

      • n.poymanov

        Спасибо, Василий!

        1) Полностью ясно.
        2) Постепенно приходит понимание. Стало понятно, что разные строки проходят при обходе тем или иным способом. Тогда следующий вопрос: если задачу вывода иерархических объектов можно решить этими двумя способами, то каким способом обхода можно решить её оптимальнее?

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


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

          • n.poymanov

            Спасибо, Василий!

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

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


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

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