Версия для печати темы (http://pro1c.org.ua/index.php?s=1203cf11b2e65340ed1702d203e32141&showtopic=46576)

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

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

Автор: Constantus 05.07.18, 9:57

Приветствую, форумчане!
"Управление торговлей 10.3", (Моби-С 5.5). "ABBYY Ukraine", 2003-2014 (2.3.20.1)

Поставлена задача, чтобы сделать реквизит "Подразделение" обязательным для заполнения + на одно условие.

Понимаю, что нужно лезть во все документы и менять код, но подумал, может есть возможность проверки на подписки на событие... Но там не нашел событие "ПриИзменении(Подразделение)"

Можете что-нить посоветовать? Вот код для проверки при выборе "правильного" подразделения (не должен быть главным подразделением) + Еще как-то включить проверку на пустоту...

Процедура ПодразделениеПриИзменении(Элемент)
    
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
               |    Подразделения.Ссылка КАК Ссылка1,
               |    Подразделения.Наименование,
               |    Подразделения.ГруппаВыбора
               |ИЗ
               |    Справочник.Подразделения КАК Подразделения
               |ГДЕ
               |    Подразделения.ГруппаВыбора = ИСТИНА
               |    И Подразделения.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", Подразделение);
Результат = Запрос.Выполнить();
Если  НЕ Результат.Пустой() Тогда
    Сообщить("Данное подразделение является группой Подразделений. Использовать нельзя. Необходимо выбрать подразделение внутри этой группы.");
    Подразделение = Справочники.Подразделения.ПустаяСсылка();
Иначе
     // делайте что угодно
КонецЕсли;

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


Автор: Petre 05.07.18, 10:15

Constantus @ Today, 9:57 * ,
Не существует подписок на события формы и ее элементов.

Автор: andreydv87 05.07.18, 10:44

Petre @ Сегодня, 11:15 * ,
Делайте проверку при записи.

Автор: Constantus 05.07.18, 10:47

andreydv87 @ Сегодня, 13:44 * ,

Ага... так и сделал... Знал бы раньше, жил бы 44000000.gif

Процедура ПроверкаПодразделенияПередЗаписью(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт
    
    Если Не ЗначениеЗаполнено(Источник.Подразделение) Тогда
        Сообщить("Необходимо выбрать нужное подразделение!");
        Отказ = Истина;
    КонецЕсли;    
            
    
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
               |    Подразделения.Ссылка КАК Ссылка1,
               |    Подразделения.Наименование,
               |    Подразделения.ГруппаВыбора
               |ИЗ
               |    Справочник.Подразделения КАК Подразделения
               |ГДЕ
               |    Подразделения.ГруппаВыбора = ИСТИНА
               |    И Подразделения.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", Источник.Подразделение);
Результат = Запрос.Выполнить();
Если  НЕ Результат.Пустой() Тогда
    Сообщить("Данное подразделение является группой Подразделений. Использовать нельзя. Необходимо выбрать подразделение внутри этой группы.");
    Источник.Подразделение = Справочники.Подразделения.ПустаяСсылка();
    Отказ = Истина;
Иначе
     // делайте что угодно
КонецЕсли;


Автор: Constantus 05.07.18, 12:53

А как в таком случае сделать проверку по заполнению табличной части документа?

Нужно проверить РКО на статьи движения денежных средств, которые заполнены в табличной части документа. В данном случае у статей ДДС имеется реквизит "Отключена" и при проверке должно выйти сообщение, что типа низяяя...

Процедура ПроверкаСтатьиДДСПередЗаписью(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт
    // Вставить содержимое обработчика.
    
    Если Источник.РасшифровкаПлатежа.СтатьяДвиженияДенежныхСредств.Отключена Тогда
        Сообщить("Данное статья снята с учета и не применяется." + Символы.ПС + "Необходимо выбрать активную статью.");
        Отказ = Истина;
    КонецЕсли;    
    
КонецПроцедуры



А... разобрался...

Автор: Vidocq05 05.07.18, 14:07

Цитата(Constantus @ 05.07.18, 11:47) *
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
               |    Подразделения.Ссылка КАК Ссылка1,
               |    Подразделения.Наименование,
               |    Подразделения.ГруппаВыбора
               |ИЗ
               |    Справочник.Подразделения КАК Подразделения
               |ГДЕ
               |    Подразделения.ГруппаВыбора = ИСТИНА
               |    И Подразделения.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", Источник.Подразделение);
Результат = Запрос.Выполнить();
Если  НЕ Результат.Пустой() Тогда
    Сообщить("Данное подразделение является группой Подразделений. Использовать нельзя. Необходимо выбрать подразделение внутри этой группы.");
    Источник.Подразделение = Справочники.Подразделения.ПустаяСсылка();
    Отказ = Истина;
Иначе
     // делайте что угодно
КонецЕсли;


А какой смысл в этом куске кода? Просто любопытно.

Автор: Constantus 05.07.18, 15:02

Vidocq05 @ Сегодня, 17:07 * ,

Справочник "Подразделение" у меня иерархический по элементам.
По условиям "Головное" подразделение нельзя указывать, только те, что внутри этого подразделения.

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

Автор: Vidocq05 06.07.18, 11:43

Constantus @ Вчера, 16:02 * ,

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
               |    Подразделения.Ссылка КАК Ссылка1,
               |    Подразделения.Наименование,
               |    Подразделения.ГруппаВыбора
               |ИЗ
               |    Справочник.Подразделения КАК Подразделения
               |ГДЕ
               |    Подразделения.ГруппаВыбора = ИСТИНА
               |    И Подразделения.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", Источник.Подразделение);
Результат = Запрос.Выполнить();
Если  НЕ Результат.Пустой() Тогда
    Сообщить("Данное подразделение является группой Подразделений. Использовать нельзя. Необходимо выбрать подразделение внутри этой группы.");
    Источник.Подразделение = Справочники.Подразделения.ПустаяСсылка();
    Отказ = Истина;
Иначе
     // делайте что угодно
КонецЕсли;


Если у Вас нету ничего в "Иначе", тогда я думаю лучше сделать так:
Процедура ПроверкаПодразделенияПередЗаписью(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт
    
    Подразделение = Источник.Подразделение;
    Если Не ЗначениеЗаполнено(Подразделение) Тогда
        Сообщить("Необходимо выбрать нужное подразделение!");
        Отказ = Истина;
    ИначеЕсли Подразделение.ГруппаВыбора = Истина Тогда
        Сообщить("Данное подразделение является группой Подразделений. Использовать нельзя. Необходимо выбрать подразделение внутри этой группы.");
        Источник.Подразделение = Справочники.Подразделения.ПустаяСсылка();
        Отказ = Истина;
    КонецЕсли;

По сути одно и тоже, но вроде как понятнее и читабельнее.

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