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

Помогите с кодом (отбор по регистру)

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

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

Алексей_1985_06

Всем привет! Знатоки, подскажите как реализовать следующие:
Есть регистр сведений "ПослужнойСписок" в нем есть реквизит должность (ссылка на справочник "ШтатныеДолжности"), необходимо при выборе должности выводить только те должности, которые не заняты...
Помогите кто знает как !!!


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

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

КонецЕсли;
КонецПроцедуры

antoneus

Можно в событии НачалоВыбора ставить СтандартнаяОбработка = Ложь и открывать форму выбора должностей с установленным отбором.

Алексей_1985_06

Цитата: antoneus от 03 авг 2020, 13:31
Можно в событии НачалоВыбора ставить СтандартнаяОбработка = Ложь и открывать форму выбора должностей с установленным отбором.

antoneus Можете подсказать (учусь пока, не сталкивался ещё с подобным), сделал данную процедуру в модуле формы записи регистра сведений (реквизит "должность")  но ничего не получается, что нужно подправить? Сейчас форма выбора вообще не открывается....:dfbsdfbsdf::dfbsdfbsdf::dfbsdfbsdf:

&НаКлиенте
Процедура ДолжностьНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

    СтандартнаяОбработка = Ложь;
    ДолжностьНачалоВыбораНаСервере();

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


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

РезультатЗапроса = Запрос.Выполнить().Выбрать();
Список = Новый СписокЗначений;

Пока РезультатЗапроса.Следующий() Цикл
Список.Добавить(РезультатЗапроса);
КонецЦикла;

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


antoneus

Ну, примерно так:

&НаКлиенте
Процедура ДолжностьНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
   
    СтандартнаяОбработка = Ложь;
    СписокДляОтбора = ПолучитьСписок();
    ПараметрыФормы = Новый Структура("ЗакрыватьПриВыборе", Истина);
    Форма = ПолучитьФорму("Справочник.ШтатныеДолжности.ФормаВыбора", ПараметрыФормы, Элемент);
    ЭлементОтбора = Форма.Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.Использование = Истина;
    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка");
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
    ЭлементОтбора.ПравоеЗначение = СписокДляОтбора;
    Форма.Открыть()   
   
КонецПроцедуры

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

Алексей_1985_06

Цитата: antoneus от 03 авг 2020, 17:10
Ну, примерно так:

&НаКлиенте
Процедура ДолжностьНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
   
    СтандартнаяОбработка = Ложь;
    СписокДляОтбора = ПолучитьСписок();
    ПараметрыФормы = Новый Структура("ЗакрыватьПриВыборе", Истина);
    Форма = ПолучитьФорму("Справочник.ШтатныеДолжности.ФормаВыбора", ПараметрыФормы, Элемент);
    ЭлементОтбора = Форма.Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.Использование = Истина;
    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка");
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
    ЭлементОтбора.ПравоеЗначение = СписокДляОтбора;
    Форма.Открыть()   
   
КонецПроцедуры

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


antoneus ОГРОМНОЕ ВАМ СПАСИБО!!! Все работает четко, как надо! :zebzdr::zebzdr::zebzdr:

Теги:

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

Рейтинг@Mail.ru

Поиск