Приветствую, Форумчане!
Мне требуется в регистре накопления изменить, точнее заменить данные одного реквизита на другое.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ДвижениеТМЦ.Регистратор,
| ДвижениеТМЦ.Подразделение,
| ДвижениеТМЦ.Номенклатура,
| ДвижениеТМЦ.Модель,
| ДвижениеТМЦ.Размеры,
| ДвижениеТМЦ.Склад
|ИЗ
| РегистрНакопления.ДвижениеТМЦ КАК ДвижениеТМЦ
|ГДЕ
| ДвижениеТМЦ.Номенклатура = &Номенклатура
| И ДвижениеТМЦ.Размеры = &Размеры
| И ДвижениеТМЦ.Склад = &Склад";
Запрос.УстановитьПараметр("Номенклатура", Справочники.Номенклатура.БалкаЦветника);
Запрос.УстановитьПараметр("Размеры", Справочники.РазмерыБалкиЦветника.НайтиПоКоду("000000075"));
Запрос.УстановитьПараметр("Склад", Объект.Склады);
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
НаборЗаписей = РегистрыНакопления.ДвижениеТМЦ.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Значение = Выборка.Регистратор;
НаборЗаписей.Прочитать();
Для каждого Запись Из НаборЗаписей Цикл
Запись.Размеры = Справочники.РазмерыБалкиЦветника.НайтиПоКоду("000000009");
КонецЦикла;
НаборЗаписей.Записать();
КонецЦикла;
Внутренний или внешний цикл? Почему решили, что в бесконечность, может просто долго выполняется?
Vofka @ Сегодня, 17:14
,
В том то и дело, проверил на консоле, записей в регистре не так много, около 40
Код правильный?
Constantus, на первый взгляд вроде нормальный (если не считать, что если в одном регистраторе несколько строк, то они будут повторно обрабатываться, но на бесконечность цикла это не влияет, в принципе). 40 строк вполне посильно обойти отладчиком.
Для каждого Запись Из НаборЗаписей Цикл
Если Запись.Номенклатура = Справочники.Номенклатура.БалкаЦветника И
Запись.Размеры = Справочники.РазмерыБалкиЦветника.НайтиПоКоду("000000075") Тогда
Сообщить(Запись.Номенклатура);
КонецЕсли;
КонецЦикла;
НаборЗаписей.Отбор.Регистратор.Значение = Выборка.Регистратор;
Для каждого Запись Из НаборЗаписей Цикл
Если Запись.Номенклатура = Справочники.Номенклатура.БалкаЦветника И
Запись.Размеры = Справочники.РазмерыБалкиЦветника.НайтиПоКоду("000000075") Тогда
Сообщить(Запись.Номенклатура);
КонецЕсли;
КонецЦикла;
Если Запись.Номенклатура = Справочники.Номенклатура.БалкаЦветника
Constantus, если регистр подчинен регистратору (а в случае регистра накопления по другому нельзя), то прочитать набор записей можно только по регистратору. То есть вам надо получить список уникальных регистраторов по которым есть хотя бы одна запись, соответствующая набору
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ДвижениеТМЦ.Регистратор
|ИЗ
| РегистрНакопления.ДвижениеТМЦ КАК ДвижениеТМЦ
|ГДЕ
| ДвижениеТМЦ.Номенклатура = &Номенклатура
| И ДвижениеТМЦ.Размеры = &Размеры
| И ДвижениеТМЦ.Склад = &Склад";
Набор = РегистрыНакопления.ДвижениеТМЦ.СоздатьНаборЗаписей();
Набор.Отбор.Регистратор.Установить(ВыбДок.Ссылка);
Набор.Прочитать();
Для Каждого Движение Из Набор Цикл
Если Движение.Номенклатура = Номенклатура И
Движение.Размеры = Размеры И
Движение.Склад = Склад Тогда
Запись.Размеры = Справочники.РазмерыБалкиЦветника.НайтиПоКоду("000000009");
КонецЕсли;
КонецЦикла;
Набор.Записать(Истина);
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua