1C-CodeКак сделать → Как записать движения регистра накопления программно

Как записать движения регистра накопления в 1С

В обработке проведения документа — через коллекцию Движения. Одна строка решает всё: без Записывать = Истина движения сформируются в памяти и молча пропадут.

Код

Процедура ОбработкаПроведения(Отказ, Режим)

	Движения.ТоварыНаСкладах.Записывать = Истина;   // без этой строки движений не будет

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

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

Что здесь важно

1. Записывать = Истина — не формальность

Это самая частая ошибка темы, и она коварна: документ проводится без единого сообщения, в журнале всё хорошо, а в отчётах пусто. Строку ставят ДО заполнения, чтобы не забыть.

2. Период обязателен

Незаполненный период даёт движение на начало времён. Обычно это Дата документа; для нескольких движений разными датами — своя дата у каждого.

3. Вид движения — только у регистра остатков

Приход и Расход есть там, где остаток имеет смысл. У регистра оборотов вида движения нет вовсе: там просто накапливается сумма за период.

4. Вне проведения — через набор записей

Если движения надо записать не из документа, берут РегистрыНакопления.ТоварыНаСкладах.СоздатьНаборЗаписей(), ставят отбор по регистратору и вызывают Записать(). Обычно это признак того, что что-то делается не тем способом.

Где обычно спотыкаются

Не записывайте движения по одному в цикле через набор записей — это обращение к базе на каждую строку. Коллекция Движения накапливает всё в памяти и пишет одной операцией в конце проведения; так и надо.

Задача на это. Прочитать приём и применить его — разные умения. В тренажёре есть задача «Обработка проведения документа»: сформировать движения по строкам документа — с той самой строкой «Записывать = Истина», без которой в отчётах будет пусто. Решение проверяется скрытыми тестами, в том числе на краевых случаях, о которых в условии не сказано.

Решить задачу

Разобраться глубже

Другие вопросы

Как получить остатки на дату запросом в 1С Как программно провести документ в 1С Как избавиться от запроса в цикле в 1С Как добавить колонку в таблицу значений программно Как свернуть таблицу значений Как найти строку в таблице значений Как выгрузить колонку таблицы значений в массив Как превратить массив в таблицу значений Как передать таблицу значений с сервера на клиент Как отобрать строки в таблице значений Как отсортировать таблицу значений Чем регистр остатков отличается от регистра оборотов Как контролировать остатки при проведении документа Как добавить реквизит расширением конфигурации Как сравнить две таблицы значений Какие бывают соединения в запросе 1С и чем отличаются Как выгрузить таблицу значений в Excel Чем дерево значений отличается от таблицы значений Как задать условное оформление таблицы на форме