Подсистема "Универсальные отчеты СКД", версия 1.3.1.4
Разработка - Инструментарий разработчика
Файлы
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний
Оформите подписку на компанию для решения рабочих задач
Оформить подписку и скачать решение со скидкойВы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
Общее описание подсистемы
Подсистема позволяет без изменения конфигурации добавлять в систему новые отчеты, настраивать доступ к ним. Основная идея и некоторые механизмы взяты из подсистемы произвольных отчетов УПП и консолидации.
Задачи, которые позволяет решить данная подсистема
- добавление новых отчетов и изменение существующих без изменения конфигурации
- разграничение прав доступа к отчетам в режиме предприятия
- управление вариантами отчетов: централизованное хранение вариантов (одним вариантом могут пользоваться несколько пользователей), разграничение прав к ним
В архиве находится комплект поставки, а также документация. В комплект поставки входит демонстрационная база, показывающая пример интеграции с другой конфигурацией. В качестве конфигурации-источника используется демонстрационная база от 1С «Примеры 8.1», сконвертированная на 8.2. Подсистема работает в режиме обычного приложения без режима совместимости. Полное описание интеграции подсистемы находится в документации и в файлах поставки.
Функционально подсистема состоит из следующих частей
- Работа с СКД. Блок общих методов работы с системой компоновки данных.
- Произвольные отчеты. Основной механизм, позволяющий разрабатывать отчеты и настраивать к ним доступ без изменения основной конфигурации.
- Типовые отчеты. Механизм отчетов, позволяющий использовать все возможности подсистемы по работе с отчетами.
Работа с СКД
Данные блок состоит из общего модуля «уос _РаботаССКД», в котором описаны общие методы работа с системой компоновки данных. Часть методов используется непосредственно в типовых отчетах, другая часть добавлена для упрощения работы с СКД при создании собственных отчетов.
Произвольные отчеты
Произвольные отчеты позволяют настраивать перечень используемых отчетов и администрировать их. Основой данного механизма является справочник «уос_ПроизвольныеОтчеты», который отражает структуру используемых отчетов.
В качестве произвольного отчета могут выступать:
- Типовой отчет (см. далее)
- Внутренний отчет (внутренняя обработка). В качестве отчета указывается отчет (обработка) из конфигурации.
- Внешний отчет (внешняя обработка). Работает аналогично справочнику «Внешние отчеты и обработки» из типовых конфигураций и позволяет добавлять из файлов внешние отчеты и обработки
Для отдельного отчета и для группы отчетов можно разграничивать доступ. Доступ к отчету (к группе отчетов) можно задавать как для пользователя, так и для группы пользователей (справочник Группы доступа). Если пользователь входит в группу доступа, то у него будет доступ на все отчеты, которые разрешены этой группе. Также доступ можно задавать для любой роли.
Для проверки работы и настройки отчетов администратор может работать с произвольными отчетами от имени любого пользователя, работая в системе под собой. В этом режиме при доступе к произвольным отчетам для администратора накладываются ограничения доступа к произвольным отчетам и менеджеру отчетов: администратор будет видеть то, что видел бы пользователь, работая под своей учетной записью.
Есть возможность обмениваться отчетами между базами с идентичными и аналогичными конфигурациями.
В подсистему встроена возможность вести статистику использования отчетов с возможностью последующего анализа.
Типовые отчеты
Механизм типовых отчетов позволяет без создания новых отчетов (внутренних или внешних) добавлять произвольное число различных отчетов. Суть работы механизма:
- В конфигурации есть отчет «уос_ТиповойОтчет»
- Для каждого нового отчета в справочник произвольные отчеты добавляется новый элемент и настраивается схема компоновки данных (схема хранится как реквизит этого элемента справочника)
- При открытии типового отчета в качестве схемы указывается настроенная схема компоновки.
В результате, при использовании всего одного отчета в конфигурации можно создать неограниченное число разнообразных отчетов.
Для каждого отчета можно создавать неограниченное количество вариантов. К каждому варианту также можно настроить доступ, доступ может быть на использование или на изменение.
Механизм типовых отчетов позволяет использовать стандартные параметры отчетов. Например, в схеме компоновки есть параметр «Организация», а у пользователя есть настройка «Основная организация». В справочнике «Стандартные параметры» добавляем параметр «Организация», описываем алгоритм заполнения, указываем в отчете этот параметр. При открытии отчета автоматически будет заполнен параметр «Организация».
Подсистема позволяет использовать для отчетов наборы данных – объекты. В качестве такого источника может выступать либо другая схема компоновки данных, либо описание таблицы значений, которую пользователь будет заполнять вручную.
Для отчета можно задавать дополнительные расшифровки. Например, в отчет по ценам номенклатуры для поля Номенклатура можно добавить расшифровку, по которой будет открыт отчет «Остатки на складах» по выбранной номенклатуре.
Если для построения отчета не хватает возможностей механизма типовых отчетов, но есть желание использовать возможности типовых отчетов (сохранение и администрирование настроек, расширенное оформление и т.д.), можно воспользоваться шаблоном отчета. В качестве шаблона выступает отчет «уос_ТиповойОтчет». Чтобы создать свой отчет на основе типового отчета, его нужно скопировать, настроить схему компоновки и доработать недостающий функционал.
Заимствованные алгоритмы
В подсистеме используется алгоритм пользователя tormozit для определения высоты шапки отчета //infostart.ru/public/18627/
Отдельное спасибо Evg-Lylyk за возможность создания внешних отчетов в режиме предприятия //infostart.ru/public/16782/, а также mtv:) за решение проблемы с сохранением под 8.2 http://forum.infostart.ru/forum24/topic22468/message423618/#message423618
.
Вступайте в нашу телеграмм-группу Инфостарт
См. также
Разработка Инструментарий разработчика Групповая разработка (Git, хранилище) Разработчик Платные (руб)
Практический курс по работе с AI-агентами для разработчиков 1С уровня middle и senior, а также тимлидов команд: от постановки задач и передачи контекста до создания расширений, интеграций, MCP-инструментов, тестов и проверки готового решения.
50000 руб.
10.09.2026 13385 115 0
Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Разработчик Руководитель проекта 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)
Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы, интерфейс 8.5. Может выполнять свертку одновременно в несколько потоков, а также без непосредственного участия пользователя. Решение в Реестре отечественного ПО.
24900 руб.
20.08.2024 83245 432 171
Инструментарий разработчика Роли и права Запросы СКД Разработчик Руководитель проекта 1С:Предприятие 8 Платные (руб)
Инструменты для разработчиков 1С 8.3 и 8.5: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.
16500 руб.
02.09.2020 285617 1606 423
Инструментарий разработчика Разработка Администрирование веб-серверов Системный администратор Разработчик Аналитик Руководитель проекта 1С 8.3 Платные (руб)
Analyzer 1C сводит выгрузку 1С — основную конфигурацию и все расширения — в единый граф знаний. Любой запрос по связям за доли секунды, с пометками «Доб.» / «Заимств.» / «Переопределено». Новое в 2.0 — обновление поставки: сравнение и объединение версий деревом «как в Конфигураторе» с выгрузкой плана решений; поиск конфликтов из-за перехватов расширений и висячих ссылок; загрузка из бинарных .cf/.cfe; циклические зависимости. Плюс анализ влияния, запросы BSL, роли и RLS, граф вызовов. Минута на развёртывание через Docker без необходимости подключения к Интернет. Любая 1С:Предприятие 8.3+.
14000 руб.
17.04.2026 16742 63 62
Пакетная печать Печатные формы Инструментарий разработчика Разработчик 1С:Предприятие 8 Платные (руб)
Расширение для создания и редактирования печатных форм в системе 1С:Предприятие 8.3. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и прозрачность разработки, а также навести порядок в многообразии корпоративных печатных форм. Обновление версии от 21.04.26
22570 руб.
06.10.2023 44166 122 54
Инструментарий разработчика Нейросети Платные (руб)
Первые попытки разработки на 1С с использованием больших языковых моделей (LLM) могут разочаровать. LLMки сильно галлюцинируют, потому что не знают устройства конфигураций 1С, не знают нюансов синтаксиса. Но если дать им подсказки с помощью MCP, то результат получается кардинально лучше. Далее в публикации: MCP для поиска по метаданным 1С, справке синтакс-помощника и проверки синтаксиса.
15250 руб.
25.08.2025 76837 147 41
Разработка Инструментарий разработчика Разработчик Руководитель проекта 1С 8.3 Платные (руб)
Pilot 1C превращает задачу, поставленную обычными словами, в техническое задание, код на встроенном языке и сценарии проверки. Прежде чем что-то предложить, он сверяется с устройством вашей конфигурации через граф Analyzer 1C: существует ли объект, из чего он состоит, кто его вызывает, какие роли дают права. Чего найти не удалось – спрашивает, а не выдумывает. Готовый код проходит более полутора сотен проверок по справочнику языка и стандартам разработки, который приезжает вместе с продуктом. Модель – ваша: любой сервер, совместимый с программным интерфейсом OpenAI, в том числе локальный. Правки в конфигурацию Pilot не вносит – их применяет разработчик.
18300 руб.
11.09.2026 3707 5 0
Инструменты администратора БД Инструментарий разработчика Роли и права Разработчик 1С:Предприятие 8 1C:Бухгалтерия Россия Платные (руб)
Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.
17000 руб.
10.11.2023 28729 103 46
Но в этом случае ИМХО нельзя ставить для публикации платформу 8.1!
Я именно это подразумевал в (3)
ЗЫ не флудим/не флеймим - все прячу !
НО (5) поправлю (для других)
надо читать так:
и, конечно, я с этим не согласна, просто нужно создать еще один раздел - "для управляемых форм".
в ... C:\Users\пользователь\AppData\Roaming\tmplts\_drb\UOS\1_1_10_1
добавьте, пожалуйста, документацию непосредственно в zip
- подсистема обновлена до версии 1.1.10.2 (исправлены мелкие ошибки)
- в демобазе с примером объединения добавлены новые отчеты с примерами работы с подсистемой
- в архив добавлена документация
- по картинкам не уверен, что это будет востребованным. Если будет много желающих, добавлю
- версия для управляемого приложения планируется, если сроки не сдвинутся - будет в течение 3-х месяцев
- реструктуризация общих модулей планируется при переводе на управляемое приложение. А чем мешает жить 9 общих модулей?
Но.
Сходу сравнил удобство настроек структуры с универсальным отчетом по метаданным в Бух 2.0:
настройка полей, группировок, отборов и т.д. в типовой реализована намного интереснее и юзабельней
там существует 2 режима настроек,
первый позволяет очень быстро сформировать структуру отчета тасканием мышкой доступных полей,
про втрой расширенный режим говорить не буду, 90% пользователей его не поймут
Как я понял твоя панель настроек нужна для упрощенной настройки структуры, она серьезно не дотягиевает до типовой реализации.
Так что потенциал у СКД и произвольных отчетов просто неисчерпаем...
1) если тип периода Дата
- Период - конец дня указанной даты
- ПериодДляОстатков - если дата пустая, то пустая дата, иначе начало следующего дня
2) если тип периода Интервал
- Период - равен дате окончания
- НачалоПериода - равно дате начала
- КонецПериода - равен дате окончания
- ПериодДляОстатков - если дата окончания пустая, то пустая дата, иначе начало следующего дня
3) всегда
- ПустойПериод - дата '00010101'
- МаксимальныйПериод - дата '39991231'
Примечания
1) ПериодДляОстатков используется в тех случаях, если в запросе используется виртуальная таблица остатков. Если использовать дату конца дня, то в виртуальной таблице не будут учтены движения на последнюю секунду дня. Решения в этом случае 2: либо в качестве периода передавать границу с видом границы "Включая", либо использовать дату начала следующего дня. Был выбран второй вариант.
2) Параметр Период устанавливается даже если тип периода Интервал. Это необходимо в тех случаях, когда в запросе используются одновременно отбор по интервалу (например, виртуальная таблица оборотов) и отбор по дате (например, виртуальная таблица срез последних по периодическому регистру сведений). Конечно, в запросе можно переопределить период среза последних (чтобы использовался параметр КонецПериода), но так гораздо удобнее.
3) ПустойПериод и МаксимальныйПериод нужны для того, чтобы в самом запросе не использовать конструкции ДАТАВРЕМЯ(1, 1, 1) и ДАТАВРЕМЯ(3999, 12, 31)
4) Если в отчете используется дополнительный период, то в имена параметров добавляется окончание "Доп". Например, если в отчете используется дополнительный период с типом Интервал и окончание периода указано 02.06.2011, то система попытается установить для параметра "КонецПериодаДоп" значение '20110602235959'. Дополнительный период используется в тех случаях, когда в запросе необходимо сделать отбор по разным периодам (например, период анализа и период расчета могут быть разными).
В следующей версии этот момент будет учтен в справке.
Например:
ВЫБРАТЬ
РасходИзКассы.Ссылка
ИЗ
Документ.РасходИзКассы КАК РасходИзКассы
ГДЕ
РасходИзКассы.Дата МЕЖДУ &НачалоПериода И &КонецПериода1. установил шаблоны
2. создаю базу на основе шаблона "Универсальные отчеты СКД" и получаю ошибку:
Ошибка при создании информационной базы:
Создание информационной базы (тут путь) успешно завершено
Структура конфигурации несовместима с текущей версией программы.
Использую 1С 8.2.13.205.
Что я делаю не так?
P.S.: с шаблоном "Универсальные отчеты СКД (демо)" база создалась... однако при попытке запуска выдала сообщение "Структура конфигурации несовместима с текущей версией программы"
+ после конвертации на 8.2 нужно закомментировать одну строку (в файле Интеграция с другими конфигурациями.doc указано где именно)
видимо, где-то чего-то не хватает :D
Отдельной документации по работе с подсистемой нет, только встроенная справка. + можно посмотреть примеры из демонстрационной базы
Какая именно инструкция интересует? Какой информации не хватает для использования подсистемы?
К тому же, в отличие от произвольных отчетов в типовых конфигурациях, группировками на панели можно управлять, даже если в какой-либо группировке присутствует несколько полей группировок, либо на уровне самой группировки заданы настройки (отбор, оформление, упорядочивание и т.п.). В этом случае напротив такой группировки отображается специальная картинка.
Да, это возможно, но хотелось бы узнать:
1) как лучше хранить эту информацию: для конкретной настройки отчета (будет применяться для всех пользователей, которые откроют данную настройку) или для отчета в целом (каждый пользователь может настроить для себя, но применяться эти настройки (отображение заголовков и пр.) будут для всех настроек отчета)?
2) насколько часто пользователи используют настройку "Отображать сетку" и для каких целей?
Основное отличие: подсистема дает гораздо больше инструментов для создания отчетов в режиме предприятия (не нужно изменять конфигурацию или создавать внешние отчеты). Об основных возможностях можно прочитать в документации.
На выходных планирую выложить новую версию подсистемы и обновленную документацию, в том числе будет добавлен FAQ с небольшими примерами, демонстрирующими основные возможности подсистемы. Если успею, подготовлю краткое сравнение с произвольными отчетами из УПП и Консолидации.
И присоединяюсь к вопросу:
Можно ли в двух словах пояснить существенные отличия от "Произвольных отчетов" УПП и КА?
Отличный инструмент не только для разработчиков, но и для продвинутых пользователей.
Из пожеланий есть такое: программно генерировать кнопки уровней отчета ( Очень удобно в работе.
С интересом ждем развития.
Если ничего не изменилось, то без рейтинга можно скачать один файл в день, подсистема со всей документацией выкладывается как раз одним архивом.
С решением можно не только ознакомиться, но и использовать абсолютно бесплатно.
Если ничего не изменилось, то без рейтинга можно скачать один файл в день, подсистема со всей документацией выкладывается как раз одним архивом.
походу что-то изменилось... с рейтингом в 30 центов уже нельзя скачать ничего бесплатно :evil:
походу что-то изменилось... с рейтингом в 30 центов уже нельзя скачать ничего бесплатно:evil:
Действительно, 30 центов мало, нужен целый бакс :D
На время тестирования новой политики скачивания действует альтернативная ссылка
Кстати, это новая версия 1.2.3.3
СКД изучать все-равно придется, можно начать с книжки Хрусталевой (. В сети можно найти отсканированный вариант.
Чтобы использовать подсистему вместе с реальной базой, их нужно объединить. Описание объединения приведено в документации.
При всеобщем интересе к СКД и достаточной убогости доукментации к СКД Разработка черезвычайно полезная.
Автору огромное спасибо и будем ждать новых доработок и развития...
Плюсую и рекомендую как помощь в освоении СКД
проблема 1: если выделять ячейки удерживая Ctrl, то кликая на одной и той же ячейке несколько раз получаешь каждый раз увеличение суммы
проблема 2: если выделить целиком строку или столбец, то результат = 0
Из этих обсуждений я для себя скомпилировал путем проб и ошибок такой вот рабочий вариант, который предлагаю взамен того, что есть сейчас.
// Рассчитывает сумму выделенных ячеек табличного документа.
//
Функция ПолучитьСуммуВыделенныхЯчеек(ТабличныйДокумент)
Сумма = 0;
// В свойстве ТД.ВыделенныеОбласти могут быть повторы.
// Чтобы избавиться от них, выберем их через соответствие
ТаблицаОбластей = Новый Соответствие;
Для Каждого Область Из ТабличныйДокумент.ВыделенныеОбласти Цикл
Если ТипЗнч(Область) = Тип("ОбластьЯчеекТабличногоДокумента") Тогда
Верх = ?( ЗначениеЗаполнено(Область.Верх), Область.Верх, 1 );
Низ = ?( ЗначениеЗаполнено(Область.Низ), Область.Низ, ТабличныйДокумент.ВысотаТаблицы );
Лево = ?( ЗначениеЗаполнено(Область.Лево), Область.Лево, 1 );
Право = ?( ЗначениеЗаполнено(Область.Право), Область.Право, ТабличныйДокумент.ШиринаТаблицы );
Для ИндексСтрока = Верх По Низ Цикл
Для ИндексКолонка = Лево По Право Цикл
ТаблицаОбластей.Вставить( ТабличныйДокумент.Область("R" + Формат(ИндексСтрока, "ЧГ=0") + "C" + Формат(ИндексКолонка, "ЧГ=0")).Имя, Истина );
КонецЦикла;
КонецЦикла;
КонецЕсли;
КонецЦикла;
Для каждого Область Из ТаблицаОбластей Цикл
Попытка
Сумма = Сумма + Число(СтрЗаменить(ТабличныйДокумент.Область(Область.Ключ) .Текст, " ", ""));
Исключение
КонецПопытки;
КонецЦикла;
Результат = Новый Структура;
Результат.Вставить("Сумма", Сумма);
Результат.Вставить("КоличествоСтрок", ТаблицаОбластей.Количество());
Возврат Результат;
КонецФункции
утомляет во всех отчетах настраивать колонтитулы.
В стандартных конфах есть настройка, позволяющая задать колонтитулы по умолчанию. Здесь бы тоже парку кнопок: одну "сохранить как настройку по умолчанию", другую "заполнить по умолчанию". И чтобы для новых отчетов настройка по умолчанию автоматически применялась... или еще как.
(В стандартном справочнике групп пользователей есть предопределенный элемент "Все пользователи" - очень удобно, когда отчет надо дать всем)
За идею с предопределенным элементом "Все пользователи" - спасибо.
я сейчас использую другую подсистему отчетов, скомпилированную мной из разных типовых. В чем-то она мне больше нравится, в чем-то Ваша.
Что у меня есть полезного (на мой взгляд, конечно) - пользователь имеет некий сохраненный вариант структуры и настроек отчета. В рамках этой настройки он может выставить один отбор, потом поубирать флажки и выставить другой отбор.... в общем поигрался и закрыл отчет. При закрытии для его версии настроек запоминается последний установленный период и отборы. Если было изменение структуры отчета, то задается вопрос о необходимости сохранения структуры.
У Вас если явно не сохранить настройку и выйти, то настройки отборов канут в лету...
С периодом у Вас интереснее, но не всегда есть смысл делать жесткую предопределенную настройку... может быть дать пользователю инструменты такие как флажки:
- "Сохранять текущие отборы при выходе"
- "Сохранять последний период(ы) при выходе"
Появляется когда вызываеш через менеджер отчетов внутренний отчет.
Там у Вас в коде условие только для обработок прописано, а для отчетов нет - вот и попадает туда куда не должно попадать.
Дальше еще одна ошибка вылазит с внутренним отчетом - сейчас код не могу привести.
Раньше пользовался возможностями стандартного универсального отчета и до сих пор его возможностей хватало.
Но появилась задача написать отчет "5 в 1" (пять отчетов объединить в один мегаотчет).
На построителе осилил только "2 в 1" :-(, а на компоновке удалось соединить все так как надо.
Автору разработки благодарность за то что "вдохновил" освоить СКД.
уос_ТиповыеОтчеты.ОткрытьВнутреннийОтчет(ИмяОтчета, ИмяВарианта = "", НачальныйОтбор = Неопределено, СформироватьПриОткрытии = Ложь)
НачальныйОтбор - структура, Ключ - имя поля, Значение - значение отбора. Вид отбора - равно.
Чтобы можно было открыть отчет программно, нужно установить флаг "Внутренний отчет" и указать имя отчета.
1) да, чтобы открывать отчет программно, нужно добавить его в конфигурации. Так как конфигурация уже изменяется, то в этом нет никакой проблемы.
2) чтобы выбрать имя объекта метаданных в варианте отчета, нужно в конфигураторе для отчета добавить макет, имя у макета должно начинаться с "Вариант". В самом макете ничего указывать не нужно, важно лишь название макета, именно по нему открывается внутренний отчет.
НачальныйОтбор = Новый Структура;
НачальныйОтбор.Вставить("Ключ","Номенклатура");
НачальныйОтбор.Вставить("Значение",ТекущиеДанные);
Если ТекущиеДанные.ЭтоГруппа = Ложь Тогда
НачальныйОтбор.Вставить("ВидОтбора","Равно");
Иначе
НачальныйОтбор.Вставить("ВидОтбора","ВГруппе");
КонецЕсли; - так не работает.
НачальныйОтбор = Новый Структура;
НачальныйОтбор.Вставить("Номенклатура", ТекущиеДанные);
Если нужно задавать любой вид отбора (в группе, не равно), то реализую в следующей версии.
Вот ещё хотел у Вас спросить, возможно ли мне реализовать следующее, пользуясь возможностями подсистемы?
Есть отчет (во вложении), который выводит в виде таблицы информацию по остаткам, продажам и т.д.:
Задача заключается в том, чтобы расставлять нормы прямо из отчета(норма для склада хранится в табличной части справочника "Номенклатура" с реквизитами "Склад", "Норма"...) 0 или 1. Задумка у меня была такая: создать дополнительную расшифровку для ячейки "Норма" и при выборе пункта "Изменить норму", изменять её для текущей номенклатуры, склада. Пытался сделать но столкнулся со следующими моментами:
1) На поле компоновки "Норма" не вешается дополнительная расшифровка(указываю поле, но пункт не появляется). Нельзя использовать для ресурса?
2) Непонятно, как мне получить информацию о группировочных полях (Номенклатура, Склад) для которых меняется норма.
3) Как отлаживать код, который используется в "Произвольном алгоритме"?
Период в запросах компоновки нужно задавать немного иначе (обратите внимание на фигурные скобки). К тому же, лучше параметры компоновки задавать на закладке "Параметры", а не использовать в запросе выражение "КОНЕЦПЕРИОДА".
РегистрСведений.ЦеныНоменклатуры.СрезПоследних({(&КонецДня)}, ТипЦен = &ТипЦен)
Да, это возможно, пример в прикрепленном файле.
В отладчике посмотрел, в выделенной строке значение, получаемое из хранилища, неопределено:
В отладчике посмотрел, в выделенной строке значение, получаемое из хранилища, неопределено:
Нужен сам отчет. Приложите такой же файл, как вчера.
Я самостоятельно поправил возможность выбора вида отбора(чтоб можно было указать тип сравнения со значением, переданным для отбора) и добавил возможность передавать параметры в отчет. Если вам интересно, я могу выложить поправленный код.
а) Выбор периода пользователем;
б) Выбор конкретных дат.
Или отчет по провалам, который делаться должен <= за календарный месяц.
а) Выбор периода пользователем;
б) Выбор конкретных дат.
Или отчет по провалам, который делаться должен <= за календарный месяц.
Приведите пример с цифрами, чтобы было более понятна решаемая задача.
Процедура ОУЗ_РасчетНеликвидовПоФирме()
СписокСкладовФильтра = Новый СписокЗначений;
СписокСкладовФильтра.Добавить(Справочники.Склады.НайтиПоНаименованию("010102 Склад Кемпинг Силикатная 20"));
СписокСкладовФильтра.Добавить(Справочники.Склады.НайтиПоНаименованию("010103 Склад Одежда Силикатная 20"));
СписокСкладовФильтра.Добавить(Справочники.Склады.НайтиПоНаименованию("010104 Склад Комлектации Силикатная 20"));
СписокСкладовФильтра.Добавить(Справочники.Склады.НайтиПоНаименованию("31 Магазин ""На Бресткой"""));
СписокСкладовФильтра.Добавить(Справочники.Склады.НайтиПоНаименованию("32 Магазин ТЦ ""XXL"" (Юрина)"));
СписокСкладовФильтра.Добавить(Справочники.Склады.НайтиПоНаименованию("33 Магазин ""На Докучаево"""));
СписокСкладовФильтра.Добавить(Справочники.Склады.НайтиПоНаименованию("34 Магазин ТЦ ""Европа"""));
СписокСкладовФильтра.Добавить(Справочники.Склады.НайтиПоНаименованию("35 Выставочный зал (кэш энд кери)"));
СписокСкладовФильтра.Добавить(Справочники.Склады.НайтиПоНаименованию("50 Новосибирск"));
СписокСкладовФильтра.Добавить(Справочники.Склады.НайтиПоНаименованию("70 Москва"));
СписокСкладовФильтра.Добавить(Справочники.Склады.НайтиПоНаименованию("я0101 Склад Силикатная 20"));
СписокСкладовФильтра.Добавить(Справочники.Склады.НайтиПоНаименованию("яОвчинников В (Дискавери)"));
СписокСкладовФильтра.Добавить(Справочники.Склады.НайтиПоНаименованию("яВеселова Силикатная 20 (XXL Скаут-V)"));
СписокСкладовФильтра.Добавить(Справочники.Склады.НайтиПоНаименованию("яОвчинников В (Дискавери)"));
СписокСкладовФильтра.Добавить(Справочники.Склады.НайтиПоНаименованию("яВеселова Силикатная 20 (XXL Скаут-V)"));
СписокСкладовФильтра.Добавить(Справочники.Склады.НайтиПоНаименованию("яВеселова Силикатная 20 (Дискавери)"));
СписокСкладовФильтра.Добавить(Справочники.Склады.НайтиПоНаименованию("яОвчинников В (Дискавери)"));
СписокСкладовФильтра.Добавить(Справочники.Склады.НайтиПоНаименованию("яВеселова Силикатная 20 (XXL Скаут-V)"));
СписокСкладовФильтра.Добавить(Справочники.Склады.НайтиПоНаименованию("яВеселова Силикатная 20 (Дискавери)"));
СписокСкладовФильтра.Добавить(Справочники.Склады.НайтиПоНаименованию("яВеселова Силикатная 20 (Скаут-2)"));
СписокСкладовФильтра.Добавить(Справочники.Склады.НайтиПоНаименованию("яВеселова Силикатная 20 (Скаут-5)"));
СписокСкладовФильтра.Добавить(Справочники.Склады.НайтиПоНаименованию("яАтака (Силикатная, 20)"));
////---------15.10.2012 14:57:02-------------------------------------------------
СписокНоменклатурыФильтра = Новый СписокЗначений;
СписокНоменклатурыФильтра.Добавить("Фонтан Маска Р4060");
СписокНоменклатурыФильтра.Добавить("Лысенко И.В.");
СписокНоменклатурыФильтра.Добавить("Жесткая сцепка");
СписокНоменклатурыФильтра.Добавить("яяя-Старые разделы");
СписокНоменклатурыФильтра.Добавить("яяя_Товары для рыбалки-старые");
СписокНоменклатурыФильтра.Добавить("Старая номенклатура");
СписокНоменклатурыФильтра.Добавить("Продукты");
СписокНоменклатурыФильтра.Добавить("НОВАЯ РЫБАЛКА");
СписокНоменклатурыФильтра.Добавить("Контейнер");
СписокНоменклатурыФильтра.Добавить("Керамогранит и гипсокартон");
СписокНоменклатурыФильтра.Добавить("Вспомогательная");
//---------15.10.2012 14:57:08-------------------------------------------------
КонецПериода = НачалоДня(ТекущаяДата()) - 3*24*60*60;//Три дня назад
Запрос = Новый Запрос(ТекстЗапросаНеликвиды());
Запрос.УстановитьПараметр("НачалоПериода",ДобавитьМесяц(НачалоДня(КонецПериода),-12));
Запрос.УстановитьПараметр("КонецПериода",НачалоДня(КонецПериода));
Запрос.УстановитьПараметр("СобственныеКонтрагенты",Справочники.Контрагенты.НайтиПоНаименованию(" Собственные контрагенты"));
Запрос.УстановитьПараметр("ОптовыйСклад",Справочники.Склады.НайтиПоНаименованию("01 Оптовые склады (Силикатная)"));
Запрос.УстановитьПараметр("ДнейОграниченияСверхнормативногоЗапаса",180);
Запрос.УстановитьПараметр("Менеджер",Справочники.Пользователи.НайтиПоНаименованию("Баранов"));
Запрос.УстановитьПараметр("ДнейЛиквидности",180);
Запрос.УстановитьПараметр("СписокСкладовФильтра",СписокСкладовФильтра);
Запрос.УстановитьПараметр("СписокНоменклатурыФильтра",СписокНоменклатурыФильтра);
тз = Запрос.Выполнить().Выгрузить();
Если День(ТекущаяДата()) = 3 Тогда
Для Каждого стр Из тз Цикл
Объ = стр.Номенклатура.ПолучитьОбъект();
Если Объ.Ликвидность = стр.ГруппаЛиквидности тогда
Продолжить;
КонецЕсли;
КонецЦикла;
Объ.Ликвидность = стр.ГруппаЛиквидности;
Попытка
Объ.Записать();
Исключение
КонецПопытки;
КонецЕсли;
ИмяФайла = СтРЗаменить(СокрЛП(Год(КонецПериода)),Символы.НПП,"")+?(СтрДлина(Месяц(КонецПериода))=1,"0"+Месяц(КонецПериода),СокрЛП(Месяц(КонецПериода)))+?(СтрДлина(День(КонецПериода))=1,"0"+День(КонецПериода),День(КонецПериода));
ЗначениеВФайл("N:\NetDoc\Зеленкин\Неликвиды\"+ИмяФайла+".pdbf",тз);
т = ЗначениеИзФайла("N:\NetDoc\Зеленкин\Неликвиды\"+ИмяФайла+".pdbf");
КонецПроцедуры ПоказатьА отчет во вложении строит набор данных объект из таблиц за обе даты.
Задача интересная, но пока не вижу как её можно красиво решить.
1) Изменять схему при открытии отчета - слишком глобально
2) На форме расположена таблица параметров, но не охота вмешиваться в её работу с помощью обработчиков, можно всего не учесть
3) Можно выводить параметры на форму (как это сделано с периодами), но это будет только в управляемых формах, в обычных такого не будет
Если у Вас есть ещё какие-нибудь варианты - предлагайте.
На основе этого списка получаю запросом необходимые данные и обрабатываю их на клиенте а потом передаю во внешний набор данных. Если по всей номенклатуре делать, то долго выполняется и нагружает сервер.
Данная вкладка была убрана в связи с редким использованием. Подскажите, насколько часто ваши пользователи используют эту вкладку?
Понятно. Рассмотрю возможность возвращения этой вкладки на панель отчета.
Так как этот функционал довольно специфичен, инструкции нет, но есть видеоуроки. Они находятся в файлах шаблонов конфигурации (tmplts).
krv2k, не подскажете, как вызвать из одного произвольного алгоритма другой произвольный алгоритм. Мне нужно из алгоритма источника данных вызывать процедуры, описанные в произвольном алгоритме. В документации не нашел, как это сделать. Спасибо!
Так сделать нельзя. У каждого алгоритма свой контекст вызова, другие алгоритмы в нём вызывать нельзя.
Опишите задачу, которую пытаетесь решить. Возможно, есть другой способ решения.
1. в справочники произвольные отчеты не могу добавить отчеты кнопка добавления не отрабатывает, получается что создать самому отчеты у меня просто категорически не получается
2. удалось у меня загрузить из ХМЛ отчеты появились они в этом справочнике , даже открываются и отрабатывают, но вот проблема в том что кнопка редактирования в панели не отрабатывает ..
поясните в чем проблема , может я роли не те присковил , хотя пробвал разные комбинации, может что - то еще не учитываю
ОбщийМодуль.уос_ОбщиеФункцииПодсистемы.Модуль(1090,20)}: Переменная не определена (уос_ТаблицаПодключений)
{ОбщийМодуль.уос_ОбщиеФункцииПодсистемы.Модуль(1117,24)}: Переменная не определена (уос_ТаблицаПодключений)
...и эта переменная действительно нигде не определена в используемых методах этого общего модуля, кроме одного ПриНачалеРаботыСистемы(). Кто нибудь сталкивался с ошибкой?
Но эта подсистема - прям бальзам на мою вредную душу эстета. Использую уже больше года. На проектах внедрения УПП в обязательном порядке. Все штатные отчёты по РАУЗ переписаны под неё, наращены вариантами и стали наконец-то рабочими инструментами, за которые не стыдно. Про всевозможные контрольные отчёты и говорить не приходится, скорость разработки и модель прав доступа "по понятиям" позволяют штамповать их пачками на все случаи жизни.
Руслан, спасибо огромное за такой качественный инструмент! И в связи с предстоящим в 2014 году масштабном переходе 1С:Бух в управляемые формы, советую заняться разработкой коммерческой версии под УФ. Судя по сложившейся тенденции разработчиков 1С в самую последнюю очередь думать о юзабельности отчетной подсистемы (а в текущих версиях УТ, Докоборота, УНФ и т.п. отчеты реально уродливы!!!), твоя разработка "рискует" стать хитом продаж...
Версия на УФ планируется уже давно, но пока на неё нет времени. Вопрос по платности открытый.
На счет платности - не тушуйся.
Сделай просто две версии: базовую (бесплатную с основным функционалом) и ПРОФ (платную с разными вкусняшками).
Просто не делай из базовой триалку. Любители халявы и так ничего не заплатят, а вот заинтересованность в приобретении расширенной платной версии у настоящих профессионалов можно вызвать только "подсадив" их на базовый продукт.
А те, кто покупают разработки на Инфостарте, покупают не саму разработку, а право ею легально пользоваться и получать техподдержку. Они также могут поискать "ломанные" версии, но оно им не нужно.
Законодательство сейчас переходит на "нашу сторону" (созидателей), желание запиратить при условии адекватной цены уже возникает у гораздо меньшего количества людей. Сделай хороший продукт (а ты уже показал, что умеешь это), грамотное лицензионное соглашение на право пользования и народ будет покупать (я буду первым ;) ).
P.S. Да и что ты в конечном итоге теряешь, если сам сейчас задумываешься над вопросом, стоит или не стоит делать платную версию? Ведь всё равно же планируешь писать продолжение, так попробуй же на нём и заработать. Удача любит смелых... Брин и Пейдж тому подтверждение... Они вообще не задумывались, на чём будут зарабатывать деньги.
Из описания справочника:
"Для выполнения в рамках системы своих функциональных обязанностей сотруднику требуется определенный набор полномочий - комбинация:
- прав доступа к объектам (определяется ролями)
-прав к функциональным возможностям программы (определяется доп. правами)
Профиль полномочий пользователя (далее – просто профиль) – совокупность полномочий (ролей и дополнительных прав), необходимых для выполнения пользователем конкретных функциональных обязанностей в рамках системы.
Примеры профилей:
- Менеджеры по продажам: ввод документов продажи (с правом отражения документов в регл. учете)
- Кассиры: ввод кассовых документов
- Старшие кассиры: ввод кассовых документов, ввод заявок на расходование денежных средств
Как правило один профиль включает несколько ролей и дополнительные права.
Каждому пользователю назначается только один профиль. Назначение профиля приводит к тому, что пользователь получает полномочия определяемые профилем."
Вот желательно было бы чтобы можно было настраивать доступ к отчетам по профилям полномочий пользователей.
1) создаём такие группы доступа, какие Вам нужны профили
2) каждого пользователя включаем в какую-нибудь одну группу
3) для каждой группы доступа настраиваем доступ к необходимым отчетам
Или я Вас неправильно понял?
Я думаю сейчас этот типовой функционал разграничения прав доступа имеется практически во всех
типовых конфигурациях 1С. Я например использую конфигурацию УПП, и в ней этот функционал присутствует.
Мне кажется большинство пользователей которые используют или будут использовать вашу подсистему,
скажут вам лишь спасибо за такую доработку.
Самодостаточность подсистемы от этого не пострадает - всегда ведь можно проверить в конфигурации по метаданным наличие справочника "ПрофилиПолномочийПользователей".
И если его нет не показывать на закладке "Доступ" соответствующую панель.
На закладке "Доступ" в дополнение к закладкам "Пользователи", "Группы доступа" и "Роли" добавить закладку "Полномочия".
Но если вам это кажется нецелесообразным, то придется "допиливать" самому.
Это придется делать двойную работу - назначать допустим новому пользователю профиль полномочий или менять профиль у уже существующего пользователя, и параллельно с этим перенастраивать группы доступа к отчетам.
При этом нужно еще всегда помнить что при смене профиля нужно еще менять группы доступа.
1) в УПП есть профили "Менеджер по закупкам", "Менеджер по продажам".
2) в УОС создаём две группы доступа: "Менеджер по закупкам", "Менеджер по продажам", в каждой из них указываем к какому профилю она относится.
3) для каждой группы доступа настраиваем права на отчеты.
4) если мы создаём нового пользователя и назначаем ему какой-то профиль, то ничего менять больше не нужно, ведь в группе доступа есть ссылка на этот профиль и пользователю будут доступны все отчеты, которые доступны другим членам этого профиля.
А случай такой. В конструкторе запроса СКД есть закладка "Характеристики".
Если там все настроить как надо, то для вывода в отчет будут доступны например не только реквизиты справочника "Контрагенты", но и свойства относящиеся к элементам этого справочника.
И вот когда отчет сформирован, и я пытаюсь сделать расшифровку, то получаю ошибку:
"{ОбщийМодуль.уос_РаботаССКД.Модуль(873)}: Ошибка при вызове метода контекста (Вставить)
СтруктураПолейРасшифровки.Вставить("" + СтрЗаменить(ПолеРасшифровки.Поле, ".", ""), ПолеРасшифровки.Значение);
по причине:
Задано неправильное имя атрибута структуры"
В общем-то причина ошибки ясна. Для реквизитов справочника "Контрагенты" значение поля выглядит как "Контрагент.ИНН".
А вот для свойств значение выглядит как "Контрагент.[Регион]".
Т.е. присутствуют квадратные скобки. А они не допустимы в ключе структуры.
Теперь вопрос - как это обойти? Наверное вместо структуры придется использовать Соответствие.
Оно не ругается на строку с квадратными скобками в качестве ключа структуры.
А ошибку, которая в (240) выявлена, трудоемко исправлять самим, или легче дождаться новой версии? Вы когда ориентировочно выложите новую версию?
По умолчанию они не видны. Пользователь может увидеть весь список (если нажмет соответствующую кнопку), но воспользоваться всеми отчетами не сможет.
Для чего Вам понадобился полный запрет на просмотр списка отчетов? Мы эту возможность сделали специально для себя, чтобы пользователь мог спросить, почему ему недоступен этот отчет, хотя он ему нужен.
Новую версию выложу на этой неделе. Трудоёмкость не очень высокая, самое сложное - найти где исправить.
1. Общий модуль уос_РаботаССКД: Функция СформироватьСтруктуруПолейРасшифровки
//СтруктураПолейРасшифровки = Новый Структура;
СтруктураПолейРасшифровки = Новый Соответствие;
2. Общий модуль уос_ТиповыеОтчеты: Процедура ОбработкаРасшифровки стр. 1975
//Если СтруктураПолейРасшифровки.Свойство(ПолеРасшифровки) Тогда
Если СтруктураПолейРасшифровки.Получить(ПолеРасшифровки) <> Неопределено Тогда
ПараметрыРасшифровки.Вставить(ПолеРасшифровки, СтруктураПолейРасшифровки[ПолеРасшифровки]);
Иначе
ЕстьОшибки = Истина;
Продолжить;
КонецЕсли;
Исходные строки закомментированы.
Вот есть у меня отчет. В схеме компоновки использую набор данных - объект.
Хочу чтобы в него передавались данные из источника данных отчета.
Создал такой источник. В его схеме компоновки добавил набор данных запрос.
В этом запросе есть параметры отбора по периоду.
Где и как мне их задать? В настройке отчета на закладке "Параметры" добавляю строку, в поле "Наименование параметра" при нажатии на кнопку выбора в диалоговом окне этих параметров нет.
В общем, нашел какой-то выход, но не знаю правильно это или нет.
Добавил эти параметры в основной схеме компоновки отчета, хотя они там и не нужны.
В документации этот момент слабо описан, и такое впечатление что документация устаревшая, не соответствует текущему релизу.
Бывает, что описание неточное/неполное, но за этим трудно уследить. Если есть замечания/пожелания к справке, пишите сюда, будем дорабатывать.
В схеме компоновки источника у меня есть два параметра: &НачалоПериода и &КонецПериода
В документации пишется что по умолчанию система пытается установить значения этих параметров если тип периода - Интервал.
В основной схеме компоновки отчета у меня этих параметров нет. т.к. они мне там не нужны.
Я думал что система проинициализирует их и передаст в источник данных, однако это не сработало.
Все получилось лишь когда я добавил эти параметры в основную схему компоновки отчета (хотя они мне там и не нужны).
1) Перед формированием отчета рассчитываются значения всех параметров и помещаются в коллекцию параметров в настройки компоновки основного отчета.
2) При получении данных из источника в его настройки копируются параметры и отборы из настроек основного отчета.
Централизованное хранение параметров и отборов в настройках компоновки основного отчета кажется целесообразным и максимально простым.
1) если третий период можно рассчитать на основании первых двух, то можно использовать произвольный алгоритм на закладке Параметры
2) настраивать третий период как обычный параметр
В обычном отчете, построенном на СКД, там можно просто параметр на форму повесить и при его выборе, заносить значение в параметр СКД. а здесь же даты сами добавляются на форму в зависимости от настроек периода. Как сделать, чтоб если дата не выбрана, то чтоб текущая дата в качестве параметра периода передавалась регистру?
Создал я свой источник. В отчете на закладке "Источники" в командной панели нажимаю подменю "Заполнить набор данных основной схемы" и выбираю "Загрузить поля из источника с настройками по умолчанию".
Загрузило. В схеме источника у меня для некоторых полей набора данных был изменен заголовок.
После загрузки в основную схему я обратил внимание что мой заголовок поля из схемы источника не попал в основную схему, а колонка заголовка имеет название "Автозаголовок", как при снятом флажке в поле слева.
Причем в наборе данных - объект основной схемы этот флажок вообще отсутствует, и я никак не могу установить нужный мне заголовок для поля.
Полез разбираться в код. В форме элемента справочника "уос_ПроизвольныеОтчеты" нашел функцию "ПолучитьОписаниеПолейИзСхемыКомпоновки()". Там информация о полях выбирается следующим образом:
Для каждого ПолеВыбора Из СхемаКомпоновкиДанных.НастройкиПоУмолчанию.Выбор.Элементы Цикл
КонецЦикла;
Думаю что это в корне неправильно, т.к. при этом теряется информация о заголовке поля.
да и вообще как я считаю такой способ идеологически неверный.
Я переделал вот так:
Для каждого ПолеВыбора Из СхемаКомпоновкиДанных.НаборыДанных[0].Поля Цикл
КонецЦикла;
Да и вот эту строку в этой же функции я бы заменил:
ПоляИсточника = СформироватьТаблицуПолейИсточника();
Мне кажется тут лучше вместо таблицы значений использовать массив.
да и вообще как я считаю такой способ идеологически неверный.
Я переделал вот так:
Для каждого ПолеВыбора Из СхемаКомпоновкиДанных.НаборыДанных[0].Поля Цикл
КонецЦикла;
Так выбирать поля некорректно, потому что в схеме у нас может быть несколько разных наборов и поля, которые мы выводим, в итоге могут кардинально отличаться от списка полей из "НаборыДанных[0]".
В идеале, нужно взять список полей выбора и пробежаться по спискам полей всех наборов (НаборыДанных[0], НаборыДанных[1] и т.д.) и получить у них заголовки.
Зачем список полей выбора? Просто список полей набора данных. Список полей выбора не содержит всей необходимой информации о полях набора данных.
Согласен, наборов данных может быть несколько. Можно пройтись по всем наборам данных и получить описания полей.
Затем, что в источник данных основной схемы в "набор данных-объект" будут переданы только те поля, которые выбраны в настройках по умолчанию схемы источника данных. Остальные доступные поля всех наборов источника не нужно добавлять в схему основного отчета, так как самих этих полей при получении таблицы не будет.
Ну хорошо, можно брать только эти поля.
Но информацию о них все же следует получать из соответствующих полей набора данных.
ПоляИсточника = СформироватьТаблицуПолейИсточника();
Мне кажется тут лучше вместо таблицы значений использовать массив.
Функция возвращает таблицу значений с четырьмя полями. Как всю эту информацию поместить в массив?
Очень просто. Вот например мой вариант:
Функция ПолучитьОписаниеПолейИзСхемыКомпоновки(ИсточникСтрока)
СхемаКомпоновкиДанных = ИсточникСтрока.ИсточникДанных.Получить();
ПоляИсточника = Новый Массив;
Для каждого НаборДанных Из СхемаКомпоновкиДанных.НаборыДанных Цикл
Для каждого ПолеНабора Из НаборДанных.Поля Цикл
ПоляИсточника.Добавить(ПолеНабора);
КонецЦикла;
КонецЦикла;
Возврат ПоляИсточника;
КонецФункции ПоказатьЗатем в процедуре ЗаполнитьНаборДанныхОсновнойСхемы():
Для каждого ПолеИсточника Из ПоляИсточника Цикл
ПолеКомпоновки = НаборДанных.Поля.Найти(ПолеИсточника.Поле);
Если ПолеКомпоновки = Неопределено Тогда
ПолеКомпоновки = НаборДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
ЗаполнитьЗначенияСвойств(ПолеКомпоновки, ПолеИсточника);
КонецЕсли;
КонецЦикла; ПоказатьНу вот примерно так.
Дело в том, что "набор данных-объект" заполняется не только из схемы компоновки источника данных. Например, источник данных может быть представлен таблицей значений (которая заполняется вручную), а у неё нет полей компоновки. Поэтому пришлось сделать универсальное решение, чтобы при заполнении набора полученную таблицу значений обрабатывать одинаково.
У меня этот алгоритм и с таблицей значений прекрасно работает.
Ему без разницы что на входе - схема компоновки или таблица значений.
И кстати, источник данных - таблица значений тут собственно и не причем.
Я переделал функцию ПолучитьОписаниеПолейИзСхемыКомпоновки(),
а если источник данных - таблица значений, то вызывается другая функция: ПолучитьОписаниеПолейИзТаблицыЗначений().
Ему без разницы что на входе - схема компоновки или таблица значений.
Я против таких подходов, мне ближе унификация. Проще поддерживать функцию, на вход которой всегда подаётся таблица значений.
В Вашем случае нужно учитывать, что входным параметром может быть как таблица значений, так и массив, в котором элементами являются коллекции значений. Сейчас да, набор полей коллекции и набор таблицы значений совпадает, но потом может и не совпадать, и об этом нужно помнить. А что делать, если таких мест в конфигурации много?
Подскажите, чем не устраивает использование таблицы значений в данном случае? Пока мне эта проблема кажется надуманной.
Ну в общем-то не устраивает тем что в этой таблице всего четыре поля.
А в схеме компоновки в описании поля реквизитов намного больше.
Мне кажется что если в таблице значений описывающей источник данных названия полей привести в соответствие названиям реквизитов в описании поля в схеме компоновки, то проблем вообще никаких не будет.
Например сейчас у вас в таблице значений есть колонка "Представление".
Она имеет тот же смысл что и реквизит "Заголовок" в описании поля. Так почему не дать этой колонке название"Заголовок"?
С одной стороны вы говорите что вы за унификацию, а с другой стороны сами же от нее и отходите.
Она имеет тот же смысл что и реквизит "Заголовок" в описании поля. Так почему не дать этой колонке название"Заголовок"?
Так получилось исторически, переделывать пока не планирую.
Для меня важнее, чтобы функции работали как чёрные ящики. Например, если появится еще один тип источника данных, то на основании него я также сформирую таблицу значений с этими же четырьмя колонками и передам их в функцию "ЗаполнитьНаборДанныхОсновнойСхемы" и у меня всё будет работать.
Но это, скорее, идеологические моменты, здесь, обычно, нет правых и неправых. Со своей стороны я объяснил почему сделал именно так, Вашу точку зрения тоже понимаю. Предлагаю оставить эту тему и заняться чем-нибудь более полезным :)
В форме элемента справочника "уос_ПроизвольныеОтчеты" вверху в командной панели есть кнопка "Сохранить схему компоновки".
Нельзя ли туда добавить еще кнопочку "Открыть схему компоновки"?
А то у меня сегодня вышло так (не знаю как я это умудрился) что после внесенных изменений в схему компоновки у меня стала вылетать 1С при нажатии на кнопку "Изменить схему компоновки".
Ну, я взял и сохранил схему в файл. Подправил его ручками. А обратно загрузить исправленную схему в отчет нет возможности.
Мне нужно, чтобы если на нём стоит галочка "Использование", чтоб тогда он в колонтитул выходил. А если на нем не стоит галочки "Использование", чтоб в колонтитуле не выходила эта строчка. как это реализовать? в колонтитуле вот какая строчка
Запланировано на дату = [&ЗапланированоНаДату]
Нужно, чтоб она выходила не всегда.
В описании алгоритма параметра стоит код:
Если ПараметрыОтчета.ДатаАнализа.Использование Тогда
Если Не ЗначениеЗаполнено(ПараметрыОтчета.ДатаАнализа.Значение) Тогда
ПараметрыОтчета.ДатаАнализа.Значение=ТекущаяДата();
КонецЕсли;
КонецЕсли;
И еще не могу понять чем отличается "ПараметрыОтчета.ДатаАнализа.Значение" от "Результат.Значение"
Мне нужно, чтобы если на нём стоит галочка "Использование", чтоб тогда он в колонтитул выходил. А если на нем не стоит галочки "Использование", чтоб в колонтитуле не выходила эта строчка. как это реализовать?
В колонтитулы выводить параметры нельзя. Список значений, которые можно вывести в колонтитулы, перечислены в настройке колонтитулов в подменю "Вставить".
Для этого обычно используется секция параметров в отчете. Для чего это параметр нужно выводить именно в колонтитулы?
В переменной "Результат" хранится ссылка на параметр, к которому относится алгоритм. Если алгоритм относится к параметру "ДатаАнализа", то эти значения ничем не отличаются - это одно и то же. После выполнения алгоритма значение "Результат" перейдёт в "ПараметрыОтчета.ДатаАнализа". Поэтому для изменения параметра рекомендуется использовать переменную "Результат".
Вот для конкретного примера, где используется три периода, один из них пришлось вывести в параметр. В данном случае это "ЗапланированоНаДату".
Параметры:
Дата анализа = [&ДатаАнализа]
Оплачено за период: [&ВыбНачПериода] - [&ВыбКонПериода]
Запланировано на дату = [&ЗапланированоНаДату]
#Отбор#
Поскольку, у меня ДатаАнализа и ВыбНачПериода-ВыбКонПериода - это периоды, с ними всё нормально.
А вот третий параметр ЗапланированоНаДату - он выводится в секции "Параметры" даже если слева на панели в параметрах, на нём не стоит галочка. А у меня он выводится в любом случае и получается, что он отключен - этот параметр, а пользователь думает, что этот параметр всё же действует, раз выводится в шапку. Вот в связи с этим вопрос, как его спрятать. Или хотя бы условием как-нибудь его выводить пустым, если он не используется.
Чтобы сработала расшифровка по полю вида "Контрагент.ГоловнойКонтрагент", нужно это поле выводить в группировку. Для детальных записей расшифровки не работают.
и пункт меню при нажатии на значение поля "Контрагент.ГоловнойКонтрагент" даже пункт дополнительной расшифровки не добавляется.
в этом отчете если в расшифровку выбрать конкретно поле "Контрагент.ГоловнойКонтрагент", то при нажатии на это поле в базе, не вылезает доп. пункт меню.
Если же поставить галочку "Все поля", то пункт меню вылезает.
немного пытаюсь доработать её - добавить кнопку "подбор" в закладке "Доступ" чтоб по
пользователям подборы делать и по ролям.
и ещё кое-что доработал - время формирование отчета вставил.
Процедура ДействияФормыСформировать(Кнопка)
Скрипт=Новый COMОбъект("MSScriptControl.ScriptControl");
Скрипт.Language="javascript";
ТочкаСтарт=Скрипт.eval("new Date().getTime()");
уос_ТиповыеОтчеты.СформироватьСтруктуруОтчетаИзГруппировок(ЭтаФорма);
уос_ТиповыеОтчеты.УстановитьПараметрыВнешнихИсточниковИзРеквизитовФормы(ЭтаФорма);
уос_ТиповыеОтчеты.ОбновитьВидимостьПанелиНастроекПриФормировании(ЭтаФорма);
ОбновитьОтчет();
ТочкаФиниш=Скрипт.eval("new Date().getTime()");
ЭлементыФормы.НадписьВремяФормирования.Заголовок=" Время формирования отчета: "+ПолучитьПредставлениеВремени(ТочкаФиниш-ТочкаСтарт)+" мс";
КонецПроцедуры
Функция ПолучитьПредставлениеВремени(Миллисекунды)
КолВоЧасов=Цел(Миллисекунды/(60*60*1000));
Остаток=Миллисекунды-КолВоЧасов*60*60*1000;
КолВоМинут=Цел(Остаток/(60*1000));
Остаток=Остаток-КолВоМинут*60*1000;
КолВоСекунд=Цел(Остаток/1000);
КолВоМиллисекунд=Остаток-КолВоСекунд*1000;
Возврат Формат(КолВоЧасов,"ЧЦ=3;ЧН=;ЧВН=")+":"+Формат(КолВоМинут,"ЧЦ=2;ЧН=;ЧВН=")+":"+Формат(КолВоСекунд,"ЧЦ=2;ЧН=;ЧВН=")+":"+Формат(КолВоМиллисекунд,"ЧЦ=3;ЧН=;ЧВН=");
КонецФункции
Вместо MSScriptControl.ScriptControl можно использовать функцию ТекущаяУниверсальнаяДатаВМиллисекундах, так будет более универсально.
Пожелания по подбору и времени выполнения зафиксировал.
Попутно еще хочу спросить: можно ли как то в шапке вывести цифру итоговой суммы по ресурсу?
Надо такое сделать, только пока не знаю как.
Вопрос пожалуй снят. Кажется придумал. Буду делать запрос в алгоритме заполнения параметра и выводить этот параметр в шапке.
Нет, в алгоритме заполнения параметра доступа к отбора нет. Но в обработчике "ПередФормированиеОтчета" есть доступ и к коллекции параметров и к настройкам компоновки (при редактировании произвольного кода откройте справку, там описано как называются переменные).
Обновитесь на версию 1.2.8.3, в ней добавлен эта переменная. Также, в ней исправлено много ошибок.
В отчете выводится список из 8-ми колонок. За счет условного оформления для каждой колонки - ограничение макс. ширины, общая ширина списка подгоняется под ширину шапки. Все выводится нормально, но получается что в шапке одна колонка, под шапкой эта колонка разбита на 8 колонок, и справа в область печати включаются еще 7 пустых колонок, из-за чего отчет не помещается по ширине на одну страницу.
Как это можно обойти? Может что нибудь посоветуете?
Если ФормаОтчета=Неопределено Тогда
ФормаОтчета = ПолучитьФорму("Обработка."+ИмяОтчета+"."+Метаданные.Обработки[ИмяОтчета].ДополнительнаяФорма.Имя);
Если ФормаОтчета=Неопределено Тогда
ФормаОтчета = ПолучитьФорму("Обработка."+ИмяОтчета+"."+Метаданные.Обработки[ИмяОтчета].ОсновнаяФорма.Имя);
КонецЕсли;
КонецЕсли;
Из-за этого отчет не помещается нормально на странице по ширине.
Заметил что это связано с отборами. Если в панели настроек отчета снять птички с установленных отборов перед формированием отчета то лишняя колонка в шапке не появляется.
Также она не появляется если в расширенных настройках отчета на закладке "Шапка и подвал отчета" убрать птичку "Выводить отбор".
В версии 1.3.1 реализована возможность формировать отчет полностью на сервере. Также реализована рассылка отчетов по расписанию.
Руслан, когда же средняя перспектива наступит? Когда у нас появится УОС Taxi Edition?
Без твоих удобняшек как-то грустновато становится в новом "шашечном" мире.
Есть необходимость в одном отчете вывести сравнение планов и фактов в разных разрезах используя всю мощь СКД. План и факт являют собой 5-7 аналитических разрезов и около 45 расчетных показателей. Данные по плану можно собрать по данным одного регистра одним запросом. Так что это не является проблемой. А вот, чтобы собрать факт необходимо сначала собрать мозаику из разных подсистем (регистры, документы, справочная информация), потом подать на вход некой функции в общем модуле, которая на выходе может дать рассчитанную таблицу значений. Расчет выполняется очень сложно, поэтому повторить в виде какой-то настройки СКД не получится.
Т.е. необходимо получить на выходе один отчет для пользователей, в котором заданы параметры отбора. Когда пользователь определился с отборами и нажимает кнопку формирования, программа должна запросить данные плана ( с указанными отборами), запросить первичные данные (лучше у другого отчета в этой же подсистеме или нескольких отчетов, передав туда все отборы или только применимые), полученные данные передать на вход специальной функции, которая на выходе даст таблицу значений с полностью рассчитанными детальными записями, подсунуть эту таблицу в исходный отчет в виде источника данных, применить настройку пользователя для вывода конечного отчета (по двум наборам данных - по регистру плановые и по ТЗ фактические + какие-то поля сравнения показателей).
Вроде как в описании говорится, что что-то такое возможно, непонятно только как.
Пример использования есть в демобазе в отчёте "Все цены номенклатуры", а описание в документации, файлы "FAQ для разработчика / 15. Программное создание набора-объекта из другой схемы.doc" и "Описание механизмов подсистемы / 04. Источники данных отчета.doc".
В своей работе очень активно использую этот механизм. Если возникнут сложности, готов помочь.
upd: Данные для источников данных можно получать в том числе из других баз 1С (файловых и серверных) через COM-соединение (используется СКД), причём параметры для схемы базы-источника можно задавать интерактивно (используется OLE-соединение). Схема компоновки для базы источника настраивается также интерактивно через OLE-соединение. Пример работы с внешними ИБ показан в видео, а в демобазе настроены пару отчётов.
прошу уточнить пару моментов:
1. Подойдет ли данное решение для управления доступом к внешним отчетам?
2. а именно, помимо управления доступом на уровне ролей доступно ли управления на уровне конкретных пользователей?
3. возможно ли управление доступом также и для внешних отчетов/обработок (на запуск)
4. режимы Продуктив/Тестирование/Разработка/Архив
Добрый день!
1. На текущий момент такой функционал есть, но в дальнейшем планирую его выпилить, так как есть много разных менеджеров внешних обработок, а УОС позиционируется, в первую очередь, как инструментарий для разработки отчётов.
2. Да.
3. Да.
4. Не понял вопроса, опишите подробнее.
Внедрили данное решение почти во все свои базы.
Удовлетворяет более чем. Попросил руководство немного проспонсировать ваш проект. (надеюсь они не передумают)
Вышлите мне пожалуйста реквизиты для перечисления средств.
Из алгоритма расшифровки можно-ли узнать имя колонки данных (типом Ресурс)?
в процедуре
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
имеем
//МассивПолейРасшифровки = уос_РаботаССКД.ПолучитьМассивПолейРасшифровки(Расшифровка, ДанныеРасшифровки);
Если написать (ВключатьРесурсы = Истина), то в массиве МассивПолейРасшифровки появится колонка с типом Ресурс и первый элемент будет текущая колонка.
МассивПолейРасшифровки = уос_РаботаССКД.ПолучитьМассивПолейРасшифровки(Расшифровка, ДанныеРасшифровки, , Истина);Скажите пожалуйста можно ли сделать такую доработку? Как она затронет функционал?
Вопрос остается актуальным...
Как находясь в алгоритме расшифровки можно-ли узнать имя колонки данных (типом Ресурс)? Именно той ячейки которая вызвала расчет алгоритма.
В справочнике «уос_ПроизвольныеОтчеты» на закладке «Параметры» в документации (*.doc) описаны флаги «Проверять заполненность» и «Проверять использование».
На форме они отсутствуют, в конфигураторе эти реквизиты есть, но выглядят как «удалитьПроверятьЗаполненность» и «удалитьПроверятьИспользование».
Можно узнать - почему так?
Версия подсистемы 1.3.1.4
В справочнике «уос_ПроизвольныеОтчеты» на закладке «Параметры» в документации (*.doc) описаны флаги «Проверять заполненность» и «Проверять использование».
На форме они отсутствуют, в конфигураторе эти реквизиты есть, но выглядят как «удалитьПроверятьЗаполненность» и «удалитьПроверятьИспользование».
Можно узнать - почему так?
Версия подсистемы 1.3.1.4
1. двум адресатам один отчет
2. группе из 17 адресатов второй.
прописал расписание. В результате помимо первой группы. Вся вторая получила первый отчет, свой второй не получили. Почему так и как можно поправить?
Заранее спасибо за ваш ответ.
Вы можете заказать платную консультацию или разработку у автора. Будет создан приватный заказ на «Бирже заказов» для автора.
№ 85059
Создание 10.05.11 15:14
Обновление 12.12.16 20:01
Просмотры 118797
Загрузки 2207
Рейтинг
260
Комментарии 353
Код открыт Не указано
Рубрики Инструментарий разработчика
Кому Разработчик
Тип файла Архив с данными
Платформа 1С:Предприятие 8
Конфигурация 1C:Бухгалтерия
Операционная система Windows
Страна Россия
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Абонемент ($m)