1с выполнить отчет com

Обновлено: 08.07.2024

Приветствую. Продолжаем изучать объекты на дереве конфигурации и на очереди "Отчет" (Рисунок 1).

Создание отчета ничем не отличается от создания любого другого объекта дерева конфигурации: через контекстное меню или через значок плюсик.

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

Как и в жизни, отчеты хранят какую-то информацию, так и наши отчеты будут хранить информацию, которую хочет видеть пользователь.

Приступим к созданию отчета. Перед нами стоит задача: необходимо вывести список всех сотрудников по предприятию.

Добавляем отчет и называем его "Список сотрудников" (Рисунок 2).

Теперь необходимо нажать на кнопку "Открыть схему компоновки данных" (Рисунок 3).

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

В открывшемся окне нажимаем "Готово"(Рисунок 4).

В следующем окне нужно подготовить все для создания отчета. Для этого создадим запрос (Рисунок 5).

После этого переходим в низ открывшегося окна и нажимаем кнопку "Конструктор запроса" (Рисунок 6).

В открывшемся окне нужно выбрать тот объект, по которому вы хотите сделать отчет, в данном случае нас интересует отчет по сотрудникам, значит выбираем справочник "СписокСотрудников" (Рисунок 7).

Перетаскиваем справочник (или двойным нажатием или на стрелочку вправо, выделив справочник) во второй столбец (Рисунок 7).

Теперь необходимо раскрыть элементы этого справочника и выбрать там те, которые мы хотим видеть в отчете (Рисунок 8). Перетаскиваем в столбец "Поля" нужные элементы (Рисунок 8).

После этого нажимаем "Ок" и в поле "" появится запрос (Рисунок 9).

Переходим на вкладку "Настройки" (Рисунок 10).

На этой вкладке нужно создать сам отчет (Рисунок 11). Создаем группировку.

В новом окне нажимаем "Ок", ничего не меняя (Рисунок 12).

После этого идем вниз и перетаскиваем нужные поля (Рисунок 13).

В итоге у вас должно получиться так (Рисунок 14).

Доступные поля - это те поля, которые вы выбрали на этапе создания запросе.

После этого закроем все окна, отчет готов, но нужно добавить его в одну из подсистем, иначе пользователь не сможет им пользоваться (Рисунок 15).

Запустим пользователя, перейдем в подсистему и найдем наш отчет (Рисунок 16).

Как видите, отчета нет. Нужно нажать кнопку "Сформировать" и отчет появится (Рисунок 17).

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

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

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

Навеяно многочисленными вопросами по работе с COM объектами.

Когда я начинал изучать COM соединение в 1С, то на первых порах сломал немало копий и бубнов, пытаясь реализовать то одну, то другую задачу. Все время приходилось держать в уме –«все, что пришло из той базы, кроме простых типов, –это не объекты 1С. Это объекты 1С, завернутые в оболочку COMObject». Это немного напрягало. Потом я открыл для себя модуль внешнего соединения и у меня случился «щелк» в мозгах, который поставил все на место.

Я прописал в этом модуле простецкую экспортную функцию и жить с COM стало намного проще и веселее.

Вот эта функция:

Думаю особо объяснять тут ничего не надо.

Из вызывающей базы через переменную-соединение вызываем эту функцию и передаем в нее код, который надо выполнить. В переданном коде переменной Ответ присваиваем значение, которое нам надо получить из подключенной базы.

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

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

Простой вопрос с получением значения перечисления(который задается чаще всего) решается предельно просто:

Если не напутали в буквах в Исполнить код, то в Ответ получим нужную ссылку на нужное значение перечисления.

Но я на всякий случай все таки проверяю.

Причем самая вкусность в том, что переданный в ВспомПараметр COMObject, полученный ранее, на той стороне снова становится нормальным объектом 1С.

Например если мы получили по COM ссылку на элемент справочника, то в вызываемой базе он будет COMObject. Но если мы передадим его в параметр ВспомПараметр при вызове ИсполнитьВн(), то в передаваемом коде на той стороне переменную ВспомПараметр можно уже использовать как нормальный объект СправочникСсылка

Конечно наименование можно поменять и в вызывающей базе, не сильно напрягаясь. Но это просто пример использования.

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

Если нужно просто выполнить действия например над переданным ВспомПараметром и ничего возвращать не нужно, то про ответ забываем и он при удачном выполнении вернется со значением по умолчанию, т.е. «ОК».

Если вернулось не «ОК», значит была ошибка выполнения и надо разбираться.

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

Специальные предложения

Electronic Software Distribution

Интеграция 1С с системой Меркурий

Алкогольная декларация

Готовые переносы данных

54-ФЗ

Управление проектом на Инфостарте

Траектория обучения 1С-разработчика

Класс!
Работает даже без "модуля внешнего соединения".

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

p.s. за советы "чуть-чуть изменить конфу" хочется минусовать, не глядя. Есть несколько способов добиться того же, что описано в статье, не меняя конфу никак (вот, хотя бы, в (1) приведено, но там нужны права на запуск внешних обработок). Но топорные решения - они да, самые простые.

(6) Yashazz, не все подписаны на ИТС. И не для каждого это элементарные вещи. Хотя для более менее опытного спеца- конечно ерунда. Но ведь не все супер спецы, не так ли?

+(6)>>p.s. за советы "чуть-чуть изменить конфу" хочется минусовать, не глядя

:-) Сразу видно ярого апологета, молящегося на стандартные конфы. Это, сударь, скорее ваш недостаток, чем достоинство. Я всю карьеру работаю либо с сильно переписанными стандартными либо с вовсе уникальными конфами. И ничего криминального в изменении кода, в отличии от вас, совершенно не вижу.Увы.

Я ничего не путаю, в первой функции ошибок нет? Сдается мне она ВСЕГДА должна ответ "ОК" присылать. Может все же должно быть Ответ = Выполнить(КодВыполнить); ?
И почему проверка на Строку? А если я в ответ именно строковое значение хочу получить?
Сорри конечно, если я туплю. (2) V_V_V, У меня "ошибается" только с пустыми параметрами

Пример с "номенклатурой" работает.

Да, все долго мучились с COM-соединением. Интересная методика :) Попробую взять на вооружение. Спасибо. Я месяца 2 назад потратил 2 два дня только на разработку инфраструктуры для обмена через Com. Где же вы были раньше. Методика, конечно, интересная.
Но увеличивает уязвимость базы.
Можно написать на VBScript программку, которая подключится к базе и вызовет такую функцию.
А в параметре КодВыполнить можно написать все что угодно. Например удалить все документы, или переименовать все записи какго-нибудь справочника рендомными значениями.
Вот же вирусяка то получится :) (7) Danila-Master, то же самое можно сделать и без такой функции.

"С тех пор я обязательно вставляю эту функцию во все конфигурации, с которыми предстоит долгое общение или сопровождение. Очень облегчает жизнь впоследствии."

это очень облегчает жизнь тем, кто хочет произвести неправомерные действия с базой. Если я увижу такую ДЫРУ в какой-либо из сопровождаемых базах, я немедленно её закрою, а на того, кто её сделал поставлю вопрос о проф пригодности.

Автор никогда не задумывался, почему такую супермегаполезную функцию разработчики за десяток лет не запилили ни в одной типовой конфигурации?

(9) Stim213, Тогда надо всю жизнь сидеть дома и не выходить на улицу. Вдруг машина собъет или кирпич на голову упадет?
Хотя и на квартиру может упасть самолет:-)
Чтобы знать что такая функция есть надо зайти в конфигуратор и посмотреть в модуль внешнего соединения. А уж нахождение в конфигураторе - вот это уязвимость так уязвимость!:-)

(10) "Чтобы знать что такая функция есть надо зайти в конфигуратор и посмотреть в модуль внешнего соединения. А уж нахождение в конфигураторе - вот это уязвимость так уязвимость"

Отвечаю: чтобы узнать про эту дыру не нужен доступ в конфигуратор. Достаточно доступа к бекапу, cf или просто болтливый программист.

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

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

Анна Викулина

Одним из способов перенести данные из одной конфигурации 1С в другую является программное подключение с помощью COM. Многие компании используют несколько различных баз, между которыми должны быть определенные связи и зависимости. Если необходимо не только перенести данные, но и выполнить определенную обработку данных, то COM соединение будет оптимальным механизмом. Умение анализировать данные из другой базы 1С пригодиться любому разработчику.

Подключаемся через COM к базе 1С

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

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

  1. Какого она типа – файловая или клиент-серверная;
  2. Где она располагается;
  3. Под каким именем и паролем в нее можно зайти;
  4. Какие данные вас интересуют.

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

Функция подключения проста и не должна вызвать вопросов, если все параметры указаны верно. Для ускорения отладки и анализа возможных ошибок лучше заключить подключение в конструкцию «Попытка». Возвращать функция будет значение типа «COM объект», с которым и предстоит работать, получая нужные данные.

Через COM соединение вы можете не только выбирать данные, но и добавлять их в базу, к которой подключаетесь. Помните, что передавать через COM объект мы можем 4 примитивных типа данных. Другие типы придется задавать с помощью встроенных в платформу функций поиска. Учтите, что глобальные функции платформы вызываются тоже через COM-соединение.

Получаем данные из базы 1С

После того как получили нужный объект, необходимо прочитать данные из другой базы. Для этого мы применяем запрос через COM соединение в 1С 8.3 с помощью полученного значения типа «COM объект» из функции. Важно сначала подключиться к базе, а затем уже выполнять запрос. Выполнение происходит через метод NewObject с указанием в качестве параметра типа объекта в строковом виде – «Запрос».

К примеру, чтобы получить информацию о пользователях определенного подразделения, зададим условие в запрос через параметры. Один параметр будет простого типа – строка, а подразделение – ссылкой элемента справочника «Структура предприятия». Результат запроса является таблицей с перечисленными полями того типа, какого они существуют в базе, к которой произошло COM соединение. Если необходимо их преобразовать в другие типы – воспользуйтесь стандартными функциями платформы:

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

При переносе документов или элементов справочников всегда возникает вопрос о контроле переноса определенного объекта. С помощью COM соединений можно решить подобные проблемы через уникальный идентификатор. Нужно найти объект в подключаемой базе по идентификатору из текущей ИБ с помощью функции «ПолучитьСсылку», используя идентификатор в виде строки. Если такового не нашлось, вы можете создать его с помощью COM соединения.

Также COM соединение имеет право использовать процедуры и функции из общих модулей 1С с включенным свойством «Внешнее соединение». Кроме этого условия, вызываемая функция или процедура должна быть экспортная и не включать интерактивные действия, выполняемые на сервере. В противоположном случае вы увидите ошибку о недопустимости операции.

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

Сначала получаем форму.

Если отчет хранится в базе тогда выполняем на клиенте код:

Далее получаем настройки:

Через серверный вызов получаем настройки и если нужно заполняем параметры Компоновщика в отдельной процедуре.

Загружаем измененные настройки в компоновщик

Код выполняется на клиенте, сначала мы формируем структуру с необходимыми параметрами формы, а потом вызываем процедуру открытия. Часто используемые параметры в данном случае это:

Сначала получаем схему компоновки данных. Схема может быть получена из разных источников: общий макет, макет прикладного объекта, такого как справочник или отчет, макет из внешней обработки.

Код выполняется на сервере.

Получение локального макета

Получение макета произвольного отчета

Получение макета во внешней обработке

Получение макета из внешней обработки или отчета

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

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

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

И когда будем формировать

Далее программно заполняем параметры Компоновщика. Об этом подробно в разделе 4 .

Объявляем создаем необходимые объекты:

Создаем макет компоновки с помощью компоновщика макета:

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

Инициализируем процессор компоновки данных

Создаем процессор вывода:

Для вывода в таблицу значений используется другой процессор вывода:

Запускаем процесс вывода:

Теперь мы можем проводить нужные операции с полученными данными.

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

При программном формировании СКД как в пункте 2 у нас есть огромное количество возможностей по управлению отчетом. Опишем самые часто используемые из них.

Или если с добавлением нового параметра

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

Параметры

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

Добавление параметра делается следующим образом

Отбор

У отборов нет специальных функций по установке значений. Поэтому нужно перебирать коллекцию циклом.

Структура

Для адаптации отчета к выводу в таблицу значений нужно очистить структуру группировок отчета и создать поле группировки “Детальные записи”.

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

Приведенные примеры кода были протестированы на платформе 1С:Предприятие 8.3 (8.3.13.1690).

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