Внешние обработки в 1С:Предприятие — это универсальный инструмент для расширения функционала системы без изменения основной конфигурации. Они позволяют автоматизировать рутинные операции, добавлять новые отчёты, интегрировать 1С с другими программами или просто упрощать работу пользователей. Но как правильно написать такую обработку, если вы только начинаете осваивать 1С:Предприятие 8?
Эта статья поможет разобраться в процессе от А до Я: от подготовки рабочей среды до тестирования готового решения. Мы рассмотрим не только техническую сторону (синтаксис, модули, события), но и практические нюансы — где хранить обработки, как их обновлять и почему иногда они «не видятся» в базе. А для тех, кто боится «сломать» рабочую конфигурацию, приведём список безопасных способов отладки без риска для данных.
Важно: статья ориентирована на версию платформы 1С:Предприятие 8.3 и актуальна для большинства типовых конфигураций (Бухгалтерия, ЗУП, Управление торговлей). Если вы работаете с уникальной доработанной конфигурацией, некоторые моменты могут отличаться — это нормально.
Что такое внешняя обработка и зачем она нужна
Внешняя обработка — это отдельный файл с расширением .epf (или .erf для отчётов), который подключается к базе 1С как дополнение. В отличие от встроенных обработок, она:
- 📁 Хранится отдельно от конфигурации — её можно легко переносить между базами или обновлять без блокировки работы пользователей.
- 🔧 Не требует прав на изменение конфигурации — достаточно прав на запуск внешних обработок.
- 🔄 Может использоваться в нескольких базах одновременно (например, одна обработка для выгрузки данных в Excel и для УТ 11, и для БП 3.0).
- 🛡️ Безопаснее для тестирования — ошибка в коде не «положит» всю базу, а только прервёт выполнение обработки.
Основные сценарии применения:
- 📊 Создание нестандартных отчётов (например, аналитика продаж по нетиповым критериям).
- 🔄 Обмен данными с другими системами (Excel, XML, JSON, API банков или маркетплейсов).
- 🤖 Автоматизация рутинных операций (массовое изменение справочников, загрузка прайсов).
- 🖥️ Интеграция с оборудованием (сканеры штрихкодов, весы, фискальные регистраторы).
Пример: если в типовой 1С:Бухгалтерии нет отчёта по дебетовой задолженности с разбивкой по контрагентам и договорам, вы можете написать внешнюю обработку, которая сформирует такой отчёт за 5 минут вместо ручного сбор данных в Excel.
Подготовка рабочей среды: что нужно установить
Чтобы написать внешнюю обработку, вам потребуется:
- Платформа 1С:Предприятие 8.3 (версия не ниже 8.3.10 — в более старых могут отсутствовать некоторые функции).
- Конфигуратор — он входит в комплект поставки платформы и устанавливается вместе с ней.
- Типовая или тестовая база — для отладки (можно использовать демонстрационную базу, которая идёт с платформой).
- Текстовый редактор для просмотра кода (опционально, но удобно — например, Notepad++ или VS Code с плагином для 1С).
Если у вас ещё не установлена платформа:
- Скачайте дистрибутив с официального сайта 1С (раздел «Загрузки»).
- Запустите установщик и выберите компоненты:
1С:Предприятие+Конфигуратор. - После установки создайте тестовую базу: запустите
1cv8.exe, нажмитеДобавить→Создание новой информационной базы→ выберитеДемонстрационная база.
Если вы работаете на компьютере с ограниченными правами (например, в офисе), попросите администратора установить платформу от имени администратора. Без этого конфигуратор может не запуститься.
⚠️ Внимание: Если вы обновляете платформу с версии ниже 8.3.10, некоторые обработки, написанные для новых версий, могут не работать. Перед обновлением проверьте совместимость в документации к вашей конфигурации.
Создание новой внешней обработки: пошаговая инструкция
Теперь перейдём к практике. Откройте конфигуратор (1cv8.exe /config) и следуйте инструкции:
☑️ Подготовка к созданию обработки
- Создайте новый объект:
В меню конфигуратора выберите
Файл → Новый→Внешняя обработка. - Задайте основные свойства:
В открывшемся окне заполните:
Имя— например,ВыгрузкаВExcel(без пробелов, латиницей).Синоним— отображаемое имя (можно с пробелами, например,Выгрузка данных в Excel).Комментарий— краткое описание (опционально, но полезно для других разработчиков).
Перейдите на вкладку Формы → Основная форма. Здесь вы можете добавить элементы управления (кнопки, поля ввода, таблицы). Например, для обработки выгрузки в Excel понадобятся:
- Кнопка
Выгрузить. - Поле выбора периода.
- Флажок
Только активные записи.
Перейдите на вкладку Модуль объекта и добавьте процедуры. Пример простейшей обработки для вывода сообщения:
Процедура Выгрузить(Команда)
Сообщить("Выгрузка данных начата!", СтатусСообщения.Информация);
КонецПроцедуры
Нажмите Файл → Сохранить как и выберите папку. Файл сохранится с расширением .epf.
⚠️ Внимание: Если вы сохраняете обработку в сетевую папку, убедитесь, что у пользователей, которые будут её запускать, есть права на чтение этого файла. Иначе 1С выдаст ошибку Не удалось загрузить внешнюю обработку.
Основные элементы кода: что должно быть в обработке
Любая внешняя обработка состоит из нескольких ключевых частей. Рассмотрим их на примере обработки для выгрузки данных в Excel:
| Элемент | Описание | Пример кода |
|---|---|---|
| Переменные | Хранят данные для обработки (например, выбранный период или фильтры). | |
| Процедуры | Основная логика обработки (выгрузка, загрузка, расчёты). | |
| Функции | Вспомогательные расчёты (например, форматирование данных). | |
| Обработчики событий | Реакция на действия пользователя (нажатие кнопок, изменение полей). | |
Пример полноценной обработки для выгрузки справочника Номенклатура в Excel:
Перем мТаблицаДанных;
Процедура Выгрузить(Команда)
мТаблицаДанных = Новый ТаблицаЗначений;
мТаблицаДанных.Колонки.Добавить("Артикул");
мТаблицаДанных.Колонки.Добавить("Наименование");
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| Номенклатура.Артикул,
| Номенклатура.Наименование
|ИЗ
| Справочник.Номенклатура КАК Номенклатура";
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Строка = мТаблицаДанных.Добавить();
Строка.Артикул = Выборка.Артикул;
Строка.Наименование = Выборка.Наименование;
КонецЦикла;
Excel = Новый COMОбъект("Excel.Application");
Книга = Excel.Workbooks.Add();
Лист = Книга.Worksheets(1);
// Заполнение Excel (упрощённо)
Для Каждого Колонка Из мТаблицаДанных.Колонки Цикл
Лист.Cells(1, Колонка.Индекс + 1).Value = Колонка.Имя;
КонецЦикла;
Для НомСтр = 0 По мТаблицаДанных.Количество() - 1 Цикл
Для НомКол = 0 По мТаблицаДанных.Колонки.Количество() - 1 Цикл
Лист.Cells(НомСтр + 2, НомКол + 1).Value =
мТаблицаДанных[НомСтр][НомКол];
КонецЦикла;
КонецЦикла;
Excel.Visible = Истина; // Показать Excel пользователю
КонецПроцедуры
⚠️ Внимание: При работе с COM-объектами (например, Excel) убедитесь, что на компьютере пользователя установлен Microsoft Office соответствующей версии. Иначе обработка выдаст ошибку Не удалось создать COM-объект.
Как ускорить выгрузку больших данных?
Для таблиц с более чем 10 000 строк используйте пакетную запись в Excel через массив. Пример:
МассивДанных = Новый Массив;
Для Каждого Строка Из мТаблицаДанных Цикл
МассивДанных.Добавить(Строка.Артикул + Таб + Строка.Наименование);
КонецЦикла;
Лист.Range("A2").Resize(мТаблицаДанных.Количество(), 1).Value = МассивДанных;
Это сокращает время выгрузки в 5–10 раз.
Отладка и тестирование: как найти и исправить ошибки
Даже опытные разработчики сталкиваются с ошибками. Главное — уметь их быстро находить и исправлять. Вот алгоритм отладки:
- Запустите обработку в режиме отладки:
В конфигураторе нажмите
Отладка → Начать отладку(илиF5). Обработка откроется в пользовательском режиме, но с возможностью пошагового выполнения кода. - Используйте точки останова:
Чтобы приостановить выполнение на нужной строке, поставьте курсор на строку и нажмите
F9(или кликните слева от номера строки). При выполнении программа остановится в этом месте, и вы сможете просмотреть значения переменных. - Просматривайте значения переменных:
В окне
Отладкаперейдите на вкладкуПеременные. Здесь отображаются все текущие значения. Если переменная содержитНеопределённоевместо ожидаемого значения — ищите ошибку в логике заполнения. - Используйте сообщения для диагностики:
Вставляйте в код строку
Сообщить(ЗначениеПеременной);, чтобы вывести промежуточные данные. Например:Сообщить("Количество строк в таблице: " + мТаблицаДанных.Количество());
Типовые ошибки и их причины:
| Ошибка | Возможная причина | Как исправить |
|---|---|---|
Ошибка при вызове метода контекста (Выгрузить) |
Опечатка в имени процедуры или она не объявлена. | Проверьте регистр и наличие процедуры в модуле. |
Поле объекта не обнаружено (Артикул) |
В запросе или таблице значений нет колонки с таким именем. | Добавьте колонку или проверьте имя в запросе. |
Недостаточно памяти |
Слишком большой объём данных для обработки. | Разбейте задачу на части или оптимизируйте запрос. |
Нет прав на выполнение операции |
У пользователя недостаточно прав в 1С. | Настройте роли или запустите от имени администратора. |
⚠️ Внимание: Если обработка работает в конфигураторе, но не запускается в пользовательском режиме, проверьте:
- Права пользователя на запуск внешних обработок (в настройках ролей).
- Путь к файлу
.epf— он должен быть доступен с компьютера пользователя. - Версию платформы — если обработка написана для 8.3.18, а у пользователя 8.3.10, могут возникать ошибки.
- Откройте 1С в пользовательском режиме.
- Выберите
Файл → Открытьи укажите путь к файлу.epf. - Обработка откроется в отдельном окне. После закрытия её нужно будет открывать заново.
- В пользовательском режиме перейдите в
Сервис → Дополнительные отчёты и обработки. - Нажмите
Добавитьи выберите файл.epf. - Укажите название для отображения в меню и сохраните.
Всегда тестируйте обработку на копии рабочей базы, а не на «боевой» версии. Даже если код кажется безобидным, он может заблокировать данные или замедлить работу системы.
Как подключить обработку к базе и настроить права
Готовую обработку нужно подключить к базе, чтобы пользователи могли её запускать. Есть два способа:
Способ 1: Через меню «Файл» (для разовых задач)
Способ 2: Через подключаемые обработки (для постоянного использования)
Теперь обработка будет доступна в разделе Дополнительные отчёты и обработки для всех пользователей с соответствующими правами.
Настройка прав:
- В конфигураторе откройте
Администрирование → Пользователи. - Выберите роль (например,
Бухгалтер) и перейдите на вкладкуПрава. - В разделе
Дополнительные отчёты и обработкиустановите флажокЧтениеилиИзменение.
⚠️ Внимание: Если обработка работает с конфиденциальными данными (например, выгружает зарплату), ограничьте доступ к ней только доверенным пользователям. В противном случае рискуете нарушить ФЗ-152 «О персональных данных».
Типовые задачи и готовые примеры кода
Рассмотрим несколько распространённых сценариев с готовыми фрагментами кода, которые можно адаптировать под свои нужды.
1. Массовое изменение реквизитов справочника
Задача: поменять Ставку НДС у всех позиций номенклатуры с 20% на 10%.
Процедура ИзменитьСтавкуНДС(Команда)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.СтавкаНДС = &СтавкаНДС";
Запрос.УстановитьПараметр("СтавкаНДС", Перечисление.СтавкиНДС.НДС20);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Объект = Выборка.Ссылка.ПолучитьОбъект();
Объект.СтавкаНДС = Перечисление.СтавкиНДС.НДС10;
Объект.Записать();
КонецЦикла;
Сообщить("Ставка НДС изменена для " + Результат.Выбранно() + " позиций!");
КонецПроцедуры
2. Загрузка данных из Excel
Задача: загрузить прайс-лист из файла Excel в справочник Номенклатура.
Процедура ЗагрузитьИзExcel(Команда)
ПутьКФайлу = ПолучитьИмяФайлаДляЗагрузки();
Если НЕ ЗначениеЗаполнено(ПутьКФайлу) Тогда
Возврат;
КонецЕсли;
Excel = Новый COMОбъект("Excel.Application");
Книга = Excel.Workbooks.Open(ПутьКФайлу);
Лист = Книга.Worksheets(1);
НомСтр = 2; // Начинаем со второй строки (первая - заголовки)
Пока Истина Цикл
Артикул = Лист.Cells(НомСтр, 1).Value;
Если НЕ ЗначениеЗаполнено(Артикул) Тогда
Прервать;
КонецЕсли;
Наименование = Лист.Cells(НомСтр, 2).Value;
Цена = Лист.Cells(НомСтр, 3).Value;
Номенклатура = Справочники.Номенклатура.НайтиПоАртикулу(Артикул);
Если НЕ ЗначениеЗаполнено(Номенклатура) Тогда
Номенклатура = Справочники.Номенклатура.СоздатьЭлемент();
Номенклатура.Артикул = Артикул;
Номенклатура.Наименование = Наименование;
КонецЕсли;
Номенклатура.ЦенаПродажи = Цена;
Номенклатура.Записать();
НомСтр = НомСтр + 1;
КонецЦикла;
Excel.Quit();
Сообщить("Загружено " + (НомСтр - 2) + " позиций!");
КонецПроцедуры
Функция ПолучитьИмяФайлаДляЗагрузки()
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Диалог.Заголовок = "Выберите файл Excel";
Диалог.Фильтр = "Excel Files (.xlsx;.xls)|.xlsx;.xls";
Если Диалог.Выбрать() Тогда
Возврат Диалог.ПолноеИмяФайла;
Иначе
Возврат Неопределённое;
КонецЕсли;
КонецФункции
3. Отправка email с вложением
Задача: отправить отчёт по продажам на email из 1С.
Процедура ОтправитьОтчетНаEmail(Команда)
// Сформировать отчёт (упрощённо)
Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("Товар");
Таблица.Колонки.Добавить("Количество");
Таблица.Колонки.Добавить("Сумма");
// ... здесь код заполнения таблицы данными
// Сохранить в файл
ПутьКФайлу = КаталогВременныхФайлов() + "Отчет.xlsx";
Таблица.Записать(ПутьКФайлу, ТипФайлаExcel.Excel2007);
// Отправить email
Почта = Новый Почта;
Сообщение = Новый СообщениеЭлектроннойПочты;
Сообщение.Адресат = "director@company.ru";
Сообщение.Тема = "Отчёт по продажам за " + ТекущаяДата();
Сообщение.Текст = "Добрый день! Во вложении отчёт по продажам.";
Сообщение.Вложения.Добавить(ПутьКФайлу);
Попытка
Почта.Отправить(Сообщение);
Сообщить("Отчёт отправлен!");
Исключение
Сообщить("Ошибка отправки: " + ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
⚠️ Внимание: Для отправки email из 1С должны быть настроены параметры SMTP-сервера в администрировании базы (Администрирование → Настройки программы → Почта). Без этого код выдаст ошибку Не удалось отправить сообщение.
FAQ: Частые вопросы по внешним обработкам
Можно ли написать внешнюю обработку без знания программирования?
Да, для простых задач (например, выгрузка в Excel по шаблону) можно использовать Конструктор внешних обработок, который есть в некоторых конфигурациях (например, 1С:Управление торговлей). Он позволяет собрать обработку из готовых блоков без написания кода. Однако для сложных задач (интеграция с API, нестандартные отчёты) знание 1С:Предприятие 8 и основ программирования обязательно.
Почему обработка работает в конфигураторе, но не запускается у пользователей?
Причин может быть несколько:
- У пользователей нет прав на запуск внешних обработок (проверьте настройки ролей).
- Файл
.epfхранится в папке, к которой у пользователей нет доступа. - Версия платформы у пользователей старше, чем та, для которой написана обработка.
- В коде используются функции, недоступные в клиентском режиме (например, работа с файлами).
Для диагностики попробуйте запустить обработку от имени пользователя с полными правами. Если она заработает — проблема в правах.
Как обновить внешнюю обработку, если она уже используется?
Обновление внешней обработки происходит в два этапа:
- Замените файл
.epfна новую версию (сохраните старую на случай отката). - В пользовательском режиме перейдите в
Сервис → Дополнительные отчёты и обработки, найдите свою обработку и нажмитеОбновить.
⚠️ Важно: Если в новой версии изменилась структура данных (например, добавлены новые параметры), пользователям может потребоваться заново настроить обработку после обновления.
Можно ли защитить код обработки от изменения?
Да, для этого:
- В конфигураторе откройте модуль обработки.
- Выберите
Текст → Защита от изменения. - Установите пароль (не менее 8 символов).
После этого код нельзя будет редактировать без ввода пароля. Однако помните: если вы забудете пароль, восстановить доступ к коду будет невозможно!
Альтернативный способ — компиляция обработки в .erf-файл (для отчётов), но это не даёт 100% защиты, так как декомпиляция возможна.
Где хранить внешние обработки, чтобы все пользователи могли их использовать?
Рекомендуемые варианты:
- 📂 Сетевая папка: Создайте общую папку на сервере (например,
\\server\1C\Обработки\) и раздайте права на чтение всем пользователям. - 🖥️ Локально на каждом компьютере: Подходит для небольших компаний, но усложняет обновление.
- ☁️ Облачное хранилище: Например, Yandex Диск или Google Drive (но требует стабильного интернета).
- 📦 Внутри базы: Некоторые конфигурации позволяют хранить обработки прямо в информационной базе (раздел
Дополнительные отчёты и обработки).
⚠️ Внимание: Избегайте хранения обработок на рабочем столе пользователей — при переустановке Windows они будут утеряны.