1с скд рассчитывать по не работает

Обновлено: 07.07.2024

Всем доброго дня. Есть отчет на СКД. Настройка и внешний вид отчета на скрине. Никак не могу сделать так, чтобы у ресурсов "количество опрошенных клиентов" и "индекс" отображались общие итоги, хотя итоги по групповым полям отображаются. Также общие итоги отображаются и у колонок с вертикальной группировкой. Очень прошу помощи, уже голова пухнет от этих итогов.

Да, конечно. Рассчитывать по сделано для всех группировок.

Значит, в настройке группировки отключен вывод итогов

У группировок "Ответственный" и "Бизнес-процесс" вообще нет галок на закладке "Другие настройки", кроме как "Авто позиция ресурсов".

У "отчета" корня дерева настроек тоже нет галок на закладке "Другие настройки".

А для общих итогов ресурс указан? Скинь скрин с ресурсами

Пробовал по-всякому, и заполнял "рассчитывать по" указывая все группировки кроме "Вопрос" (вертикальная группировка) и оставлял пустыми - все равно итоги пустые.

выбранные поля для Группировки колонок Вопросы засвети

Боюсь, что это фича СКД, которую можно побороть лишь вводом еще одного группировки Колонок <Детальные записи>, в которой перечислить выводимые поля ресурсов: - количество опрошенных. - индекс

Мне кажется получилось не совсем то что нужно. или я что-то делаю не так?

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

А куда девать то, что все-таки остается слева + и самое главное - смогу ли я при такой компоновке отчета задавать произвольное выражение для общих итогов? Уж сильно меня не пинайте, я не гуру СКД

Не совсем понял. я понимаю, что для группировки "Вопрос" "Вывод общих итогов" - нет, так и было. А для остальных группировок это ничего не дает.

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

из группировки Ответственный, Бизнес процесс выброси все ресурсы

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

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

И только не говорите, что сейчас общие итоги мне нужно считать через вычисляемые поля, используя ВЫЧИСЛИТЬВЫРАЖЕНИЕ.

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

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

Да это уже проехали. везде где можно написано ЕСТЬNULL

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

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

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

(0) Правильно заданный вопрос содержит половину ответа.

А ты попробуй на неверно заданный ответить!

Есть вопрос! Есть ЗУП. 3.1. В нём формирование запросов, например, по кадровому состоянию делается некими процедурами каких-то модулей.
Есть отчёт на СКД, куда вдруг стало необходимым добавить Должности и Подразделения физических лиц, если они когда-либо работали в компании.
Когда кто-то работал в компании, по физлицу НекаяПроцедура.КакоготоМодуля возвращает список всех мест работы (совместителей, уже уволенных, работающих), вертает это всё в виде ВТ_КадроваяЧтототам.
Как такое правильно сопрягать с отчётом на СКД?

(3) для меня простой и понятный вариант выгрузка в объект нужного набора (ВТ_КадроваяЧтототам) и подключение его в схеме СКД как набор Объект.

Вариант сложнее - модификация текста запроса.

И то и другое делается ПриКомпоновкеРезультата

+ к (4) при формировании данных для объекта, можно считать настройки из компоновщика (отборы и параметры), чтобы передать их в нужную процедуру. тем самым поработать чуть-чуть за СКД (в плане отборов).
Так выборка физлиц происходит в момент компоновки, т.е. нужно как-то использовать значения выборки отчёта и прикрутить доп соединение, выполняемое после, а результат дать в макет
Либо, ну это как я вижу - выполнить СКД, получить физлиц, модифицировать СКД - отдать результат.
Что-то мне подсказывается, что вариант в (6) всё же решается стандартными средствами СКД. По варианту (5), который вырождается в (7) - двойное выполнение отчёта, что излишне
(7) есть и такой подход. сейчас постараюсь найти ссылку, где отчет формируется через 2 схемы СКД. первая схема принимает запрос от юзера, далее идет программная обработка, затем данные помещаются во вторую схему.

(12) Реальный вопрос начинается с описания результата - какую проблему надо решить. Когда пишут, что надо в некий отчет добавить некие поля - это уже процесс решения.

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

Говорю это как человек, который сам регулярно пишет отчеты для ЗУП 3.

Бывают такие задачи, когда проще запилить свой отчет на СКД с использованием каких-то процедур ОМ или собственных запросов, чем модифицировать существующий.

(9) не понял где двойное выполнение отчета. функция формирует ВТ только по одному физ лицу? или туда можно передать список?

если можно передать список, то в схеме описываем набор Объект. в ПриКомпоновкеРезультата формируем этой функцией ТЗ (не ВТ), передаем ее в схему. Можно считать настройки отбора, чтобы функция отрабатывала с отборами. Ну и все - выполняем отчет.

Блин недавно читал на ИС хорошую статью где с помощью 2х СКД описывалась методика формирования. НАйти не могу.

(16)Есть вопрос. Самописный, простой отчет без использования всяких универсальных отчетов и общих форм.
В форме отчета, в процедуре ПриСозданииНаСервере в Отчет.КомпоновщикНастроек.ФиксированныеНастройки.Отбор добавляются некие отборы. Типа ограничение доступа к некоторым данным для пользователя.

На предыдущей платформе (8.3.10) этот отчет прекрасно работал.
На платформа 8.3.13.1644 вдруг перестало работать. Отчет выдает пустую таблицу. Помогло только в модуле объекта в процедуре ПриКомпоновкеРезультата отключить СтандартнуюОбработку и написать программное формирование отчета с получением настроек из компоновщика и загрузкой их в компоновщик макета.
Так вот вопрос, что нужно сделать чтобы фиксированные настройки компоновщика в форме применились сразу, без лишних телодвижений в модуле объекта?

Создавал отдельную тему по своему вопросу:

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

Не знаю, многим ли уже довелось столкнуться с ошибкой расчета начальных и конечных остатки по группировкам. Лично мне "посчастливилось", притом неоднократно. Причина, как мне удалось выяснить, кроется в неверных настройках полей данных СКД, важности которых многие начинающие (да и не очень) программисты пока до конца не осознают.

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

Если вы ранее не сталкивались с этой проблемой, то для лучшего понимания ее сути предлагаю воспроизвести ее самим с помощью универсального отчета (по метаданным). Запускаем отчет, выбираем любой непустой регистр накопления с остатками и оборотами, включаем в настройках отчета (скрин1) флажок "Детальные записи", указываем какие-нибудь группировки и добавляем в состав выводимых полей Регистратор. Вуаля - начальные и конечные остатки суммируются по каждой группировке. Получается отчет с абсолютно некорректными цифрами, который показывать пользователям никак нельзя.

Для решения такой проблемы необходимо корректно заполнить настройки полей набора данных СКД - в частности, поле "Роль", которое имеет ключевое значение.

РЕШЕНИЕ интерактивное ( не подходит для Универсального отчета ):

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

Для полей начальных и конечных остатков по каждому из ресурсов необходимо заполнить роль: выбрать группу ролей "Остаток" и в ней указать значение "Нач. остаток" или "Кон. остаток" соответственно. Так ( скрин2 ) это делается в конструкторе СКД.

Аналогичным образом необходимо проставить роль "Измерение" для всех измерений вашего набора данных.

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

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

РЕШЕНИЕ программное (на примере Универсального отчета по метаданным):

Для ролей начальных и конечных остатков по каждому из ресурсов проще всего не изобретать велосипед (все уже написано до нас) и воспользоваться типовой процедурой ЗаполнитьПолеНабораДанныхОстаток() из общего модуля ТиповыеОтчеты. Туда передаете в качестве параметров поле набора данных и имя ресурса, и в результате в наборе данных создается поле остатка с корректно заполненной ролью.

Аналогичным образом при создании полей набора данных для измерений необходимо проставить им роль "Измерение". Код будет примерно следующим:

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

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

Кроме того, в отчет нигде программно не добавляются поля "Номер строки" и "Регистратор". Мне показалось это странным, т.к. в итоговом наборе данных они присутствуют.

Как выяснилось, поля "Номер строки" и "Регистратор" (Recorder) добавляет сама платформа автоматически при инициализации компоновщика настроек. Причем платформа не заполняет роли для создаваемых ею полей, а программно их заполнить не получается, что создает проблемы при дальнейшей работе с ними. Но если эти поля создать "вручную" и программно прописать им правильные роли, то платформа уже не пытается создавать их заново.

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

Вот этот фрагмент кода модуля объекта:

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

UPDATE: мне подсказали в комментариях, что на диске ИТС в свое время вышла статья на эту тему. К сожалению, эта статья прошла мимо меня, но помочь мне в решении проблем с универсальным отчетом она бы смогла лишь отчасти. Увы, заморочки платформы со служебными полями СКД, такими как "Recorder", там также не описаны.

Тем не менее, я нашел на Мисте ссылку на нее и рекомендую ознакомиться, ибо полезно:

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

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


Вопрос №1: “Почему могут быть не доступны варианты отчетов на СКД в пользовательском режиме?”

Несколько раз сталкивался с тем, что варианты отчета, настроенные в конфигураторе, в пользовательском режиме не видны или виден только Основной вариант. Из этого я даже сделал вывод, что больше одного предопределенного варианта делать не имеет смысла. Судя по всему, вывод мой неправильный, в тестовой базе не воспроизводится. Почему могут быть не видны варианты и как это “лечить”?

Ответ

Если такая база базируется на БСП, то тут еще могут влиять механизмы БСП. Например, пользователю по ограничениям доступа недоступен конкретный вариант отчета, поэтому он его и не видит. Также для подсистемы БСП “Варианты отчетов” в общем модуле ВариантыОтчетовПереопределяемый в процедуре НастроитьВариантыОтчетов нужно явно описывать используемые варианты отчетов и запустить приложение с ключом ЗапуститьОбновлениеИнформационнойБазы.

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


Вопрос №2: “Можно ли делать отбор на уровне детальных записей по вычисляемым полям в СКД?”

Ошибка

(нажмите, чтобы увеличить картинку)

Ответ

Ошибка не будет возникать, если для отбора на уровне детальных записей изменить настройку Применение – указать значение “После группировки или для иерархии”:

Исправление ошибки

(нажмите, чтобы увеличить картинку)

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


Вопрос №3: “В каком случае можно установить значения параметров в процедуре ПередКомпоновкойМакета модуля менеджера отчета?”

В видео-уроке есть пример, где параметры отчета определяются и устанавливаются в модуле менеджера этого отчета в процедуре ПередКомпоновкойМакета(). Мне непонятно вот что:

Модуль менеджера

Ответ

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

А в общем модуле БухгалтерскиеОтчетыВызовСервера есть функция ПодготовитьОтчет, в которой содержится следующий код:

Следовательно, в модуле менеджера отчета можно доработать компоновщик, например, установить значения параметров. Инициируется этот вызов в процедуре ПриКомпоновкеРезультата.

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

  1. Это зависит от того, для какой конфигурации разрабатывается отчет. Если конфигурация создается с нуля, то такой метод из модуля менеджера просто некому будет вызвать. Если конфигурация базируется на БСП, то можно “подсмотреть” в типовых отчетах, как они разработаны. Также в документации по БСП, размещенной на сайте ИТС, можно изучить подробное устройство подсистемы Варианты отчетов.
  2. Да, во внешних отчетах и обработках в принципе не существует модуля менеджера.


Вопрос №4: “Как вывести изображение в колонтитулах отчета на СКД?”

Подскажите, есть ли возможность в колонтитулах отчета выводить изображение (например, логотип фирмы)?

Ответ

Да, начиная с платформы 8.3.15 появилась возможность добавить картинку в колонтитул.

В конфигураторе это можно сделать в меню Таблица – Настройки печати – Колонтитулы:

Картинка в колонтитул

(нажмите, чтобы увеличить картинку)


Вопрос №5: “Каким образом можно программно получать настройки отчета на СКД?”

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

Но во многих видео настройки получаются такой строкой:

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

Ответ

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

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

В таком случае из компоновщика получаем настройки, которые уже включают в себя и пользовательские, и фиксированные настройки. С этими “результирующими” настройками компонуем отчет. В методе ПриКомпоновкеРезультата в модуле отчетов чаще всего встречается именно этот вариант

  1. Если нужно взять настройки не из компоновщика, а из схемы компоновки, то воспользуемся настройками по умолчанию:

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

  1. СКД часто используется в обработках – для заполнения ТЧ, списка справочников или документов для обработки. Настройки компоновщика размещаются на форме, пользователь может их редактировать – настраивать отборы по своему усмотрению. А пользовательские настройки в таком случае не используются, поскольку мы не отчет разрабатываем, а всего лишь обработку. Значит, можно взять настройки из компоновщика:
Это примеры разобранных вопросов из Мастер-группы курса
Профессиональная разработка отчетов в 1С 8.3 на СКД .

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

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

Добрый день!
Без данных и конкретного отчета, конечно, трудно определить причину.

Пришла в голову идея, что разные результаты получаются, потому что

Таблица

Пример.

Предполагаю, что разные числа перемножаются, поэтому и результаты разные.

Читайте также: