Имя: Пароль:
1C
 
Как обработать весь регистр накопления в цикле и сделать изменения по условию?
,
0 Обфускация
 
23.03.18
11:37
Как обработать весь регистр накопления в цикле и сделать изменения по условию?
1 Вафель
 
23.03.18
11:38
В цикле делаешь изменения по условию и все
2 Обфускация
 
23.03.18
11:38
(1)
подскажите с синтаксисом такого цикла
3 Aradel3d
 
23.03.18
11:38
В документах формирующих регистр.
4 Mankubus
 
23.03.18
11:39
(0)
ПолучитьНаборЗаписей
Прочитать
Обойти - изменить по условию
Записать
5 Aradel3d
 
23.03.18
11:39
Выбрать регистраторы, получить объекты, изменить, провести.
6 Вафель
 
23.03.18
11:41
(2)
Для каждого ... из ... Цикл

  Если Условие тогда
    // Действия
  КонецЕсли;

КонецЦикла
7 Franchiser
 
гуру
23.03.18
11:44
Ставишь отбор по регистратору, считываешь записи, меняешь по условию, пишешь наборы записей в цикле
8 Вафель
 
23.03.18
11:53
/n
9 Обфускация
 
23.03.18
11:54
Чего у меня не хватает, пишет не установлен отбор по регистратору

&НаСервере
Процедура ИзменитьНаСервере()

    й=0;
    

НаборЗаписей = РегистрыНакопления.Продажи.СоздатьНаборЗаписей();


НаборЗаписей.Прочитать();

Для Каждого Запись Из НаборЗаписей Цикл
й=й+1;
        если й=100 тогда
        прервать;
        конецесли;

                   Сообщить(Строка(Запись.АналитикаУчетаНоменклатуры) + " " + Строка(Запись.АналитикаУчетаПартийНоменклатуры) + " " +

Строка(Запись.СуммаПродажи));

    
КонецЦикла;

НаборЗаписей.Записать();
КонецПроцедуры
10 Mankubus
 
23.03.18
11:57
(9) не хватает отбора по регистратору.
НаборЗаписей.Отбор.Регистратор.Установить(МойРегистратор)
11 Обфускация
 
23.03.18
11:59
(10)
так мне по всем записям регистра надо пройтись, а не по одному регистратору
12 Галахад
 
гуру
23.03.18
12:08
Рег = РегистрыСведений.РС;
НаборЗаписей = Рег.СоздатьНаборЗаписей();
Таб = НаборЗаписей.Выгрузить();
...
НаборЗаписей.Выгрузить(Таб);
13 Вафель
 
23.03.18
12:09
(11) по всем нельзя, только по регистратору
14 Галахад
 
гуру
23.03.18
12:11
Рег = РегистрыСведений.РС;
НаборЗаписей = Рег.СоздатьНаборЗаписей();
Таб = НаборЗаписей.Выгрузить();
...
НаборЗаписей.Загрузить(Таб);
15 TormozIT
 
гуру
23.03.18
12:22
Ключом строки регистра накопления является Регистратор+НомерСтроки. Поэтому надо запросом выбрать все нужные ключи. Далее нужно обойти все выбранные регистраторы и по каждому создать и прочитать набор записей и внутри набора по нужным номерам строк сделать требуемые преобразования и записать набор. При этом если строки будут удаляться, надо корректировать номера последующих строк перед обращением к ним.
16 Обфускация
 
23.03.18
12:30
Ну вот смотрите, у меня сейчас запрос и обработка. Вначале процедура с запросом выполняется, потом без запроса. Во второй процедуре пишет "Поле объекта не обнаружено (Стоимость)" в месте изменения этой стоимости. что тут не так?
17 Обфускация
 
23.03.18
12:30
+(16)

&НаСервере
Процедура ИзменитьНаСервере()

    й=0;
для каждого стр из объект.Изменения цикл
    й=й+1;
        если й=100 тогда
        прервать;
        конецесли;

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

КонецПроцедуры

&НаКлиенте
Процедура Изменить(Команда)
    ИзменитьНаСервере();
КонецПроцедуры

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

КонецПроцедуры

&НаКлиенте
Процедура Отобрать(Команда)
    ОтобратьНаСервере();
КонецПроцедуры
18 Buster007
 
23.03.18
12:40
(17) огонь
Продажи.СуммаПродажи < Продажи.Стоимость
 И ЕСТЬNULL(Продажи.СуммаПродажи, 0) >= 0";
19 Mankubus
 
23.03.18
12:42
(17) >>НаборЗаписей.Стоимость=стр.СуммаПродажи;
не так. НаборЗаписей это коллекция. надо так:
Для каждого Запись Из НаборЗаписей Цикл
Запись.Стоимость=стр.СуммаПродажи;
КонецЦикла;
20 Обфускация
 
23.03.18
12:45
(19)
у меня подозрение, что если отобрать только по регистратору, то там будут все строки документа. Надо еще как-то отобрать
21 VitShvets
 
23.03.18
12:51
:) Просто праздник.
(20) Надо получить 2 выборки - регистраторов и изменяемые данные. Дальше внешним циклом идёшь по регистраторам, читаешь набор записей. Дальше либо вложенный цикл по записям как в (19), либо поиск/исправление нужного как в (15). Не забыть записать движения регистратора.
22 Обфускация
 
23.03.18
13:13
вот такой вот конечный вариант. сейчас запущу на рабочей базе. у вас есть 10 минут, чтобы это остановить )


&НаСервере
Процедура ИзменитьНаСервере()

    й=-1;
для каждого стр из объект.Изменения цикл
    й=й+1;
        если й=объект.ЧислоСтрок тогда
        прервать;
        конецесли;

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

конеццикла;    

КонецПроцедуры

&НаКлиенте
Процедура Изменить(Команда)
    ИзменитьНаСервере();
КонецПроцедуры

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

КонецПроцедуры

&НаКлиенте
Процедура Отобрать(Команда)
    ОтобратьНаСервере();
КонецПроцедуры
23 Галахад
 
гуру
23.03.18
13:14
(22) Зачем останавливать? Ничего не произойдет.
24 Обфускация
 
23.03.18
13:17
(23)
ну как же, регистр поменяется
25 Aradel3d
 
23.03.18
13:18
Мир никогда уже не будет прежним, а солнце — таким же ясным, как раньше.
26 Галахад
 
гуру
23.03.18
13:20
(24) Это вряд ли.
27 hhhh
 
23.03.18
14:04
(24) тебе же написали: регистр меняется только по регистраторам
Закон Брукера: Даже маленькая практика стоит большой теории.