Вход | Регистрация



Как обработать весь регистр накопления в цикле и сделать изменения по условию?

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

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

  КонецЕсли;

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

   Обфускация
 
9 - 23.03.18 - 11:54
Чего у меня не хватает, пишет не установлен отбор по регистратору

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

    й=0;
    

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

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

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

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

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

    
КонецЦикла; 

НаборЗаписей.Записать();
КонецПроцедуры
   Mankubus
 
10 - 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
Рег = РегистрыСведений.РС;
НаборЗаписей = Рег.СоздатьНаборЗаписей();
Таб = НаборЗаписей.Выгрузить();
...
НаборЗаписей.Загрузить(Таб);
   TormozIT
 
15 - 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.Выполнить().Выгрузить();
объект.Изменения.Загрузить(итог);

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

&НаКлиенте
Процедура Отобрать(Команда)
    ОтобратьНаСервере();
КонецПроцедуры
   Buster007
 
18 - 23.03.18 - 12:40
(17) огонь
Продажи.СуммаПродажи < Продажи.Стоимость
 И ЕСТЬNULL(Продажи.СуммаПродажи, 0) >= 0";
   Mankubus
 
19 - 23.03.18 - 12:42
(17) >>НаборЗаписей.Стоимость=стр.СуммаПродажи;
не так. НаборЗаписей это коллекция. надо так:
Для каждого Запись Из НаборЗаписей Цикл
Запись.Стоимость=стр.СуммаПродажи;
КонецЦикла;
   Обфускация
 
20 - 23.03.18 - 12:45
(19)
у меня подозрение, что если отобрать только по регистратору, то там будут все строки документа. Надо еще как-то отобрать
   VitShvets
 
21 - 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)
ну как же, регистр поменяется
   Aradel3d
 
25 - 23.03.18 - 13:18
Мир никогда уже не будет прежним, а солнце — таким же ясным, как раньше.
   Галахад
 
26 - 23.03.18 - 13:20
(24) Это вряд ли.
   hhhh
 
27 - 23.03.18 - 14:04
(24) тебе же написали: регистр меняется только по регистраторам


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует