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

Помогите со структурой (проверка)

Автор Алексей_1985_06, 20 апр 2020, 17:14

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

Алексей_1985_06

Знатоки, подскажите как сделать проверку чтобы повторно не указать двоих человек, командирами одного подразделения?
Имеется справочник ЛичныйСостав, в нем реквизиты:
1. КомандирПодразделения (тип Булево).
2. Подразделения (ссылка СправочникПодразделения).
Необходимо выводить сообщение ("Начальник данного подразделения определен ранее" + "ФИО" человека), при условии того, что мы пытаемся опять указать ПОВТОРНО для другого человека значение Истина реквизита "НачальникПодразделения" для того же подразделения.
Пока реализовал только так:

&НаКлиенте
Процедура КомандирПодразделенияПриИзменении(Элемент)

Структура = Новый  Структура;
Структура.Вставить("КомандирПодразделения", Истина);
Структура.Вставить("Подразделение", Объект.Подразделение);
Если.....
// Дальне не знаю как сделать проверку на наличие такого же набора КлючЗначение

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


Помогите, если кто знает как это лучше реализовать?

LexaK

попробуйте вставить проверку в событие ПередЗаписью в модуль справочника
примерно так

Процедура ПередЗаписью(Отказ)
Если КомандирПодразделения Тогда
    //Установлен Команндир, делаем проверку
//Запрос - шаблон
лкЗапрос = Новый Запрос;
лкЗапрос.Текст = "
    |Выбрать
|// Спр.Ссылка,
| Спр.Наименование
|Из
Справочник.ЛичныйСостав Спр
|где
|   Спр.Подразделение = &Подразделение
|и  Спр.КомандирПодразделения
|и  Спр.Ссылка <> &Ссылка //кроме самого себя
|";
лкЗапрос.УстановитьПараметр("Ссылка",Ссылка);
лкЗапрос.УстановитьПараметр("Подразделение",Подразделение);

лкВыборка = лкЗапрос.Выполнить().Выбрать();
Пока лкВыборка.Следующий() Цикл
Сообить,("У подразделения: " + Подразделение + ", уже есть командир: " + лкВыборка.Наименование);
Отказ = Истина;
КонецЦикла;
КонецЕсли;
КонецПроцедуры


второй путь
а для формы, по другому надо поставить задачу, в событии Перед началом выбора Подразделения,
давать выбирать только те Подразделение которые не имеют командиров! :befhbt:

при таком подходе, тогда первая проверка вообще не нужна будет.
если помогло нажмите: Спасибо!

Алексей_1985_06

Цитата: LexaK от 20 апр 2020, 17:50
попробуйте вставить проверку в событие ПередЗаписью в модуль справочника
примерно так

Процедура ПередЗаписью(Отказ)
Если КомандирПодразделения Тогда
    //Установлен Команндир, делаем проверку
//Запрос - шаблон
лкЗапрос = Новый Запрос;
лкЗапрос.Текст = "
    |Выбрать
|// Спр.Ссылка,
| Спр.Наименование
|Из
Справочник.ЛичныйСостав Спр
|где
|   Спр.Подразделение = &Подразделение
|и  Спр.КомандирПодразделения
|и  Спр.Ссылка <> &Ссылка //кроме самого себя
|";
лкЗапрос.УстановитьПараметр("Ссылка",Ссылка);
лкЗапрос.УстановитьПараметр("Подразделение",Подразделение);

лкВыборка = лкЗапрос.Выполнить().Выбрать();
Пока лкВыборка.Следующий() Цикл
Сообить,("У подразделения: " + Подразделение + ", уже есть командир: " + лкВыборка.Наименование);
Отказ = Истина;
КонецЦикла;
КонецЕсли;
КонецПроцедуры


второй путь
а для формы, по другому надо поставить задачу, в событии Перед началом выбора Подразделения,
давать выбирать только те Подразделение которые не имеют командиров! :befhbt:

при таком подходе, тогда первая проверка вообще не нужна будет.

LexaK Огромное Вам спасибо. Первый вариант предпочтительнее, все получилось как надо. Еще раз благодарю!!!

Теги:

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

Рейтинг@Mail.ru

Поиск