Создание внешнего отчета в 1С 8
Создание внешнего отчета
Создание макета внешнего отчета
Для создания отчета в 1С Бухгалтерия 2.0 понадобится шаблон для вывода информации, или, другими словами, макет, в котором будут составляться таблицы, задаваться необходимые параметры и т.д. Для добавки шаблона кликаем на раздел Макеты, находящийся в дереве мета-данных отчета, после – на Добавить. При формировании макета определяем вид Табличный документ.
В шаблоне – четыре основных части:
Начнем формировать части шаблона. Для этого выделяем необходимое число строк, после чего:
В Шапке прописываем название документа: Обороты сч. 62. Используя инструмент Границы, рисуем шапку отчета, после – задаем параметры. Последние позволяют указывать в отчете необходимые сведения. Но об этом мы поговорим позднее.
Параметр в шаблоне создается путем выбора необходимой ячейки и указания в ней (без пробелов) названия параметра. После нужно будет нажать на ячейку, используя правую кнопку мышки, и в выпавшем списке кликнуть на строчку Свойства. Выберите заполнение Параметр в закладке Макета в свойствах ячейки.
В результате название параметра в ячейке окажется окруженным скобками (<>). Вид получившейся Шапки должен быть таким:
В части ДанныеКонтрагент задаем параметры для указания названия контрагента, и для Расхода и Прихода по сч. 62. С этой целью используем инструмент Границы, оформляя часть как строку таблицы.
В части Подвал указываем параметры для результатов Расхода и Прихода.
В результате должен появиться шаблон следующего вида:
Создание формы отчета
Форма необходима для появления кнопки Формировать, указания срока формирования и внесения информации. Получить ее можно, перейдя к дереву с мета-данными и выбрав в нем раздел Форма. Кликайте на Добавить. На 1-ой странице конструктора для создания форм никакие корректировки не нужны. Кликайте сразу на Далее.
В результате будет показана форма следующего вида:
Этот вид формы нам не подходит, изменим его:
В результате указанных действий форма выглядит так:
Программирование
Переходить к программированию можно после формирования формы. Выводим окно выбора периода. Нажимаем на кнопку правой кнопкой мышки, переходим в раздел Свойства – здесь выбираем События (в этом меню, используя символ лупы, в модуле формы мы создадим процедуру Кнопка-1Нажатие).
Для переключения между модулем и самой формой можно использовать расположенные в нижней части закладки.
Прежде всего, нам нужна переменная для поля таблицы-документа, в котором будут указываться данные.
Создался шаблон. Используя ПолучитьМакет ( ИмяМакета >), в параметр ему присвоим имя шаблона. При существовании такого шаблона, система отыщет его.
Макет = ПолучитьМакет («Макет»)
Оформляем переменные для всех областей шаблона. Используем макет ПолучитьОбласть ( ИмяОбласти >).
ОбластьШапка = Макет. ПолучитьОбласть («Шапка»)
ОбластьПодвал = Макет. ПолучитьОбласть («Подвал»);
ОбластьДанныеДоговор =Макет. ПолучитьОбласть (« ДанныеДоговор »)
ОбластьДанныеКонтрагент = Макет. ПолучитьОбласть (« ДанныеКонтрагент »).
Проводим очистку поля таблицы-документа. После этого каждый новый сформированный отчет станет удалять прежнюю информацию.
По завершению инициализации переменных, начинаем по очереди заполнять и выводить части шаблона – с Шапки. У Шапки есть КонецПериода и НачалоПериода – зададим тут показатели периода формирования документа. С этой целью используем Параметры области макета.
Другие действия с частью не нужны: убираем Шапку в поле таблицы-документа.
Запрос = новый Запрос.
Теперь в запрос нужно перенести период создания отчета. Помните, что для периода формирования существуют соответствующие реквизиты. Перенесем их как параметры.
Запрос. УстановитьПараметр (« КонецПериода », КонецПериода )
Запрос. УстановитьПараметр (« НачалоПериода », НачалоПериода )
Используя конструктор запросов, создаем текст запроса. Рекомендуем отказаться от попытки написания запросов вручную, и всегда использовать конструктор, который не может допустить ошибку и опечатку. Вы сэкономите силы и время даже при создании наиболее сложных запросов. В коде указываем:
Далее наводим курсор мышки между кавычками, кликаем правой клавишей мышки и определяем строку Конструктор запроса. Откроется нужное нам окошко.
Переносим таблицу в часть Таблица и приступим к вводу параметров. Для любой виртуальной таблицы запроса имеется особый комплект параметров, воспользовавшись которыми, можно находить необходимые сведения в главной таблице. В нашем примере главной таблицей будет Регистр бухгалтерии Хозрасчетный. Открываем окошко параметров виртуальной таблицы.
Теперь нужно оформить условие по сч. 62 бухгалтерского учета. С этой целью ищем УсловиеСчета в параметрах виртуальной таблицы, и пишем условие в нем.
Счет В ИЕРАРХИИ (&Счет62)
Кроме того, можно использовать Конструктор для формирования условий. Кликните на кнопку с 3 точками.
Оформив наименования определенных сейчас полей. С этой целью необходимо открыть меню Объединения/Псевдонимы, и указать необходимые названия полей.
Все необходимые процедуры в редакторе выполнены. Остается кликнуть на кнопку ОК и убедиться в том, что в программном коде отражается текст только что сформированного запроса. Вид текста должен быть следующим:
В результате у нас будут записи с результатом по каждому контрагенту.
Прежде, чем обходить информацию выборки, используя цикл, инициализируем переменные, которые предназначаются для расчета всех результатов отчета:
Для корректного вывода данных с учетом иерархии и разворотами по знаку «+», указываем начало автоматической группировки строчек документа-таблицы:
Все предварительные работы завершены. Следует начать обходить итоги запроса. Для обхода потребуется использовать цикл Пока:
Аннулируем параметры Расход и Приход области ДанныеКонтрагент в самом начале цикла. Что это нам даст? Предположим, что по поставщику, назовем его Х, расход составляет 10, а приход 20. У следующего за ним поставщика, назовем его Н, расход и приход отсутствуют полностью. При аннулировании параметров Расхода и Прихода в такой ситуации в строке по поставщику Н окажутся данные поставщика Х – расход 10 и приход 20.
Теперь оформляем данными элемента выборки часть ДанныеКонтрагент
Оформив данные, можно выводить часть в Табличный документ. Т.к. мы работаем с автоматическим группированием строчек, необходимо определить степень строки в группировке (в нашем случае у отчета окажется 2 степени, для договоров контрагентов – второго уровня, для самих контрагентов – первого уровня).
После для указанного контрагента нужно выполнить выборку по его соглашениям:
Используем цикл Пока для выполнения обхода:
Обнуляем параметры Расход и Приход в цикле по соглашениям контрагентов. Оформляем часть ДанныеДоговора из выборки и выносим эту часть на 2-ой уровень записей в таблицу-документ:
Кроме того, к переменным расчета итоговых показателей по Расходу и Приходу в данном цикле присоединим нынешние показатели.
После этого вынос данных в части ДанныеДоговорКонтрагент и ДанныеКонтрагент будет закончен. Потребуется только окончить автоматическую группировку строчек таблицы-документа:
На завершающем этапе необходимо перенести итоговые сведения в часть Подвал и перевести сам Подвал в таблицу-документ:
Пример создания внешнего отчета в 1с
1.Создаем новый внешний отчет через конфигуратор 1с
2.Присваиваем отчету имя и добавляем пустую форму отчета, нажав на лупу
3. В созданной форме добавляем элемент управления ‘Выбор периода’ (меню Форма-вставить Элемент управления)
4. Теперь хотим чтобы при открытии формы отчета автоматически проставлялись даты – к примеру с начала прошлого месяца до конца прошлого месяца.
5. Создаем макет отчета – (Макеты-добавить, тип макета:Табличный документ)
6.Добавляем заголовок и постоянные названия для строк и колонок, затем форматируем (шрифты, размеры, границы, цвет)
7. Теперь добавляем переменные значения (здесь это будет период и количество различных типов сеток).Вводим имя параметра и меняем в свойствах ячейки Заполнение со значения ‘Текст’ на ‘Параметр’
Сразу оговорюсь отчет можно было сделать и через СКД, но процесс деления на типы в данной конфигурации несколько сложен и простым запросом не обойтись, поэтому принято решение делать внешним отчетом, чтобы была возможность свободно оперировать данными.
8. Теперь нужно проименовать области печатного макета по логике их вывода. Для этого выделяем мышкой нужную область, меню Таблица-Имена-Назначить имя
Здесь в отчете будут две области ‘ЗаговокОтчета’ и ‘Строки’. Сразу оговорюсь не называйте область “Заголовок” (похоже на зарезервированное поле), во внешнем отчете происходит конфликт и область не выбирается, идут ошибки с параметрами итд.
9. Сформируем саму печатную форму по нажатию на кнопку.
Обучение программированию на 1С
Внешние отчёты и обработки
Обработка 1С – это объект конфигурации, который служит для изменения и преобразования данных в информационной базе 1С.
Отчёт 1С – это объект конфигурации, который формирует вывод данных в удобном для восприятия пользователем виде.
Рассмотрим некоторые вопросы, связанные с этими объектами:
Отличия обработки от отчёта 1С
Главное различие объектов – это назначение в их использовании:
На уровне различия в структуре метаданных в отчётах дополнительно можно указать основную Схему Компоновки Данных (СКД) и настройки для сохранения параметров. Также здесь есть используемый в текущий момент компоновщик настроек. В обработках данные структуры не используются.
Указание в отчётах основной СКД является полезной функцией, т.к. при этом можно создать требуемый отчёт, не написав ни единой строчки кода в самом модуле отчёта, что ускоряет разработку и понимание принципов функционирования СКД для новичков.
Внешние отчёты и обработки 1C
В режиме конфигуратора 1С есть возможность создавать не только объекты внутри конфигурации (в дереве метаданных), но и создавать внешние объекты в виде отдельных файлов. Это касается, в том числе, отчётов и обработок. Преимуществом внешних объектов в том, что новые объекты не требуется каждый раз включать в состав конфигурации и, соответственно, обновлять при этом всю информационную базу 1С. Вместо этого можно использовать любые необходимые отчёты и обработки и изменять их без внесения изменений в метаданные базы 1С.
Внешние отчёты/обработки сохраняются в отдельные файлы и имеют следующие расширения:
Пример создания внешней обработки 1С
Создавать внешние объекты довольно просто. Функционал, закладываемый разработчиком в конкретную реализацию отчёта или обработки в 1С 8.3 или 8.2, индивидуален и зависит от решаемой задачи.
Покажем пример создания простой обработки 1С. Обработка по нажатию на кнопку «Выполнить» должна выводить на экран сообщение, заданное пользователем в поле «Вывести».
1. Выбираем информационную базу из списка, заходим в режим конфигуратора 1С.
2. В конфигураторе выбираем пункт меню Файл – Новый…
3. Выбираем из списка вид объекта – Внешняя обработка.
4. Задаём имя обработки. В данном случае имя нашей обработки будет «ПримерВнешнейОбработки».
5. Определяем структуру данных обработки. По условию нашей задачи в структуру реквизитов нужно добавить строковое поле «Вывести».
6. Создаём пользовательскую форму. Тип формы: Обычная.
7. Правой клавишей мыши вызываем контекстное меню. Определяем обработчик нажатия на кнопку «Выполнить».
8. Прописываем код обработки.
9. Сохраняем нашу обработку на диск. Заходим в режим предприятия 1С.
10. Выбираем пункт меню Файл – Открыть…
11. Выбираем созданную нами обработку и нажимаем «Открыть».
12. В форме самой обработки вводим текст и нажимаем кнопку «Выполнить». При этом в служебных сообщениях появляется наш текст.
Мы рассмотрели создание внешней обработки. О том, как создать простейший внешний отчёт на СКД, написано более подробно в этой статье: https://life1c.ru/post/478.
Созданную обработку можно скачать по ссылке ниже.
Дополнительные отчёты и обработки
В конфигурациях 1С существуют также подключаемые внешние отчёты и обработки. Чтобы включить в информационную базу 1С соответствующую обработку/отчёт нужно выполнить ряд действий:
1. Зайти в конфигурацию в режиме предприятия 1С
2. В главном меню выбрать Сервис – Дополнительные отчеты и обработки – Дополнительные внешние обработки
3. Открылся список внешних обработок, загруженных в информационную базу 1С. Нажимаем кнопку «Добавить».
4. Загружаем файл обработки.
5. Запускаем обработку двойным кликом мышки, чтобы проверить её работоспособность.
С помощью данного механизма дополнительных обработок можно также изменять стандартные печатные формы на собственные и добавлять новые. Любой пользователь, таким образом, может расширить функционал типовой конфигурации 1С.
В этой статье мы рассмотрели создание и использование внешних отчётов и обработок. Создание внешних обработок в режиме управляемого приложения более подробно будет рассмотрено в следующей статье.
Превращение внутреннего отчета во внешний без снятия с поддержки конфигурации
Столкнувшись с желанием клиента чуть-чуть поправить типовой отчет в версии 8.3, решил, что сделаю это с минимально возможными трудностями. Для этого, как показалось логичным, нужно выгрузить отчет из конфигурации (с помощью ПКМ в дереве методаных в режиме конфигуратора, чуть доработать и сдать клиенту как внешний отчет)
Всё вроде бы выгружается хорошо, исправляем отчет под требования клиента, пробуем открыть в режиме предприятия и сталкиваемся с принеприятнейшей ошибкой: Ошибка при выполнении функции ОбщегоНазначения.ИдентификаторОбъектаМетаданных()
Посмотрел в конфигуратор, на ошибки и понял, что почти все типовые отчеты содержат такую штуку как МодульМенеджера, в котором прописано поведение отчета и сидеть переписывать модуль менеджера отчета «под себя» что называется не было никакого желания.
Решив, уже ради спортивного интереса, добиться всё таки чтобы механизм по выгрузке отчетов заработал так как мне нужно (напомню, цель была сделать возможным доработку типового отчета с минимальными трудозатратами) прибегнул к методу которого нигде не нашел: Расширение! Если отчету нужен модель менеджера сделаем ему его Но столкнулся с проблемой что при заимствовании отчета в расширение СКД нельзя поменять, но вот если загрузить внешний отчет (ПКМ в конфигураторе), тогда картина становится совсем другой.
Далее переименовал имя отчета и вот беда подкралась не заметно, в расширении не открывается СКД этого отчета (потому что мы не «перетянули» в расширение все объекты, из которых строится отчет).
Однако и тут оказалось всё достаточно просто. В том отчете который мы просто выгрузили в самом начале, СКД прекрасно открывается и редактируется. Подправив СКД под требования заказчика, осталось только заменить его в нашем отчете из расширения.
Сделать это тоже очень просто достаточно просто сравнить отчет
при этом мы знаем, что нам нужно только измененное СКД:
Теперь нужно не забыть проанализировать реквизиты отчета и позаимстовать в расширение те объекты типов которых не хватает. (в моем примере это справочник.Организация и ХранилищеВариантовОтчетов), подсистема в которую необходимо выводить отчет (сделал в администрирование чтобы было проще искать). Далее копируем модуль менеджера типового отчета в свой добавленный и вуаля, всё готово.
Как программно открыть внешний отчет из «Дополнительных отчетов и обработок» и передать параметры (при помощи БСП)
Дано: конфигурация на платформе 1С 8.3. В «Дополнительные отчеты и обработки» загружен отчет или обработка.
Задача: открыть данный отчет/обработку программно в коде, например, по кнопке.
В моем случае нужно было на одну из форм документа в конфигурации добавить кнопку, которая бы открывала внешний отчет (зарегистрированный через дополнительные отчеты и обработки), с фильтром по данному документу. Чтобы не изменять саму конфигурацию, было сделано расширение к данному документу (расширения здесь не будут рассматриваться, данное описание только в качестве примера), которое добавляло кнопку на форму документа.
Далее рассмотрим пример кода, который будет срабатывать по нажатию кнопки и открывать внешний отчет.
В сети интернет много примеров, как открыть внешний отчет или обработку. Большинство из них содержит код загрузки из файла, если это внешний файл отчета.
Итак, в БСП есть модуль работы со справочником «Дополнительные отчеты и обработки» (ДополнительныеОтчетыИОбработки), в частности есть процедура открытия отчета и функция подключения внешнего отчета:
Вторая вызывается из первой, но ее также можно вызвать и отдельно (что и будет сделано ниже).
Один из вариантов использовать первую процедуру, но он мне не понравился из-за необходимости излишних действий, чтобы заполнить переменную ВыполняемаяКоманда, а также тем, что передать параметры в отчет можно только массивом (ОбъектыНазначения).
Поэтому решила использовать функцию под номером 2, что подключает нужный отчет/обработку, который затем можно открыть по имени, возвращаемому данной функцией.
Итак, сам пример (полный код):
Пример формы с кнопками, вызывающими эти процедуры:
Скачать пример данной формы можно в файлах к статье.
Если вызывается отчет на СКД, то нужно создать для него типовую форму. Подробнее см. Как добавить типовую форму для СКД
Примечание: создавать форму, как оказалось, не обязательно. См. вариант вызова СКД без создания формы
Чтобы сработал код передачи параметров в СКД (ОткрытьВнешнийОтчетСКДсПараметром), нужно в модуле объекта СКД добавить код, принимающий эти параметры:
Скачать пример данного СКД отчета можно в файлах к статье.
Также пробовала передавать параметры в СКД вот так:
Однако возникала ошибка: Невозможно применить фиксированные настройки. Пересекаются элементы отбора.
Поэтому выше описала, как передавала параметры отбора в отчет СКД при котором такой ошибки не было.
Обработки тестировались на демо-базе БСП версии 2.4.5.
См. также Как в СКД по щелчку на какой-либо ячейке в отчете получить значение другой ячейки (там применяется метод, описанный в статье для вызова внешней обработки в качестве расшифровки ячейки СКД)