Урок по треку Разработка на 1С 6 мин

Проведение документов и контроль остатков

ОбработкаПроведения, движения, оперативное проведение и контроль остатков по старой и новой методике.

Проведение это отражение документа в учёте: запись движений по регистрам. Задачу «напишите проведение расходной накладной с контролем остатков» дают и на собесах, и на экзамене 1С:Специалист.

Где и как

Движения формируют в модуле объекта документа, в обработчике ОбработкаПроведения(Отказ, РежимПроведения). Он вызывается внутри транзакции записи документа. Наборы записей доступны через коллекцию Движения и отобраны по регистратору (этому документу).

Флаг Движения.ТоварыНаСкладах.Записывать = Истина говорит платформе записать набор после выхода из обработчика, заменив старые движения документа. Если флаг установлен, а движения не добавлены, старые движения просто удалятся.

Отказ = Истина отменяет проведение и откатывает транзакцию. Причину нужно сообщить пользователю.

Другие события модуля документа: ОбработкаЗаполнения (ввод на основании), ОбработкаПроверкиЗаполнения (обязательные данные), ПередЗаписью, ПриЗаписи, ОбработкаУдаленияПроведения.

Хорошее проведение

  1. Данные документа одним запросом: табличная часть, соединённая со справочниками, сгруппированная по товару. Без обращения через точку в цикле.
  2. Период движений равен дате документа, а не текущей дате.
  3. Все нужные движения: перемещение это расход с одного склада и приход на другой.
  4. Контроль остатков там, где он нужен.

Оперативное и неоперативное

Параметр РежимПроведения: оперативный (документ проводится «сейчас», контролируем остатки) или неоперативный (задним числом, контроль обычно не делают, чтобы не мешать вводу документов в произвольном порядке).

Старая методика контроля остатков

  1. Установить исключительную управляемую блокировку на остатки товаров и склада документа.
  2. Прочитать остатки на момент документа.
  3. Сравнить с количеством в документе, при нехватке Отказ.
  4. Сформировать и записать движения.

Без блокировки два документа одновременно прочитают один остаток и оба спишут его.

Новая методика

  1. У набора записей установить БлокироватьДляИзменения = Истина.
  2. Сформировать и записать движения (Движения.Записать()).
  3. Запросом получить остатки по товарам документа с границей, включающей документ: Новый Граница(МоментВремени(), ВидГраницы.Включая).
  4. Если остатки отрицательные, сообщить по каждой позиции и установить Отказ.

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

Последовательности и перепроведение

Если результат проведения зависит от предыдущих документов (себестоимость при списании), документ задним числом делает последующие неверными. Последовательность документов отслеживает границу, с которой нужно перепровести. В современных типовых себестоимость считается регламентно при закрытии месяца, а изменения закрытых периодов запрещаются датой запрета изменения.

Частые ошибки

  • Забыли Записывать = Истина.
  • ТекущаяДата() вместо Дата документа.
  • Предупреждение() или Вопрос() в модуле объекта: на сервере интерфейса нет.
  • Остатки по всей базе без момента времени и без отбора по складу.
  • Проверка строк по отдельности, когда товар повторяется в нескольких строках.

Что спросят на собесе

  • Напишите проведение расходной накладной с контролем остатков.
  • Чем новая методика отличается от старой?
  • Зачем нужна граница Включая?
  • Что такое оперативное проведение?
  • Как отказать в проведении и сообщить причину?

Закрепите за 5 минут

После урока в тренажёре 3-5 проверочных вопросов, дальше модуль уходит в повторения.