Имя: Пароль:
1C
1С v8
Не хочет программно добавляться запись в Регистр сведений
0 napagokc
 
18.12.12
11:48
Не могу понять, что не так делаю...
Пишу обработку, которая будет заменять МОЛ. МОЛ хранятся в регистре сведений - периодический, независимый.

В обработке есть всего три реквизита:
1) ДатаМОЛ - дата, начиная с которой будет установлен новый МОЛ
2) Старый МОЛ
3) Новый МОЛ

Программмно по отладчику все хорошо проходит, находит все, что нужно, заполняет все правильно, никаких ошибок нет. Но вот результата в базе я не вижу. То есть, запись не сохраняется.

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

   Попытка
       МенеджерЗаписиОС.Записать(Истина);
   Исключение
       Сообщить("Не удалось заменить МОЛ для ОС: " + Выборка.ОС, СтатусСообщения.ОченьВажное);
   КонецПопытки;
   ОбработкаПрерыванияПользователя();
КонецЦикла;

Наставьте на путь истинный, а то сбился я... :(
1 Defender aka LINN
 
18.12.12
11:49
МенеджерЗаписиОС = РегистрыСведений.ОснСредства.СоздатьМенеджерЗаписи();

в цикл засунь
2 Maxus43
 
18.12.12
11:50
(1) хм... накуя?
3 napagokc
 
18.12.12
11:50
(1) Пробовал, не помогает
4 Maxus43
 
18.12.12
11:51
Мол - ресурс?
5 napagokc
 
18.12.12
11:52
(4) Да, МОЛ - ресурс.
ОС - измерение. Больше измерений нет.
6 Maxus43
 
18.12.12
11:52
запрос на всякий покажи
7 zak555
 
18.12.12
11:53
(2) запись - это запись, а не набор
8 Maxus43
 
18.12.12
11:54
(7) и?
9 napagokc
 
18.12.12
11:55
(6)
Запрос = Новый Запрос;
Запрос.Текст =
   "ВЫБРАТЬ
   |    ОснСредстваСрезПоследних.ОС КАК ОС,
   |    ОснСредстваСрезПоследних.МОЛ
   |ИЗ
   |    РегистрСведений.ОснСредства.СрезПоследних(&Дата, ) КАК ОснСредстваСрезПоследних
   |ГДЕ
   |    ОснСредстваСрезПоследних.МОЛ = &МОЛ;

Запрос.УстановитьПараметр("Дата", ДатаМОЛ);
Запрос.УстановитьПараметр("МОЛ", СтарыйМОЛ);

Выборка = Запрос.Выполнить().Выбрать();
10 napagokc
 
18.12.12
11:56
(9) Кавычку забыл. Убрал лишние регистры из запроса, которые только читабельность тут ухудшают, а суть не меняют. Так-то, запрос верный
11 zak555
 
18.12.12
11:58
(8) он и создаёт в обходе запись одну
12 cw014
 
18.12.12
11:59
Что то какой то глюк с менеджером записи есть такой. Он не меняет отбор, если заменять у него реквизиты
13 Maxus43
 
18.12.12
11:59
(11) да, но в цикле ключевые поля перезаполняются, соответственно позиционируется на другой...
14 Maxus43
 
18.12.12
12:00
хз, юзай наборзаписей, там косяков не видел
15 MSII
 
18.12.12
12:02
Перед записью вызывай Прочитать()
16 napagokc
 
18.12.12
12:02
ннда... Я же проверял :( Видимо, коряво проверил. Действительно, если
МенеджерЗаписиОС = РегистрыСведений.ОснСредства.СоздатьМенеджерЗаписи();
внести в цикл, то норм работает.
Надо ж так :(
Всем спасибо.
17 Maxus43
 
18.12.12
12:04
мда, пора читать учебники... думал всегда и так работать будет)
18 Жан Пердежон
 
18.12.12
12:04
(13) ага, вот прямо так само берет и позиционируется, да?)
19 Buster007
 
18.12.12
12:06
(18) ну по идее менеджер позиционироваться должен перед записью -> должно работать)
20 Defender aka LINN
 
18.12.12
13:08
(19) Фирма 1С юзает другие идем
21 Defender aka LINN
 
18.12.12
13:08
*идеи