Как руками записать движение в новый регистр накопления

1. aleks123321 22.03.11 17:54 Сейчас в теме
Уважаемые, что делаю не так?
Создал новый регистр накопления
НовыйРегистр:
Измерения:
- ДокументРезерва - заказ покупателя
- Склад
- Номенклатура
Ресурсы:
- Количество

Регистратор, естественно, заказ покупателя.
При проведении документа Нужно по определенному условию записать в этот регистр данные по строкам табличной части
Вот код
НачатьТранзакцию();
Набор = РегистрыНакопления.НовыйРегистр.СоздатьНаборЗаписей();
Набор.Отбор.Регистратор.Использование = Истина;
Набор.Отбор.Регистратор.Установить(ЭтотОбъект.Ссылка);
Набор.Очистить();
Набор.Записать(Истина);


Набор.Отбор.Регистратор.Значение = ЭтотОбъект.Ссылка;
//Набор.Отбор.Регистратор.Установить(ЭтотОбъект.Ссылка);// Так тоже пробовал
Для каждого СТЧ Из ЭтотОБъект.Товары Цикл
Если СТЧ.параметр = УСЛОВИЕ Тогда
Запись = Набор.Добавить();
Запись.ДокументРезерва = ЭтотОБъект.Ссылка;
Запись.Склад = Справочники.Склады.НайтиПоКоду("000000056");
Запись.Номенклатура = СТЧ.Номенклатура;
Запись.Количество = СТЧ.Количество;
Запись.Период = ЭтотОбъект.Дата;
Запись.Активность = истина;
Запись.ВидДвижения = ВидДвиженияНакопления.Приход;

КонецЕсли;
КонецЦикла;
Набор.Записать(ложь);
ЗафиксироватьТранзакцию();

Программа не ругается, но НИЧЕГО В РЕГИСТР НЕ ПИШЕТ.

Что ей не нравится?
Помогите, полз
nikidevel; +1 Ответить
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
7. WKBAPKA 214 27.03.11 15:27 Сейчас в теме
2(1): где собственно вызывается код, из какой процедуры? до обработки проведения или после?
2. romansun 193 22.03.11 18:56 Сейчас в теме
чота как-то сложно всё тут...

"Измерения:
- ДокументРезерва - заказ покупателя

Регистратор, естественно, заказ покупателя"

т.е. один и тот же документ и регистратор и измерение? А зачем?

воспользуйтесь конструктором движений, по идее он выдаст что-то типа такого:

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


убирайте:
"Запись.Активность = истина;" - это и так ясно (1С-у, в смысле, ясно)
"Запись.ДокументРезерва = ЭтотОБъект.Ссылка;" - это просто странно, см выше - у нас уже есть регистратор
"Набор.Записать()" - это в обработке проведения не нужно - движения и так запишутся, к тому же вы, вероятно, тут напутали с ложь и истина
Ну и транзакция, собственно, зачем? Для откатов в обработке проведения предназначена переменная отказ

в целом, смотрите типовые - там всё уже написано, или смотрите конструкторы разные - какой код они формируют
3. aleks123321 23.03.11 08:44 Сейчас в теме
4. aleks123321 23.03.11 11:23 Сейчас в теме
Ничего не понимаю - НЕ РАБОТАЕТ, хоть убейся.


Вот кусок стандартного кода

НаборЗаписей = РегистрыНакопления.ФактическиеОтпускаОрганизаций.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(Регистратор);
НаборЗаписей.Прочитать();
Пока Выборка.Следующий() Цикл
Движение = НаборЗаписей.Добавить();

// Свойства
Движение.Период = Выборка.ПериодДействияНачало;

// Измерения
Движение.Сотрудник = Выборка.Сотрудник;
Движение.ВидЕжегодногоОтпуска = Выборка.ВидЕжегодногоОтпуска;

// Ресурсы
Движение.Количество = Выборка.ДнейОтпуска;

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



А вот мой код

Набор = РегистрыНакопления.НовыйРегистр.СоздатьНаборЗаписей();
Набор.Отбор.Регистратор.Установить(ЭтотОбъект.Ссылка);
Набор.Прочитать();
Для каждого СТЧ Из ЭтотОБъект.Товары Цикл
Если СТЧ.Количество < Кол Тогда
Движение = Набор.Добавить();
Движение.Номенклатура = СТЧ.Номенклатура;
Движение.Количество = СТЧ.Количество;
Движение.Период = ЭтотОБъект.Дата;
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Склад = Справочники.Склады.НайтиПоКоду("000000056");
КонецЕсли;
КонецЦикла;
Сообщить("_ "+Набор.Количество()); // КОЛИЧЕСТВО ЗАПИСЕЙ В НАБОРЕ ПЕРЕД ЗАПИСЬЮ - ПРАВИЛЬНОЕ
Набор.Записать();

///////////
И ничего не записывается!!!!
10. bayce 46 16.04.20 01:39 Сейчас в теме
Набор.Записать(Истина);
5. aleks123321 23.03.11 11:55 Сейчас в теме
Вопрос снимается.
Обнаружил, что где-то в недрах программы записи нового регистра "убиваются".
Буду искать где.
JohnConnor; +1 Ответить
6. romansun 193 23.03.11 12:33 Сейчас в теме
:D зачот

расскажите, как найдёте тогда )
8. natarezn 07.10.11 13:50 Сейчас в теме
а в какой организации вы работаете?
9. natarezn 07.10.11 15:30 Сейчас в теме
Движения.ВзаиморасчетыСКонтрагентами.Очистить();
Движение = Движения.ВзаиморасчетыСКонтрагентами.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
в обработкепроведения
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот