Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
14 янв 2025, 09:25

Событие прри записи объекта

Автор Алексей_1985_06, 15 дек 2024, 21:32

0 Пользователей и 1 гость просматривают эту тему.

Алексей_1985_06

Необходимо осуществлять проверку при записи элемента справочника (справочник иерархический).
У элемента есть реквизит "Комплекс", нужно чтобы при записи элемента, проверялось какой Комплекс указан у родителя этого элемента, и если они отличаются то необходимо его исправить. Все срабатывает, но только когда открывается существующий элемент, а когда новый то нет, я так понимаю что в БД нет еще ссылки (может ошибаюсь), подскажите как выйти из этой ситуации, какое событие использовать при условии что нужно показать вопрос пользователю....

&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)

Если Объект.Комплекс.Пустая() Тогда  // Если комплекс не заполнен
Сообщить("Комплекс не заполнен");
Возврат
КонецЕсли;

// Если комплекс заполнен, тогда выполним провеку:
КомплексРодителя = ПроверкаКомплекса(); // ПроверкаКомплекса(Объект.Ссылка) - это серверная процедура (см. код ниже)

// Если результат запроса пустой, т.е нет комплекса у родителя
Если КомплексРодителя = Неопределено Тогда
Возврат
КонецЕсли;


// Если комплексы у системы и ее родителя - разные, тогда:
Если  КомплексРодителя <> Объект.Комплекс Тогда    // Если комплексы не совпадают,
Оповещение = Новый ОписаниеОповещения("ПослеОтветаНаВопрос", ЭтотОбъект, КомплексРодителя); 

// Сформируем свой список кнопок:
СписокКнопок = Новый СписокЗначений;
СписокКнопок.Добавить("Исправить", "Исправить");
СписокКнопок.Добавить("Игнорировать", "Игнорировать");

// Покажем вопрос пользователю (со своими кнопками):
     ПоказатьВопрос(Оповещение, "Текущий элемент не может принадлежать к другому комплексу", СписокКнопок,,,"Обнаружена ошибка записи!");

Отказ = Истина;   // Отказ от записи  объекта    
КонецЕсли;

КонецПроцедуры

&НаКлиенте
Процедура ПослеОтветаНаВопрос(РезультатВопроса, ДополнительныеПараметры) Экспорт

Если РезультатВопроса = "Исправить" Тогда
Объект.Комплекс = ДополнительныеПараметры;
Сообщить("Вы правильно поступили");
КонецЕсли;

КонецПроцедуры

alexandr_ll

Алексей_1985_06, Есть же событие ПослеЗаписи()

LexaK

Алексей_1985_06, вообще лучше использовать модуль справочника
событие то-же ПередЗаписью
примерно так

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)

Если Не Родитель.Пустая() и  Комплекс <>  Родитель.Комплекс Тогда
Комплекс =  Родитель.Комплекс;
КонецЕсли;

если помогло нажмите: Спасибо!

Алексей_1985_06

Цитата: alexandr_ll от 16 дек 2024, 07:51Алексей_1985_06, Есть же событие ПослеЗаписи()

Цитата: LexaK от 16 дек 2024, 13:49Алексей_1985_06, вообще лучше использовать модуль справочника
событие то-же ПередЗаписью
примерно так

Процедура ПередЗаписью(Отказ,)

Если Не Родитель.Пустая() и  Комплекс <>  Родитель.Комплекс Тогда
Комплекс =  Родитель.Комплекс;
КонецЕсли;

Цитата: LexaK от 16 дек 2024, 13:49Алексей_1985_06, вообще лучше использовать модуль справочника
событие то-же ПередЗаписью
примерно так

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)

Если Не Родитель.Пустая() и  Комплекс <>  Родитель.Комплекс Тогда
Комплекс =  Родитель.Комплекс;
КонецЕсли;

Большое спасибо, но только как в этом случае показать диалог с вопросом пользователю, ведь ПоказатьВопрос () - не будет работать на сервере в модуле объекта?
Сейчас в модуле объекта (справочника) так:
Процедура ПередЗаписью(Отказ)

    Если Не Родитель.Пустая() и  Комплекс <>  Родитель.Комплекс Тогда
        Комплекс =  Родитель.Комплекс;
    КонецЕсли;


LexaK

Цитата: Алексей_1985_06 от 16 дек 2024, 15:44но только как в этом случае показать диалог с вопросом пользователю,
в этом случае диалог ни кк не показать.
но можно вывести Сообщение - "Комплекс  изменен на ..."

просто как уведомление!

Конечно если нужно задать вопрос - Будем менять Комплекс  на Что-то? да, Нет
тогда действительно надо использовать функционал Формы.

все зависит от условностей и правил заполнения по умолчанию.
(в самой 1С-ке тысячи полей/реквизитов заполняются автоматически без всяких уведомлений)

если помогло нажмите: Спасибо!

Алексей_1985_06

alexandr_ll, После записи уже поздно менять значение реквизита, это нужно сделать до записи в БД

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск