Имя: Пароль:
1C
1С v8
Кажется траблы с транзакциями или блокировкми при создании эл спр. Как решить?
0 Обработка
 
22.12.22
08:28
Есть документ "ТрудовойДдоговор". В нем есть Реквизит "ФизЛицо" и еще есть "Сотрудник". Еще куча других реквизитов.
При записи в процедуре ПередЗаписью дока создаем элемент справочника сотрудника который данные берет с текущего документа.
Записывается и привязывается к реквизиту дока. Далее создается документ "ПриемНаРаботуВОрганизацию" и записывается.
В результате иногда получаем битую!!! ссылку в реквизите "сотрудник".
Почему такое происходит?
Ранее все это делалось в модуле при проведении. И таких траблов не было.

В данный момент придумал приблуду который смотрит битая ссылка или нет и приводит к отказу записи.
Но сегодня утром 2 дока уже были записаны. И с битой ссылкой. Тоже не понятно.
1 DimVad
 
22.12.22
08:50
(0) Тут как бы много чего может быть. Мы же кода не знаем...
А зачем (например) создавать "ПриемНаРаботуВОрганизацию" создавать ПередЗаписью дока ? Что там будет при перепроведении ? Может быть хотя бы из формы, типа :

ПередЗаписью в форме в конце если НЕ Отказ тогда проверям что документа ещё нет, а если нет - то спрашиваем "Вам создать документик" - и по кнопульке создаём ?

Понимеате, транзакции в 1С штука вообще интересная. Например вы пишите "отменить транзакцию" а на деле СУБД что-то сделает только когда управление уйдёт из скриптового кода в код платформы... А человек привыкший к языкам этого не знает и думает что отмена уже выполнена...

Короче всё это "не 1С-вэй" :-) На "вэй" - это создавать ручками "на основании" :-)
Но думаю что и в процедуре потянет (правда, если док новый то и ссылки ещё нет. Не знаю нужна ли она там...).

Ну это всё так, в порядке рассуждений :-)
2 Обработка
 
22.12.22
09:02
Сотрудник создается в модуле объекта дока в процедуре "ПередЗаписю"
А документ ПриемНаРаботуВОрганизацию в модуле "ПриЗаписи".
3 DimVad
 
22.12.22
09:04
(2) Вот я и говорю - а надо ли так делать ?
4 Kassern
 
22.12.22
09:05
(0) "в процедуре ПередЗаписью дока создаем элемент справочника сотрудника который данные берет с текущего документа.
Записывается и привязывается к реквизиту дока. Далее создается документ "ПриемНаРаботуВОрганизацию" и записывается. " - не надо так делать. Все это потом приводит к череде ошибок учета.
5 НафНаф
 
22.12.22
09:05
(2) если это одна и таже запись - то так быть не может, ибо транзакция (явная или неявная), а вот если это две разные записи, да еще есть Попытка, которая уходит в Исключение...
6 DimVad
 
22.12.22
09:06
+(3) Ну вот в типовых в РТУ создаётся счёт-фактура. Чем плохо сделано ? И никаких проблем с транзациями.
7 Kassern
 
22.12.22
09:06
А что будет, если документ распроведут, или отредактируют? Что будет со связанными объектами?
8 magicSan
 
22.12.22
09:07
в ЖР сотрудник ведь не создан по какойто причине.
9 Kassern
 
22.12.22
09:07
(6) Счет фактура имеет специфичный вид и полностью ссылается на документ основание. Удалишь реализацию/отредактируешь строки, все это дело отразится в СФ.
10 mikecool
 
22.12.22
09:08
транзакции разные - вот и весь сказ
11 Kassern
 
22.12.22
09:08
А тут, в трудовом договоре указали одного сотрудника, у вас создался ряд объектов связанных, а потом, ой блин, там другой сотрудник должен быть, и все, приплыли)
12 НафНаф
 
22.12.22
09:09
(7) тоже, что и с другими связанными документами
13 НафНаф
 
22.12.22
09:09
(9) ну и тут можно так делать, сценариев много
14 DimVad
 
22.12.22
09:10
(9) Возможно и здесь надо как-то так. А возможно и нет. Смотря какая логика.
Важно что они решают задачу без проблем с транзакциями.
15 Обработка
 
22.12.22
09:23
Самая главная ошибка это то что придумали документ ТРУДОВОЙДОГОВОР как отдельный док и его привязали к приему.
И еще сделали что Примем без ТД вообще не работает. Ни кто не может создать не редактировать и проводить и отменять итп.

А могли бы сделать красиво просто в Приеме добавить новую страницу -вкладку и там разместить любые реквизиты доп.
С этого и пошло. При этом док ТД вообще не делает никаких движений а просто управляет доком Прием. Ну там еще печатает еще договор приказ итп.
16 Обработка
 
22.12.22
09:26
(3) Ну вот ищу другие пути.
Сдела в документе на форме кнопку создать сотрудника.
Не хотят юзать. Говорят желательно чтоб все автоматом.
Документооброта много и подразделений много.

ЗУП2 корп каз с кучей доработкой и давно уже не обновляется актуальными релизами...
17 Kassern
 
22.12.22
09:27
(15) А зачем его было делать документом? В типовых конфах договора - это справочник. В ЗУП ТД это вообще печатная форма, емнип.
18 Kassern
 
22.12.22
09:28
(16) " и давно уже не обновляется актуальными релизами" -  а как вы под наше изменчивое законодательство подстраиваетесь?
19 Обработка
 
22.12.22
09:28
(7) Все это контролируется и управляется подписками ... Там траблов нет. Хотя выше сказал что зря так придумали.
20 magicSan
 
22.12.22
09:28
(16) млять ЖУрнал регистраций открой и посмотри почему сотрудник не создался, перед создананием второго документа делай проверку на то что сотрудник создался.
21 Kassern
 
22.12.22
09:29
(19) Ну вот вы подпиской контроллируете, а у вас бац и конфликт блокировок, док записался, а подписка не отработала. Дальше что?)
22 Kassern
 
22.12.22
09:30
И вот будет забавно, когда у вас основной документ не будет проводится, из-за ошибок связанных, так как они будут вашу трназакцию откатывать.
23 Обработка
 
22.12.22
09:31
(20) Как можно искать в ЖР битую ссылку.
С документом была попытка поймать в чем дело так ведь спецом "попытку исключение" сделал не отловил ведь.
24 Kassern
 
22.12.22
09:33
(23) Ну так записывайте в исключении ошибку в ЖР
25 Обработка
 
22.12.22
09:33
(19) Да все это я знаю реализвано до меня 2-3 года назад. Я дальше дописываю.
Сразу всех обратил внимание на то что так вообще не кошерно! Но уже поздно переделать не дадут.
Или нужн им веские доказательства. Ведь работало же как-то 2-3 года.
26 DimVad
 
22.12.22
09:34
(16) "Не хотят юзать. Говорят желательно чтоб все автоматом.
Документооброта много и подразделений много."

Т.е. пользователь продавливает "своё видение".
Ну можно сделать регламентное задание которое проверяет все ли доки сделаны и делает что надо.
Просматривает доки, например, открытого периода.
Никакого конфликта с транзакциями документа а если что не записалось (конфликт блокировок, например) - следующий раз поправит.
27 Обработка
 
22.12.22
09:36
(23) В исключение не попадает ведь!

Попытка
                    лкОбСотрудник.Записать();      
                    Сотрудник = лкОбСотрудник.Ссылка;
                Исключение
                //    ЗаписьЖурналаРегистрации("ЗаписьСотрудникаТД",УровеньЖурналаРегистрации.Ошибка,,ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
                    ОбщегоНазначения.ОшибкаПриПроведении("Проведение прервано, повторите попытку!", Отказ);
                КонецПопытки;
28 Обработка
 
22.12.22
09:37
(26) они же интерактивно работают и надо ведь распечатать договор и выслать кандитату на подпись.
29 DimVad
 
22.12.22
09:42
(28) Ну тогда создавайте документы при нажатии на кнопку "печать пакета документов".
30 Обработка
 
22.12.22
12:08
Пока однозначно не пришел к четкому решению как переделать.
31 Kassern
 
22.12.22
12:10
(30) "ПередЗаписью дока создаем элемент справочника сотрудника который данные берет с текущего документа" - у вас вся проблема именно в этом. Как вы блин можете брать данные текущего документа, если он, к примеру, не записан в базу? Перед записью, у вас транзакция еще не началась, документа в базе нет, а вы уже пытаетесь его указать и ловите битую ссылку.
32 Kassern
 
22.12.22
12:10
или я не правильно вас понял?
33 Обработка
 
22.12.22
12:20
(31) Воу! Ведь хороший ход мысли. Сенкс. Ранее ведь док был записан и при проведении всяко уже все было кроме самого сотра!
У меня Обычные формы действие происходит в модуле объекта дока.
Что измениться если перенесу код в модуль форму туда же в одноименную процедуру?
34 Обработка
 
22.12.22
12:22
По ходу мне надо на форму перенести если надо записать дважды док!
Сначала без сотра потом уже с сотром. Может так выправлю ситуацию.
35 Kassern
 
22.12.22
12:27
(33) Есть еще такая тема, как УстановитьСсылкуНового. Можете попробовать через нее реализовать, чтобы дважды не записывать.
Добавьте себе в закладки эту статью, или картинку из нее. https://infostart.ru/1c/articles/1175475/
Там хорошо расписано как запись документа происходит в разрезе событий и транзакций.
36 Обработка
 
22.12.22
12:36
(35) Это же у меня распечатано и где то валятеся. )))