Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Изменить данные регистра накопления
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование управляемых форм 1С 8.2
Constantus
Приветствую, Форумчане!

Мне требуется в регистре накопления изменить, точнее заменить данные одного реквизита на другое.

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

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

КонецЦикла;

Что-то намудрил с циклом, уходит в вечность. Мне нужно найти реквизит "Размеры" по неверному коду из справочника и установить вместо неправильного на правильный.
Подскажите как правильно изменить код...
Vofka
Внутренний или внешний цикл? Почему решили, что в бесконечность, может просто долго выполняется?
Constantus
Vofka @ Сегодня, 17:14 необходимо зарегистрироваться для просмотра ссылки ,

В том то и дело, проверил на консоле, записей в регистре не так много, около 40

Код правильный?
Vofka
Constantus, на первый взгляд вроде нормальный (если не считать, что если в одном регистраторе несколько строк, то они будут повторно обрабатываться, но на бесконечность цикла это не влияет, в принципе). 40 строк вполне посильно обойти отладчиком.
Constantus
Vofka @ Сегодня, 17:44 необходимо зарегистрироваться для просмотра ссылки ,


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


Когда делаю отбор по регистратору

НаборЗаписей.Отбор.Регистратор.Значение = Выборка.Регистратор;


То выходит много записей, причем попытка:

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


Не дала никакого уменьшения списка почему-то. "Сообщить" выдает все номенклатуры, а не , которые ограничены
Если Запись.Номенклатура = Справочники.Номенклатура.БалкаЦветника


Если вывести данные только по запросу выводит всего 40 строк из Регистра, которые и нужно изменить, а полный код уходит в уйму записей, причем Запись.Номенклатура показывает все номенклатуры..

Vofka
Constantus, если регистр подчинен регистратору (а в случае регистра накопления по другому нельзя), то прочитать набор записей можно только по регистратору. То есть вам надо получить список уникальных регистраторов по которым есть хотя бы одна запись, соответствующая набору

"ВЫБРАТЬ РАЗЛИЧНЫЕ
|    ДвижениеТМЦ.Регистратор
|ИЗ
|    РегистрНакопления.ДвижениеТМЦ КАК ДвижениеТМЦ
|ГДЕ
|    ДвижениеТМЦ.Номенклатура = &Номенклатура
|    И ДвижениеТМЦ.Размеры = &Размеры
|    И ДвижениеТМЦ.Склад = &Склад";


читать набор записей и внутри набора записей менять уже конкретные записи и записывать набор обратно в базу

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

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

Набор.Записать(Истина);
Constantus
Vofka @ Вчера, 12:25 необходимо зарегистрироваться для просмотра ссылки ,

Шайтан!!!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.