Как руками записать движение в новый регистр накопления
Уважаемые, что делаю не так?
Создал новый регистр накопления
НовыйРегистр:
Измерения:
- ДокументРезерва - заказ покупателя
- Склад
- Номенклатура
Ресурсы:
- Количество
Регистратор, естественно, заказ покупателя.
При проведении документа Нужно по определенному условию записать в этот регистр данные по строкам табличной части
Вот код
НачатьТранзакцию();
Набор = РегистрыНакопления.НовыйРегистр.СоздатьНаборЗаписей();
Набор.Отбор.Регистратор.Использование = Истина;
Набор.Отбор.Регистратор.Установить(ЭтотОбъект.Ссылка);
Набор.Очистить();
Набор.Записать(Истина);
Набор.Отбор.Регистратор.Значение = ЭтотОбъект.Ссылка;
//Набор.Отбор.Регистратор.Установить(ЭтотОбъект.Ссылка);// Так тоже пробовал
Для каждого СТЧ Из ЭтотОБъект.Товары Цикл
Если СТЧ.параметр = УСЛОВИЕ Тогда
Запись = Набор.Добавить();
Запись.ДокументРезерва = ЭтотОБъект.Ссылка;
Запись.Склад = Справочники.Склады.НайтиПоКоду("000000056");
Запись.Номенклатура = СТЧ.Номенклатура;
Запись.Количество = СТЧ.Количество;
Запись.Период = ЭтотОбъект.Дата;
Запись.Активность = истина;
Запись.ВидДвижения = ВидДвиженияНакопления.Приход;
КонецЕсли;
КонецЦикла;
Набор.Записать(ложь);
ЗафиксироватьТранзакцию();
Программа не ругается, но НИЧЕГО В РЕГИСТР НЕ ПИШЕТ.
Что ей не нравится?
Помогите, полз
Создал новый регистр накопления
НовыйРегистр:
Измерения:
- ДокументРезерва - заказ покупателя
- Склад
- Номенклатура
Ресурсы:
- Количество
Регистратор, естественно, заказ покупателя.
При проведении документа Нужно по определенному условию записать в этот регистр данные по строкам табличной части
Вот код
НачатьТранзакцию();
Набор = РегистрыНакопления.НовыйРегистр.СоздатьНаборЗаписей();
Набор.Отбор.Регистратор.Использование = Истина;
Набор.Отбор.Регистратор.Установить(ЭтотОбъект.Ссылка);
Набор.Очистить();
Набор.Записать(Истина);
Набор.Отбор.Регистратор.Значение = ЭтотОбъект.Ссылка;
//Набор.Отбор.Регистратор.Установить(ЭтотОбъект.Ссылка);// Так тоже пробовал
Для каждого СТЧ Из ЭтотОБъект.Товары Цикл
Если СТЧ.параметр = УСЛОВИЕ Тогда
Запись = Набор.Добавить();
Запись.ДокументРезерва = ЭтотОБъект.Ссылка;
Запись.Склад = Справочники.Склады.НайтиПоКоду("000000056");
Запись.Номенклатура = СТЧ.Номенклатура;
Запись.Количество = СТЧ.Количество;
Запись.Период = ЭтотОбъект.Дата;
Запись.Активность = истина;
Запись.ВидДвижения = ВидДвиженияНакопления.Приход;
КонецЕсли;
КонецЦикла;
Набор.Записать(ложь);
ЗафиксироватьТранзакцию();
Программа не ругается, но НИЧЕГО В РЕГИСТР НЕ ПИШЕТ.
Что ей не нравится?
Помогите, полз
По теме из базы знаний
- Корректировка остатков регистров накопления (обычные и управляемые формы)
- Устранение расхождений между регистрами РАУЗ (регл) и регистрами учета ТМЦ, НЗП в УПП 1.3 и КА 1.1
- Как тут чё?
- Свертка базы - или как свернуть базу УТ 10.3
- Исправление регистра сведений "Распределение запасов" по данным регистра накопления "Товары на складах" после перехода с ред. 2.4 на ред. 2.5 для конфигураций УТ, КА, ЕРП
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
чота как-то сложно всё тут...
"Измерения:
- ДокументРезерва - заказ покупателя
Регистратор, естественно, заказ покупателя"
т.е. один и тот же документ и регистратор и измерение? А зачем?
воспользуйтесь конструктором движений, по идее он выдаст что-то типа такого:
убирайте:
"Запись.Активность = истина;" - это и так ясно (1С-у, в смысле, ясно)
"Запись.ДокументРезерва = ЭтотОБъект.Ссылка;" - это просто странно, см выше - у нас уже есть регистратор
"Набор.Записать()" - это в обработке проведения не нужно - движения и так запишутся, к тому же вы, вероятно, тут напутали с ложь и истина
Ну и транзакция, собственно, зачем? Для откатов в обработке проведения предназначена переменная отказ
в целом, смотрите типовые - там всё уже написано, или смотрите конструкторы разные - какой код они формируют
"Измерения:
- ДокументРезерва - заказ покупателя
Регистратор, естественно, заказ покупателя"
т.е. один и тот же документ и регистратор и измерение? А зачем?
воспользуйтесь конструктором движений, по идее он выдаст что-то типа такого:
Процедура ОбработкаПроведения(Отказ, Режим)
Для Каждого ТекСтрокаТаблица Из Товары Цикл
Движение = Движения.НовыйРегистр.Добавить();
Движение.Склад = Справочники.Склады.НайтиПоКоду("000000056");
Движение.Номенклатура = ТекСтрокаТаблица.Номенклатура;
Движение.Количество = ТекСтрокаТаблица.Количество;
Движение.Период = Дата;
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
КонецЦикла;
КонецПроцедуры
Показатьубирайте:
"Запись.Активность = истина;" - это и так ясно (1С-у, в смысле, ясно)
"Запись.ДокументРезерва = ЭтотОБъект.Ссылка;" - это просто странно, см выше - у нас уже есть регистратор
"Набор.Записать()" - это в обработке проведения не нужно - движения и так запишутся, к тому же вы, вероятно, тут напутали с ложь и истина
Ну и транзакция, собственно, зачем? Для откатов в обработке проведения предназначена переменная отказ
в целом, смотрите типовые - там всё уже написано, или смотрите конструкторы разные - какой код они формируют
Ничего не понимаю - НЕ РАБОТАЕТ, хоть убейся.
Вот кусок стандартного кода
НаборЗаписей = РегистрыНакопления.ФактическиеОтпускаОрганизаций.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(Регистратор);
НаборЗаписей.Прочитать();
Пока Выборка.Следующий() Цикл
Движение = НаборЗаписей.Добавить();
// Свойства
Движение.Период = Выборка.ПериодДействияНачало;
// Измерения
Движение.Сотрудник = Выборка.Сотрудник;
Движение.ВидЕжегодногоОтпуска = Выборка.ВидЕжегодногоОтпуска;
// Ресурсы
Движение.Количество = Выборка.ДнейОтпуска;
// Реквизиты
Движение.ДатаОкончания = Выборка.ПериодДействияКонец;
Движение.ДатаРегистрации = Выборка.ДатаРегистрации;
КонецЦикла;
НаборЗаписей.Записать();
А вот мой код
Набор = РегистрыНакопления.НовыйРегистр.СоздатьНаборЗаписей();
Набор.Отбор.Регистратор.Установить(ЭтотОбъект.Ссылка);
Набор.Прочитать();
Для каждого СТЧ Из ЭтотОБъект.Товары Цикл
Если СТЧ.Количество < Кол Тогда
Движение = Набор.Добавить();
Движение.Номенклатура = СТЧ.Номенклатура;
Движение.Количество = СТЧ.Количество;
Движение.Период = ЭтотОБъект.Дата;
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Склад = Справочники.Склады.НайтиПоКоду("000000056");
КонецЕсли;
КонецЦикла;
Сообщить("_ "+Набор.Количество()); // КОЛИЧЕСТВО ЗАПИСЕЙ В НАБОРЕ ПЕРЕД ЗАПИСЬЮ - ПРАВИЛЬНОЕ
Набор.Записать();
///////////
И ничего не записывается!!!!
Вот кусок стандартного кода
НаборЗаписей = РегистрыНакопления.ФактическиеОтпускаОрганизаций.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(Регистратор);
НаборЗаписей.Прочитать();
Пока Выборка.Следующий() Цикл
Движение = НаборЗаписей.Добавить();
// Свойства
Движение.Период = Выборка.ПериодДействияНачало;
// Измерения
Движение.Сотрудник = Выборка.Сотрудник;
Движение.ВидЕжегодногоОтпуска = Выборка.ВидЕжегодногоОтпуска;
// Ресурсы
Движение.Количество = Выборка.ДнейОтпуска;
// Реквизиты
Движение.ДатаОкончания = Выборка.ПериодДействияКонец;
Движение.ДатаРегистрации = Выборка.ДатаРегистрации;
КонецЦикла;
НаборЗаписей.Записать();
А вот мой код
Набор = РегистрыНакопления.НовыйРегистр.СоздатьНаборЗаписей();
Набор.Отбор.Регистратор.Установить(ЭтотОбъект.Ссылка);
Набор.Прочитать();
Для каждого СТЧ Из ЭтотОБъект.Товары Цикл
Если СТЧ.Количество < Кол Тогда
Движение = Набор.Добавить();
Движение.Номенклатура = СТЧ.Номенклатура;
Движение.Количество = СТЧ.Количество;
Движение.Период = ЭтотОБъект.Дата;
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Склад = Справочники.Склады.НайтиПоКоду("000000056");
КонецЕсли;
КонецЦикла;
Сообщить("_ "+Набор.Количество()); // КОЛИЧЕСТВО ЗАПИСЕЙ В НАБОРЕ ПЕРЕД ЗАПИСЬЮ - ПРАВИЛЬНОЕ
Набор.Записать();
///////////
И ничего не записывается!!!!
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот