Имя: Пароль:
1C
1С v8
Запись в регистр сведений
, ,
0 berendej
 
13.03.13
11:34
Регистр сведений подчинен регистратору. В нем есть записи, мне нужно поменять уже имеющуюся. Делаю это в процедуре ОбработкаПроведения в самом конце. На строке Отбор.ВидОперации, говорит, что поле объекта не обнаружено.
Движение = РегистрыСведений.РасчетНормированияРасходов.СоздатьНаборЗаписей();
   Движение.Отбор.Регистратор.Установить(ЭтотОбъект.Ссылка);
   Движение.Отбор.ВидОперации.Установить(Перечисления.ВидыРасходовНУ.РасходыНаРекламуНормируемые);
   
   Движение.Прочитать();//читаем набор

   Движение.ЗатратыГод = Движение.ЗатратыГод + 500;
   Движение.Записать();
1 ZanderZ
 
13.03.13
11:36
правильно говорит - отбору у подчиненных регистратору только по регистратору
2 Галахад
 
гуру
13.03.13
11:37
В обработкеПроведения не нужно отбирвать.
3 Fragster
 
гуру
13.03.13
11:37
а еще у набора нет рееквизитов, у него есть записи
4 kosts
 
13.03.13
11:40
(0) Читать набор, тоже вроде не обязательно. Записывать как первый раз.
5 kosts
 
13.03.13
11:41
Делать через движения, даже самому ну нужно записывать.
6 berendej
 
13.03.13
15:27
(2) а где тогда?
(5) так я и делаю через движения, или чего то не понимаю?
7 Reset
 
13.03.13
15:29
(6) Вот эти движения имеют в виду
ДокументОбъект.<Имя документа> (DocumentObject.<Имя документа>)
Движения (RegisterRecords)
Использование:

Только чтение.
Описание:

Тип: КоллекцияДвижений.
Предоставляет доступ к коллекции наборов записей движений документа
8 berendej
 
13.03.13
15:45
(7) так только чтение же, а мне надо поменять значения ресурсов у записей
9 tdm
 
13.03.13
15:48
(8) >>надо поменять
а не проще в том месте где они формируются сразу правильно писать ?
10 tdm
 
13.03.13
15:49
(6) имеется ввиду ИскомыеДвижения = ДокументОбъект.Движения.РасчетНормированияРасходов; а дальщу уже можно Для каждого ... из ИскомыеДвижения  и т.д.
11 Reset
 
13.03.13
15:51
(8) Из всего текста прочитал самое ненужно и интерпретировал неправильно.

Движения.РасчетНормированияРасходов.Записывать = Истина;
Движение = Движения.РасчетНормированияРасходов.Добавить();
Движение.Период = Дата;
Движение.ЗатратыГод = 500;
12 Reset
 
13.03.13
15:52
про это забудь и никогда так не делай:
Движение.ЗатратыГод = Движение.ЗатратыГод + 500;
13 Reset
 
13.03.13
15:53
Правильно
Движение.ЗатратыГод = КакойТоРеквизитИзДокумента;
14 berendej
 
13.03.13
15:58
(12) да это я в качестве примера написал. Пока не знаю как правильнее сделать, как ты предлагаешь не получится, потому что это документ регламентной операции и он собирает соответственно данные из разных регистров
15 berendej
 
13.03.13
16:22
Движения.РасчетНормированияРасходов.Записывать = Истина;
СписокЗаписей = ЭтотОбъект.Движения.РасчетНормированияРасходов;
       
Для каждого Запись из ИскомыеДвижения цикл

В цикл уже не заходит, ни одной записи не находит, хотя по факту они есть
16 hhhh
 
13.03.13
16:28
(15) расшифруй, эти три строчки похоже из оразных программ надергал.
17 berendej
 
13.03.13
16:30
(16) Для каждого запись из СписокЗначений
18 berendej
 
13.03.13
16:31
Движения.РасчетНормированияРасходов.Записывать = Истина;
СписокЗаписей = ЭтотОбъект.Движения.РасчетНормированияРасходов;
       
Для каждого Запись из СписокЗаписей цикл
19 Happy Bear
 
13.03.13
16:37
(18) так записи добавить сначала нужно
и как тогда они добавляются?

запросом вытащи все записи, и заново запиши с нужными значениями
20 Serg_1960
 
13.03.13
16:45
(из серии "Найди три отличия)

Если ЭтотОбъект уже был проведен, то:

ЭтотОбъект.Движения.РасчетНормированияРасходов.Прочитать();
ТаблицаЗаписей = ЭтотОбъект.Движения.РасчетНормированияРасходов.Выгрузить();
...
ЭтотОбъект.Движения.РасчетНормированияРасходов.Загрузить(ТаблицаЗаписей);
ЭтотОбъект.Движения.РасчетНормированияРасходов.Записать(Истина);
21 berendej
 
13.03.13
16:58
Ну идея понятна, сначала надо получить старые записи, тут кому, что ближе, либо запрос либо ТЗ
22 kosts
 
14.03.13
08:00
(21) Получать старые записи и вносить в них изменения это чревато крупными трудноуловимыми проблемами...
23 berendej
 
14.03.13
11:37
(22) а как тогда лучше сделать в данной ситуации?
24 Reset
 
14.03.13
11:46
(23) Постулат (а): Ты ситуацию не описал.
Постулат (б): Описал только архикривое решение, которое ты пытаешься провернуть. Решение КРИВОЕ, так делать не надо, я сказал еще в (12).
Какое решение нормальное, ответить нельзя, т.к. см постулат (а)

Еще раз: делать движения на основании анализа своих же движений - *Криво*. Отсюда вывод: проблема, которую ты здесь решаешь (ай ай нет записей, что делать) - не существует.
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший