Имя: Пароль:
1C
1С v8
1C 8.3.10. Не записывает регистр сведений в фоне
0 holls
 
30.03.18
11:01
Доброго дня. Регламентной задание обращается в привилегированной модуль, где запись в регистр сведений. Почему-то при выполнении в фоне запись не происходит. Если эту же процедуру запустить в режиме предприятия, то все отрабатывает нормально. В фоне задание в эту процедуру попадает, отрабатывает норм (проверено в отладчике), но по итогу запись в РС не меняется. Кто-то сталкивался может с такой темой?
Процедура оч простая:
Процедура ЗаписатьРС(СтруктураДанных)  экспорт

    НаборЗаписей = РегистрыСведений.ДокументыКОтправке.СоздатьНаборЗаписей();
    
    НаборЗаписей.Отбор.Документ.Установить(СтруктураДанных.Документ);
    НаборЗаписей.Прочитать();
    НаборЗаписей.Очистить();
        
    НаборЗаписей.Добавить();
        
    НаборЗаписей[0].Документ = СтруктураДанных.Документ;
    НаборЗаписей[0].Статус = СтруктураДанных.Статус;
        
    НаборЗаписей.Записывать=Истина;
    НаборЗаписей.Записать();
            
    
КонецПроцедуры
1 Cyberhawk
 
30.03.18
11:03
Записывай в порпытке, в исключении запись в ЖР
2 Cyberhawk
 
30.03.18
11:04
(если отладить фоновое тямы не хватает)
3 holls
 
30.03.18
11:05
Пробовала в ЖР записывать. В попытке/исключение поставила запись и там, и там. Запись в ЖР показывает, что в исключение не попадает: отрабатывается норм.
4 holls
 
30.03.18
11:10
(1). Было как-то так:
Процедура ЗаписатьРС(СтруктураДанных)  экспорт

попытка

    НаборЗаписей = РегистрыСведений.ДокументыКОтправке.СоздатьНаборЗаписей();
    
    НаборЗаписей.Отбор.Документ.Установить(СтруктураДанных.Документ);
    НаборЗаписей.Прочитать();
    НаборЗаписей.Очистить();
        
    НаборЗаписей.Добавить();
        
    НаборЗаписей[0].Документ = СтруктураДанных.Документ;
    НаборЗаписей[0].Статус = СтруктураДанных.Статус;
        
    НаборЗаписей.Записывать=Истина;
    НаборЗаписей.Записать();
        
    ЗаписьЖурналаРегистрации("Запись в РС",         УровеньЖурналаРегистрации.Информация,,, "ОК");
          
  Исключение
    ЗаписьЖурналаРегистрации("Запись в РС",         УровеньЖурналаРегистрации.Ошибка,,, "Ошбибка " + ОписаниеОшибки());

КонецПопытки;
  
КонецПроцедуры

В ЖР было "ОК"
5 Cyberhawk
 
30.03.18
11:35
"НаборЗаписей.Записывать=Истина" явно лишнее. Это свойство анализируется и применяется только при записи движений из коллекции движений документа, а у тебя набор записей "независимый" (не в составе коллекции двидений, а созданный явно)
6 Cyberhawk
 
30.03.18
11:36
Ну раз в ЖР было ОК, то все записывается. Отладчик в помощь. Может код в модуле набора записей отрабатывает и бороду прописывает.
7 holls
 
30.03.18
11:38
(5) это было дописано уже потом - до кучи, на всяк случай.
8 holls
 
30.03.18
11:39
(6) В отладчике все проходит без проблем. Причем сейчас точки останова стоят везде, где есть записи в этот регистр. Все отрабатывается норм. Значения ресурсов те, какие ожидаются. Но по факту набор записей не изменяется. И вообще раньше все это работало до вчерашнего дня без проблем.
9 Cyberhawk
 
30.03.18
11:41
"по факту набор записей не изменяется" // Как проверяешь?
10 holls
 
30.03.18
11:45
(9) в режиме предприятия после фонового задания РС без изменений. Так как сейчас точки останова стоят во всех местах кода, где есть запись в этот РС, и останова нет, то по идее набор должен быть измененным после фонового задания. Но нет.
11 Cyberhawk
 
30.03.18
11:48
Подписки / модуль НЗ
12 Cyberhawk
 
30.03.18
11:49
Проверять нужно не "после фонового задания", а в другом клиентском сеансе после того, как строка выполнения кода в отладчике прошла строчку в записью НЗ (и выполнения остановлено на следующей строке)
13 holls
 
30.03.18
11:57
(12) стою в отладчике - набор записи изменился. В другом клиентском сеансе нет
14 Cyberhawk
 
30.03.18
12:07
Значит транзакция?
15 Cyberhawk
 
30.03.18
12:08
Измениться-то должен не НЗ, а запись в РС
16 holls
 
30.03.18
12:10
(14) точно! вся обработка в одной транзакции происходит. Сейчас уберу, посмотрю.
17 Cyberhawk
 
30.03.18
12:20
Зачем убирать транзакцию? Если она откатывается, то наверное так и надо. А если внутри нее идет перезатирание одной и той же записи РС, то ее убирание не поможет.
18 holls
 
30.03.18
12:25
(14) нет. погодите. начатьтранзакцию - это в другом месте. тут процедура очень простая: прочитать данные и изменить РС. Добавила после записи код, чтобы перечитать записи:
        МенеджерЗаписи=РегистрыСведений.ДокументыКОтправке.СоздатьМенеджерЗаписи();        МенеджерЗаписи.Документ=СтруктураДанных.Документ;
МенеджерЗаписи.Статус=СтруктураДанных.Статус;
МенеджерЗаписи.Прочитать();

отладчик показывает статус = "отправлен". В клиентском сеансе одновременно статус по этим измерениям пустой
не понимаю...
19 holls
 
30.03.18
12:26
(18) опечатка: строка "МенеджерЗаписи.Статус=СтруктураДанных.Статус" лишняя
20 Cyberhawk
 
30.03.18
12:26
"отладчик показывает статус = "отправлен"" // Так надо смотреть не на статус, а на непустой НЗ
21 holls
 
30.03.18
12:34
(20) извини, не понимаю, что значит "непустой" НЗ.

скрин отладчика: https://www.dropbox.com/s/ufkp3ycdpzhgq0g/Отладчик.png?dl=0
скрин клиентского сеанса на точке останова тут: https://www.dropbox.com/s/cp0c5j1u35hak0p/Клиент.png?dl=0
22 holls
 
30.03.18
12:36
(21) измерения немного другие в теме указала - для упрощения, чтобы много не писать. В скринах исходный код.
23 Cyberhawk
 
30.03.18
12:42
С такими скринами Я пас
24 holls
 
30.03.18
12:42
(23) в смысле? что не так?
25 holls
 
30.03.18
12:50
(23) просто показала, что в отладчике набор записи (три измерения) соответствует просмотрю на клиенте. что отладчик показывает одно значение ресурса, а на клиенте иное.
26 holls
 
30.03.18
14:22
Проблема с правами была: добавила запись РС для базовых прав и все заработало. Фоновое задание вызывается без пользователя. Все перестало работать после ввода пользователей, у которых нет прав на запись РС.
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.