Версия для печати темы (https://pro1c.org.ua/index.php?s=9cb95b6f642c03140ff31b1014ef7fac&showtopic=67135)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Запись связанных объектов при проведении док-та

Автор: kserg2012 30.11.22, 11:11

"Управление производственным предприятием для Украины", редакция 1.2.6.7 (обычные формы)
работает на платформе 8.3.15.1778

Добрый день
Нужен совет в понимании какой подход выбрать для решения задачи - запись связанных с документом объектов.

Имеется самописный документ, при "ручном" проведении которого необходимо вместе с движением док-та внести изменения
в два связанных объекта - это 2 разных справочника.

Проведение осуществляется в ручном режиме Пользователем
(т.е. вызов из формы документа, при групповом проведении данный алгоритм не используется)

Требование: движения док-та и запись этих справочников должны быть синхронизированы,
т.е. если при записи объекта-справочника возникает ошибка (например справочник заблокирован),
то вся операция проведения док-та "отменятеся" и пользователю выдается описание ошибки.

Напрашивается решение - использование блока НачатьТранзакцию-ЗафиксироватьТранзакцию
но мне не понятно как это будет работать в процедуре ОбработкаПроведения

Подскажите пожалуйста, как лучше поступить в данном случае?

Автор: Vofka 30.11.22, 11:42

ОбработкаПроведения вызывается внутри транзакции, т.е. вам ее явно открывать там не надо.
Изменение справочников при проведении документа - идея не самая хорошая. Потенциально может быть не очень просто держать это все в синхронизированном состоянии.

Автор: kserg2012 30.11.22, 12:05

Vofka @ Сегодня, 11:42 * ,
согласен, вот почему и хотелось бы услышать мнение бывалых wink.gif

на моем примере - вижу, что "иногда" пользователи вносят ошибочно док-т, и за этим следует его распроведение и удаление
и если это документ так сказать относительно "свежий", то по факту надо и связанные объекты-справочники откатывать

Цитата(Vofka @ 30.11.22, 11:42) *
Изменение справочников при проведении документа - идея не самая хорошая


основной проблемой я вижу тот момент, что СправочникОбъект может заблокирован в момент проведения другим пользователем
а что если такой подход при проведении?

    Попытка
        СправочникОбъект().Заблокировать();
    Исключение
           Отказ = Истина;
           Сообщить("Ошибка при записи справочника, возможно он заблокирован");
           Возврат;
    КонецПопытки;

         СправочникОбъект.Разблокировать();
         СправочникОбъект.Записать();

Автор: Vofka 30.11.22, 13:39

Цитата(kserg2012 @ 30.11.22, 12:05) *
и если это документ так сказать относительно "свежий", то по факту надо и связанные объекты-справочники откатывать

Это только один из нескольких моментов, которые могут быть. Все конечно можно порешать и сделать так, чтобы оно плюс/минус нормально работало, но я бы попробовал что-то придумать, чтобы не ввязываться с изменением справочника. Хотя я и сам такое делал. Но сейчас я бы такое делал имея очень веские причины на то.

Цитата(kserg2012 @ 30.11.22, 12:05) *
основной проблемой я вижу тот момент, что СправочникОбъект может заблокирован в момент проведения другим пользователем

В этом случае по идее документ не проведется и выдаст ошибку. По-моему это нормальный вариант. Ненормально тут только может то, что вы ожидаете, что справочник может быть заблокирован. Он же вроде не блокируется, если просто открываетс форма (или блокируется)? Т.е. в вашем варианте, как я понял, нормально, что справочник будет меняться из документа и ещё откуда-то. Если так, то это хороший индикатор того, что вы что-то не так проектируете.

Автор: kserg2012 30.11.22, 14:01

Цитата(Vofka @ 30.11.22, 13:39) *
что вы ожидаете, что справочник может быть заблокирован

да, есть над чем подумать
но этот справочник - ДоговорыКонтрагентов - можно сказать один из ключевых справочников в этой управленческой базе
и вполне допускаю, что одновременно другой пользователь откроет его для просмотра или редактирования

Автор: Vofka 30.11.22, 14:25

А зачем вы его меняете при проведении документа? Если надо что-то "прицепить" к элементу справочника при проведении документа, я бы сделал периодический, подчиненный регистратору РегистрСведений с измерением МойСправочник и писал бы туда что надо.

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua