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

Эта статья поможет разобраться во всех нюансах — от выбора типа обработки до отладки и внедрения. Мы рассмотрим не только технические аспекты (синтаксис, модули, события), но и практические советы по оптимизации кода, работе с данными и избежанию типичных ошибок. Особое внимание уделим вопросам безопасности и совместимости с разными версиями платформы 1С:Предприятие 8.3.

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

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

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

  • 📊 Отчеты — формирование аналитических данных по произвольным алгоритмам
  • ⚙️ Обработки документов — массовое изменение данных, загрузка/выгрузка
  • 🔗 Интеграционные модули — обмен данными с сайтами, CRM, банками
  • 🛠️ Сервисные утилиты — очистка базы, проверка целостности, резервное копирование

Основные преимущества внешних обработок:

  • 🔄 Независимость от обновлений — не ломаются при изменении типовой конфигурации
  • 📦 Портативность — один файл можно использовать в разных базах
  • 🛡️ Безопасность — нет риска повредить основную конфигурацию
  • 🚀 Гибкость — быстрое внедрение новых функций без согласования с поставщиком 1С

Типичные сценарии применения:

  • 📈 Формирование нестандартных отчетов (например, ABC-XYZ анализ номенклатуры)
  • 📤 Выгрузка данных в Excel с произвольной структурой
  • 🔄 Массовое изменение реквизитов (например, корректировка цен номенклатуры)
  • 🤖 Автоматизация рутинных операций (создание документов по расписанию)
⚠️ Внимание: Внешние обработки имеют ограничения по сравнению с встроенными решениями. Они не могут модифицировать структуру базы данных (добавлять новые таблицы или поля) и имеют ограниченный доступ к некоторым системным объектам. Для сложных интеграций может потребоваться разработка расширения конфигурации.

2. Подготовка к разработке: выбор инструментов и среды

Перед тем как приступить к написанию кода, необходимо подготовить рабочее окружение. Вам понадобятся:

  • 🖥️ Платформа 1С:Предприятие 8.3 (актуальная версия, лучше последняя стабильная)
  • 🛠️ Конфигуратор — входит в комплект поставки 1С
  • 📝 Текстовый редактор для работы с кодом (например, Notepad++ или VS Code)
  • 🔍 Отладочные инструменты — встроенный отладчик 1С или GDB для сложных случаев

Рекомендуемая последовательность подготовки:

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

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

📊 Какой инструмент вы используете для разработки 1С?
Только встроенный конфигуратор
Конфигуратор + внешний редактор
Специализированные IDE (например, 1C:EDT)
Другой вариант
Инструмент Преимущества Недостатки
Встроенный конфигуратор Не требует дополнительных программ, полная интеграция с платформой Ограниченные возможности рефакторинга, нет автодополнения
1C:EDT (Eclipse) Полноценная IDE, поддержка Git, продвинутая отладка Требует отдельной установки, более сложный для новичков
VS Code + расширения Гибкая настройка, поддержка множества языков, легковесный Нет полной интеграции с 1С, требует ручной настройки
⚠️ Внимание: При работе с внешними обработками в 1С:Предприятие 8.3.20+ обратите внимание на изменения в механизме подписей. С этой версии требуется использование сертификатов для подписи обработок, если они содержат потенциально опасный код (работа с файловой системой, реестром и т.д.).

3. Структура внешней обработки: основные элементы

Любая внешняя обработка в 1С состоит из нескольких ключевых компонентов:

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

Перем мНачалоПериода, мКонецПериода, мСписокНоменклатуры;

2. Формы — интерфейс взаимодействия с пользователем. Можно создавать как простые диалоги, так и сложные многостраничные формы с вкладками. Основные элементы управления:

  • 📅 Поле ввода даты (ПолеВводаДаты)
  • 🔍 Поле выбора (ПолеВыбораСправочника)
  • 📊 Табличное поле (ТаблицаЗначений)
  • ✅ Флажок (ПолеФлажка)

3. Модули — программный код, который выполняет основную логику. Внешняя обработка может содержать:

  • 📜 Модуль объекта — общие процедуры и функции
  • 📄 Модуль формы — обработчики событий интерфейса
  • 🔄 Модуль менеджера — для обработок с несколькими формами

4. Команды — действия, доступные пользователю через интерфейс (кнопки, пункты меню). Пример объявления команды:

Процедура КомандыФормыСформировать(Команда)

// Код формирования отчета

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

5. Макеты — шаблоны для печатных форм (в формате , Excel, HTML). Можно создавать как встроенными средствами, так и во внешних редакторах.

Как выглядит структура файла .epf?

Файл внешней обработки (.epf) — это бинарный файл, содержащий сериализованные данные конфигурации. Его можно открыть в конфигураторе или специализированных утилитах (например, EPF Editor). В текстовом виде он не читаем, но при экспорте в XML можно увидеть структуру:

<ВнешняяОбработка>

<Имя>МояОбработка</Имя>

<Реквизиты>...</Реквизиты>

<Формы>...</Формы>

<Модули>...</Модули>

</ВнешняяОбработка>

Для редактирования всегда используйте конфигуратор — ручное изменение файла приведет к его повреждению.

4. Пошаговая инструкция: как создать простую обработку

Рассмотрим процесс создания внешней обработки на примере простого отчета по продажам.

Шаг 1. Создание заготовки

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

Шаг 2. Добавление реквизитов

В окне редактирования обработки перейдите на вкладку Реквизиты и добавьте:

  • 📅 ДатаНачала (тип Дата)
  • 📅 ДатаОкончания (тип Дата)
  • 🏷️ Номенклатура (тип СправочникСсылка.Номенклатура)
  • 📊 Результат (тип ТаблицаЗначений)

Шаг 3. Создание формы

Перейдите на вкладку Формы и добавьте новую форму. Разместите на ней:

  • Два поля ввода для дат
  • Поле выбора номенклатуры
  • Кнопку Сформировать
  • Табличное поле для вывода результата

Шаг 4. Написание кода

В модуле формы добавьте обработчик для кнопки Сформировать:

Процедура Сформировать(Команда)

// Очищаем предыдущие результаты

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

// Формируем колонки таблицы

Результат.Колонки.Добавить("Дата");

Результат.Колонки.Добавить("Номенклатура");

Результат.Колонки.Добавить("Количество");

Результат.Колонки.Добавить("Сумма");

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

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| РегистрНакопления.Продажи.Период КАК Дата,

| РегистрНакопления.Продажи.Номенклатура КАК Номенклатура,

| СУММА(РегистрНакопления.Продажи.Количество) КАК Количество,

| СУММА(РегистрНакопления.Продажи.Сумма) КАК Сумма

|ИЗ

| РегистрНакопления.Продажи КАК РегистрНакопления.Продажи

|ГДЕ

| РегистрНакопления.Продажи.Период МЕЖДУ &ДатаНачала И &ДатаОкончания";

Если Номенклатура.Выбран() Тогда

Запрос.Текст = Запрос.Текст + "

| И РегистрНакопления.Продажи.Номенклатура = &Номенклатура";

КонецЕсли;

Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);

Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания);

Если Номенклатура.Выбран() Тогда

Запрос.УстановитьПараметр("Номенклатура", Номенклатура.Ссылка);

КонецЕсли;

РезультатЗапроса = Запрос.Выполнить();

Выборка = РезультатЗапроса.Выбрать();

// Заполняем таблицу результатов

Пока Выборка.Следующий() Цикл

НоваяСтрока = Результат.Добавить();

НоваяСтрока.Дата = Выборка.Дата;

НоваяСтрока.Номенклатура = Выборка.Номенклатура;

НоваяСтрока.Количество = Выборка.Количество;

НоваяСтрока.Сумма = Выборка.Сумма;

КонецЦикла;

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

☑️ Проверка перед сохранением обработки

Выполнено: 0 / 5

Шаг 5. Тестирование и отладка

Для проверки работы обработки:

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

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

5. Работа с данными: запросы и объекты 1С

Эффективная работа с данными — ключевой аспект любой внешней обработки. В 1С для этого используются:

1. Запросы на языке 1С

Основной инструмент для выборки данных. Примеры:

  • 📌 Простой запрос к справочнику:
    ВЫБРАТЬ
    

    | Номенклатура.Ссылка КАК Ссылка,

    | Номенклатура.Наименование КАК Наименование

    |ИЗ

    | Справочник.Номенклатура КАК Номенклатура

  • 🔗 Запрос с соединением таблиц:
    ВЫБРАТЬ
    

    | Документ.РеализацияТоваровУслуг.Номер КАК Номер,

    | Документ.РеализацияТоваровУслуг.Дата КАК Дата,

    | СУММА(Документ.РеализацияТоваровУслуг.СуммаДокумента) КАК Сумма

    |ИЗ

    | Документ.РеализацияТоваровУслуг КАК Документ.РеализацияТоваровУслуг

    |ГДЕ

    | Документ.РеализацияТоваровУслуг.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания

    |СГРУППИРОВАТЬ ПО

    | Документ.РеализацияТоваровУслуг.Номер,

    | Документ.РеализацияТоваровУслуг.Дата

2. Прямое обращение к объектам

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

// Создание нового документа

НовыйДокумент = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();

НовыйДокумент.Дата = ТекущаяДата();

НовыйДокумент.Контрагент = Справочники.Контрагенты.НайтиПоНаименованию("ООО Ромашка");

// Запись документа

НовыйДокумент.Записать();

3. Работа с таблицами значений

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

Таблица = Новый ТаблицаЗначений;

Таблица.Колонки.Добавить("Товар", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));

Таблица.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число"));

Таблица.Колонки.Добавить("Цена", Новый ОписаниеТипов("Число"));

НоваяСтрока = Таблица.Добавить();

НоваяСтрока.Товар = Справочники.Номенклатура.НайтиПоНаименованию("Стул офисный");

НоваяСтрока.Количество = 5;

НоваяСтрока.Цена = 2500;

4. Использование временных таблиц

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

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| Товар КАК Товар,

| СУММА(Количество) КАК ИтогоКоличество

|ПОМЕСТИТЬ втИтоги

|ИЗ

| Документ.РеализацияТоваровУслуг.Товары КАК Товары

|ГДЕ

| Товары.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания

|СГРУППИРОВАТЬ ПО

| Товар";

Запрос.Выполнить();

// Использование временной таблицы в другом запросе

Запрос2 = Новый Запрос;

Запрос2.Текст =

"ВЫБРАТЬ

| втИтоги.Товар КАК Товар,

| втИтоги.ИтогоКоличество КАК Количество,

| Справочник.Номенклатура.Артикул КАК Артикул

|ИЗ

| втИтоги КАК втИтоги

| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Справочник.Номенклатура

| ПО втИтоги.Товар = Справочник.Номенклатура.Ссылка";

⚠️ Внимание: При работе с большими объемами данных (более 100 000 строк) избегайте использования ТаблицаЗначений в памяти. Вместо этого используйте временные таблицы в запросах или постраничную обработку данных. Это предотвратит зависание интерфейса 1С и ошибки нехватки памяти.

6. Оптимизация и отладка обработок

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

1. Оптимизация запросов

  • 🎯 Используйте индексируемые поля в условиях (ГДЕ)
  • 🚫 Избегайте ВЫБРАТЬ РАЗЛИЧНЫЕ — лучше используйте СГРУППИРОВАТЬ ПО
  • 📉 Ограничивайте выборку по датам и другим критериям
  • 🔄 Для сложных отчетов используйте механизм Пакетные запросы

2. Работа с объектами

  • 🔄 Используйте Объект.Записать() только когда это необходимо — группируйте изменения
  • 🗑️ Для массовых операций используйте Объект.Записать(РежимЗаписиДокумента.Проведение)
  • 🔍 При поиске по справочникам используйте НайтиПоРеквизиту() вместо полного перебора

3. Отладка кода

Основные инструменты отладки в 1С:

  • 🐞 Пошаговое выполнение (F5) — для анализа логики
  • 📋 Точки останова (F9) — для проверки конкретных участков
  • 🔍 Просмотр значений — для анализа переменных
  • 📊 Журнал регистрации — для отслеживания ошибок

Пример использования отладки:

Процедура ПримерСОтладкой()

Перем а, б, в;

а = 10;

б = 20;

// Установите здесь точку останова (F9) и посмотрите значения переменных

в = а + б;

// Проверка условия с выводом в журнал регистрации

Если в > 15 Тогда

ЗаписатьЖурналРегистрации(НСтр("ру = 'Результат больше 15: "; + в));

КонецЕсли;

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

4. Логирование ошибок

Для отслеживания ошибок в рабочих базах используйте:

Процедура ВыполнитьОперацию()

Попытка

// Основной код

Результат = ВыполнитьЗапрос();

Исключение

ЗаписатьЖурналРегистрации(

НСтр("ру = 'Ошибка в обработке ОтчетПоПродажам: "; + ОписаниеОшибки()),

УровеньЖурналаРегистрации.Ошибка

);

Сообщить(ОписаниеОшибки());

Возврат Ложь;

КонецПопытки;

Возврат Истина;

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

💡

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

7. Безопасность и совместимость

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

1. Безопасность кода

  • 🔒 Проверка прав доступа — всегда проверяйте права пользователя перед выполнением критичных операций:
    Если НЕ Пользователь.Профиль.Содержит("Администратор") Тогда
    

    Сообщить("У вас недостаточно прав для выполнения этой операции!");

    Возврат;

    КонецЕсли;

  • 🛡️ Защита от SQL-инъекций — используйте параметры в запросах вместо конкатенации строк
  • 🔐 Шифрование чувствительных данных — для хранения паролей используйте ХранилищеЗначений или ЗащищенноеХранилище

2. Совместимость с версиями

Для обеспечения совместимости:

  • 📋 Используйте #Если ВерсияПлатформы >= "8.3.15" Тогда для кода, зависящего от версии
  • 🔄 Тестируйте обработку на разных версиях платформы (минимально поддерживаемая — 8.3.10)
  • 📊 Избегайте использования новых свойств объектов, если обработка должна работать на старых версиях

3. Подпись обработок

С версии 8.3.20 внешние обработки, содержащие потенциально опасный код, должны быть подписаны:

  1. Сгенерируйте сертификат в 1С:Предприятие через Администрирование → Сертификаты
  2. Подпишите обработку в конфигураторе через Файл → Подписать
  3. При подключении обработки в пользовательском режиме будет проверяться подпись

4. Лицензионные ограничения

Учитывайте ограничения лицензий 1С:

  • 📄 Базовая версия — ограничения на количество пользователей и объем данных
  • 🏢 ПРОФ — полная функциональность, но требует сервера 1С
  • ☁️ Облачная версия — ограничения на работу с файловой системой
⚠️ Внимание: При разработке обработок для 1С:Fresh (облачной версии) учитывайте, что прямой доступ к файловой системе и некоторым системным функциям заблокирован. Используйте только разрешенные методы работы с файлами через ПолучениеФайла и ЗаписьФайла.

8. Внедрение и сопровождение обработок

Создание обработки — только часть работы. Не менее важно правильно внедрить её в рабочую базу и обеспечить дальнейшее сопровождение.

1. Тестирование перед внедрением

Минимальный чек-лист перед внедрением:

☑️ Чек-лист перед внедрением

Выполнено: 0 / 5

2. Способы подключения обработки

Внешнюю обработку можно подключить несколькими способами:

  • 📂 Через файлФайл → Открыть в пользовательском режиме
  • 📋 Через справочник — добавить в Справочник.ВнешниеОбработки
  • 🔄 Автоматически — через код при старте системы:
    Процедура ПриНачалеРаботыСистемы()
    

    ПутьКФайлу = "C:\Обработки\МояОбработка.epf";

    Если ФайлСуществует(ПутьКФайлу) Тогда

    Обработка = ВнешниеОбработки.Создать(ПутьКФайлу);

    Обработка.ОткрытьФорму();

    КонецЕсли;

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

3. Обновление обработок

Для обновления внешних обработок:

  • 📥 Создайте механизм проверки версии обработки
  • 🔄 Реализуйте автоматическое обновление через <