Доработка обработки 1С: код, форма, запросы и отладка

· 10 мин

Содержание

Чтобы изменить обработку в 1С, откройте её в Конфигураторе: внешнюю (файл .epf) — через Файл → Открыть, встроенную — в дереве конфигурации в ветке «Обработки». Дальше правите модуль, форму или текст запроса, проверяете синтаксис (Ctrl+F7), отлаживаете и сохраняете. Для типовой конфигурации на поддержке встроенную обработку правильнее менять через расширение, а не снимать конфигурацию с поддержки.

Ниже — порядок действий для программиста и опытного администратора 1С:Предприятия 8.3: от разбора чужой обработки до подключения новой версии в рабочей базе.

Что за обработка перед вами и каким способом её менять

Первый вопрос — где живёт обработка. От ответа зависит весь путь редактирования.

  • 📄 Внешняя обработка — отдельный файл .epf. Хранится на диске или загружена в справочник дополнительных обработок (в конфигурациях на БСП). Меняется без вмешательства в конфигурацию.
  • 🧩 Встроенная обработка — объект конфигурации. Если конфигурация типовая и стоит на поддержке, объект заблокирован для изменений.
  • 🔌 Обработка из расширения — объект, добавленный расширением. Правится в окне расширения.
СпособКогда подходитРиски
Правка файла .epfВнешние обработки и печатные формыНужно заново загрузить файл в базу
Расширение конфигурацииВстроенная обработка типовой конфигурацииПосле обновления типовой проверить, что заимствованные методы не изменились
Включение изменений на поддержкеРасширением задачу не решитьОбновления типовой становятся сложнее: каждое придётся сравнивать и объединять
Сохранение встроенной как внешнейНужна своя копия для экспериментовТиповая обработка остаётся прежней, пользователи работают с двумя версиями

Расширения появились в платформе 8.3.6. На актуальных версиях платформы это основной способ дорабатывать типовые конфигурации без снятия с поддержки.

Подготовка: копия базы и разбор чужого кода

Обработку, которую писали не вы, не трогайте сразу в рабочей базе.

  1. Сделайте выгрузку: в Конфигураторе Администрирование → Выгрузить информационную базу — получится файл .dt.
  2. Разверните копию базы и подключите её в списке информационных баз под отдельным именем.
  3. Скопируйте исходный файл .epf рядом с суффиксом версии, например ZagruzkaCen_v1.epf. Если правка не взлетит, вернётесь к нему за минуту.

Загрузка .dt полностью заменяет данные базы — делайте это только в копии, не в рабочей.

Затем разберитесь, как устроена обработка. В дереве объекта посмотрите:

  • 📌 Реквизиты — параметры, которые вводит пользователь (дата, организация, файл).
  • 📋 Табличные части — списки строк, с которыми работает обработка.
  • 🖼 Формы — какая из них основная (задаётся в свойствах объекта).
  • ⚙️ Модуль объекта — серверная логика, общая для всех форм.
  • 🗂 Макеты — печатные формы, шаблоны загрузки.

В конфигурациях на БСП у внешней обработки в модуле объекта есть функция СведенияОВнешнейОбработке(). Она описывает вид обработки, её команды и версию. Эту функцию вы будете менять в конце работы.

Если модуль защищён паролем, редактировать его нельзя — нужен исходник от автора.

Открываем обработку в Конфигураторе

Внешняя обработка

  1. Запустите Конфигуратор любой базы. Для внешней обработки подойдёт и пустая база с той же конфигурацией.
  2. Файл → Открыть, выберите файл .epf.
  3. Откроется окно объекта с деревом: реквизиты, табличные части, формы, макеты. Модули — через кнопки «Открыть модуль объекта» и в формах.

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

Встроенная обработка

Откройте Конфигурация → Открыть конфигурацию и найдите объект в ветке «Обработки». Если значок с замком — объект на поддержке, и правки недоступны.

Три варианта на этом шаге:

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

Как изменить код обработки: модули объекта и формы

У управляемой формы два места для кода, и путать их нельзя.

МодульГде выполняетсяЧто туда писать
Модуль формыКлиент и сервер (по директивам)Обработчики кнопок, событий формы, проверку ввода
Модуль объектаСерверОсновной алгоритм, работу с базой, функцию регистрации БСП

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

Типичная связка «кнопка → сервер» выглядит так:

&НаКлиенте
Процедура Заполнить(Команда)
	Если Не ЗначениеЗаполнено(Объект.Организация) Тогда
		Сообщить("Выберите организацию");
		Возврат;
	КонецЕсли;
	ЗаполнитьНаСервере();
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьНаСервере()
	ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
	ОбработкаОбъект.ЗаполнитьТовары();
	ЗначениеВРеквизитФормы(ОбработкаОбъект, "Объект");
КонецПроцедуры

Здесь ЗаполнитьТовары() — экспортная процедура модуля объекта. Через РеквизитФормыВЗначение форма получает объект обработки, вызывает его метод и возвращает результат обратно на форму.

Правка встроенной обработки через расширение

В расширении копировать модуль целиком не нужно. Достаточно повесить свою процедуру до, после или вместо типовой:

&НаСервере
&После("ЗаполнитьНаСервере")
Процедура Расш1_ЗаполнитьНаСервере()
	Для Каждого Строка Из Объект.Товары Цикл
		Строка.Количество = Окр(Строка.Количество, 0);
	КонецЦикла;
КонецПроцедуры

Аннотации &Перед, &После, &Вместо и &ИзменениеИКонтроль задают, как ваш код встраивается в типовой метод. &ИзменениеИКонтроль удобна для точечной вставки внутрь чужой процедуры: при обновлении типовой платформа сообщит, что исходный текст изменился.

После каждой правки — Ctrl+F7 (проверка синтаксиса модуля). Ошибки появятся в окне служебных сообщений с номером строки.

Форма обработки: реквизиты, элементы и кнопки

Форму открывают двойным щелчком в ветке «Формы». Редактор делится на вкладки: «Элементы», «Реквизиты», «Команды» и сам макет внизу.

Новое поле на форме

  1. На вкладке «Реквизиты» раскройте «Объект» — это реквизиты самой обработки. Новый реквизит обработки добавьте в дереве объекта, тогда он появится здесь.
  2. Перетащите реквизит мышью в дерево элементов, в нужную группу.
  3. В свойствах элемента задайте заголовок, вид поля и обработчики событий, например ПриИзменении.

Реквизит только для формы (без хранения в объекте) добавляйте прямо на вкладке «Реквизиты» кнопкой добавления — он не попадёт в модуль объекта.

Новая кнопка

  1. На вкладке «Команды» добавьте команду и задайте ей действие — нажмите на лупу у свойства «Действие». Платформа создаст обработчик в модуле формы.
  2. Перетащите команду в командную панель формы или в группу элементов.
  3. Заполните обработчик кодом.

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

Запросы в обработке: читаем и меняем выборку

Большинство доработок обработок — это правка запроса: добавить отбор, поле, соединение.

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

Пример запроса с параметром, который заполняет табличную часть:

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

Метод Загрузить переносит колонки по именам. Псевдонимы полей в запросе (КАК Номенклатура) должны совпадать с именами колонок табличной части Товары, иначе колонка останется пустой.

Что проверить при правке запроса:

  • 🔍 Параметры. Каждый &Параметр в тексте должен получить значение через УстановитьПараметр, иначе запрос упадёт с ошибкой.
  • 🐢 Запрос в цикле. Если запрос выполняется для каждой строки, вынесите его наружу и получите данные одной выборкой — на тысяче строк разница в минутах.
  • 🔗 Поля через точку. Обращение Документ.Контрагент.ИНН порождает неявное соединение. Для больших таблиц лучше соединить явно.

Отладить сам текст запроса удобно в консоли запросов — это отдельная обработка, которая показывает результат и параметры. Скопируйте текст туда, задайте параметры и посмотрите, что возвращается, прежде чем вставлять в модуль.

Отладка и проверка изменённой обработки

Как отлаживать внешнюю обработку

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

Клавиши в отладке: F10 — шаг через, F11 — шаг внутрь процедуры, Shift+F11 — выход из процедуры. Значения переменных смотрите в окне «Табло» или наведением курсора.

Если обработка подключена из справочника дополнительных обработок, платформа запускает временную копию, а не ваш файл. Точки останова в файле на диске тогда не сработают — отлаживайте через Файл → Открыть.

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

Что прогнать перед выпуском

Проверка изменённой обработки
Выполнено: 0 / 6

Сохраняем изменения и подключаем обработку в базе

Внешняя обработка

  1. Файл → Сохранить (Ctrl+S). Файл .epf перезапишется.
  2. Если обработка запускается через Файл → Открыть — просто откройте файл заново в 1С:Предприятии. Ранее открытую форму закройте.
  3. Если обработка загружена в справочник: откройте Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки, затем карточку обработки, загрузите обновлённый файл командой загрузки из файла и запишите карточку.

Перед загрузкой в справочник поднимите версию в функции регистрации:

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

По номеру версии в карточке видно, какая редакция сейчас в базе. Это сильно помогает, когда обработку правят несколько человек.

Встроенная обработка и расширение

  • Изменения в основной конфигурации: Конфигурация → Сохранить конфигурацию, затем Конфигурация → Обновить конфигурацию базы данных (F7). Если обновление затрагивает структуру базы, Конфигуратор потребует монопольный доступ — пользователей придётся отключить.
  • Расширение: в окне расширения сохраните его и обновите конфигурацию базы данных для расширения. Пользователи увидят изменения после перезапуска своего сеанса.

Правка только модуля или формы обработки обычно не меняет структуру данных. Новый реквизит у объекта, хранящегося в базе, — меняет. У обработки реквизиты не хранятся в таблицах, поэтому её доработка редко требует выгонять пользователей.

Частые ошибки при доработке обработок

Диагностика: выберите симптом

Частые вопросы

Можно ли изменить обработку без Конфигуратора?
Нет. Код и форму редактируют только в Конфигураторе или в 1С:EDT. В режиме 1С:Предприятие можно лишь заменить файл в карточке дополнительной обработки.
Чем внешняя обработка отличается от обработки в расширении?
Внешняя живёт отдельным файлом и не видит формы типовых объектов изнутри. Расширение встраивается в конфигурацию и может менять типовые формы и методы.
Можно ли превратить внешнюю обработку обратно во встроенную?
Да, но вручную: создайте в конфигурации или расширении новую обработку и перенесите в неё реквизиты, табличные части, формы и текст модулей из открытого рядом файла .epf. Одной командой это не делается.
Что делать, если модуль закрыт паролем?
Без пароля его не открыть. Запросите исходник у автора или поставщика, либо напишите обработку заново по её описанию.
Нужно ли выгонять пользователей, чтобы обновить внешнюю обработку?
Нет. Замена файла в справочнике не требует монопольного доступа. Тем, у кого форма уже открыта, достаточно закрыть её и открыть снова.