Внешние обработки в 1С:Предприятие — это универсальный инструмент для расширения функционала системы без изменения основной конфигурации. Они позволяют автоматизировать рутинные операции, добавлять новые отчёты, интегрировать 1С с другими программами или просто упрощать работу пользователей. Но как правильно написать такую обработку, если вы только начинаете осваивать 1С:Предприятие 8?

Эта статья поможет разобраться в процессе от А до Я: от подготовки рабочей среды до тестирования готового решения. Мы рассмотрим не только техническую сторону (синтаксис, модули, события), но и практические нюансы — где хранить обработки, как их обновлять и почему иногда они «не видятся» в базе. А для тех, кто боится «сломать» рабочую конфигурацию, приведём список безопасных способов отладки без риска для данных.

Важно: статья ориентирована на версию платформы 1С:Предприятие 8.3 и актуальна для большинства типовых конфигураций (Бухгалтерия, ЗУП, Управление торговлей). Если вы работаете с уникальной доработанной конфигурацией, некоторые моменты могут отличаться — это нормально.

Что такое внешняя обработка и зачем она нужна

Внешняя обработка — это отдельный файл с расширением .epf (или .erf для отчётов), который подключается к базе как дополнение. В отличие от встроенных обработок, она:

  • 📁 Хранится отдельно от конфигурации — её можно легко переносить между базами или обновлять без блокировки работы пользователей.
  • 🔧 Не требует прав на изменение конфигурации — достаточно прав на запуск внешних обработок.
  • 🔄 Может использоваться в нескольких базах одновременно (например, одна обработка для выгрузки данных в Excel и для УТ 11, и для БП 3.0).
  • 🛡️ Безопаснее для тестирования — ошибка в коде не «положит» всю базу, а только прервёт выполнение обработки.

Основные сценарии применения:

  • 📊 Создание нестандартных отчётов (например, аналитика продаж по нетиповым критериям).
  • 🔄 Обмен данными с другими системами (Excel, XML, JSON, API банков или маркетплейсов).
  • 🤖 Автоматизация рутинных операций (массовое изменение справочников, загрузка прайсов).
  • 🖥️ Интеграция с оборудованием (сканеры штрихкодов, весы, фискальные регистраторы).

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

📊 Для чего вы чаще всего используете внешние обработки в 1С?
Автоматизация отчётов
Обмен данными с другими системами
Массовая обработка справочников
Интеграция с оборудованием
Другое

Подготовка рабочей среды: что нужно установить

Чтобы написать внешнюю обработку, вам потребуется:

  1. Платформа 1С:Предприятие 8.3 (версия не ниже 8.3.10 — в более старых могут отсутствовать некоторые функции).
  2. Конфигуратор — он входит в комплект поставки платформы и устанавливается вместе с ней.
  3. Типовая или тестовая база — для отладки (можно использовать демонстрационную базу, которая идёт с платформой).
  4. Текстовый редактор для просмотра кода (опционально, но удобно — например, Notepad++ или VS Code с плагином для ).

Если у вас ещё не установлена платформа:

  1. Скачайте дистрибутив с официального сайта (раздел «Загрузки»).
  2. Запустите установщик и выберите компоненты: 1С:Предприятие + Конфигуратор.
  3. После установки создайте тестовую базу: запустите 1cv8.exe, нажмите ДобавитьСоздание новой информационной базы → выберите Демонстрационная база.
💡

Если вы работаете на компьютере с ограниченными правами (например, в офисе), попросите администратора установить платформу от имени администратора. Без этого конфигуратор может не запуститься.

⚠️ Внимание: Если вы обновляете платформу с версии ниже 8.3.10, некоторые обработки, написанные для новых версий, могут не работать. Перед обновлением проверьте совместимость в документации к вашей конфигурации.

Создание новой внешней обработки: пошаговая инструкция

Теперь перейдём к практике. Откройте конфигуратор (1cv8.exe /config) и следуйте инструкции:

☑️ Подготовка к созданию обработки

Выполнено: 0 / 4
  1. Создайте новый объект:

    В меню конфигуратора выберите Файл → НовыйВнешняя обработка.

  2. Задайте основные свойства:

    В открывшемся окне заполните:

    • Имя — например, ВыгрузкаВExcel (без пробелов, латиницей).
    • Синоним — отображаемое имя (можно с пробелами, например, Выгрузка данных в Excel).
    • Комментарий — краткое описание (опционально, но полезно для других разработчиков).
  • Настройте форму:

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

    • Кнопка Выгрузить.
    • Поле выбора периода.
    • Флажок Только активные записи.
    • Напишите код:

      Перейдите на вкладку Модуль объекта и добавьте процедуры. Пример простейшей обработки для вывода сообщения:

      Процедура Выгрузить(Команда)
      

      Сообщить("Выгрузка данных начата!", СтатусСообщения.Информация);

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

    • Сохраните файл:

      Нажмите Файл → Сохранить как и выберите папку. Файл сохранится с расширением .epf.

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

    Основные элементы кода: что должно быть в обработке

    Любая внешняя обработка состоит из нескольких ключевых частей. Рассмотрим их на примере обработки для выгрузки данных в Excel:

    Элемент Описание Пример кода
    Переменные Хранят данные для обработки (например, выбранный период или фильтры).
    Перем мДаты;
    

    Перем мФильтрПоКонтрагенту;

    Процедуры Основная логика обработки (выгрузка, загрузка, расчёты).
    Процедура ВыгрузитьВ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 раз.

    Отладка и тестирование: как найти и исправить ошибки

    Даже опытные разработчики сталкиваются с ошибками. Главное — уметь их быстро находить и исправлять. Вот алгоритм отладки:

    1. Запустите обработку в режиме отладки:

      В конфигураторе нажмите Отладка → Начать отладку (или F5). Обработка откроется в пользовательском режиме, но с возможностью пошагового выполнения кода.

    2. Используйте точки останова:

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

    3. Просматривайте значения переменных:

      В окне Отладка перейдите на вкладку Переменные. Здесь отображаются все текущие значения. Если переменная содержит Неопределённое вместо ожидаемого значения — ищите ошибку в логике заполнения.

    4. Используйте сообщения для диагностики:

      Вставляйте в код строку Сообщить(ЗначениеПеременной);, чтобы вывести промежуточные данные. Например:

      Сообщить("Количество строк в таблице: " + мТаблицаДанных.Количество());

    Типовые ошибки и их причины:

    Ошибка Возможная причина Как исправить
    Ошибка при вызове метода контекста (Выгрузить) Опечатка в имени процедуры или она не объявлена. Проверьте регистр и наличие процедуры в модуле.
    Поле объекта не обнаружено (Артикул) В запросе или таблице значений нет колонки с таким именем. Добавьте колонку или проверьте имя в запросе.
    Недостаточно памяти Слишком большой объём данных для обработки. Разбейте задачу на части или оптимизируйте запрос.
    Нет прав на выполнение операции У пользователя недостаточно прав в 1С. Настройте роли или запустите от имени администратора.

    ⚠️ Внимание: Если обработка работает в конфигураторе, но не запускается в пользовательском режиме, проверьте:

    • Права пользователя на запуск внешних обработок (в настройках ролей).
    • Путь к файлу .epf — он должен быть доступен с компьютера пользователя.
    • Версию платформы — если обработка написана для 8.3.18, а у пользователя 8.3.10, могут возникать ошибки.
    • 💡

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

      Как подключить обработку к базе и настроить права

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

      Способ 1: Через меню «Файл» (для разовых задач)

      1. Откройте 1С в пользовательском режиме.
      2. Выберите Файл → Открыть и укажите путь к файлу .epf.
      3. Обработка откроется в отдельном окне. После закрытия её нужно будет открывать заново.

      Способ 2: Через подключаемые обработки (для постоянного использования)

      1. В пользовательском режиме перейдите в Сервис → Дополнительные отчёты и обработки.
      2. Нажмите Добавить и выберите файл .epf.
      3. Укажите название для отображения в меню и сохраните.

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

    Настройка прав:

    • В конфигураторе откройте Администрирование → Пользователи.
    • Выберите роль (например, Бухгалтер) и перейдите на вкладку Права.
    • В разделе Дополнительные отчёты и обработки установите флажок Чтение или Изменение.
    • ⚠️ Внимание: Если обработка работает с конфиденциальными данными (например, выгружает зарплату), ограничьте доступ к ней только доверенным пользователям. В противном случае рискуете нарушить ФЗ-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 и основ программирования обязательно.

      Почему обработка работает в конфигураторе, но не запускается у пользователей?

      Причин может быть несколько:

      1. У пользователей нет прав на запуск внешних обработок (проверьте настройки ролей).
      2. Файл .epf хранится в папке, к которой у пользователей нет доступа.
      3. Версия платформы у пользователей старше, чем та, для которой написана обработка.
      4. В коде используются функции, недоступные в клиентском режиме (например, работа с файлами).

      Для диагностики попробуйте запустить обработку от имени пользователя с полными правами. Если она заработает — проблема в правах.

      Как обновить внешнюю обработку, если она уже используется?

      Обновление внешней обработки происходит в два этапа:

      1. Замените файл .epf на новую версию (сохраните старую на случай отката).
      2. В пользовательском режиме перейдите в Сервис → Дополнительные отчёты и обработки, найдите свою обработку и нажмите Обновить.

      ⚠️ Важно: Если в новой версии изменилась структура данных (например, добавлены новые параметры), пользователям может потребоваться заново настроить обработку после обновления.

      Можно ли защитить код обработки от изменения?

      Да, для этого:

      1. В конфигураторе откройте модуль обработки.
      2. Выберите Текст → Защита от изменения.
      3. Установите пароль (не менее 8 символов).

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

      Альтернативный способ — компиляция обработки в .erf-файл (для отчётов), но это не даёт 100% защиты, так как декомпиляция возможна.

      Где хранить внешние обработки, чтобы все пользователи могли их использовать?

      Рекомендуемые варианты:

      • 📂 Сетевая папка: Создайте общую папку на сервере (например, \\server\1C\Обработки\) и раздайте права на чтение всем пользователям.
      • 🖥️ Локально на каждом компьютере: Подходит для небольших компаний, но усложняет обновление.
      • ☁️ Облачное хранилище: Например, Yandex Диск или Google Drive (но требует стабильного интернета).
      • 📦 Внутри базы: Некоторые конфигурации позволяют хранить обработки прямо в информационной базе (раздел Дополнительные отчёты и обработки).

      ⚠️ Внимание: Избегайте хранения обработок на рабочем столе пользователей — при переустановке Windows они будут утеряны.