ТаблицаФормы ПередУдалением/ПослеУдаления определить, что удалено
Отраслевая конфигурация, 8.3.25.1520, УФ.
Определенный документ представляет собой многоуровневую структуру, в результате у его определенной ТЧ есть подчиненные строки в другой ТЧ (соответствие идет по полю типа УИД). Необходимо при удалении строки в главной ТЧ удалить соответствующие ей строки подчиненной.
Здесь фигурируют 2 обработчика: ПередУдалением и ПослеУдаления. ПередУдалением не гарантирует удаления, поэтому ПослеУдаления выглядит подходящим местом. Но у него нет аргумента, указывающего, что именно было удалено. Из свойств таблицы формы также ничего не видно: ТекущаяСтрока и ТекущиеДанные = Неопределено, ВыделенныеСтроки пусто.
Можно ли как-то в ПослеУдаления узнать, что было удалено? (собственный поиск по Инету и ИТС ничего не нашел)
Можно в ПередУдалением запомнить нужные данные (вариант -- только в переменной модуля, ДополнительныеСвойства на клиенте недоступно, а из ПередУдалением нельзя обращаться к серверу) -- но это ненадежно, т.к. другой обработчик ПередУдалением может что-то поменять.
Другой вариант -- не заморачиваться в форме, а в событии ПередЗаписью объекта проходить по всем подчиненным ТЧ и проверять наличие для каждой строки вышестоящей записи, если ее нет -- удалять. В данном конкретном случае это сработает, но ответ на вопрос остается неизвестным.
Определенный документ представляет собой многоуровневую структуру, в результате у его определенной ТЧ есть подчиненные строки в другой ТЧ (соответствие идет по полю типа УИД). Необходимо при удалении строки в главной ТЧ удалить соответствующие ей строки подчиненной.
Здесь фигурируют 2 обработчика: ПередУдалением и ПослеУдаления. ПередУдалением не гарантирует удаления, поэтому ПослеУдаления выглядит подходящим местом. Но у него нет аргумента, указывающего, что именно было удалено. Из свойств таблицы формы также ничего не видно: ТекущаяСтрока и ТекущиеДанные = Неопределено, ВыделенныеСтроки пусто.
Можно ли как-то в ПослеУдаления узнать, что было удалено? (собственный поиск по Инету и ИТС ничего не нашел)
Можно в ПередУдалением запомнить нужные данные (вариант -- только в переменной модуля, ДополнительныеСвойства на клиенте недоступно, а из ПередУдалением нельзя обращаться к серверу) -- но это ненадежно, т.к. другой обработчик ПередУдалением может что-то поменять.
Другой вариант -- не заморачиваться в форме, а в событии ПередЗаписью объекта проходить по всем подчиненным ТЧ и проверять наличие для каждой строки вышестоящей записи, если ее нет -- удалять. В данном конкретном случае это сработает, но ответ на вопрос остается неизвестным.
Найденные решения
Другой вариант -- не заморачиваться в форме, а в событии ПередЗаписью объекта проходить по всем подчиненным ТЧ и проверять наличие для каждой строки вышестоящей записи, если ее нет -- удалять. В данном конкретном случае это сработает, но ответ на вопрос остается неизвестным.
Это лучше сделать в любом случае.
(1) Логика основной конфигурации отраслевого решения, с которым я работаю, удаляет подчиненные строки в ПередУдалением, определяя их по <таблица формы>.ВыделенныеСтроки .
Т.е. на то, что кто-то в расширении может отменить удаление, они не закладываются. Либо закладываются на то, что этот кто-то тогда добавит свой обработчик с вызовом перед ихним.
Т.е. на то, что кто-то в расширении может отменить удаление, они не закладываются. Либо закладываются на то, что этот кто-то тогда добавит свой обработчик с вызовом перед ихним.
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(2) В другом расширении или в основной конфигурации (мой обработчик -- в расширении) могут быть другие обработчики, действующие независимо от моего.
И поскольку есть принципиальная возможность наличия других обработчиков, это намекает, что разработчики платформы, вероятно, предусмотрели какой-то механизм, остающийся действенным в этой ситуации. А если нет, то разработчики типовых придумали какой-то обход, т.к. им это, скорее всего, также нужно.
И поскольку есть принципиальная возможность наличия других обработчиков, это намекает, что разработчики платформы, вероятно, предусмотрели какой-то механизм, остающийся действенным в этой ситуации. А если нет, то разработчики типовых придумали какой-то обход, т.к. им это, скорее всего, также нужно.
(6)
Вообще пофиг.
Если другое расширение ломает логику работы конфигурации, это не проблема конфигурации, это проблема расширения и пользователя.
В другом расширении или в основной конфигурации (мой обработчик -- в расширении) могут быть другие обработчики, действующие независимо от моего.
Вообще пофиг.
Если другое расширение ломает логику работы конфигурации, это не проблема конфигурации, это проблема расширения и пользователя.
(4) Интересно. А как тут обеспечить совместимость с другими обработчиками? Если интерактивного удаления не происходит, обработчики ПослеУдаления не будут вызваны. А программно все запрограммированные обработчики какого-то события вызвать нельзя, только руками, если как-то заранее их все знать.
(1) Логика основной конфигурации отраслевого решения, с которым я работаю, удаляет подчиненные строки в ПередУдалением, определяя их по <таблица формы>.ВыделенныеСтроки .
Т.е. на то, что кто-то в расширении может отменить удаление, они не закладываются. Либо закладываются на то, что этот кто-то тогда добавит свой обработчик с вызовом перед ихним.
Т.е. на то, что кто-то в расширении может отменить удаление, они не закладываются. Либо закладываются на то, что этот кто-то тогда добавит свой обработчик с вызовом перед ихним.
(10)
И это правильно. Нельзя закладываться, что в расширении кто-то что-то сделает иначе.
Это в принципе нельзя предсказать.
Заменил типовое поведение в расширении - это полностью твоя задача сделать так, чтобы логика работы конфигурации не нарушилась.
Т.е. на то, что кто-то в расширении может отменить удаление, они не закладываются.
И это правильно. Нельзя закладываться, что в расширении кто-то что-то сделает иначе.
Это в принципе нельзя предсказать.
Заменил типовое поведение в расширении - это полностью твоя задача сделать так, чтобы логика работы конфигурации не нарушилась.
Другой вариант -- не заморачиваться в форме, а в событии ПередЗаписью объекта проходить по всем подчиненным ТЧ и проверять наличие для каждой строки вышестоящей записи, если ее нет -- удалять. В данном конкретном случае это сработает, но ответ на вопрос остается неизвестным.
Это лучше сделать в любом случае.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот