Чтобы создать обработку в 1С, откройте базу в конфигураторе, выберите «Файл» → «Новый» → «Внешняя обработка», добавьте форму, реквизиты и команду, напишите код и сохраните файл с расширением .epf. Дальше обработку можно открыть через «Файл» → «Открыть» или, что правильнее, зарегистрировать в «Дополнительных отчетах и обработках» — тогда она появится в нужном разделе программы.

Ниже — пошаговый разбор на живом примере: обработка, которая находит контрагентов без ИНН. Он подойдёт и тем, кто никогда не открывал конфигуратор.

Какие бывают обработки в 1С

Обработка — это объект, который не хранит данные, а что-то с ними делает: ищет, проверяет, заполняет, загружает, выгружает. Бывает три вида:

  • Встроенная — часть конфигурации. Её видно в дереве объектов в конфигураторе, в ветке «Обработки». Чтобы создать новую, нужно менять конфигурацию, а это снятие с поддержки и сложности при обновлении.
  • Внешняя — отдельный файл .epf. Хранится вне базы, подходит к любой базе той же конфигурации. Это самый частый вариант для разовых и небольших задач.
  • Дополнительная — та же внешняя обработка, но зарегистрированная в справочнике «Дополнительные отчеты и обработки». Хранится уже внутри базы, запускается из раздела программы, доступ к ней можно раздать по пользователям.

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

Что нужно для создания обработки

  1. Доступ к конфигуратору и пользователь с полными правами.
  2. Копия базы для отладки. Тестировать код, который что-то меняет, на рабочей базе — плохая идея.
  3. Открытая конфигурация нужной базы. Внешнюю обработку можно создать и в пустом конфигураторе, но тогда при выборе типов не будет справочников и документов вашей программы. Поэтому сначала откройте конфигуратор той базы, для которой пишете, и уже из него создавайте новый файл.

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

Шаг 1. Создайте файл

  1. Запустите базу в режиме «Конфигуратор».
  2. Откройте меню «Файл» → «Новый».
  3. Выберите «Внешняя обработка» и нажмите «ОК».
  4. Откроется окно обработки. В поле «Имя» напишите латиницей или кириллицей без пробелов, например КонтрагентыБезИНН. В поле «Синоним» — понятное название, которое увидит пользователь.
  5. Сразу сохраните файл: «Файл» → «Сохранить как». Расширение .epf поставится само.

Шаг 2. Добавьте реквизиты и табличную часть

Реквизиты обработки — это поля, в которых хранятся параметры и результаты, пока форма открыта.

  1. В окне обработки на закладке «Табличные части» нажмите «Добавить» и назовите табличную часть Результат.
  2. Внутри неё добавьте реквизит Контрагент с типом «СправочникСсылка.Контрагенты».

Шаг 3. Создайте форму

  1. На закладке «Формы» нажмите «Добавить».
  2. В конструкторе оставьте тип «Форма обработки» и нажмите «Готово».
  3. В редакторе формы перетащите табличную часть Результат из правой верхней панели «Реквизиты» в левую панель «Элементы». На форме появится таблица.

Шаг 4. Добавьте команду и кнопку

  1. В редакторе формы откройте закладку «Команды» и нажмите «Добавить». Назовите команду Найти.
  2. В свойствах команды в поле «Действие» нажмите на лупу — 1С создаст пустую процедуру в модуле формы.
  3. Перетащите команду в командную панель формы — получится кнопка.
Создание внешней обработки 1С: форма с таблицей и кнопкой, которая ищет данные в базе
Создание внешней обработки 1С: форма с таблицей и кнопкой, которая ищет данные в базе

Шаг 5. Напишите код

Вот пример модуля формы. Клиентская процедура реагирует на нажатие кнопки, серверная — выполняет запрос к базе, потому что данные доступны только на сервере.

1С
&НаКлиенте
Процедура Найти(Команда)
	НайтиНаСервере();
КонецПроцедуры

&НаСервере
Процедура НайтиНаСервере()

	Объект.Результат.Очистить();

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

	Выборка = Запрос.Выполнить().Выбрать();
	Пока Выборка.Следующий() Цикл
		НоваяСтрока = Объект.Результат.Добавить();
		НоваяСтрока.Контрагент = Выборка.Контрагент;
	КонецЦикла;

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

Обработка ничего не меняет в базе — только показывает список. Это хороший первый пример: ошибиться и что-то испортить невозможно.

Шаг 6. Проверьте обработку

  1. Сохраните файл.
  2. Запустите базу в режиме «1С:Предприятие» (из конфигуратора удобно через «Отладка» → «Начать отладку»).
  3. Откройте «Файл» → «Открыть» и выберите файл .epf. При первом открытии программа предупредит, что файл может быть небезопасен, — подтвердите, если файл ваш.
  4. Нажмите «Найти».

Если пункт «Файл» → «Открыть» не срабатывает или выдаёт ошибку прав, значит, у пользователя нет права на интерактивное открытие внешних обработок. В типовых конфигурациях оно по умолчанию закрыто и выдаётся отдельным профилем групп доступа с ролью «Интерактивное открытие внешних отчетов и обработок». Выдавать эту роль всем подряд не стоит: внешний файл может сделать с базой что угодно.

Как сделать обработку дополнительной

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

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

	ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();
	ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка();
	ПараметрыРегистрации.Версия = "1.0";

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

	Возврат ПараметрыРегистрации;

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

Здесь используются модули библиотеки стандартных подсистем (БСП), на которой построены все современные типовые конфигурации: Бухгалтерия, УТ, КА, ERP, ЗУП, УНФ. Сама процедура подключения в режиме предприятия — через «Администрирование» → «Печатные формы, отчеты и обработки» → «Дополнительные отчеты и обработки» — подробно разобрана в статье как добавить обработку в 1С, повторять её не буду.

Кроме дополнительной обработки, через тот же механизм подключаются печатные формы и обработки заполнения табличных частей. Про печатные формы — в отдельной статье о создании печатных форм в 1С.

Обработка, которая меняет данные

Когда обработка начинает что-то записывать, правила строже:

  1. Работайте через объект. Чтобы изменить элемент справочника, получите его объект через Ссылка.ПолучитьОбъект(), измените реквизит и вызовите Записать(). Как это делается для новых элементов, показываю в статье как создать элемент справочника программно.
  2. Сначала покажите, потом меняйте. Хорошая практика — первая кнопка заполняет таблицу тем, что будет изменено, вторая применяет изменения. Пользователь видит масштаб до того, как нажать.
  3. Ловите ошибки. Оборачивайте запись в Попытка ... Исключение, чтобы одна проблемная запись не останавливала всю обработку, и выводите сообщение о том, что не записалось.
  4. Сделайте резервную копию перед первым запуском на рабочей базе.

Типовые ошибки

  • «Тип не определён» при выборе типа реквизита. Обработку создавали в конфигураторе без открытой базы. Откройте конфигуратор нужной базы и создайте файл заново или переоткройте его оттуда.
  • «Метод объекта не обнаружен (СведенияОВнешнейОбработке)». Функция написана в модуле формы, а не в модуле объекта, или у неё нет слова Экспорт.
  • «Недостаточно прав для открытия внешних обработок». Нет роли на интерактивное открытие. Либо выдайте её, либо зарегистрируйте обработку как дополнительную.
  • Обработка работает в файловой базе, но падает на сервере. В клиентской процедуре идёт обращение к базе данных или серверная процедура пытается показать что-то на экране. Всё, что работает с данными, должно быть в &НаСервере, всё, что показывает окна, — в &НаКлиенте.
  • После обновления 1С появилась ошибка «Поле объекта не обнаружено». Разработчики 1С переименовали или удалили реквизит, к которому обращается код. Нужно поправить обработку под новую версию.
  • Обработка долго работает. Чаще всего виновато обращение к реквизитам через точку внутри цикла. Получайте всё нужное одним запросом заранее.

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

Итог

  • Внешняя обработка создаётся в конфигураторе: «Файл» → «Новый» → «Внешняя обработка», сохраняется в файл .epf.
  • Создавайте её из конфигуратора нужной базы, иначе не будет доступа к справочникам и документам.
  • Минимальный набор: реквизиты, форма, команда и серверная процедура с запросом.
  • Чтобы обработка появилась в разделе программы, добавьте в модуль объекта функцию СведенияОВнешнейОбработке и зарегистрируйте её в дополнительных обработках.
  • Обработки, которые меняют данные, сначала проверяйте на копии базы и показывайте пользователю, что будет изменено.
  • Для изменения поведения типовых объектов вместо обработки используйте расширение.