← Назад к вопросам

Где пишется код при проведении документа в 1С?

1.3 Junior🔥 231 комментариев
#Объекты метаданных#Стандарты разработки

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Написание кода при проведении документа

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

Основные места размещения кода

1. Модуль объекта документа (серверный код)

Это основное место для реализации логики проведения. Здесь размещаются процедуры обработки.

// В модуле объекта документа
Процедура ПриПроведении(Отмена, РежимПроведения)
    // Основная логика проведения
    // Заполнение движений
    // Проверка корректности
    // РежимПроведения может быть РежимПроведенияДокумента.Оперативный
КонецПроцедуры

2. Процедура ОбработкаПроведения

Это служебная процедура, которая автоматически вызывается платформой при проведении:

Процедура ОбработкаПроведения(Отмена)
    // Этот код выполняется в момент проведения
    // Можно добавлять движения документа
    // Выполнять проверки
    
    Движения.Товары.Запись();
    Движения.Касса.Запись();
КонецПроцедуры

Процедуры с событиями проведения

ПериодПроведения — определяет, за какой период происходит проведение:

Процедура ПериодПроведения(ПериодУчёта) Экспорт
    // Возвращает, за какой период проводится документ
    ПериодУчёта = КонецМесяца(Дата);
КонецПроцедуры

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

Процедура НумераторПроведения(ПоследовательностьПроведения) Экспорт
    // Если требуется особый порядок
    ПоследовательностьПроведения = 1;
КонецПроцедуры

Работа с движениями документа

Важный аспект кода проведения — регистрация движений:

Процедура ОбработкаПроведения(Отмена)
    // Очистка старых движений
    Движения.Товары.Очистить();
    
    // Добавление новых движений
    Для Каждого СтрокаТовара Из Товары Цикл
        ДвижениеТовара = Движения.Товары.Добавить();
        ДвижениеТовара.Период = Дата;
        ДвижениеТовара.Товар = СтрокаТовара.Товар;
        ДвижениеТовара.Количество = СтрокаТовара.Количество;
    КонецЦикла;
    
    Движения.Товары.Запись();
КонецПроцедуры

Проверка и откат

УстановкаУслРазбора — функция для проверки корректности:

Процедура ПроверкаПроведения(Отмена, АдресСоответствия)
    // Проверка наличия всех необходимых данных
    Если Товары.Количество() = 0 Тогда
        Отмена = Истина;
        ВызватьИсключение "Документ пуст";
    КонецЕсли;
КонецПроцедуры

ОтменаПроведения — код для отката операций:

Процедура ОтменаПроведения(Отмена)
    // Код выполняется при отмене проведения
    // Движения автоматически откатываются
КонецПроцедуры

Режимы проведения

// Оперативное проведение (на толстом клиенте)
РежимПроведения = РежимПроведенияДокумента.Оперативный;

// Регламентное проведение (в фоновом задании)
РежимПроведения = РежимПроведенияДокумента.Регламентный;

Лучшие практики

Разделение ответственности:

  • Логика проведения → модуль объекта документа
  • Сложные расчёты → отдельные функции
  • Проверки → процедура ПроверкаПроведения

Производительность:

  • Минимизировать количество движений
  • Использовать пакетную запись движений
  • Избегать циклов в циклах
  • Оптимизировать запросы к базе

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

Где пишется код при проведении документа в 1С? | PrepBro