|
Как обработать весь регистр накопления в цикле и сделать изменения по условию? | ☑ | ||
---|---|---|---|---|
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) тебе же написали: регистр меняется только по регистраторам
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |