Заказы на доработку 1С (сервис удаленной работы)

Хранилище

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

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Изменить данные регистра накопления          
Constantus Подменю пользователя
сообщение 22.05.19, 13:36
Сообщение #1

Ветеран
*******
Группа: Пользователи
Сообщений: 962
Спасибо сказали: 8 раз
Рейтинг: 0

Приветствую, Форумчане!

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

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

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

КонецЦикла;

Что-то намудрил с циклом, уходит в вечность. Мне нужно найти реквизит "Размеры" по неверному коду из справочника и установить вместо неправильного на правильный.
Подскажите как правильно изменить код...

Vofka Подменю пользователя
сообщение 22.05.19, 14:14
Сообщение #2

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13948
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3635.6

Внутренний или внешний цикл? Почему решили, что в бесконечность, может просто долго выполняется?

Сообщение отредактировал Vofka - 22.05.19, 14:14

Constantus Подменю пользователя
сообщение 22.05.19, 14:34
Сообщение #3

Ветеран
*******
Группа: Пользователи
Сообщений: 962
Спасибо сказали: 8 раз
Рейтинг: 0

Vofka @ Сегодня, 17:14 * ,

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

Код правильный?

Vofka Подменю пользователя
сообщение 22.05.19, 14:44
Сообщение #4

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13948
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3635.6

Constantus, на первый взгляд вроде нормальный (если не считать, что если в одном регистраторе несколько строк, то они будут повторно обрабатываться, но на бесконечность цикла это не влияет, в принципе). 40 строк вполне посильно обойти отладчиком.

Constantus Подменю пользователя
сообщение 22.05.19, 15:03
Сообщение #5

Ветеран
*******
Группа: Пользователи
Сообщений: 962
Спасибо сказали: 8 раз
Рейтинг: 0

Vofka @ Сегодня, 17:44 * ,


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


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

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


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

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


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


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


Vofka Подменю пользователя
сообщение 23.05.19, 8:25
Сообщение #6

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13948
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3635.6

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

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


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

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

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

Набор.Записать(Истина);


Сообщение отредактировал Vofka - 23.05.19, 8:26

Спасибо сказали: Constantus,

Constantus Подменю пользователя
сообщение 24.05.19, 16:20
Сообщение #7

Ветеран
*******
Группа: Пользователи
Сообщений: 962
Спасибо сказали: 8 раз
Рейтинг: 0

Vofka @ Вчера, 12:25 * ,

Шайтан!!!

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 28.03.24, 19:33
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!