Имя: Пароль:
1C
1С v8
Непериодический зависимый регистр сведений
0 Woolf
 
05.04.12
15:05
Доброго ВС! Не могу понять, по какой причине не проводятся записи в Непериодический зависимый регистр сведений.

Регистр СчетаПокупателюИИхОплатА
периодичность: непериодический
Режим записи:  подчинение регистратору
Измерения: СчетНаОплату
Ресурс:    ОплаченоСумма

Регистратор:   документ "ПоступлениеНаРасчетныйСчет"

В связи с тем, что у документа-регистратора свойство "Удаление движений" установлено "не удалять автоматически" требуется удалить существующие записи в вышеуказанном регистре и записать новые.

вот код:

НаборЗаписей = РегистрыСведений.СчетаПокупателюИИхОплатА.СоздатьНаборЗаписей();
              НаборЗаписей.Отбор.Регистратор.Установить(ТекРегистратоР);
              НаборЗаписей.Записать();
              НаборЗаписей = РегистрыСведений.СчетаПокупателюИИхОплатА.СоздатьНаборЗаписей();
              НаборЗаписей.Отбор.Регистратор.Установить(ТекРегистратоР);
              Запись = НаборЗаписей.Добавить();
              Запись.СчетНаОплату      = СчетНаОплатуНовый;
              Запись.ОплаченоСуммА     = СуммаПлатежА;
                НаборЗаписей.Записать();
1 Maxus43
 
05.04.12
15:08
где ошибка то? чо пишет?
2 Mort
 
05.04.12
15:09
НаборЗаписей = РегистрыСведений.СчетаПокупателюИИхОплатА.СоздатьНаборЗаписей();
              НаборЗаписей.Отбор.Регистратор.Установить(ТекРегистратоР);
              НаборЗаписей.Записать();

Это что? Очистка перед записью? ))))
3 Reset
 
05.04.12
15:09
Добавить
Запись.Регистратор=ТекРегистратоР;
4 Reset
 
05.04.12
15:10
А вообще проще и логичнее имхо через коллекцию Движения документа объекта при проведении делать
5 sergeante
 
05.04.12
15:10
можно проще

НаборЗаписей = РегистрыСведений.СчетаПокупателюИИхОплатА.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(ТекРегистратоР);
Запись = НаборЗаписей.Добавить();
Запись.Регистратор=ТекРегистратоР;
Запись.СчетНаОплату      = СчетНаОплатуНовый;
Запись.ОплаченоСуммА     = СуммаПлатежА;
НаборЗаписей.Записать();
6 Maxus43
 
05.04.12
15:12
(2) а шо?)
7 sergeante
 
05.04.12
15:12
Не надо создавать набор два раза, не обязательно его очищать (записывать пустым). Ну и (3)
8 Reset
 
05.04.12
15:13
(6) Он имеет в виду, зачем два раза писать. Можно только второй, с 1 строкой.
9 Maxus43
 
05.04.12
15:14
(8) скажи это разрабам типовых)
10 sergeante
 
05.04.12
15:15
(9) гы)
11 Mort
 
05.04.12
15:17
(9) Не видел в типовых такого. Покажешь?
12 Maxus43
 
05.04.12
15:18
(11) в каждом доке

   Если мУдалятьДвижения Тогда
       ОбщегоНазначения.УдалитьДвиженияРегистратора(ЭтотОбъект, Отказ);
   КонецЕсли;
13 Mort
 
05.04.12
15:21
(12) Ну вообще то там это логично, потому что док при проведении может _не все_ регистры писать, а сами они не очищаются.
14 Maxus43
 
05.04.12
15:23
(13) ну тоже самое происходит, запись в регистры 2 раза
15 Woolf
 
05.04.12
15:29
не пойму, всё вроде так и есть, ан нет, нету записей в регистре.
где рыть?
16 hhhh
 
05.04.12
15:29
(14) там это сделано, чтобы старые записи не использовались при проведении. А здесь у автора видно, что он не пользуется записями этого регистра, Сразу пишет и всё.
17 Woolf
 
05.04.12
15:33
+(15) может форму регистра нужно поднастроить?
18 Maxus43
 
05.04.12
15:35
(16) я вкурсе для чего сделано, меня пример двойной записи в регистр просили привести
19 Maxus43
 
05.04.12
15:36
(17) код целиком ещё раз покажи, (3) упустил помойму
20 НЕА123
 
05.04.12
15:36
док новый, небось.
21 Reset
 
05.04.12
15:36
(18) Некорректный пример
22 Maxus43
 
05.04.12
15:38
ладно ладно, заклевали сразу
23 Woolf
 
05.04.12
15:45
(20)-нет, документ изначально записан и проведён. При перепроведении, в случае наличия записей в в вышеуказанном регистре, должен их убрать и записать новые.

Процедура ЗарегистрироватьОплатуВРегистрЕ(СчетНаОплатуСтарый,СчетНаОплатуНовый,ТекРегистратоР,СуммаПлатежА) Экспорт

НаборЗаписей = РегистрыСведений.СчетаПокупателюИИхОплатА.СоздатьНаборЗаписей();
              НаборЗаписей.Отбор.Регистратор.Установить(ТекРегистратоР);
              Запись = НаборЗаписей.Добавить();
              Запись.Регистратор=ТекРегистратоР;
              Запись.СчетНаОплату      = СчетНаОплатуНовый;
              Запись.ОплаченоСуммА     = СуммаПлатежА;
              НаборЗаписей.Записать();

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



//Процедура вызывается из модуля //ОбработкаПроведения
24 Maxus43
 
05.04.12
15:46
ТекРегистратоР - Объект небось? ТекРегистратоР.Ссылка
25 Woolf
 
05.04.12
15:47
+(23) на параметры у процедуры внимание не обращайте - не убрал своевременно
26 Woolf
 
05.04.12
15:48
(24) - нет: ДокументСсылка.ПоступлениеНаРасчетныйСчет
27 Maxus43
 
05.04.12
15:50
у этого регистра документ точно регистратором  выбран?
З.ы. Это в документе же, почему через Движения не сделать?
28 Woolf
 
05.04.12
15:54
(27) - точно документ-регистратор
вообще-то мне и не совсем обязательно в режиме подчинения этот регистр создавать, можно и независимый, однако бесит эта ситуация : всё ведь вроде как нужно. Вот и пытаюсь дойти до причины.
29 Maxus43
 
05.04.12
15:56
отладчик все строчки проходит и всё видно в нём? значения присваиваются?
кроме как кривого кэша уже и думать не на что
30 Woolf
 
05.04.12
15:59
(29) - да, всё нормально, и в конце процедуры показывает НаборЗаписей.Количество() = 1

после открываю "БП", а там регистр чистый :((
31 Mort
 
05.04.12
16:19
(30) Ну так док после процедуры проведения записывает свою движуху и конечно у тебя там все затирается. Поставь в обработке проведения Движения.СчетаПокупателюИИхОплатА.Записывать = Ложь;
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой