Мысли на тему: Склонения объектов в конфигурации Управление производственным предприятем 8.1. Использование запросов для получения склонений.

В базе должен быть РегистрСведений.СклонениеОбъектов


Функция ЗапросСклоненияОбъекта(Объект,Падеж) 

    // задается Объект и Падеж (Перечисления.Падежи)

        Запрос = Новый Запрос;

        Запрос.Текст = "ВЫБРАТЬ
        |    СклонениеОбъектов.Объект,
        |    СклонениеОбъектов.Падеж,
        |    СклонениеОбъектов.Значение
        |ИЗ
        |    РегистрСведений.СклонениеОбъектов КАК СклонениеОбъектов
        |ГДЕ
        |(СклонениеОбъектов.Падеж = &Падеж)
        |И (СклонениеОбъектов.Объект = &ТекОбъект)";

        Запрос.УстановитьПараметр("Падеж", Падеж);
        Запрос.УстановитьПараметр("ТекОбъект",Объект);
    Возврат Запрос.Выполнить();

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

 Функция УстановитьПадеж(Сотрудник)
       Запрос = Новый Запрос;  //  Выбираются склонения должностей и физ. лиц

        Запрос.УстановитьПараметр("Падеж", Сотрудник.Падеж);
        Запрос.УстановитьПараметр("Должность", Сотрудник.Должность);
        Запрос.УстановитьПараметр("ФизическоеЛицо", Сотрудник.ФизЛицо);

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

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

       Для каждого Строка Из Результат Цикл
           Если Строка.Объект = Сотрудник.Должность Тогда

                    Сотрудник.ДолжностьВПадеже   = Строка.Значение;

            КонецЕсли;

           Если Строка.Объект = Сотрудник.ФизЛицо Тогда
                   Сотрудник.ФИОВПадеже   = Строка.Значение;
            КонецЕсли;
        КонецЦикла;

     Возврат Неопределено;
 КонецФункции

В функцию УстановитьПадеж(Сотрудник) Передается Структура. Выглядить она таким образом:


Сотрудник = Новый Структура();


Для Каждого ТекСтрока Из РаботникиОрганизации Цикл

Сотрудник.Вставить("ФизЛицо",ТекСтрока.ФизЛицо);        
Сотрудник.Вставить("Падеж", Перечисления.Падежи.Дательный);
Сотрудник.Вставить("Должность", ТекСтрока.Должность);
Сотрудник.Вставить("ДолжностьВПадеже",ТекСтрока.Должность.Наименование);
Сотрудник.Вставить(«ФИОВПадеже»,ТекСтрока.ФизЛицо.Наименование);


КонецЦикла;

От prog