Полезные приемы для разработки отчетов на СКД

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

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

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

Как вывести заголовок колонки вертикально, а значения в ячейках горизонтально

При помощи условного оформления в отчете можно для ряда полей изменить направление текста с горизонтального на вертикальное.

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

Тайминг ключевых моментов в видео:

00:39 – Какой параметр в настройках условного оформления необходимо использовать для горизонтального вывода текста.
01:14 – Как сделать, чтобы условное оформление применялось только к заголовкам полей.
01:38 – Как ограничить список полей, к которым применяется условное оформление.

Как сделать, чтобы в итогах кросс-таблицы выводилась только часть ресурсов, при этом в самой таблице отображались все ресурсы

При помощи СКД достаточно просто и без написания программного кода можно создавать кросс-таблицы, где и в строках, и в колонках выводятся данные, а на их пересечении – значения.

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

Тайминг ключевых моментов в видео:

00:40 – Как настроить структуру отчета для вывода в виде кросс-таблицы.
02:22 – Как отключить вывод общих итогов.
02:55 – Как добавить группировку для вывода итогов по одному ресурсу.

Как в отчете на СКД вывести колонку с расчетом процентов без создания отдельного поля компоновки

Отчеты на СКД часто сравнивают с Excel: «там же просто: добавил колонку, протянул формулу – и всё готово» :)

А на СКД может быть даже ещё проще! Например, для расчета процентов по числовым показателям не надо прописывать никаких формул. Это можно сделать при помощи настроек компоновки. В видео покажем, как именно.

Тайминг ключевых моментов в видео:

00:30 – Какие «виртуальные» вложенные поля доступны в настройках компоновки для числовых ресурсов.
02:05 – Чем отличается поле «процент общий» от «процент в группировке».
02:35 – Как в отчете пронумеровать строки и вывести процент проданного количества без создания отдельного поля компоновки.

Как управлять порядком выводимых в отчет ресурсов

Часто встречается следующая ситуация. Разработчик в отчете настроил выбранные поля, указал, в каком порядке поля должны следовать в отчете. Но в отчет они выводятся совсем в другом порядке.

Причиной может быть всего одна настройка, про которую нужно просто знать. В видео мы покажем такую настройку.

Тайминг ключевых моментов в видео:

00:35 – Какие настройки нужно установить, чтобы вывести в отчете ресурсы после всех полей.
01:10 – Какие настройки нужно установить, чтобы поля выводились в порядке, указанном в списке выбранных полей.

Как в отчете отфильтровать данные при помощи сложного выражения с использованием И, ИЛИ, НЕ

Часто пользователям в отчетах нужно отбирать данные по условиям, намного сложнее, чем просто “Номенклатура = Стол”. Система компоновки позволяет конструировать такие фильтры, используя группы логических условий И, ИЛИ, НЕ. В видео мы покажем, как можно реализовать такие отборы.

Тайминг ключевых моментов в видео:

00:32 – Как в настройках компоновки создать группу отборов (И, ИЛИ, НЕ).
01:52 – Как назначить представление для группы отборов и включить группу отборов в пользовательские настройки.

Особенности расчета итогов при использовании нескольких наборов данных

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

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

Отличия расчета итогов в запросах и СКД

Тайминг ключевых моментов в видео:

02:41 – Почему отличаются итоги при использовании запроса и при использовании соединения наборов данных.
04:05 – Как можно изменить текст запроса набора данных для корректного расчета итогов.

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

Тайминг ключевых моментов в видео:

00:30 – Как решить задачу при помощи одного запроса.
04:14 – Как решить задачу при помощи соединения двух наборов данных.
07:01 – В каких случаях использование запроса приводит к некорректному расчету итогов.

Хотите научиться грамотно создавать отчеты на СКД и дорабатывать отчеты в типовых конфигурациях?

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

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

И если Вы хотите не просто «слышать про СКД», а на самом деле знать возможности и особенности системы компоновки данных и уверенно применять их на практике, рекомендуем пройти курс Профессиональная разработка отчетов в 1С 8.3 на Системе Компоновки Данных (СКД)

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

  1. Ольга

    Здравствуйте, есть отчет списком: группировки Налогоплательщик, Налог комитет, Месяц, Физлицо и ИИН в одной группировке, Дет записи. Добавлен номер по порядку из системных полей. Можно ли сделать Шапку в 1 строку только с №, Фио и ИИН, а потом уже ресурсы, без первых группировок. Пробовала заменять заголовок Налогоплательщика пустой строкой, но все равно получается в шапке несколько строк

  2. Олег

    Добрый день! Отчёт в консоле запросов выводит значения ресурсов приход и расход с учётом фильтра по параметру &СкладИсключения.
    Но компоновка никак не хочет замечать этот параметр:
    КОГДА &ЕдиницыКоличества = 1
    ТОГДА ВЫБОР
    КОГДА ТоварыНаСкладахОстаткиИОбороты.Номенклатура.КоэффициентЕдиницыДляОтчетов 0
    И НЕ ВЫРАЗИТЬ(ТоварыНаСкладахОстаткиИОбороты.Регистратор КАК Документ.ПриходныйОрдерНаТовары).Отправитель = &СкладИсключения
    ТОГДА ТоварыНаСкладахОстаткиИОбороты.ВНаличииПриход / ТоварыНаСкладахОстаткиИОбороты.Номенклатура.КоэффициентЕдиницыДляОтчетов
    ИНАЧЕ 0
    КОНЕЦ
    КОНЕЦ КАК Приход

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

      Добрый день!
      СКД может изменять текст запроса, указанный в наборе данных, в зависимости от настроек компоновки.
      Поэтому рекомендую воспользоваться консолью компоновки, проанализировать, какой текст запроса получается в макете компоновки. Именно при помощи этого запроса на самом деле будут получаться данные для вывода в отчет.

  3. Александр

    Хорошие видео, но есть 1 но:
    в последнем видео (сравнение результатов (итогов) по запросу и соединению:
    1. Запрос. тайминг 01:16 группируемое поле – Ссылка, а суммируемое полу – Приход.Сумма
    2. Объединение. тайминг 04:33 группируемое поле – Ссылка, а суммируемого поля нет!
    Так вот, может если и в 1м варианте, не суммировать во временную таблицу Итоги по полю Приход.Сумма, может аналогичный результат будет…

    • Александр

      Получается
      1.при Запросе: мы во временную таблицу суммировали ресурс Сумма(Сумма), а потом при объединении таблиц также суммировали….
      2. при объединении наборов: в 1м наборе не суммировали ресурс суммаДокумента, а только во 2м наборе суммировали

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

        Добрый день!
        >>2. Объединение. тайминг 04:33 группируемое поле – Ссылка, а суммируемого поля нет!
        Нет. В наборе данных Итоги используется такой текст запроса:

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

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

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

        >>может если и в 1м варианте, не суммировать во временную таблицу Итоги по полю Приход.Сумма, может аналогичный результат будет
        Но нам же нужно для каждого документа получить одно число – итоговую сумму этого документа, а в ТЧ может быть много строк. Поэтому и используется агрегатная функция Сумма.

        Важный момент этого видеоурока – расчет итогов в СКД выполняется в рамках набора данных, а не для результата компоновки в целом. А для запроса итоги рассчитываются по результатам выполнения этого запроса в целом.
        За счет этого при помощи СКД и получается избежать дублирования суммы документа в итоговых записях, получить корректный общий итог.

  4. Ольга

    Здравствуйте! При решении задач из сборника по подготовке к экзамену в отчете на СКД необходимо выводить наименование партии не полностью, а в виде – “Прих. накладная № 1”. Какими средствами СКД можно это сделать?

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

      Добрый день!
      Для этого можно использовать Выражение представления для поля набора данных.

  5. German_IGOR

    Проблема следующая: Из БП 3.0 выгружаются данные для сверки номенклатуры.
    Склад,Регистратор,номенклатура.
    в УТ 10.3 отчет подхватывает данные и из ТаблицаВнешнегоНабораДанных формируется набор данных объект. все замечательно формируется – но захотелось конечныйостаток перенести на группировку выше, те вычислить последнюю запись в группировке.
    проставил в ресурсах следующее:
    Максимум (ВычислитьВыражениеСГруппировкойМассив (“КоличествоКонечныйОстатокПрофи”,”Номенклатура,склад”))
    Сумма (ВычислитьВыражениеСГруппировкойМассив (“КоличествоКонечныйОстатокПрофи”,”Номенклатура,склад”))
    если строк мало то все ок
    если достаточно много то берет данные из середины периода

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

      Добрый день!
      Возможно, причина заключается в настройке ролей для полей набора данных – объекта. Попробуйте настроить роли, указать поля-периоды и измерения.

  6. Melkiy

    Добрый день. Интересно, а вот как можно сделать отчёт с возможностью фильтрации по ресурсам. Например. Строки номенклатура колонки склады. Вот хочу увидеть в отчёте сколько на каком складе, если по определенному складу фильтранусь по значению, например 5. Т.е хочу иметь возможность делать отборы как в эксель. Как это можно сделать в 1С?

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

      Добрый день!
      Технически система компоновки данных предоставляет возможность устанавливать отбор по значениям ресурсов.
      А вот интерфейс платформы 1С:Предприятие отличается от Excel. Поэтому, возможно, придется выполнить доработки в форме отчета. Например, можно реализовать обработчик расшифровки, при двойном щелчке по ячейке открывать своё меню для фильтрации, компоновать отчет с новыми настройками, включающими отбор.

  7. Павел

    Подскажите пожалуйста, как соединить два источника-запроса, если условием соединения является число, которое должно попадать в интервал (пример: DaysOfDebt BETWEEN LowerBoundOfInterval AND UpperBoundOfInterval). При выполнении компоновка выдает ошибку.

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

      Добрый день!
      Можно попробовать заменить соединение двух наборов данных на соединение в одном запросе. В запросе можно настроить соединение таблиц по такому условию.

      • Павел

        Спасибо, именно так и сделал. Но хотел сделать с помощью соединения двух наборов.

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

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

  8. Владислав

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

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

      Добрый день!
      Можно в запросе использовать объединение всех возможных таблиц:

      ВЫБРАТЬ
          ПриходТовараТовары.Ссылка КАК Ссылка,
          ПриходТовараТовары.Товар КАК Товар,
          ПриходТовараТовары.Сумма КАК Сумма
      ИЗ
          Документ.ПриходТовара.Товары КАК ПриходТовараТовары
      ГДЕ
          &ВыводитьПриходТовара = ИСТИНА

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

      ВЫБРАТЬ
          РасходТовараТовары.Ссылка,
          РасходТовараТовары.Товар,
          РасходТовараТовары.Сумма
      ИЗ
          Документ.РасходТовара.Товары КАК РасходТовараТовары
      ГДЕ
          &ВыводитьРасходТовара = ИСТИНА

      Пользователь при помощи установки значений параметров ВыводитьПриходТовара и ВыводитьРасходТовара фактически будет управлять тем, из каких таблиц надо выбирать данные.
      А фильтр по товару сделать при помощи отбора СКД. Т.е. пользователь будет сам отбирать товар(ы) при настройке отчета.

  9. also11

    Как вывести заголовок колонки вертикально, а значения в ячейках горизонтально в таблице, а не в списке?
    Спасибо

  10. Алекс

    Добрый день.
    Если две группировки строк (“СтатьяДДС”, “Проект”), вторая вложенная в первую.
    Подскажите, пожалуйста, как при заданном условии относительно группировки №1, не выводить группировку №2 ? А во всех остальных случаях выводить?
    Например, вот так:
    https://prnt.sc/uZvAlRi-5az-
    Т.е. если в группировке “СтатьяДДС=&СтатьяДДС2”, то выводится только строка “Статья ДДС 2”, а разбивка по проектах не выводится.

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

      Добрый день!
      Первое, что пришло в голову, – это в уже сформированном табличном документе удалить лишние строки после компоновки отчета.

  11. Борис

    Здравствуйте:)
    Подскажите пожалуйста по работе с Диаграммами.
    Диаграмма типа “График”, 2 вопроса:
    1. Возможно ли график сделать “плавным”
    2. На график выводится 2 линии – План продаж и Факт продаж. Возможно ли “План” выводить по 12 точкам, а “Факт” – только по нескольким (например План определен до конца года, а по Факту сейчас июнь – график Плана построить по 12 точкам, а график Факта – чтобы обрывался на 6й, а не “падал” и “стелился” по 0)

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

      Добрый день!
      Есть демо-конфигурация фирмы “1С” Диаграммы: https://demo.1c.ru/charts
      В ней приведены примеры внешнего вида различных диаграмм, есть программный код для формирования этих диаграмм.
      По Вашим вопросам можно посмотреть примеры Настройки стиля и Пропуск значений.

  12. Борис

    Здравствуйте:)
    Подскажите пожалуйста, вопрос можно применить к скриншоту вашего ответа от 17.02.2022 / 16:50 (нижний, с итоговой таблицей) – общие итоги выводятся и по-горизонтали (“Итого” справа) и по вертикали.
    Возможно ли по горизонтали выводить по одной логике – пусть это будет стандартная “Сумма()”, а вот по вертикали – по совершенно другой – например “Максимум()*25”?
    Или же, например – вместо горизонтальных итогов выводить собственную строку, которая бы рассчитывала Максимум() по колонке и умножала на 25 – просто новое поле понятно как завести:) а как его вывести нижней строкой (по примеру “Итого”) и как получать “Максимум()” по колонке?
    Спасибо:)

      • Борис

        Василий, спасибо за ответ:) Помогите пожалуйста дальше развить задачу.
        Можете пожалуйста:
        – Для каждого товара в запрос добавить поле “Цена” и поле “Склад” (например “Основной”)
        – В строках выводить Дату, а в колонках – Склад, в который вложен товар.
        – В ресурсы соответственно добавить Цену
        – И в Настройки – Выбранные поля – добавить новый ресурс “Цена”

        Теперь, если вывести отчет “красные” итоги у товара объединят 2 колонки, разделения “Сумма | Цена” – не будет.
        А в колонке по складу – разделение будет, но итоги будут считаться по сумме, как и “Итого” справа. А у товаров – по максимум. То есть по товарам итоги выбираются по максимуму, а для склада и правого “Итого” – суммируются.

        И вот теперь возможно ли сделать так, чтобы горизонтально, по строкам, суммировалось. А в КАЖДОЙ колонке (Склад, товар А, товар Б, Итого) итоги были разделены на Сумму и Цену и в итоги выводились максимумы по колонке?

        Желаемый вид приведен ниже:)

        Дата | Основной склад | ТоварА | ТоварБ | Итого
        Сумма | Цена Сумма | Цена | Сумма | Цена | Сумма | Цена
        01.01 150 | 60 | 100 | 25 | 50 | 35 | 150 | 60
        02.01 175 | 100 | 200 | 150 | 100 | 40 | 300 | 190
        __
        Итого 175 | 100 | 200 | 150 | 100 | 40 | 300 | 190

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

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

      • Николай

        Василий, добрый день.
        Скажите, по скриншоту: без использования макетов СКД возможно ли заголовок ресурса “Сумма” установить сверху нал периодом и объединить его по всем периодам?

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

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

  13. Vasya

    Добрый день. В скд получаю два поля “дата/время” и “сумма”. Не получается сделать группировку по дням, чтобы выводило весь оборот за день. Группировку поставил, периодичность – день, датаначала и датаконца указаны, ресурс поставлен. Как правильно вывести? Спасибо

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

      Добрый день!
      В настройках компоновки для поля Период можно использовать вложенные поля – так получим группировку по дням:
      Период
      Или еще вариант – добавить в набор данных поле, в котором приводить дату к началу дня. По этому полю и сгруппировать.

  14. elevika

    Добрый день :)
    Подскажите, как сделать условное оформление по значениям полей, которые сами в таблицу не выводятся? Пример: в реквизитах есть два счета. Если их значения не совпадают, то выделять строку цветом. При этом поля со значениями счетов не должны выводится в таблицу

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

      Добрый день!
      На форму добавил таблицу значений с несколькими колонками:
      ТЗ
      На форму вынес только две колонки, но для всех реквизитов таблицы установил галочку Использовать всегда.
      Настраиваю условное оформление на уровне формы:
      Условное оформление
      Программно добавляю строки в таблицу (потому что не все колонки видны). Получается вот такой результат:
      Внешний вид

      • elevika

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

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

          Настройки будут аналогичные.
          Настраиваем условное оформление. В условии используем поля, которые не выводятся в отчет:
          Условное оформление
          Выбранные поля
          Получается вот такой отчет:
          Отчет

          • elevika

            Василий, спасибо за ответ. У меня почему-то так не получается. Настраиваю, как у вас, но выделение работает только в том случает, если в отчет выводятся оба поля, которые участвуют в сравнении. Если же хотя бы одно не выводится, то условное оформление не работает ((
            К сожалению, не могу вставить сюда скрины.
            Может, есть какая-то особенность у сравниваемых полей, которая должна быть обязательной?

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

              Каких-то особенностей не должно быть. Нужно смотреть на конкретном практическом примере.
              В рамках Мастер-группы курса по СКД можно попытаться выяснить причину.
              Попробуйте также воспользоваться консолью компоновки, может она наведет Вас на мысль, в чем причина.

              • Николь

                Вот реально так не работает. если поле не вывости, то условное оформление по его значению не срабатывает.

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

                  Добрый день!
                  Прикладываю схему компоновки отчета с примером со скриншота выше: Оформление.zip
                  Платформа 8.3.23.1912
                  Режим совместимости: Не использовать

                  Возможно, как раз релиз платформы или режим совместимости оказывает влияние на результат.

                  • Николь

                    Спасибо, разобралась. Ваш ответ мне помог. У меня была дополнительная группировка. Так вот, в поля группировки поле добавляем, а в выбранные нет.

  15. Сергей

    Здравствуйте! Скажите, а можно ли вывести отчет, где будут две группировки: Контрагент и Договор, ресурс – сумма. Но вот только в названии контрагента, в той же ячейке через двоеточие будут перечислены значения реквизитов договоров, которые относятся к нему. Это могут быть номера или бренды договоров. Это нужно, например, для того, чтобы не раскрывать контрагента по договорам, а может даже вообще убрать группировку договоров – но информация по ним останется вместе с контрагентом в их группировке.

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

      Добрый день!
      Предлагаю сделать Договор ресурсом:
      Ресурсы
      Настройки компоновки будут выглядеть так:
      Настройки
      Получится вот такой отчет:
      Отчет
      Тогда не придется раскрывать группировку Контрагент, чтобы увидеть договоры по каждому контрагенту.

  16. Екатерина

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

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

      Добрый день!
      Да, можно сделать вложенные колонки в таблице:
      Настройки
      Группировки колонок можно свернуть или развернуть:
      Отчет

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

          Тогда свернуть/развернуть можно будет только строки.
          Можно попробовать полностью самостоятельно выводить табличный документ, воспользоваться методом НачатьГруппуКолонок.

  17. Сергей

    Добрый день!
    Как при сворачивании данных отчета в одну строку все же показывать одинаковые данные в свернутой строке, соответственно неодинаковые – не выводить.

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

      Добрый день!
      Как вариант – программно в обработчике ПриКомпоновкеРезультата сформировать нужные данные в таблице значений, а затем передать таблицу в качестве внешних данных в набор данных – объект.

  18. Николай

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

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

      Добрый день!
      Можно в наименовании характеристики перед записью добавлять суффикс, например, “(доп. реквизит)” или “(доп. свойство)“, чтобы не было путаницы.

      • Николай

        Уже ничего не добавишь, ни в реквизит, ни в характеристику, необозримо внешних отчетов

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

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

          • Николай

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

    • Алексей Катеринич

      Добрый день!

      В Вашем комментарии нет текста или вложенных файлов.

      Обращаем Ваше внимание, что Вы мoжете добавить к комментарию:
      – изображение (JPG, PNG, GIF)
      – архивы (ZIP, RAR)
      – документы и текст (TXT, DOC, DOCX, XLS, XLSX, PPT, PPTX или PDF).

      Из соображений безопасности максимальный размер файла установлен в 10 МБ.

      Проверьте, пожалуйста, что Ваш комментарий соответствует этим требованиям, и опубликуйте его повторно.

  19. Роман

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

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

      Добрый день!
      Можно реализовать поэлементный вывод:

      Функция ВывестиОтчетНаСервере()

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

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

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

  20. wowanama

    Добрый день!
    Несколько лет назад проходил Ваш курс.
    Но как часто бывает, со сложными вопросами столкнулся только сейчас.
    Если сможете ответить, буду очень признателен.
    1. Автопозиция ресурсов – прекрасно работает, когда в отчете только детальные записи. Но когда есть несколько уровней группировки, в том числе без детальных записей, вывести ресурсы и группировочные поля в произвольном порядке – непонятно как. То есть, допустим, “через один” группировочное поле, ресурс и тд. Пробовал добавлять в нужном порядке все поля на вкладке Выбранные поля – не помогает, система выводит поля как ей вздумается. Даже письмо в 1с написал. Вы с такой проблемой не сталкивались?
    2. Можно ли, используя язык системы компоновки данных, организовать следующий расчет ресурса в такой задаче: нужно посчитать количество листов прикрепленных файлов (в бп 3, к договорам, поступлениям и счетам-фактурам). Само количество у каждого файла посчитано и хранится отдельным реквизитом. При этом у каждого файла также есть реквизиты Вид, дата и номер файла (например, УПД, 1, 01.01.20). С одной стороны, к договору прикреплен Договор и доп. соглашение и оба помечены как “договор” от одной даты. С другой стороны, один и тот же УПД прикреплен к поступлению товаров и к счет фактуре и посчитать количество страниц по такому файлу нужно только один раз. То есть, я сначала бы рассмотрел файлы каждого отдельного документа, там сгруппировал их по полям вид, номер и дата, а количество страниц просуммировал (решается проблема договор+доп. соглашение). Дальше, на уровне контрагент+договор я бы взял максимум по каждому виду, номеру и дате (решается проблема двух одинаковых упд, количество страниц посчитается один раз). А затем, на уровне других группировок и общего итога, снова бы просуммировал количество страниц. Задать два выражения для ресурса (у вида, номера, даты, контрагента и договора как Максимум, в другой группировке у остальных полей – как Сумма) не получается – пишет Неоднозначное выражение. Хочется написать “вычислить с группировкой таблица значений”, а потом эту таблицу значений передать в следующее выражение и еще раз, чтобы посчитать сумма+максимум+сумма. Но похоже такое выражение не составить. Тут можете помочь? Спасибо.

    • Алексей Катеринич

      Добрый день.
      К сожалению, на этой странице преподаватели не отвечают на вопросы.
      Вопросы необходимо задавать в Мастер-группе курса на страницах соответствующих занятий.
      Если у Вас закончился доступ в Мастер-группу – необходимо приобрести продление доступа или дополнительный комплект курса.
      Более подробно здесь https://курсы-по-1с.рф/inner/additional-copy/

  21. Алексей

    в теме “Отличия расчета итогов в запросах и СКД”, запрос лучше делать через “объединение”, а не две времен. таблицы + левое соединение, тем более поле “Товар” не проиндексированное в соединяемой таблице. И текст запроса проще и производительность в разы выше.

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

      Добрый день!
      В данном видеоуроке мы рассматриваем разницу в расчете итогов при использовании запроса и при использовании соединения наборов данных.
      Поэтому и предложен такой демонстрационный пример.

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

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

  22. Расим

    Добрый вечер. Случайно нашёл Вас в интернете и очень понравились Ваши видео.
    Подскажите пожалуйста, у меня 1С:Предприятие 8.3 (8.3.12.1855). Я хочу сформировать продажи (за прошлый период) в виде плоской таблице, чтобы далее преобразовать таблицу в сводную.
    Но к сожалению в настройках не могу найти, Каким образом мне вытащить отчёт, чтобы «дата, контрагент, бренд, номенклатура, количество, цена» – были разбиты по столбцам?

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

      Вот как я понял формулировку Вашей задачи.

      В настройках отчета мы указываем тип цен. Это и будет “выбранный тип цен”.
      Затем получаем данные о продажах – какой товар, в какую дату, по какой цене продавался.
      На каждую дату продажи из регистра сведений ЦеныНоменклатуры получаем цену товара на эту дату по тому типу цен, который выбран в настройках отчета.

  23. Дарья

    Добрый день! Подскажите пожалуйста как выполнить данное задание?

    В любой конфигурации, где имеется регистр сведений «Цены номенклатуры» написать отчет в СКД по следующей форме (см. таблицу ниже). Группировка колонок по дням продажи.

    Номенклатура 2/1/2019 2/2/2019 … N
    Цена продажи Цена в выбранном типе цен на дату продажи Отклонение %
    Цена продажи Цена в выбранном типе цен на дату продажи Отклонение %
    Цена продажи Цена в выбранном типе цен на дату продажи Отклонение %
    Цена продажи Цена в выбранном типе цен на дату продажи Отклонение %

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

      Добрый день!
      Чтобы в отчете на СКД получить цену на каждую дату продажи, можно настроить связь двух наборов данных:
      – набор 1 с данными о продажах (должно быть поле с датой продажи)
      – набор 2 с ценами товаров – срез последних по регистру сведений ЦеныНоменклатуры (должен быть параметр виртуальной таблицы – на какую дату получать срез)
      При настройке связи дату продажи из первого набора данных передавать в параметр второго набора данных. Таким образом, для каждой продажи из первого набора данных получим данные о цене при помощи второго набора данных.

      Подробнее такая задача рассматривается в курсе по СКД в видеоуроке 1C-SKD-Topic10-НесколькоНаборовДанных-Lesson170-СрезПоследнихНаКаждуюДату.

  24. Александр

    Добрый день!
    Как настроить оформление (шрифт, центрирование) у заголовка собственной группировки полей ресурсов? Т.е. я группирую поля Остаток в ед. хранения и Остаток в ед. отчета в группу ОСТАТОК. Интересует оформление заголовка самой группы ОСТАТОК.

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

      Добрый день!
      Для этого можно использовать прием из практического задания 17.1 – программная работа с макетом компоновки.
      Создадим в настройках компоновки группу Обороты:
      Группа
      В модуле объекта реализуем собственный вывод отчета, для ячейки со значением Обороты выполним центрирование:

      Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)

          СтандартнаяОбработка = Ложь;
         
          Массив = Новый Массив;
          НастройкиКомпоновки = КомпоновщикНастроек.ПолучитьНастройки();

          КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
          МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиКомпоновки, ДанныеРасшифровки);

          Для Каждого ТекМакет Из МакетКомпоновки.Макеты Цикл

              Если НЕ ТипЗнч(ТекМакет.Макет) = Тип("МакетОбластиКомпоновкиДанных") Тогда
                  Продолжить;
              КонецЕсли;

              Для Каждого Макет Из ТекМакет.Макет Цикл
                 
                  Для Каждого Ячейка Из Макет.Ячейки Цикл
                      Для Каждого Элемент Из Ячейка.Элементы Цикл
                         
                          Если Элемент.Значение = "Обороты" Тогда

                              Параметр = Ячейка.Оформление.Элементы.Найти(Новый ПараметрКомпоновкиДанных("ГоризонтальноеПоложение"));
                              Параметр.Значение = ГоризонтальноеПоложение.Центр;
                              Параметр.Использование = Истина;

                          КонецЕсли;
                         
                      КонецЦикла;
                  КонецЦикла;
                 
              КонецЦикла;

          КонецЦикла;

          ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
          ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);

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

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

      Получится вот такой отчет:
      Отчет

  25. SinO

    Добрый день! Подскажите пожалуйста как передать настройки отбора из внешней обработки во внешний отчет? Я создал внешнюю обработку в ней настроен отбор с помощью компоновщика настроек и СКД, в этой же обработке есть кнопка по нажатию на которую открывается внешний отчет на СКД, все это получилось, но не получается передать сам отбор обработки в отбор отчета.
    Пример: в обработке задано четыре поля отбора (Менеджер, Супервайзер,РегионДоставки,Партнер) к примеру задаем отбор по Супервайзеру тип сравнения может быть различный, далее нажимаем команду по открытию отчета (там отборы по тем же полям) и это поле отбора в отчете должно принять значение отбора или отборов из обработки.
    Подскажите пожалуйста как это реализовать?

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

      Добрый день!
      Предлагаю передать в открываемый отчет пользовательские настройки, в которых установить необходимые отборы из обработки.
      В курсе по СКД в видеоуроке 1C-SKD-Topic17-ПрограммноеФормированиеОтчетов-Lesson090-ПередачаПользовательскихНастроекВФормуОтчета рассматривается похожий пример из УТ 11.
      Это процедура ОткрытьОтчетСертификатыНоменклатуры из общего модуля ОтчетыУТКлиентПереопределяемый.
      В этом уроке рассматривается прием, подходящий для решения Вашей задачи, – как передать заполненные пользовательские настройки в открываемую форму отчета.

      Недавно в комментариях обсуждали похожий пример.

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

  26. Rif

    Добрый день!
    Создаю отчет по продажам с кросс-таблицей Строки – Товар, колонки – ДетальныеЗаписи (СуммаПродаж, СредняяСумма за весть период отчета), Период (СуммаПродаж по месяцам). По товару есть итоговая сумма продаж за весь период отчета. Есть средняя сумма продаж как вычисляемое поле СредняяСумма
    ВычислитьВыражениеСГруппировкойМассив(“Сумма(Сумма)”,”Товар,Период”)
    в ресурсах СредняяСумма = Среднее(СредняяСумма) с расчетом по группировке Товар.
    По строке Товар в колонке детальные записи эта средняя сумма отражается верно
    В группировке Период это же выражение выдает сумму, совпадающую с суммой продаж за период, а мне нужно в колонке период использовать именно среднюю сумму продаж за весь период, чтобы получить разность средней суммы и суммы продаж текущего периода. Так и не нашел как это настроить выражениями СКД. Пришлось делать расчеты в процедуре ПриКомпоновкеРезультата. Такое вообще возможно – во вложенной группировке использовать ресурс вышестоящей группировки, например, для получения дельт с текущим периодом?

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

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

      Вычислить("Сумма(СуммаОборот)", "ОбщийИтог")

      Значит, можно будет подсчитать разницу между оборотом текущего периода и общим итогом.

      • Rif

        Вопрос не в том как посчитать среднюю сумму по товару, а в том как эту среднюю сумму использовать в группировке Период. Объясню детальнее.
        Первая строка таблицы выглядит примерно так:
        ————————————————————————————————————————–
        Товар | Сумма продаж | Средняя сумма | Январь 2020 | Февраль 2020 |
        —————————————————————————————————————————
        Товар 1 | 100000 | 50000 | 40000 | 60000 |
        ————————————————————————————————————————–
        Где сумма продаж – сумма за весь период по Товар1,
        Средняя сумма = сумма продаж / Количество месяцев периода
        Далее суммы продаж по месяцам
        По каждому месяцу нужно получить дельту :
        Средняя сумма – СуммаТекущегоМесяца
        для января – 50000 – 40000, для февраля – 50000 – 60000
        Вопрос состоял в том как в группировке Период (колонка таблицы), обратиться к средней сумме расчитанной по группировке Товар (строка таблицы). Выше я писал выражение для получения средней суммы. По строке Товар выходит правильно.
        А выражение Вычислить(“Сумма(СуммаОборот)”,”ОбщийИтог”), как я понимаю, дает вертикальный итог по всем товарам, а нужен горизонтальный итог каждого конкретного товара в группировке Период, точнее средняя сумма по текущему товару.

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

          Вот теперь с примером стало понятнее, что именно нужно сделать.
          Похожее выражение составляли в видеоуроке курса 1C-SKD-Topic14-Выражения-Lesson100-НарастающийИтогКроссТаблица.

          Добавил 2 вычисляемых поля – Дельта и СредняяСумма. Выражения для ресурсов задал следующие:
          Ресурсы
          Получился вот такой отчет – с отклонениями от средней суммы:
          Отчет

          • Rif

            Спасибо. Получилось. А как можно получить сумму дельт по строке товара? Пробовал в ресурсе Сумма(ВычислитьВыражение….
            Пишет, что использование вложенных агрегатных функций недопустимо.
            Пробую
            ВычислитьВыражение(“Сумма(Дельта)”,”Период”,,”Первая”,”Последняя”)
            где вместо Дельта выражение
            Выбор
            Когда ВычислитьВыражение(“Сумма(Сумма)”,”Период”,,”Первая”,”Последняя”)/(РазностьДат(&НачалоПериода,&КонецПериода,”МЕСЯЦ”)+1) – Сумма(Сумма) > 0
            Тогда POW(ВычислитьВыражение(“Сумма(Сумма)”,”Период”,,”Первая”,”Последняя”)/(РазностьДат(&НачалоПериода,&КонецПериода,”МЕСЯЦ”)+1) – Сумма(Сумма),2)
            Иначе POW(Сумма(Сумма) – ВычислитьВыражение(“Сумма(Сумма)”,”Период”,,”Первая”,”Последняя”)/(РазностьДат(&НачалоПериода,&КонецПериода,”МЕСЯЦ”)+1),2)
            Конец

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

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

              Можно создать еще одно вычисляемое поле СуммаДельт с выражением для ресурса:

              Сумма(СуммаОборот)/(РазностьДат(&НачалоПериода, &КонецПериода, "МЕСЯЦ")+1)*Количество(Различные ПериодМесяц) - Сумма(СуммаОборот)

              Тогда получится вот такой отчет:
              Отчет

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

      • Rif

        Пока выкрутился так:
        ПроцессорВывода.НачатьВывод();
        ЭлементРезультата = ПроцессорКомпоновки.Следующий();
        Пока ЭлементРезультата Неопределено Цикл
        // Макет11 – Товар
        // Макет12 – Колонки перед Периодом
        // Макет13 – Период
        // Макет14 – ГруппаXYZ
        Если ЭлементРезультата.Макет = “Макет11” Тогда
        Товар = ЭлементРезультата.ЗначенияПараметров.П1.Значение;
        ИтСуммаВКвадрате = 0;
        ИначеЕсли ЭлементРезультата.Макет = “Макет12” Тогда
        СредняяСумма = ЭлементРезультата.ЗначенияПараметров.П9.Значение;
        ИначеЕсли ЭлементРезультата.Макет = “Макет13” Тогда
        // ЭлементРезультата.ЗначенияПараметров.П1 – Сумма текущего месяца
        ТекущаяСумма = ?(ЭлементРезультата.ЗначенияПараметров.П1.Значение = NULL, 0 , ЭлементРезультата.ЗначенияПараметров.П1.Значение);
        Разность = ТекущаяСумма – СредняяСумма;
        Разность = ?(Разность < 0, -Разность, Разность);
        ИтСуммаВКвадрате = ИтСуммаВКвадрате + Разность * Разность;
        ИначеЕсли ЭлементРезультата.Макет = "Макет14" Тогда
        Коэф = Sqrt(ИтСуммаВКвадрате/(КоличествоМесяцев-1));
        Если Коэф X И Коэф <= Y Тогда
        ГруппаXYZ="Y";
        Иначе
        ГруппаXYZ="Z";
        КонецЕсли;
        ЭлементРезультата.ЗначенияПараметров.П1.Значение = Коэф;
        ЭлементРезультата.ЗначенияПараметров.П3.Значение = ГруппаXYZ;
        КонецЕсли;
        ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);
        ЭлементРезультата = ПроцессорКомпоновки.Следующий();
        КонецЦикла;
        ПроцессорВывода.ЗакончитьВывод();

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

          Если это позволило решить задачу – отлично.
          Я же затрудняюсь дать какие-либо комментарии по поводу вычислений, которые производятся в данном программном коде.

          • Rif

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

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

              Да, действительно, вчера Ваш комментарий с примером таблицы не был доступен.
              Ответил на вопрос.

  27. Олег

    Добрый день!
    Подскажите пожалуйста как посчитать процент отклонения по сумме продаж между произвольно выводимыми годами, в строках отчета клиенты, а в колонках ПериодГод, к примеру выводим отчет за три года 2018,2019,2020 как тогда сделать настройку в ресурсах, что бы считалось вот так сумма за 2019 г./сумма за 2018 г.; сумма за 2020 г. /сумма за 2018 г. ;сумма за 2020 г./сумма за 2019 г.

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

      Добрый день!
      Пусть у нас есть вот такие исходные данные:
      Исходные данные
      Создадим пользовательские поля, в которых рассчитаем необходимое отношение (хорошо бы еще добавить проверку деления на ноль):
      Пользовательское поле
      Настройки компоновки зададим таким образом:
      Настройки компоновки
      Получится вот такой результат:
      Результат

      • SinO

        Большое спасибо за ответ! Очень помогли!
        Я ведь так и делал только на закладке Ресурсы и у меня ничего не получилось, а сейчас по вашему примеру сделал и все ок. А почему на закладке Ресурсы не получается? Это какая то особенность СКД?

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

          Отлично, что получилось!

          С ресурсом тоже работает. Сделал вычисляемое поле, на закладке Ресурсы для него прописал такое же выражение, как на скриншоте из предыдущего сообщения. Добавил этот ресурс в выбранные поля. И всё тоже работает, как и с пользовательским полем, значения получаются те же.

          • Олег

            Добрый день! Спасибо за ответ!
            А как вывести отбор по ресурсу в кросс-таблице Сумма.ПроцентВГруппе,
            В строках Менеджер и клиент в колонках ПериодГод ресурс Сумма, вывожу в режиме пользователя поле “Сумма.ПроцентВГруппе” расчетным путем рассчитал как он считается сумма по клиенту/сумма по менеджеру получается некоторое значение, теперь пытаюсь наложить отбор на уровне группировки Клиент на это значение и ничего не выходит выводится ошибка “Выражение не может быть вычислено Сумма(НаборДанных1.Сумма)”. Подскажите пожалуйста, что делаю не так? Или это невозможно?

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

              Добрый день!
              Укажите для отбора применение После группировки или для иерархии, тогда ошибка не должна возникать:
              Настройки

      • SinO

        Добрый день Василий! Спасибо за ответ! А как эти расчетные поля вывести не с краю после вывода колонки период, а по некоторому алгоритму вставлять эти колонки в нужные места?
        Например:

        ————————————————————————————————————————————–
        |Контрагент|01.01.2018|2019/2018|01.01.2019|2020/2018|2020/2019|01.01.2020|
        —————————————————————————————————————————————
        |Клиент1 | 100| 2| 200| 2| 1| 200|
        —————————————————————————————————————————————

        наверное просто настройками скд такого не добиться, я пытаюсь полностью программно создать структуру ТаблицаКомпоновкиДанных, но не получается додумать как между выводимыми периодами вставлять произвольные группировки с полями ресурсами,
        например:

        СтандартнаяОбработка = Ложь;

        НастройкиКомпановки = КомпоновщикНастроек.ПолучитьНастройки();

        НастройкиКомпановки.Выбор.Элементы.Добавить(Тип(“АвтоВыбранноеПолеКомпоновкиДанных”));

        ВыбранноеПоле = НастройкиКомпановки.Выбор.Элементы.Добавить(Тип(“ВыбранноеПолеКомпоновкиДанных”));
        ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных(“Сумма”);

        Таблица = НастройкиКомпановки.Структура.Добавить(Тип(“ТаблицаКомпоновкиДанных”));
        Таблица.Использование = Истина;

        Строки = Таблица.Строки.Добавить();
        Строки.Выбор.Элементы.Добавить(Тип(“АвтоВыбранноеПолеКомпоновкиДанных”));
        ПоляГруппировки = Строки.ПоляГруппировки.Элементы.Добавить(Тип(“ПолеГруппировкиКомпоновкиДанных”));
        ПоляГруппировки.Поле = Новый ПолеКомпоновкиДанных(“Партнер”);

        Колонки = Таблица.Колонки.Добавить();
        Колонки.Выбор.Элементы.Добавить(Тип(“АвтоВыбранноеПолеКомпоновкиДанных”));
        ПоляГруппировки = Колонки.ПоляГруппировки.Элементы.Добавить(Тип(“ПолеГруппировкиКомпоновкиДанных”));
        ПоляГруппировки.Поле = Новый ПолеКомпоновкиДанных(“Период”);

        вот здесь каким образом проверять что раз выводимый период МЕЖДУ 2018 И 2019, то нужно вывести расчетную колонку “2019/2018” и далее выводить период и далее снова проверять и выводить “2020/2018” и т.д. Подскажите пожалуйста как правильно сделать? Или я не в том направлении иду?

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

          Добрый день!
          Я бы тоже пробовал программно отключать стандартную обработку, программно создавать все необходимые колонки.
          Для этого получим параметры отчета – начало периода и окончание периода. Смотрим, какое количество годов попало в интервал между началом и окончанием периода (например, 3 года – 2018, 2019, 2020). Используем цикл по годам, на каждой итерации цикла добавляем в структуру отчета колонку с оборотом за год и колонку с рассчитываемым процентом.

          • Олег

            Добрый день! Спасибо за ответ! Когда делаю добавление в итерации у меня выводятся три по три группировки “ПериодГод” и колонки все равно с права выводятся. Я не совсем понимаю как управлять группировкой “ПериодГод” ?добавляю так:
            Колонки = Таблица.Колонки.Добавить();
            // // Колонки.Выбор.Элементы.Добавить(Тип(“АвтоВыбранноеПолеКомпоновкиДанных”));
            // // ПоляГруппировки = Колонки.ПоляГруппировки.Элементы.Добавить(Тип(“ПолеГруппировкиКомпоновкиДанных”));
            // // ПоляГруппировки.Поле = Новый ПолеКомпоновкиДанных(“ПериодГод”);

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

              Добрый день!
              Подробно программное создание группировок рассматривается в уроке 1C-SKD-Topic19-ВстроенныйЯзык-Lesson050-ПрограммноеСозданиеГруппировки курса по СКД.

              Код по добавлению группировки выглядит примерно вот так:

              ГруппировкаТовар = НастройкиКомпоновки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
              ГруппировкаТовар.Использование = Истина;
              ПолеГруппировкиТовар = ГруппировкаТовар.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
              ПолеГруппировкиТовар.Использование = Истина;
              ПолеГруппировкиТовар.Поле = Новый ПолеКомпоновкиДанных("Товар");

              АвтоПоле = ГруппировкаТовар.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
              АвтоПоле.Использование = Истина;
              • Олег

                Добрый день! Спасибо за ответ! Как добавлять группировки я это знаю из вашего курса), там конечно же очень классно многое рассказано и показано! Я наверное не так объяснил.
                Вопрос в другом:
                Я по вашему совету проверяю параметры данных по периоду, смотрю сколько годов попадает в период и создаю массив года,
                далее на каждой итерации добавляю группировку:

                Счетчик = 0;

                Для Каждого ЭлеметМассива Из МассивГода Цикл

                Счетчик = Счетчик + 1;

                Если Счетчик = 1 И ЭлеметМассива = 2018 Тогда

                Колонки = Таблица.Колонки.Добавить();
                Колонки.Выбор.Элементы.Добавить(Тип(“АвтоВыбранноеПолеКомпоновкиДанных”));
                ПоляГруппировки = Колонки.ПоляГруппировки.Элементы.Добавить(Тип(“ПолеГруппировкиКомпоновкиДанных”));
                ПоляГруппировки.Поле = Новый ПолеКомпоновкиДанных(“ПериодГод”); вот здесь на этой итерации по идее должен выводится 2018г, а у меня выводятся сразу 2018|2019|2020| и группировка описанная ниже (проценты):
                Колонки = Таблица.Колонки.Добавить();
                Колонки.Выбор.Элементы.Добавить(Тип(“АвтоВыбранноеПолеКомпоновкиДанных”));
                ПоляГруппировки = Колонки.ПоляГруппировки.Элементы.Добавить(Тип(“ПолеГруппировкиКомпоновкиДанных”));
                ПоляГруппировки.Поле = Новый ПолеКомпоновкиДанных(“Процент_2019_2018”);

                КонецЕсли;
                КонецЦикла;

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

                Счетчик = 0;

                Для Каждого ЭлеметМассива Из МассивГода Цикл

                Счетчик = Счетчик + 1;

                Если Счетчик = 1 И ЭлеметМассива = 2018 Тогда
                // добавляем и выводим 2018
                //Добавляем и выводим процент 2019/2018
                ИначеЕсли Счетчик = 2 И ЭлеметМассива = 2019 Тогда
                // добавляем и выводим 2019
                //Добавляем и выводим процент 2020/2018
                //Добавляем и выводим процент 2020/2019
                ИначеЕсли Счетчик = 3 И ЭлеметМассива = 2020 Тогда
                / добавляем и выводим 2020
                КонецЕсли;
                КонецЦикла;

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

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

                  Добрый день!
                  Если мы добавляем в настройку структуры колонку ПериодГод, то СКД выведет отдельными колонками все попавшие в этот период годы, причем идти они будут подряд, без возможности вклиниться между ними. Что можно сделать?

                  1. Можно сделать отдельные ресурсы – Сумма2018, Сумма2019, Сумма2020 и т.д. Тогда в принципе нам не нужна колонка ПериодГод, нужно только расставить в правильном порядке все выбранные поля.

                  2. Запускаем цикл по годам. На каждой итерации цикла добавляем колонку ПериодГод, в ней устанавливаем отбор (ПериодГод = текущему году). Затем добавляем группировку Детальные записи, где выводим нужный показатель (отношение продаж по годам).

  28. safira

    Здравствуйте. Подскажите, пожалуйста, как можно решить проблему:
    есть Документ с реквизитами – ДатаПроведенияЗанятия, ТемаЛекции и другие. А также имеется табличная часть ПосещениеЛекций, в которой хранятся реквизиты ФИОСтудента и КоличествоПропущенныхЧасов. У одной ТемыЛекции может быть несколько разных ДатаПроведенияЗанятия. Необходимо чтобы в Строках таблицы были ФИОСтудента, по которому считается ресурс по полю КоличествоПропущенныхЧасов, а в Колонках ТемаЛекции, а в ней разделение по ДатаПроведенияЗанятия. Всё, к чему удалось прийти – у Темы указывается Дата, но если у одной темы несколько дат имеется, то тема повторяется, но с разными датами, а хотелось бы чтобы тема была общая, а внутри разделение по датам было

  29. Ильназ

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

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

      Добрый день!
      Можно создать в схеме компоновки вычисляемое поле, для которого указать выражение – как именно рассчитать значение этого поля на основании других полей отчета:
      Вычисляемое поле

      • Ильназ

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

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

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

  30. AnnaS

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

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

      Добрый день!
      Я бы начал расследование проблемы следующим образом – вывел детальные записи со всеми полями (Товар, День, Количество). Возможно, где-то есть строка с пустой датой, поэтому в таблицу и попадает колонка с пустой датой.

  31. Анатолий Скляднев

    Добрый день, как в отчете на СКД вывести 2 одинаковых колонки например 2 колонки Организация, потому что по умолчанию эти колонки схлопываются в одну?

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

      Добрый день!
      Тут нужно искать обходные пути.
      Например, в запросе набора данных продублировать это поле. Будет два поля – Организация и Организация1, они будут нормально выведены в отчет. Для поля Организация1 можно установить заголовок Организация.
      Еще вариант – создать пользовательское поле, где в выражении детальных записей указать имя поля, которое нужно дублировать (в нашем примере – Организация).

  32. Ирина

    Добрый день, в отрывке “Отличия расчета итогов в запросах и СКД” в запросе использовано левое соединение по расходу, вопрос: а если был приход, а расхода не было, в отчет не попадет этот товар? может правильнее использовать полное соединение, а товар проверять на NULL?

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

      Добрый день!
      Всё зависит от точной постановки задачи. Если нужно выводить и приход, и расход, то есть смысл использовать полное соединение или вообще объединение наборов данных.
      Перед нами стоит учебная задача – сравнить результат при использовании 2 механизмов: соединение в запросе и соединения наборов данных в СКД. А в СКД соединения наборов данных всегда левые. Поэтому и в запросе применяли левое соединение.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Вход на сайт

Зарегистрироваться

Подтверждение регистрации будет отправлено на указанный e-mail.

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

Восстановить доступ

E-mail или логин

Ссылка на создание нового пароля будет отправлена на указанный e-mail.