Улучшенный механизм проведения документов

24.03.26

Разработка - Механизмы типовых конфигураций

Аналог механизма проведения документов из типовых конфигураций 1С. Красивое решение для тех, кто "вырос" из базового проведения в модуле объекта и хочет приблизиться к типовой реализации через модуль.

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Механизм проведения (как в типовых конфигурациях): Код общего модуля и примеры из статьи (txt)
.zip 6,55Kb
0 3 000 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Предисловие

Думаю, многие задумывались о том, что механизм быстрого формирования движений по регистрам, предлагаемый платформой 1С:Предприятие 8, находится где-то между уровнем «первый раз открыл конфигуратор» и «уверенный junior». Идеал, к которому стоит стремиться при разработке своих учётных конфигураций, — это подход, реализованный в типовых решениях. Но что делать, когда мы пишем всё с нуля, а не наследуем готовую базу?

Я столкнулся с этим вопросом, когда начал активно разрабатывать мини конфигурации на заказ. При этом опыт работы с типовыми конфигурациями у меня уже был. Посидев в отладчике пару дней, я проанализировал и немного унифицировал типовой алгоритм проведения, «выдранный» из БГУ 2. Результатом этой работы стала простая, но гибкая система, которой я теперь пользуюсь сам и хочу поделиться с вами.

Не сочтите нижесказанное за холивар, это всего лишь мнение автора, которое может не совпадать с вашим. В любом случае продуктивная критика и обсуждения приветствуются!

 

Как выглядит базовое проведение (конструктор)

Стандартный подход, который предлагает платформа, выглядит примерно так:

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
	//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
	// Данный фрагмент построен конструктором.
	// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

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

	//}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры

Думаю, те, кто открывал нетленные рукописи товарища Радченко или хотя бы конфигуратор, знакомы с этим механизмом.

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

 

Как выглядит улучшенное проведение

Теперь посмотрим на тот же документ, но реализованный через мой подход.

 

Модуль объекта

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
		
	ПроведениеДокументов.ИнициализироватьДополнительныеСвойстваДляПроведения(Ссылка, ДополнительныеСвойства);
	Документы.РасходнаяНакладная.ИнициализироватьТаблицыПроводок(Ссылка, ДополнительныеСвойства);
	
	ТаблицыПроводок = ДополнительныеСвойства.ТаблицыДляДвижений;	
	
	ПроведениеДокументов.ПровестиДокумент(ЭтотОбъект, "ЗапасыНаСкладах", ТаблицыПроводок);
	ПроведениеДокументов.ЗаписатьНаборыЗаписей(ЭтотОбъект);
	ПроведениеДокументов.КонтрольОстатков();
	
КонецПроцедуры

Процедура ОбработкаУдаленияПроведения(Отказ)
	
	ПроведениеДокументов.ОчиститьДвиженияДокумента(ЭтотОбъект);
	
КонецПроцедуры

 

Модуль менеджера

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

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

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

 

Как это работает?

Документ функционирует по принципу: «я знаю, какой набор данных нужно подготовить, но не знаю, как именно он будет записан в регистры». Всё, что относится к конкретному регистру, вынесено в общий модуль.

В обработке проведения документа происходит следующее:

  1. Инициализация дополнительных свойств — общий модуль создаёт служебные структуры, менеджер временных таблиц и т.д.

  2. Вызов процедуры модуля менеджера — в ней формируются временные таблицы с данными для движений. Каждый документ сам решает, какие данные и в каком виде он предоставит.

  3. Получение таблиц проводок — после вызова все подготовленные таблицы оказываются в свойстве ДополнительныеСвойства.ТаблицыДляДвижений.

  4. Проведение по регистрам — универсальная процедура читает таблицы и генерирует нужные наборы записей.

  5. Запись движений — выполняется стандартная запись наборов.

  6. Контроль остатков — при необходимости запускается общий механизм проверки.

 

Какой в этом плюс?

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

 

Заключение

Предложенный подход — не идеал последней инстанции и не попытка переписать типовые механизмы «с чистого листа». Это всего лишь один из возможных способов организовать проведение документов, который сложился у меня в ходе работы над небольшими заказными конфигурациями. Он показался мне достаточно удобным, чтобы поделиться им с сообществом.

Проверено на следующих конфигурациях и релизах:

  • 1С:Библиотека стандартных подсистем, редакция 3.1, релизы 3.1.10.403

Вступайте в нашу телеграмм-группу Инфостарт

Проведение Документы Регистры Общий модуль

См. также

Механизмы типовых конфигураций Программист Стажер 1С 8.3 1С:Зарплата и Управление Персоналом 3.x Бесплатно (free)

Интервальные регистры в 1С:ЗУП 3.1 заменяют тяжелые срезы последних, ускоряя отчеты по кадровым данным через интервалы ДатаНачала–ДатаОкончания. Разбираем отличия, примеры кода, плюсы и способы синхронизации.

12.03.2026    1596    AlexeyPROSTO_1C    4    

18

Механизмы типовых конфигураций Программист Стажер 1С 8.3 1С:Зарплата и Управление Персоналом 3.x Бесплатно (free)

Как в ЗУП работает механизм расстановки времени в регистрах сведений с помощью подписки на события?Рассматривается логика сдвигов для разных типов документов (прием, увольнение, отпуск) и дается инструкция по подключению нового регистра к этому механизму.

03.03.2026    660    YA_1100893639    1    

7

Механизмы типовых конфигураций Программист 1С:Предприятие 8 1С:ERP Управление предприятием 2 Россия Бесплатно (free)

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

11.08.2025    6489    user1988284    0    

21

Механизмы типовых конфигураций Программист 1С:Предприятие 8 Бесплатно (free)

Каждый, кто работал с кадровыми отчетами в ЗУП, ERP или УХ, сталкивался с механизмом представлений – странным кодом запроса, где поля отображаются пустыми ссылками, а в названии временной таблицы есть слово «Представление». В статье разберем, что такое представления и как ими пользоваться. Больше не нужно ломать голову над тем, откуда и как правильно получать данные. Механизм представлений сделает это за вас.

08.07.2025    12923    user2012581    55    

61

Механизмы типовых конфигураций Программист Стажер 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Бесплатно (free)

В типовых решениях типа УТ, КА, ERP при вводе строк в поля ввода осуществляется поиск по первым символам. С помощью небольшой доработки (делается через расширение) можно организовать поиск по вхождению.

02.06.2025    2997    lkey    2    

6
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. andrew.ab 234 24.03.26 19:19 Сейчас в теме
и в чем улучшение? Где управляемые блокировки? А если надо снимать остатки и блокировать записи, например для списания себестоимости?

По сути вытащил кусок обертки из БГУ.
Vasvas05; +1 Ответить
Для отправки сообщения требуется регистрация/авторизация