Установка пометки удаления документа на основании пометки удаления другого документа
Добрый день. Платформа 1С:Предприятие 8.3 (8.3.9.2233). Конфига: 1.6.28.4(сильнодоработанная). Подскажите как лучше сделать. Есть документ "Реализация". На его основании создаётся документ "Отчёт". Нужно при установке пометки на удаление в документе "Реализация" устанавливать пометку на удаление в документе "Отчёт". Так же желательно тоже самое на счёт проведения.
По теме из базы знаний
- Загрузка номенклатуры c картинками (несколько потоков одновременно) и сопутствующими данными в базу и любые документы из yml, xls, xlsx, xlsm, ods, ots, csv для УТ 10.3, УТ 11 (все), БП 3, КА 2, ERP 2, УНФ 1.6/3.0, Розница 2
- Удаление помеченных объектов, замена ссылок. Обычное и управляемое приложение. Не монопольно, включая рекурсивные ссылки, с отбором по метаданным и произвольным запросом
- Администрирование прав и анализ данных
- Документ на документ. Автоматическое создание связанных документов
- Электронная почта в 1С:Документооборот
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) Обрабатываете событие ПриЗаписи в объекте документа Реализация. Там собираете список подчинённых документов Отчёт и помечаете их на удаление, если надо (разумеется, нужны разные ветки Если в зависимости от ПометкаУдаления Реализации).
Имейте в виду: всё, что ПриЗаписи, выполняется в одной транзакции. То есть,
1) при ошибке в одном из подчинённых документов вся цепочка не будет обработана, включая основной документ;
2) всё должно делаться очень быстро и с минимумом проверок и движений - тормоза гарантированы.
Имейте в виду: всё, что ПриЗаписи, выполняется в одной транзакции. То есть,
1) при ошибке в одном из подчинённых документов вся цепочка не будет обработана, включая основной документ;
2) всё должно делаться очень быстро и с минимумом проверок и движений - тормоза гарантированы.
(2) дабы избежать тормозов, то можно создать некий флаг типа
Перем НужноПошалить;
Процедура ПередЗаписью()
//здесь делаем проверку на чегото там
НужноПошалить = ПроверкаМоегоУсловияНаЧеготоТам(Ссылка);
КонецПроцедуры
Процедура ПриЗаписи()
Если НужноПошалить Тогда
// чтото делаем = удаляем, помечаем и тд
КонецЕсли;
КонецПроцедуры
Показать
(3) А смысл? Проходим цепочку событий:
Реализация ПередЗаписью. Проверки-проверки, транзакция не началась
начинается транзакция
Реализация ПриЗаписи. Строится список Отчетов (уже затраты времени), и ДЛЯ КАЖДОГО из них
Отчет ПередЗаписью
Отчет ПриЗаписи
Отчет ПослеЗаписи
транзакция завершается (только теперь!)
Реализация ПослеЗаписи.
Итак, где тут экономия в Вашем варианте? Увы, это из другой темы совет...
Реализация ПередЗаписью. Проверки-проверки, транзакция не началась
начинается транзакция
Реализация ПриЗаписи. Строится список Отчетов (уже затраты времени), и ДЛЯ КАЖДОГО из них
Отчет ПередЗаписью
Отчет ПриЗаписи
Отчет ПослеЗаписи
транзакция завершается (только теперь!)
Реализация ПослеЗаписи.
Итак, где тут экономия в Вашем варианте? Увы, это из другой темы совет...
(5) Так я тебе потому и написал прохождение событий, ващета. Транзакция начнётся на документе Реализация и закончится на нём же, а все Отчеты войдут в неё. И если в Отчетах код не оптимизирован, то будут блокировки. Ващета.
(6) Хорошее решение, я сам использовал (я ещё делал обработку рег.заданием, чтобы вынести за время загруженности сервера, там была долгая и печальная логика, так что в ночь - самое то). Чревато Ваше решение только тем, что будет разница во времени между удалением Реализации и обработкой соответствующих Отчетов. И, как показывает практика, юзеры бывают, что твои бараны: никакие сообщения не помогают, если они хотят увидеть результат "прям сразу".
Так что, лучше бы просто тупым кодом делать, в одной транзакции, только код вычистить по возможности. Но если будут при этом тяжкие блокировки, то Ваше решение - единственное, согласен.
(6) Хорошее решение, я сам использовал (я ещё делал обработку рег.заданием, чтобы вынести за время загруженности сервера, там была долгая и печальная логика, так что в ночь - самое то). Чревато Ваше решение только тем, что будет разница во времени между удалением Реализации и обработкой соответствующих Отчетов. И, как показывает практика, юзеры бывают, что твои бараны: никакие сообщения не помогают, если они хотят увидеть результат "прям сразу".
Так что, лучше бы просто тупым кодом делать, в одной транзакции, только код вычистить по возможности. Но если будут при этом тяжкие блокировки, то Ваше решение - единственное, согласен.
(7)
Ну, так ФЗ запускаем сразу. Если пользователи интерактивно хотят видеть прям сразу и это принципиально, то программно при интерактивном изменении РТУ вставить ОжидатьЗавершения и пусть котиков смотрят :)
По времени блокировка интерфейса пользователя займет столько же, но параллельность работы не пострадает.
Ну, так ФЗ запускаем сразу. Если пользователи интерактивно хотят видеть прям сразу и это принципиально, то программно при интерактивном изменении РТУ вставить ОжидатьЗавершения и пусть котиков смотрят :)
По времени блокировка интерфейса пользователя займет столько же, но параллельность работы не пострадает.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот