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

Программная работа с реквизитами(Обязательное заполнение и установка обработчиков)

Автор BruceWayne007, 29 апр 2025, 15:51

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

BruceWayne007

Всем привет, подскажите, пожалуйста. Задача - В карточку клиента добавить и вывести на форму дополнительный реквизит «Категория» (тип данных «Категории клиентов»), рядом выводить комментарий из Категории

Что сделал -


&НаСервере
Процедура ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)

ТипКатегорияКлиентов = Новый ОписаниеТипов("СправочникСсылка.бит_КатегорииКлиентов");
ТипКомментарий = Новый ОписаниеТипов("Строка");

НовыйРеквизитКатегория = Новый РеквизитФормы("Категория", ТипКатегорияКлиентов);
НовыйРеквизитКомментарий = Новый РеквизитФормы("КомментарийКатегории", ТипКомментарий);

ДобавляемыеРеквизиты = Новый Массив;
ДобавляемыеРеквизиты.Добавить(НовыйРеквизитКатегория);
ДобавляемыеРеквизиты.Добавить(НовыйРеквизитКомментарий);

ИзменитьРеквизиты(ДобавляемыеРеквизиты);

НовыйЭлементКатегория = Элементы.Добавить("Категория", Тип("ПолеФормы"),Элементы.ИсточникНапоминать);
НовыйЭлементКатегория.Вид = ВидПоляФормы.ПолеВвода;
НовыйЭлементКатегория.ПутьКДанным = "Категория";

НовыйЭлементКомментарийКатегории = Элементы.Добавить("КомментарийКатегории", Тип("ПолеФормы"),Элементы.ИсточникНапоминать);
НовыйЭлементКомментарийКатегории.Вид = ВидПоляФормы.ПолеНадписи;
НовыйЭлементКомментарийКатегории.ПутьКДанным = "КомментарийКатегории";

НовыйЭлементКомментарийКатегории.УстановитьДействие("ПриИзменении", "ВыполнитьДействиеПриИзмененииДанных");

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

&НаСервере
Процедура ОбработкаПроверкиЗаполненияНаСервереПосле(Отказ, ПроверяемыеРеквизиты)

Категория = ПроверяемыеРеквизиты.Найти("Категория");

    Если Не ЗначениеЗаполнено(ЭтотОбъект.Категория) Тогда
       
        Сообщение = Новый СообщениеПользователю();
        Сообщение.Текст = "Не указана Категория";
        Сообщение.Поле = "Категория";
        Сообщение.УстановитьДанные(ЭтотОбъект);
        Сообщение.Сообщить();
           
        Отказ = Истина;
           
    КонецЕсли;
КонецПроцедуры


//Элемент.УстановитьДействие("ПриИзменении", "ВыполнитьДействиеПриИзмененииДанных");

&НаКлиенте
Процедура ВыполнитьДействиеПриИзмененииДанных(Элемент)
    ЭтотОбъект.КомментарийКатегории = ПолучитьКомментарий(ЭтотОбъект.Категория);
КонецПроцедуры

&НаСервере
Функция ПолучитьКомментарий(КатегорияКлиента)

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| бит_КатегорииКлиентов.Комментарий КАК Комментарий
|ИЗ
| Справочник.бит_КатегорииКлиентов КАК бит_КатегорииКлиентов
|ГДЕ
| бит_КатегорииКлиентов.Ссылка = &Ссылка";

Запрос.УстановитьПараметр("Ссылка", КатегорияКлиента);

РезультатЗапроса = Запрос.Выполнить();

Выборка = РезультатЗапроса.Выбрать();

Выборка.Следующий();

Если РезультатЗапроса.Пустой() Тогда

Возврат "";

Иначе

Возврат Выборка.Комментарий;

КонецЕсли;


КонецФункции



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

antoneus

Что за конфигурация? Есть подозрение, что нужно было завести дополнительный реквизит справочника, а не выводить дополнительный реквизит формы.
Хранить-то эту категорию планируется? Или каждый раз при открытии нужно выбирать?

BruceWayne007

antoneus, ТЗешка вот какая

Добавить новый справочник «Категории клиентов»
Реквизиты:    - Наименование 50 символов
      - Комментарий 100 символов
Предоставить права доступа: «Полные права» и «Администратор регистратуры» - полный доступ (создание / чтение / редактирование / удаление); «Врач» - только чтение

Разместить в подсистеме Администрирование

- В карточку клиента добавить и вывести на форму дополнительный реквизит «Категория» (тип данных «Категории клиентов»), рядом выводить комментарий из Категории
Установить обязательность заполнения реквизита «Категория»


3.2
При изменении значения реквизита «Категория», если у клиента ранее был установлен признак «Архив», то снимать данный признак.
При установке признака Архив в Дополнительную информацию о клиенте записывать дату архивации и аннулировать основной полис клиента (вкладка Полисы / выделен жирным)


Я так понимаю она самописная

antoneus

БСП там прикручена? План видов характеристик ДополнительныеРеквизитыИСведения есть?

BruceWayne007

antoneus, нет, я тоже хотел сначала через настройки сделать, но нифига. вот решил программно создавать, + надо через расширения

antoneus

Ну и не надо париться, а через расширение добавить этот реквизит и на форму вытащить с комментарием вместе.

BruceWayne007

antoneus, да?) типа пофиг на программное создание?) прост интересно, если я программно создаю, то куда бы обработчик надо было воткнуть?

antoneus

При программном создании элемента формы. У элемента есть метод УстановитьДействие.

BruceWayne007

antoneus, эт понятно))) ну т.е. так же при создании на сервере? когда я создал элемент?

antoneus


Теги:

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

Рейтинг@Mail.ru

Поиск