Как исправить внешнюю обработку 1с. Как создать внешнюю обработку для типовой конфигурации

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

Отличный пример – групповая обработка документов. Это инструмент, который позволяет провести/изменить/распечатать не один документ, а сразу много, по выбранному списку. Согласитесь – очень удобно.

Для реализации в 1С инструментов для облегчения работы пользователя или администратора базы 1С существует специальный объект конфигурации – обработки 1С. Обработки 1С могут быть частью конфигурации или распространяться как отдельные файлы (тогда обработка называется внешняя обработка 1С).

Обработки 1С позволяют разрабатывать собственные инструменты как для программирования 1С, так и для настройки или управления 1С. Благодаря этому в интернете есть сотни типовых обработок (разработанных в компании 1С) и тысячи любительских обработок в интернете.

Самое время попробовать сделать обработку 1С самостоятельно. Подробности далее.

Что такое обработки 1С и как они используются

Маленькое вступление. Кто уже знаком с обработками 1С – может пропустить этот пункт.

Итак, обработка является инструментом, написанным программистом. Она ничего не умеет делать самостоятельно и не сохраняет данные в базу данных 1С, в отличие например от документа – который сохраняется в базу данных и самостоятельно умеет записываться и проводиться, без дополнительного программирования. Функции обработки 1С целиком зависят от программиста, который ее написал.

По функционалу обработки 1С можно поделить на три вида:

  • Вспомогательные обработки 1С конфигурации
    В каждой типовой конфигурации есть множество обработок. Они используются как дополнительные интерфейсные формы (рабочий стол пользователя, обзор конфигурации), как часть функционала конфигурации (внос начальных остатков, начальное заполнение базы данных, закрытие месяца).
  • Объекты (Классы)
    Кто знает другие языки программирования, уже знаком с понятием объект. Это некий класс, имеющий в своем распоряжении набор «переменных» и «функций». Его прелесть состоит в самодостаточности – то есть в одном классе собрано все, что нужно для выполнения его функций.

    В 1С классы можно создавать с помощью обработки 1С: «переменные» — реквизиты обработки 1С, «функции» — функции в модуле объекта обработки 1С (пометка Экспорт для публичных функций). Удобство состоит как в создании экземпляра такого класса, так и в его перемещении между конфигурациями.

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

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

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

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

Где находятся обработки 1С

Итак, существуют обработки 1С встроенные в конфигурацию и внешние обработки 1С.

Встроенные обработки 1С используются программистом, разрабатывающим конфигурацию, ситуативно – то есть они могут быть или выведены в меню пользователя (часть в меню Сервис), или открываться программно из других объектов 1С (например, из формы справочника).

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

В конфигураторе встроенные в конфигурацию обработки 1С находятся в ветке Обработки.

Внешние обработки 1С открываются и в конфигураторе и в Предприятии с помощью меню Файл/Открыть.

Безопасность. Обратите внимание на . Модуль объекта обработки 1С выполняется автоматически при открытии обработки 1С в режиме Предприятия. Поэтому, если Вы открываете обработку написанную злоумышленником – она может быть выполнена автоматически без лишних вопросов.

Как сделать обработку 1С самостоятельно

Итак, приступаем к самому интересному – алгоритм создания обработки 1С самостоятельно с нуля.

Рассмотрим в данной статье пошаговую инструкцию по созданию внешней обработки в 1С 8.3 в режиме управляемого приложения, соответственно, будем использовать управляемые формы. А самое главное — мы научимся подключать её к механизму «внешних обработок» конфигураций 1С, построенных на библиотеке стандартных подсистем версии 2.0 и новее.

Задача будет следующая: создать простейшую внешнюю обработку, которая будет выполнять групповое действие над справочником «Номенклатура», а именно, устанавливать выбранный процент ставки НДС для указанной группы номенклатуры.

Для этого сразу произведем необходимую настройку в программе (рассматривается конфигурация 1С 8.3: «Бухгалтерия предприятия 3.0» на управляемых формах).

Установка данного флажка дает нам возможность использовать внешние обработки.

Создание новой внешней обработки в 1С 8.3 на примере

Теперь переходим в конфигуратор. В меню «Файл» выбираем «Новый…». Откроется окно выбора вида создаваемого файла. Выбираем «Внешняя обработка»:

Откроется окно новой внешней обработки. Сразу зададим ей имя. Оно будет предложено при сохранении обработки на диск:

Добавим новую управляемую форму обработки. Указываем, что это форма обработки и она является основной:

На форме у нас будет два реквизита:

  • ГруппаНоменклатуры – ссылка на справочник «Номенклатура»;
  • ВыбСтавкаНДС – ссылка на перечисление Ставки НДС.

Создаем реквизиты в колонке «Реквизит» в верхнем правом окне. Перетаскиваем мышкой их в левое верхнее окно. Новые реквизиты должны сразу отобразиться на форме внизу.

Очередность реквизитов можно менять стрелками «Вверх» – «Вниз»:

Получите 267 видеоуроков по 1С бесплатно:

Осталось добавить кнопку «Установить». В управляемых формах нельзя просто так добавить кнопку на форму. Даже если добавить её в структуру элементов формы, на самой форме её видно не будет. Кнопку обязательно нужно связать с командой, которую она будет выполнять. Переходим к закладке «Команды» и добавляем команду «УстановитьСтавкуНДС». В свойствах команды создаем действие. Обработчик команды выбираем «На клиенте». Команду можно добавить на форму также простым «перетаскиванием» в раздел с элементами формы.

В модуле формы будет создана одноименная процедура. В ней вызовем процедуру на сервере:

&НаКлиенте

Процедура УстановитьСтавкуНДС(Команда)

УстановитьСтавкуНДСНаСервере();

КонецПроцедуры

В процедуре на сервере напишем небольшой запрос и действия, связанные с установкой ставки НДС:

&НаСервере

Процедура УстановитьСтавкуНДСНаСервере()

Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| Номенклатура.Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Ссылка В ИЕРАРХИИ (&ГруппаНоменклатуры)
| И НЕ Номенклатура.ПометкаУдаления
| И НЕ Номенклатура.ЭтоГруппа»;

Запрос.УстановитьПараметр(«ГруппаНоменклатуры», ГруппаНоменклатуры);
РезЗапроса = Запрос.Выполнить();
ВыбДетЗаписи = РезЗапроса.Выбрать();

Пока ВыбДетЗаписи.Следующий() Цикл

Попытка
СпрНомОбъект.Записать();
Исключение
Сообщить(«Ошибка записи объекта «»» + СпрНомОбъект + «»»!
|» + ОписаниеОшибки());
КонецПопытки;

КонецЦикла;

КонецПроцедуры

Возвращаемся на закладку «Форма», добавляем на форму кнопку и связываем ее с командой:

Как таковая наша обработка готова к использованию. Чтобы ее вызвать, в режиме «1С Предприятия» нужно зайти в меню «Файл» – «Открыть» и выбрать созданный файл.

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

Для этого и служит раздел «Дополнительные отчеты и обработки».

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

Описание функции «Сведения О Внешней Обработке»

Приведу пример содержимого данной функции. Она должна быть экспортной и, соответственно, располагаться в модуле обработки:

Функция СведенияОВнешнейОбработке() Экспорт

ДанныеДляРег = Новый Структура();
ДанныеДляРег.Вставить(«Наименование», «Установка ставки НДС»);
ДанныеДляРег.Вставить(«БезопасныйРежим», Истина);
ДанныеДляРег.Вставить(«Версия», «ver.: 1.001»);
ДанныеДляРег.Вставить(«Информация», «Обработка для установки ставки НДС в справочнике Номенклатура»);
ДанныеДляРег.Вставить(«Вид», «ДополнительнаяОбработка»);

ТабЗнКоманды = Новый ТаблицаЗначений;
ТабЗнКоманды.Колонки.Добавить(«Идентификатор»);
ТабЗнКоманды.Колонки.Добавить(«Использование»);
ТабЗнКоманды.Колонки.Добавить(«Представление»);

НовСтрока = ТабЗнКоманды.Добавить();
НовСтрока.Идентификатор = «ОткрытьОбработку»;
НовСтрока.Использование = «ОткрытиеФормы»;
НовСтрока.Представление = «Открыть обработку»;
ДанныеДляРег.Вставить(«Команды», ТабЗнКоманды);

Возврат ДанныеДляРег;

КонецФункции

Чтобы лучше понять, какие поля структуры регистрационных данных нужно использовать, посмотрим реквизиты справочника «Дополнительные отчеты и обработки»:

Как видим, все довольно просто. Не совпадает лишь один реквизит: «ВариантЗапуска» – «Использование». Если посмотреть код одного из общих модулей, то мы увидим, как возникает связка этих полей:

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

Подключение внешней обработки в 1С 8.3

Внимание! Перед вами ознакомительная версия урока, материалы которого могут быть неполными.

Войдите на сайт как ученик

Войдите как ученик, чтобы получить доступ к материалам школы

Создание конфигураций 1С: добавляем обработку

Продолжаем изучение азов создания конфигураций на 1С.

На этом уроке мы вместе создадим новую обработку, а затем напишем для неё команды, которые демонстрируют работу со справочником "Сотрудники".

Возвращаемся в конфигуратор и открываем дерево конфигурации.

Добавляем новую обработку

Правой кнопкой нажимаем на разделе "Обработки" и выбираем пункт "Добавить":

Открылось окно создания новой обработки. Перейдём на закладку "Основные" и укажем в качестве имени обработки "ОбработкаСправочников":

Создаём форму для обработки

Перейдём на закладку "Формы" нажмём на зелёный плюсик, чтобы добавить новую форму (визуальное представление нашей обработки):

Появился конструктор создания формы. Оставим всё по умолчанию и нажмём "Готово":

Открылась новая форма:

Создаём новую команду для формы

Перейдём на закладку "Команды"->"Команды формы":

Добавим новую команду (зелёный плюсик):

И в свойствах новой команды укажем имя "ВыводВсехСотрудников":

Нажмём в её же свойствах на лупу рядом с полем "Действие", чтобы задать обработчик команды. Выберем вариант создания обработчика "НаКлиенте" и нажмём "ОК":

Нас перенесло в модуль формы в процедуру-обработчик команды "ВыводВсехСотрудников":

Пишем код обработчика команды

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

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

Поэтому давайте допишем в конце модуля процедуру такого вида:

Обратите внимание, что перед ней я указал признак "&НаСервере". Это означает, что она будет выполняться на сервере, а значит мы можем из неё читать данные справочника.

Теперь организуем вызов этой процедуры из клиентской "ВыводВсехСотрудников":

Тут логика такая:

  1. Пользователь вызывает команду "ВыводВсехСотрудников" (например, нажатием на кнопку, которой у нас ещё правда нет)
  2. Команда запускает одноименную процедуру-обработчик "ВыводВсехСотрудников" на клиенте (ведь кнопка, а значит и команда находятся на клиенте)
  3. Клиентская процедура "ВыводВсехСотрудников" делает вызов серверной процедуры "ВыводВсехСотрудниковНаСервере"
  4. Серверная процедура "ВыводВсехСотрудниковНаСервере" читает данные справочника из базы и выводит их в окно сообщений

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

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

Для доступа к данным справочника используется менеджер, доступ к которому осуществляется так:

Менеджер = Справочники. Сотрудники;

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

Что представляет из себя менеджер справочника? Менеджер - это ещё не сами данные справочника. Менеджер - это некоторый программный объект (можете представлять его себе в виде чёрного ящика), через который мы можем что-либо делать со справочником.

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

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

Менеджер = Справочники. Сотрудники; Выборка = Менеджер. Выбрать() ;

Что представляет из себя выборка? Выборка (опять же это только имя переменной, в которую мы сохраняем результат работы метода "Выбрать" и оно могло бы быть любым другим) представляет из себя коллекцию, но не такую, как например массив или список значений.

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

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

Чтобы получить очередную порцию данных из выборки, необходимо вызвать у выборки встроенный в неё метод "Следующий". Получение порций данных (одна порция соответствует одному элементу справочника) обычно происходит в цикле:

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

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

Получается в один момент - мы работаем с данными только одного из элементов справочника. И тут мы можем или сразу их вывести пользователю (методом "Сообщить") или, к примеру, мы можем сложить их в другую коллекцию (массив), чтобы потом уже за раз с ними что-нибудь сделать. Всё зависит от задачи, которую мы решаем.

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

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

Любая существующая в конфигурации обработка может быть преобразована во внешнюю, и наоборот. Кроме этого внешние обработки 1С могут быть добавлены в структуру прикладного решения как новые объекты.

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

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

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

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

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

Чтобы создать внешнюю обработку нужно зайти в конфигуратор, найти отчет операции по датам в дереве конфигурации. Затем в контекстном меню выбрать пункт сохранить как внешнюю обработку и указать место куда ее сохранить.

Для работы с внешними обработками (а внешняя печатная форма тоже является внешней обработкой) существует объект ВнешниеОбработки.

Рассмотрим два возможных случая:

Внешняя обработка хранится на диске отдельно от информационной базы

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

Открытие формы внешней обработки

Для программного открытия формы внешней обработки в 1С используется функция ПолучитьФорму() объекта ВнешниеОбработки. Функция имеет несколько параметров. Рассмотрим простое открытие основной формы обработки:


Форма= ВнешниеОбработки. ПолучитьФорму(АдресФайла) ;
Форма. Открыть() ;

Для открытия неосновной формы внешней обработки необходимо указать ее имя.

//В переменной АдресФайла находится полный путь к файлу внешней обработки
Форма= ВнешниеОбработки. ПолучитьФорму(АдресФайла, "НеосновнаяФорма" ) ;
Форма. Открыть() ;

Открытие внешней обработки как объекта

Для того чтобы получить внешнюю обработку как объект используется функция Создать() объекта ВнешниеОбработки.

//В переменной АдресФайла находится полный путь к файлу внешней обработки
ОбъектОбработки= ВнешниеОбработки. Создать(АдресФайла) ;

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

//В переменной АдресФайла находится полный путь к файлу внешней обработки

Внешняя обработка или печатная форма сохранена в информационной базе

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

Для открытия внешней обработки нужно:

  1. Получить ее из хранилища.
  2. Сохранить файл с обработкой на диск.
  3. Открыть форму или получить объект обработки.
  4. Если мы имеем дело с внешней печатной формой, то можно заполнить стандартный реквизит СсылкаНаОбъект и вызвать экспортную функцию Печать.

//В переменной СпрСсылка находится ссылка на элемент справочника ВнешниеОбработки
ДвДанные= СпрСсылка. ХранилищеВнешнейОбработки. Получить() ;
АдресФайла= ПолучитьИмяВременногоФайла() ;
ДвДанные. Записать(АдресФайла) ;
ОбъектОбработки= ВнешниеОбработки. Создать(АдресФайла, Ложь ) ;