Имя: Пароль:
1C
1С v8
При проведении документа удаляет записи в регистре накопления
0 ze-dev
 
18.12.20
21:23
Господа специалисты, добрый вечер!
Подскажите, пожалуйста, такая ситуация:

Есть документ "ЭтотСамыйДокумент", который ИЗНАЧАЛЬНО (по задумке нас, разработчиков) не проводит и не проводил напрямую от СЕБЯ НИКАКИЕ движения в регистр накопления "НаименованиеМоегоРегистра".

Этот регистр накопления прописан в этом ЭтомСамомДокументе, как регистр его движения.
Реальные же движения в этом регистре делаются обработкой конфигурации "НеИмеетЗначения" с регистратором "ЭтотСамыйДокумент.Ссылка".

Поэтому в функции "ОбработкаПроведения" "ЭтогоСамогоДокумента" прописан такой код:
1) ДвижениеВремени = Движения.НаименованиеМоегоРегистра;
2) ДвижениеВремени.Отбор.Регистратор.Установить(ТекущегоДокументаСсылка);  //  это ссылка "ЭтотСамыйДокумент.Ссылка", там в коде просто ЭтотОбъект.Ссылка (или просто Ссылка ставил, это одно  и то же)
3) ДвижениеВремени.Прочитать();
4) ДвижениеВремени.Записать(Истина);

Теперь далее:
∟ строчка 3: 3) ДвижениеВремени.Прочитать();
    ∟ читает и собирает все движения по этому регистратору "ЭтотСамыйДокумент.Ссылка" из регистра накопления "НаименованиеМоегоРегистра"
      Отладчиком смотрел - были записи из регистра (их может быть больше одной, и по 4 есть, это в порядке вещей)
∟ строчка 4: 4) ДвижениеВремени.Записать(Истина); [Истина - запись с замещением]
    ∟ стирает эти записи в регистре (по этому регистратору "ТекущегоДокументаСсылка" их больше нет. )

Парни, как так?!

(Сегодня около 16-30 по МСК у нас было обновление платформы. А вдруг это ..? Да не, бред какой-то ..)
1 ze-dev
 
18.12.20
21:28
Хочу добавить сразу (пропустил изначально этот момент):

∟ Конфигурация самопереписанная, снятая с поддержки нами уже полдюжины лет ).
∟ Обычные формы, 8.3.
∟ Платформа обновилась 18.12.20 примерно в 16-30 по МСК.
∟ ну и началось..
2 vde69
 
18.12.20
22:14
у меня вообще нет модуля проведения ни в одном документе. Все идет через подписки "при записи", так как по некоторым регистрам нужно движение не проведенных документов
3 vde69
 
18.12.20
22:17
вообще как вариант - был не установлен режим совместимости и после обновления платформы поменялось что-то...

Вы хоть перед сменой платформы тестируете хоть чего?
4 ze-dev
 
18.12.20
22:39
(3) Конечно этот механизм тестировался и работал с июля 19г.

Где, у чего, и для чего не был установлен механизм совместимости?
Чего с чем?
5 Ненавижу 1С
 
гуру
18.12.20
22:46
Это обновление платформы. Поменялось поведение
6 Cyberhawk
 
18.12.20
22:46
Покажи свойства документа в метаданных
7 Ненавижу 1С
 
гуру
18.12.20
22:48
Какая платформа стояла? Какая стала?
Меняли в конфигурации режим совместимости?
8 ze-dev
 
18.12.20
22:49
Там было безусловное выполнение этого кода с июля 19г.

Возможно предположить, что он не работал.

Но - я тогда проверял - все записи регистра (по этому док-ту) оставались после проведения док-та.
(Еще раз - там безусловное перезапись, т.е. не было никаких Если перед кодом)


Т.Е. в этом регистре могли быть записи по этому регистратору "Этот.Док.Ссылка", а могли и не быть вовсе.
Я сам тестировал на док-ах, по которым были движения.
Все работало. До сегодняшнего вечера.

Чтобы кто-то из коллег случайно удалил кусок кода - так последнее изменение док-та в начале декабря.
9 Ненавижу 1С
 
гуру
18.12.20
22:49
ДвижениеВремени = Движения.НаименованиеМоегоРегистра;
ДвижениеВремени.Отбор.Регистратор.Установить(ТекущегоДокументаСсылка);

Так делать полный бред
10 Ненавижу 1С
 
гуру
18.12.20
22:50
(8) хватит истерить и начинай отвечать на вопросы
11 ze-dev
 
18.12.20
22:51
(7) Еще не знаю, какая стояла, и какая стала.
Про режим совместимости тоже еще не в курсе.

Смогу выяснить наверно только утром в сб., 19.12
12 Ненавижу 1С
 
гуру
18.12.20
22:52
(11) вы так всегда обновляете? Не зная что на что?
13 ze-dev
 
18.12.20
22:53
(9) Почему? Что не так? Только пж без эмоций, я сам взведен сегодня.
Что  можно исправить ?
14 Ненавижу 1С
 
гуру
18.12.20
22:54
(13) потому что это и так набор записей с этим отбором
15 ze-dev
 
18.12.20
22:58
(12) Не могу точно сказать, как именно обновляем, это не я ).  (считается, что мой уровень еще недостаточен, чтобы я в этом мог участвовать)
Обычно мне говорят рук-ль отдела и др. товарищи, что , вот пришло обновление платформы, и стало.

Кстати , с обновлением приехала нединамика в картинках, и всех пользователей пришлось завершить.
16 Ненавижу 1С
 
гуру
18.12.20
23:00
Уберите вообще обработку проведения. Или закомментируйте ее

Поставьте у документа в свойствах удаление движений - не удалять автоматически
17 ze-dev
 
18.12.20
23:01
(14) Ну правльно же:
      ∟ мы отобрали с регистратором, и они есть в  ДвижениеВремени.Прочитать(); (говорю ж , отладчиком прошел)
      ∟ теперь записываем обратно ДвижениеВремени.Записать(ИСТИНА) - ВСё! нет их больше в регистре. Ну как так
18 Ненавижу 1С
 
гуру
18.12.20
23:03
Или даже: Удалять автоматически при отмене проведения
19 ze-dev
 
18.12.20
23:06
(16) [удаление движений - не удалять автоматически]: Нельзя -  в нем с десяток движений в другие регистры, которые делаются непосредственно именно этим док-том, и их механизм прописан вручную, он нестандартен. В отмене проведения - также все прописано вручную.[Поставьте у документа в свойствах удаление движений - не удалять автоматически] - этого точно нельзя сделать
20 Ненавижу 1С
 
гуру
18.12.20
23:06
Какой режим сейчас стоит?
21 ze-dev
 
18.12.20
23:08
(20) Не знаю честно. Где посмотреть?
22 Ненавижу 1С
 
гуру
18.12.20
23:12
23 ze-dev
 
18.12.20
23:15
(16) Единственно близко подходящим я вижу пока только это: [Поставьте у документа в свойствах удаление движений - не удалять автоматически]. Это из наиболее очевидного. Но тестить буду уже завтра. Спасибо за участие! Заходи завтра )).
24 ze-dev
 
18.12.20
23:21
(22) Да, этот режим удаления движений и стоит (Не удалять автоматически)

Я имел в виду [Меняли в конфигурации режим совметсимотми?] - это же должно быть что-то другое ?
25 Ненавижу 1С
 
гуру
18.12.20
23:36
Вариант убрать прямой метод:
Набор.записать(истина);

Поставить косвенно:
Набор.записывать=истина;
26 RomanYS
 
18.12.20
23:38
(0) посмотри значение ДвижениеВремени.Записывать
после выполнения четвертой строки.
27 ze-dev
 
20.12.20
13:17
Парни, спасибо за участие!

Прошел отладчиком пошагово всю процедуру ОбработкаПроведения() и нашел проблему:
позже была введена функция дкОбработкаПроведения(),
которая очищала вообще все движения документа,
а уже после нее документ снова их делал.

Это работает для тех регистров, которые двигает непосредственно сам документ.
Движения же моего регистра двигаются внешней обработкой с Регистратором "ЭтотСамыйДокумент.Ссылка".
Поэтому он благополучно их очищал, но не восстанавливал.

Решил следующим образом:
Создал 2 блока кода: 1й - бэкап записей регистра, 2й - просто переливаю бэкап в ДвижениеВремени уже после очищения движений регистров.
Все корректно работает.

    // Должен идити ДО дкОбработкаПроведения() - там ВСЕ Движения очищаются, если Не ЭтоНовый()
    ДвижениеВремени_BACKUP  = РегистрыНакопления.НаименованиеМоегоРегистра.СоздатьНаборЗаписей();
        ДвижениеВремени_BACKUP.Отбор.Регистратор.Установить(ЭтотОбъект.Ссылка);
        ДвижениеВремени_BACKUP.Прочитать();
    
    // ГОРИЗОНТ СОБЫТИЙ для Движения - в Не ЭтоНовый() очищаются безусловно (в т.ч. мой регистр)
    Если НЕ дкОбработкаПроведения(ЭтотОбъект, Отказ, Режим) Тогда Возврат; КонецЕсли;
    
    // Должен идти ПОСЛЕ дкОбработкаПроведения()
    ДвижениеВремени = Движения.НаименованиеМоегоРегистра;
    ДвижениеВремени = ДвижениеВремени_BACKUP;
    ДвижениеВремени.Записывать = Истина;
    ДвижениеВремени.Записать(Истина);
    
Может быть, кому-нибудь еще пригодится решение из данной ситуации.
Всем добра!
Программист всегда исправляет последнюю ошибку.