Редактирование внешнего отчета 1с
Доработка типового отчета на СКД в БП 3.0 с помощью расширения конфигурации. Пример, как можно внести изменения в типовой отчет "Бухгалтерии предприятия" 3.0 без снятия конфигурации с поддержки. Описан пошаговый алгоритм действий и способы решения возникающих при этом проблем.
Итак, что мы имеем? Поставлена задача доработать типовой отчет "Продажи" в конфигурации "Бухгалтерия предприятия 3.0".
Необходимо сделать так, чтобы этот отчет выводил помимо двух показателей "Количество" и "Сумма" третий показатель - "Вес".
Разработка и тестирование производились на релизе На релизе 3.0.99.21 конфигурации "Бухгалтерия предприятия".
Что нам для этого нужно? С чего начать?
Прежде всего начнем с того что не требует программирования - добавим дополнительный реквизит "Вес" в справочник "Номенклатура". Процедура стандартная, и думаю, всем знакомая. Поэтому останавливаться на этом не буду.
Идем дальше. Добавляем в конфигурацию расширение. Меню -Конфигурация - Расширение конфигурации.
Назовем его "АдаптацияОтчетаПродажи". Префикс - "Старт_". Назначение - "Адаптация".
Снимем признак "Безопасный режим" в расширении.
Найдем в конфигурации нужный нам отчет "Продажи" и добавим его в расширение.
Также нам необходимо заимствовать в расширение следующие реквизиты отчета:
НачалоПериода, КонецПериода, Периодичность, РазмещениеДополнительныхПолей, ПоказательКоличество, ПоказательСумма.
Последние два реквизита - это признаки включения в отчет соответствующих показателей.
Поскольку нам необходимо добавить в отчет вывод нашего показателя "Вес", добавим еще один реквизит - ПоказательВес.
Добавим также еще один очень важный реквизит - ТекущаяСхемаКомпоновкиДанных. Тип реквизита Строка(80).
Комментарий "Наименование текущей используемой схемы компоновки данных".
Этот реквизит присутствует в некоторых других отчетах конфигурации, но в отчете "Продажи" его нет.
Зачем он нужен? Расскажу позже.
Также необходимо заимствовать в отчет табличные части Группировка и ДополнительныеПоля, а также их реквизиты Использование, Представление, ТипГруппировки.
Кроме этого, заимствуем форму отчета. Нам понадобится ее изменить.
Также добавляем макет - Схему компоновки данных. Для этого просто копируем в расширение макет "СхемаКомпоновкиДанных" типового отчета "Прдажи", и даем ему имя Старт_СхемаКомпоновкиДанных.
Почему мы именно копируем макет СКД, а не заимствуем его из отчета конфигурации?
Потому что расширения в 1С пока не умеют работать с заимствованной схемой компоновки.
Что делаем дальше? Подправим немного нашу заимствованную форму отчета.
Находим в элементах формы группу "ГруппаПоказатели". Видим что в этой группе есть элементы ПоказательКоличество и ПоказательСумма. Нам нужно здесь же разместить элемент ПоказательВес, связанный с добавленным нами ранее реквизитом отчета.
В правом верхнем окне формы раскрываем ветку реквизита Отчет, и. очень удивляемся.
Мы не видим там наш добавленный ранее реквизит отчета ПоказательВес. Что же делать?
Многих новичков, только начинающих работать с расширениями, этот вопрос ставит в тупик.
Для того чтобы наш реквизит появился, необходимо в правом верхнем окне формы выбрать реквизит Отчет и нажать на нем правой кнопкой мыши. В появившемся контекстном меню выбрать пункт "Добавить в расширение".
После этого мы сможем вывести наш добавленный реквизит на форму.
Добавим обработчик события "ПриИзменении" для элемента ПоказательВес.
Также нам нужно будет внести некоторые изменения в модуль типовой формы отчета.
Для этого откроем форму отчета, найдем процедуру УстановитьНастройкиПоУмолчанию() и нажмем правую кнопку мыши на ее заголовке. Из контекстного меню выберем "Добавить в расширение".
В открывшемся окне "Тип вызова" выбираем "Вызывать вместо (с контролем)".
Итак, измененный код процедуры УстановитьНастройкиПоУмолчанию() будет выглядеть следующим образом:
Также нам потребуется внести изменения в функцию ПодготовитьПараметрыОтчетаНаСервере() модуля формы.
Делаем это также как и в предыдущем случае. Измененный код функции будет выглядеть следующим образом:
Понадобятся еще некоторые изменения в модуле отчета и в модуле менеджера отчета, но о них расскажу позже.
А сейчас перейдем к самому главному: модификации Схемы компоновки отчета.
Что нам рекомендует фирма 1С при доработке типовых отчетов на СКД через расширения?
Она предлагает два варианта:
- Заимствовать отчет и создать для него собственную схему компоновки данных.
- Доработать исходную схему компоновки данных отчета. Для этого ее нужно скопировать (не заимствовать!) из конфигурации, назначить основной для заимствованного отчета и изменить так, как вам нужно.
Первый вариант отпадает. Собственная СКД нам не нужна. Нам достаточно доработать исходную СКД отчета.
Пойдем по второму варианту, но назначать схему основной для заимствованного отчета не будем, это все равно бесполезно.
Потом вы узнаете почему.
Фирма 1С не рассмотрела третий возможный вариант доработки типового отчета на СКД с помощью расширений.
Третий вариант представлен в следующей публикации: "Пример доработки типового отчета в БП 3.0".
Его суть заключается в программной модификации СКД.
Мы начинаем модифицировать нашу Схему компоновки и сразу же натыкаемся на множество ошибок, пути исправления которых не всегда очевидны. Эти ошибки связаны с тем что в нашем расширении не хватает некоторых объектов метаданных расширяемой конфигурации на которые есть ссылки в схеме компоновки отчета.
Эти ошибки не критичны, и в общем-то даже не являются ошибками. В режиме 1С:Предприятия наш доработанный отчет будет "видеть" все эти отсутствующие объекты метаданных конфигурации, и будет нормально работать.
Но если вы хотите чтобы "все было красиво" еще на этапе разработки расширения, то придется немного повозиться для исправления этих ошибок.
Ну, тут как бы все очевидно. необходимо заимствовать в расширение справочник НоменклатурныеГруппы.
Также нам понадобится заимствовать в расширение справочники Номенклатура и некоторые другие объекты метаданных чтобы не было подобных ошибок.
С чем она связана? Ну, видимо с тем что мы заимствовали в расширение регистр бухгалтерии Хозрасчетный, но не заимствовали его ресурс Сумма. Также нужно заимствовать ресурс Количество.
Необходимо также позаимствовать измерения Организация и Подразделение.
Для исправления этой ошибки и других подобных ошибок нам нужно предпринять сразу несколько действий.
- Заимствовать в расширение следующие объекты:
план видов характеристик ВидыСубконтоХозрасчетные, план счетов Хозрасчетный. - Для плана видов характеристик назначить типы как на скриншоте ниже.
- Для плана счетов указать виды субконто и их количество как на скриншоте ниже.
- Для регистра бухгалтерии Хозрасчетный указать план счетов Хозрасчетный.
Для устранения этой ошибки установим в свойствах регистра бухгалтерии Хозрасчетный признак "Корреспонденция".
Ну что же, все ошибки побороли. Теперь займемся модификацией нашей Схемы компоновки.
Модификация совсем несложная. Добавим вычисляемое поле Вес.
В выражении поля пропишем следующее:
УправлениеСвойствами.ЗначениеСвойства(Номенклатура, "Вес_1e023769e20845f7836529edef6a3da9")*Количество
Где "Вес_1e023769e20845f7836529edef6a3da9" - это идентификатор нашего дополнительного реквизита Вес.
Затем добавляем наше вычисляемое поле в ресурсы:
Далее для каждого варианта отчета добавляем наш ресурс Вес в выбранные поля группировки Таблица.
И еще один очень важный момент. Для того чтобы у нас корректно выводился отчет в разных комбинациях показателей Количество, Сумма и Вес, нам необходимо доработать макет отчета.
Здесь у нас первые четыре макета - из типового отчета. Все следующие добавлены.
Что еще остается сделать? Осталось внести некоторые изменения в модуль отчета и в модуль менеджера отчета.
В модуле отчета меняем процедуру ОпределитьНастройкиФормы()
Здесь мы подменяем типовую схему компоновки отчета на нашу собственную.
Но эта подмена не сработала бы если бы мы ранее не добавили в наш отчет реквизит ТекущаяСхемаКомпоновкиДанных.
Именно по наличию этого реквизита в модуле БухгалтерскиеОтчетыКлиентСервер проверяется необходимость подмены схемы компоновки отчета:
Теперь нам осталось поменять некоторые процедуры и функции в модуле менеджера отчета. Займемся этим.
Необходимость настройки внешних отчетов может возникать в случаях оперативного изменения соответствующих отчетных форм. Ведь государственные органы, утверждающие соответствующие бланки, не всегда учитывают то, что хозяйствующим субъектам нужно время для подготовки отчетной формы. Автор - С.А.Харитонов.
В типовых конфигурациях для "1С:Предприятия 8", выпускаемых фирмой "1С", формы регламентированной отчетности входят в состав конфигураций и выпускаются вместе с релизами конфигураций. Однако когда возникает необходимость - например, вступает в силу новая редакция формы отчетности, - фирма "1С" выпускает такие формы отчетности в виде внешних отчетов "1С:Предприятия 8" (файлов с расширением *.erf).
Использование внешних отчетов является временным решением, которое следует использовать только до выхода релиза конфигурации, в котором будут встроены необходимые изменения. Поэтому на использование внешних отчетов накладываются определенные ограничения:
- при выпуске внешнего отчета оговаривается, с каким релизом конфигурации он может использоваться;
- не гарантируется поддержка внешним отчетом предыдущих релизов конфигурации;
- при работе пользователя с конфигурацией нельзя использовать более одной версии внешнего отчета;
- открытие формы отчета выполняется более продолжительное время, по сравнению с отчетом, реализованным как объект конфигурации;
- выгрузка данных отчета в электронном виде выполняется намного медленнее и др.
В этой же форме можно щелкнуть по наименованию внешнего отчета, чтобы скачать его к себе на компьютер.
Как правило, отчеты распространяются в виде архива RAR. Для работы с внешним отчетом архив необходимо распаковать.
В архиве вместе с файлом внешнего отчета содержится текстовый файл с описанием назначения отчета и порядка его подключения.
Если внешний отчет предназначен для замены регламентированного отчета, уже существующего в конфигурации, его можно подключить к информационной базе, просто открыв отчет в режиме "1С:Предприятие" (меню Файл - Открыть).
Если внешний отчет является новым видом регламентированного отчета, автоматически зарегистрироваться в информационной базе отчет не сумеет: такой режим необходимо подключить вручную. Указания по подключению также имеются в текстовом файле, содержащемся в архиве, полученном с сайта "1С".
Для использования внешнего отчета пользователю необходимо указать, что для данного регламентированного отчета будет использоваться не внутренний объект конфигурации, а внешний отчет.
Для регистрации внешнего отчета как нового вида регламентированных отчетов в справочнике Регламентированные отчеты необходимо (см. рис. 1):
1) перейти в группу справочника, в которой будет располагаться отчет нового вида;
2) создать новый элемент справочника, нажав кнопку Добавить в верхней командной панели формы справочника;
3) в форме элемента справочника заполнить наименование, которое будет выдаваться в справочнике Регламентированные отчеты и в списке видов отчетов формы Регламентированная и финансовая отчетность. Желательно также заполнить описание вида отчета;
4) переключатель Использовать установить в положение файл и указать, какой файл следует использовать в качестве внешнего отчета. После нажатия кнопки ОК в диалоге открытия файла в поле файл формы элемента справочника будет указано полное имя этого внешнего отчета.
После нажатия кнопки Записать внешний отчет сохраняется в информационной базе, после этого полное имя внешнего файла заменяется текстом Отчет загружен в ИБ.
То же самое происходит при нажатии кнопки ОК, при этом форма элемента справочника Регламентированные отчеты закрывается.
Для тех элементов справочника, для которых используются внешние отчеты, в форме списка справочника после наименования отчета добавляется строка (внешний).
После того, как внешний отчет загружен в информационную базу, сам файл внешнего отчета уже не нужен, и его можно удалить.
Работа с регламентированным отчетом, использующим внешний отчет, ничем не отличается от работы с объектом конфигурации, кроме "замедленной реакции" при открытии и при выгрузке данных отчетности в электронном виде.
В качестве признака внешнего отчета в правой части верхней командной панели выводится красная информационная надпись Внешний отчет.
В любой момент можно вернуться к использованию "внутреннего" объекта конфигурации. Для этого в форме элемента справочника для требуемого регламентированного отчета необходимо поставить переключатель Использовать в положение объект и сохранить элемент справочника.
Сам внешний отчет не удаляется из информационной базы, поэтому возможно и обратное действие. Для удаления отчета из информационной базы необходимо выполнить следующее:
1) в справочнике Регламентированные отчеты найти регламентированный отчет, для которого подключен внешний отчет, - у такого отчета после наименования отчета будет добавлена строка (внешний);
2) открыть элемент справочника для редактирования обязательно кнопкой Изменить текущий элемент;
3) в поле выбора внешнего отчета нажать кнопку Х (Очистить). После ее нажатия текст Отчет загружен в ИБ очищается, это является признаком того, что отчет будет удален из информационной базы;
4) закрыть форму элемента справочника нажатием кнопки ОК.
Удаление отчета выполняется при сохранении элемента справочника.
В случае необходимости отчет, загруженный в информационную базу, можно сохранить в файл на диске. Для этого в форме элемента справочника Регламентированные отчеты необходимо щелкнуть по ссылке с текстом Выгрузить внешний отчет в файл. Будет открыт стандартный диалог сохранения файла. По умолчанию в качестве имени файла предлагается имя соответствующего объекта конфигурации.
Важно отметить, что в одном сеансе работы пользователя с информационной базой нельзя использовать более одной версии внешнего отчета: например, если пользователь уже работает с регламентированным отчетом, который является внешним отчетом, и загрузил в справочник Регламентированные отчеты другую версию этого внешнего отчета (например, с добавленным автозаполнением), для использования этой версии отчета ему нужно завершить сеанс работы в режиме "1С:Предприятие", после чего сразу начать новый сеанс.
На уровне различия в структуре метаданных в отчётах дополнительно можно указать основную Схему Компоновки Данных (СКД) и настройки для сохранения параметров. Также здесь есть используемый в текущий момент компоновщик настроек. В обработках данные структуры не используются.
Указание в отчётах основной СКД является полезной функцией, т.к. при этом можно создать требуемый отчёт, не написав ни единой строчки кода в самом модуле отчёта, что ускоряет разработку и понимание принципов функционирования СКД для новичков.
Внешние отчёты и обработки 1C
В режиме конфигуратора 1С есть возможность создавать не только объекты внутри конфигурации (в дереве метаданных), но и создавать внешние объекты в виде отдельных файлов. Это касается, в том числе, отчётов и обработок. Преимуществом внешних объектов в том, что новые объекты не требуется каждый раз включать в состав конфигурации и, соответственно, обновлять при этом всю информационную базу 1С. Вместо этого можно использовать любые необходимые отчёты и обработки и изменять их без внесения изменений в метаданные базы 1С.
Внешние отчёты/обработки сохраняются в отдельные файлы и имеют следующие расширения:
- Внешний отчёт – *.erf
- Внешняя обработка – *.epf
Пример создания внешней обработки 1С
Создавать внешние объекты довольно просто. Функционал, закладываемый разработчиком в конкретную реализацию отчёта или обработки в 1С 8.3 или 8.2, индивидуален и зависит от решаемой задачи.
1. Выбираем информационную базу из списка, заходим в режим конфигуратора 1С.
2. В конфигураторе выбираем пункт меню Файл – Новый…
3. Выбираем из списка вид объекта – Внешняя обработка.
4. Задаём имя обработки. В данном случае имя нашей обработки будет «ПримерВнешнейОбработки».
5. Определяем структуру данных обработки. По условию нашей задачи в структуру реквизитов нужно добавить строковое поле «Вывести».
6. Создаём пользовательскую форму. Тип формы: Обычная.
7. Правой клавишей мыши вызываем контекстное меню. Определяем обработчик нажатия на кнопку «Выполнить».
8. Прописываем код обработки.
9. Сохраняем нашу обработку на диск. Заходим в режим предприятия 1С.
10. Выбираем пункт меню Файл – Открыть…
11. Выбираем созданную нами обработку и нажимаем «Открыть».
Созданную обработку можно скачать по ссылке ниже.
Дополнительные отчёты и обработки
В конфигурациях 1С существуют также подключаемые внешние отчёты и обработки. Чтобы включить в информационную базу 1С соответствующую обработку/отчёт нужно выполнить ряд действий:
1. Зайти в конфигурацию в режиме предприятия 1С
2. В главном меню выбрать Сервис – Дополнительные отчеты и обработки – Дополнительные внешние обработки
3. Открылся список внешних обработок, загруженных в информационную базу 1С. Нажимаем кнопку «Добавить».
4. Загружаем файл обработки.
5. Запускаем обработку двойным кликом мышки, чтобы проверить её работоспособность.
С помощью данного механизма дополнительных обработок можно также изменять стандартные печатные формы на собственные и добавлять новые. Любой пользователь, таким образом, может расширить функционал типовой конфигурации 1С.
В этой статье мы рассмотрели создание и использование внешних отчётов и обработок. Создание внешних обработок в режиме управляемого приложения более подробно будет рассмотрено в следующей статье.
Всё вроде бы выгружается хорошо, исправляем отчет под требования клиента, пробуем открыть в режиме предприятия и сталкиваемся с принеприятнейшей ошибкой: Ошибка при выполнении функции ОбщегоНазначения.ИдентификаторОбъектаМетаданных()
Потратив часика полтора два на поиск устранения данной ошибки в доблестном интернете (информация сводится к двум вещам или обновить метаданные (//infostart.ru/public/372055/) или поправь права на объекты и обнови метаданные. Напомню, конфигурация на поддержки, мы ничего сломать не могли, просто пытаемся открыть отчет), результата так и не добился. Далее решил попробовать подключить его как внешний через "дополнительные отчеты и обработки", - результат тоже не тот:
Посмотрел в конфигуратор, на ошибки и понял, что почти все типовые отчеты содержат такую штуку как МодульМенеджера, в котором прописано поведение отчета и сидеть переписывать модуль менеджера отчета "под себя" что называется не было никакого желания.
Решив, уже ради спортивного интереса, добиться всё таки чтобы механизм по выгрузке отчетов заработал так как мне нужно (напомню, цель была сделать возможным доработку типового отчета с минимальными трудозатратами) прибегнул к методу которого нигде не нашел: Расширение! Если отчету нужен модель менеджера сделаем ему его :) Но столкнулся с проблемой что при заимствовании отчета в расширение СКД нельзя поменять, но вот если загрузить внешний отчет (ПКМ в конфигураторе), тогда картина становится совсем другой.
Далее переименовал имя отчета и вот беда подкралась не заметно, в расширении не открывается СКД этого отчета (потому что мы не "перетянули" в расширение все объекты, из которых строится отчет).
Однако и тут оказалось всё достаточно просто. В том отчете который мы просто выгрузили в самом начале, СКД прекрасно открывается и редактируется. Подправив СКД под требования заказчика, осталось только заменить его в нашем отчете из расширения.
Сделать это тоже очень просто достаточно просто сравнить отчет
при этом мы знаем, что нам нужно только измененное СКД:
Теперь нужно не забыть проанализировать реквизиты отчета и позаимстовать в расширение те объекты типов которых не хватает. (в моем примере это справочник.Организация и ХранилищеВариантовОтчетов), подсистема в которую необходимо выводить отчет (сделал в администрирование чтобы было проще искать). Далее копируем модуль менеджера типового отчета в свой добавленный и вуаля, всё готово.
Внешние отчёты и обработки системы «1С:Предприятие» — это отчёты и обработки, которые не входят в состав прикладного решения, а хранятся в отдельных файлах. Такие файлы имеют расширение .ert и находятся, как правило, в папке \ExtForms каталога информационной базы.
Главное преимущество внешних отчётов и обработок заключается в том, что применять их можно в различных прикладных решениях без изменения структуры самих решений. Важным преимуществом является и то, что создавать и отлаживать такие отчёты и обработки можно, не прерывая работы пользователей системы «1С:Предприятие».
Создание нового внешнего отчёта или обработки
Для создания нового отчёта (обработки) открываем программу в режиме конфигуратора и щёлкаем мышкой по кнопке «Новый документ» на панели инструментов, либо в меню « Файл » выбираем пункт « Новый ».
При этом на экран будет выведено диалоговое окно для выбора типа создаваемого файла.
В этом диалоговом окне выбираем пункт «Внешний отчет (обработка)» и щёлкаем по кнопке «ОК», после чего на экране появится окно редактора форм.
Процесс редактирования формы внешней обработки мало чем отличается от редактирования формы любого другого объекта метаданных. Для добавления или изменения элементов формы используются стандартные средства редактора форм, обратиться к которым можно через меню « Действие », « Диалог » или « Вставить ». Основные команды этих меню вынесены на панели инструментов «Редактор диалогов» и «Элементы диалогов».
Примечание: При создании некоторых внешних отчётов и обработок в качестве шаблона можно использовать уже имеющиеся в системе отчёты и обработки. Для сохранения имеющейся в системе обработки во внешний файл необходимо щёлкнуть правой кнопкой мыши по выбранной обработке и в контекстном меню выбрать пункт « Сохранить как внешний отчет (обработку) ».
При написании программных модулей внешних отчётов и обработок необходимо учитывать некоторые особенности функционирования последних. Например, если обработка создаётся для выполнения каких-либо операций с файлами и в ней используется функция ТекКаталог(), следует помнить следующее. Когда обработка открыта пользователем через меню « Сервис −> Дополнительные возможности », текущим каталогом для обработки является рабочий каталог пользователя. Если же пользователь почему-либо открыл обработку через меню « Файл −> Открыть », то текущим каталогом для неё становится тот каталог, в котором находится файл обработки (обычно это папка \ExtForms ). Поэтому в программном коде (на всякий случай!) необходимо предусмотреть оба варианта открытия.
Для сохранения созданной внешней обработки на диске щёлкаем мышкой по кнопке «Сохранить» на панели инструментов «Стандартная» или выбираем в меню « Файл » соответствующую команду. При этом на экран будет выведено стандартное окно «Сохранить как…», в котором необходимо указать имя файла и выбрать директорию для сохранения (по умолчанию внешние обработки сохраняются в папку \ExtForms каталога информационной базы).
Примечание: Любой существующий в конфигурации отчёт или обработка могут быть преобразованы во внешние, и наоборот. Кроме того, внешние отчеты и обработки могут быть добавлены в структуру прикладного решения как новые объекты.
Открытие внешнего отчёта (обработки) в режиме «1С:Предприятие»
Для открытия файла внешнего отчёта (обработки) щёлкаем мышкой по кнопке «Открыть документ» на панели инструментов «Стандартная» или выбираем в меню « Файл » команду « Открыть ».
При этом на экран будет выведено стандартное окно открытия файла.
С помощью данного окна находим файл нужного отчёта и открываем его. Работать такой отчёт будет точно так же, как если бы он входил в состав прикладного решения.
В том случае, если файл внешнего отчёта (обработки) предполагается использовать постоянно, для открытия этого файла лучше всего воспользоваться окном «Дополнительные возможности», которое вызывается через меню « Сервис −> Дополнительные возможности ». Для внесения отчёта (обработки) в имеющийся список отчётов щёлкнем мышью по кнопке «Изменить» (см. рис. ниже) и в появившемся меню выберем пункт « Внести в список «. После этого нам необходимо будет выбрать из предложенного списка имя файла добавляемого отчёта (обработки) и указать его название.
В заключение замечу, что отчёты и обработки в списке отсортированы по их названиям, а внести в данный список можно только файлы, находящиеся в папке \ExtForms .
Открытие внешнего отчёта (обработки) из программного кода
Для открытия формы внешнего отчёта (обработки) из программного кода используется встроенная системная функция ОткрытьФорму() . В качестве первого параметра в функцию передаётся строка "Отчет" , в качестве третьего параметра — строка, содержащая полное имя файла внешнего отчёта или обработки. Например:
Для открытия формы в модальном режиме используется функция ОткрытьФормуМодально() , имеющая аналогичный синтаксис:
В качестве второго (необязательного) параметра функции может использоваться имя переменной, которой можно присвоить значение любого типа для передачи в открываемую форму. Данное значение будет доступно в открытой форме как атрибут Форма.Параметр .
Возвращаемым значением обеих функций будет число 1, если действие выполнено (форма открыта), или 0, если действие не выполнено.
Читайте также: