Имя: Пароль:
1C
 
Отмена проведения
0 Alex7771
 
06.11.25
08:21
Конфа ЗУП, программно отменяю проведение документов.
в цикле стоит :
ДокументОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения);

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

Как это обойти, не подскажите ?
1 maxab72
 
06.11.25
08:26
ну, я бы ЗУП не трогал... но если очень уж руки чешутся, то расширением блокируется проверка связанных документов.
2 Alex7771
 
06.11.25
08:30
(1) а через попытку исключение не сработает ? все равно диалог выведет ?
3 Chai Nic
 
06.11.25
08:38
Можно попробовать отменять проведения в режиме ОбменДанными.Загрузка=Истина, но за последствия ручаться сложно. Там проблема в том, что на многих документах в типовых отключено автоматическое удаление движений при отмене проведения. И это делается программно или обработчиком, или подпиской на событие. То есть, может что-то при этом остаться в регистрах, при том что документ будет как бы не проведенным.
4 Мультук
 
гуру
06.11.25
08:42
(3)

Ой. А можно код ?
Так хочется это увидеть - кушать не могу.
5 Alex7771
 
06.11.25
08:52
там в зупе куча документов, которые так просто не распроводятся, на что-то ругаются. я бегаю по метаданным и пытаюсь распровести все документы, которые есть. Если какие-то не распроведутся, то и бог с ними -  главное, чтобы обработка не прерывалась. а вот с эти пока затык.
6 Гена
 
гуру
06.11.25
08:56
(0) Я бы стрелу времени поменял, т.е. начал бы с сегодня распроводить, и в прошлое. Тогда неизбежно сначала в каждом дереве доки исправлений (крона деревьев) распроведутся и не помешают распровестись корням.
7 Chai Nic
 
06.11.25
09:03
ДокументОбъект.ОбменДанными.Загрузка = Истина;
ДокументОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения);

Кушайте.
8 Мультук
 
гуру
06.11.25
09:06
(7)

Это работает?
9 Kigo_Kigo
 
06.11.25
09:11
(8) А че нет то?
10 d4rkmesa
 
06.11.25
09:45
(9) Скорее всего, будет ошибка "Действие не может выполняться в режиме загрузки данных". Лень проверять.
11 Kigo_Kigo
 
06.11.25
09:47
(10) скорее всего нет, я этим приёмчиком пользовался, вроде все прокатывало
12 d4rkmesa
 
06.11.25
09:50
(0) "пишет, что документ был исправлен другим документом" А как это происходит, из-за вашей обработки или пользователи работают? Может просто блокировать для редактирования?
ps: Код религия мешает показать?
13 1cVandal
 
06.11.25
09:51
мдя, а ничего что там зп расчитана и начислена на основании этих данных и стоит проверка на отмену проведения
14 d4rkmesa
 
06.11.25
09:51
(11) Забавно, если так (багофича?), проверю вечером.
15 Alex7771
 
06.11.25
10:09
(12) пользователей нет, все на копии
16 craxx
 
06.11.25
10:15
(0) обычной групповой обработкой, при сортировке по дате по убыванию все легко распроводится.
17 Гена
 
гуру
06.11.25
10:15
(12) В ЗУПе работает такая методика. Чтобы не править напрямую доки прошлых периодов - на их основании вводятся такие же доки, но с маркировкой испр. При этом родительский док запрещается к правке/распроведению. Это сделано для того, чтобы править прошлые ошибки в текущем периоде.
Причём док исправления заносит все движения родителя в регистры испр. Если по какой-то причине отменить или распровести док исправления, то алгоритм ЗУПа не формирует заново движения родителя, а тупо копипастит из этих регистров испр.
18 SleepyHead
 
гуру
06.11.25
10:37
(17) Отменить больничные, на основании которых есть продление отпуска.. круто, конечно.

(0) Автор, какую проблему решаете путем отмены проведения документов?
19 Alex7771
 
06.11.25
10:47
(18) выделить одну организацию в отдельную базу. В базе куча организаций, база здоровая, через распределенку выделение виснет пока не уменьшишь размер, идея распровести документы по остальным организациям, почикать их (какие смогу ) ( помечать на удаление - те же проблеммы ) - база уменьшится - потом выделить оставшуюся базу. можно конечно непосредственно удалять документы, но хз.
20 Kigo_Kigo
 
06.11.25
10:50
(19) Грохаешь их непосредственно, потом ТиИ с очисткой битых ссылок
21 d4rkmesa
 
06.11.25
11:28
(19) Есть обработки удаления данных по организации на том же ИС, но да, работать будут долго в любом случае. И можно что-то случайно прихватить, тех же физлиц.
22 d4rkmesa
 
06.11.25
11:31
(21) Я бы чем-то подобным https://infostart.ru/1c/tools/1797858/ воспользовался (правда, правила от 2023 года, но в КД2 доработать несложно).
23 d4rkmesa
 
06.11.25
11:34
(20) На ИС еще был скрипт SQL для этих целей, для тех, кто не боится битых ссылок.
24 Serg_1960
 
06.11.25
11:44
(7) Азбука: "Действие не может выполняться в режиме загрузки данных"(с)

PS: у автора, имхо, совсем другая проблема. (17) +1 в данном конкретном случае что-то типа этого:

ИсправленИлиСторнирован = ИсправлениеДокументовЗарплатаКадры.СведенияОбИсправленииДокумента(СсылкаНаОбъект, Истина);
Если ИсправленИлиСторнирован.Исправлен Или ИсправленИлиСторнирован.Сторнирован Тогда
...
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший