Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Написание кода при проведении документа
Проведение документа — это критический процесс в 1С, где происходит регистрация информации в информационной базе и выполнение учётных операций. Код, выполняемый при проведении, должен быть размещён в определённых местах.
Основные места размещения кода
1. Модуль объекта документа (серверный код)
Это основное место для реализации логики проведения. Здесь размещаются процедуры обработки.
// В модуле объекта документа
Процедура ПриПроведении(Отмена, РежимПроведения)
// Основная логика проведения
// Заполнение движений
// Проверка корректности
// РежимПроведения может быть РежимПроведенияДокумента.Оперативный
КонецПроцедуры
2. Процедура ОбработкаПроведения
Это служебная процедура, которая автоматически вызывается платформой при проведении:
Процедура ОбработкаПроведения(Отмена)
// Этот код выполняется в момент проведения
// Можно добавлять движения документа
// Выполнять проверки
Движения.Товары.Запись();
Движения.Касса.Запись();
КонецПроцедуры
Процедуры с событиями проведения
ПериодПроведения — определяет, за какой период происходит проведение:
Процедура ПериодПроведения(ПериодУчёта) Экспорт
// Возвращает, за какой период проводится документ
ПериодУчёта = КонецМесяца(Дата);
КонецПроцедуры
НумераторПроведения — для установки последовательности проведения:
Процедура НумераторПроведения(ПоследовательностьПроведения) Экспорт
// Если требуется особый порядок
ПоследовательностьПроведения = 1;
КонецПроцедуры
Работа с движениями документа
Важный аспект кода проведения — регистрация движений:
Процедура ОбработкаПроведения(Отмена)
// Очистка старых движений
Движения.Товары.Очистить();
// Добавление новых движений
Для Каждого СтрокаТовара Из Товары Цикл
ДвижениеТовара = Движения.Товары.Добавить();
ДвижениеТовара.Период = Дата;
ДвижениеТовара.Товар = СтрокаТовара.Товар;
ДвижениеТовара.Количество = СтрокаТовара.Количество;
КонецЦикла;
Движения.Товары.Запись();
КонецПроцедуры
Проверка и откат
УстановкаУслРазбора — функция для проверки корректности:
Процедура ПроверкаПроведения(Отмена, АдресСоответствия)
// Проверка наличия всех необходимых данных
Если Товары.Количество() = 0 Тогда
Отмена = Истина;
ВызватьИсключение "Документ пуст";
КонецЕсли;
КонецПроцедуры
ОтменаПроведения — код для отката операций:
Процедура ОтменаПроведения(Отмена)
// Код выполняется при отмене проведения
// Движения автоматически откатываются
КонецПроцедуры
Режимы проведения
// Оперативное проведение (на толстом клиенте)
РежимПроведения = РежимПроведенияДокумента.Оперативный;
// Регламентное проведение (в фоновом задании)
РежимПроведения = РежимПроведенияДокумента.Регламентный;
Лучшие практики
Разделение ответственности:
- Логика проведения → модуль объекта документа
- Сложные расчёты → отдельные функции
- Проверки → процедура ПроверкаПроведения
Производительность:
- Минимизировать количество движений
- Использовать пакетную запись движений
- Избегать циклов в циклах
- Оптимизировать запросы к базе
Код проведения документа — критически важная часть конфигурации, так как именно здесь фиксируется хозяйственная информация и изменяется состояние данных в системе.
Похожие вопросы
- Как на форму объекта добавить новый реквизит?
- С какими блоками "1С: Управление и торговля" работал?
- Как правильно спроектировать новую подсистему с документами в 1С?
- Зачем нужны регистры?
- Что тебя может демотивировать?
- Какие DevOps-инструменты применимы в 1С-разработке?
- Расскажи про процессы в текущей команде
- Перечисли основные объекты метаданных в системе
- Что можно сделать с регистром накопления оборотов, чтобы ускорить процесс получения данных из него?
- С какими предметными областями взаимодействуешь?
- Что такое вложенные запросы?
- Расскажи о себе
- Чем отличается обработка от отчёта в 1С?
- Какими интересуешься платформами, кроме 1С?
- Почему решил сменить работу?
- Какими принципами руководствуешься в работе?
- В чем разница между ЗУП и ЗУП в ERP?
- Почему в типовых конфигурациях запрещают авторегистрацию?
- Для чего используются расширения конфигурации в 1С?
- Для чего нужна галочка "сервер"?