ООО ЭкоЮнит
Username: Log me on automatically each visit
Password:
Aeroion.Ru
Форумы сервера Aeroion.Ru
Welcome

Aeroion.Ru Forum Index
  » Технические форумы
   » 1Сv8: Программирование, отчёты, обработки, статьи
    » Функция. Чтение значений реквизитов объекта в структуру
   1С: Предприятие 8.Х
printer-friendly view
AuthorФункция. Чтение значений реквизитов объекта в структуру
Sergey Gender:Male


Местный босс - администратор


Joined: 06 Jan 2005
Location: Оренбург
Posts: 805
Last Visited: Today at 01:01
Кредиты: 2745
Reputation: 25
Age: 39
Zodiac: Aquarius Pig


Универсальная функция, позволяющая прочитать в структуру или простую переменную значения указанных или всех реквизитов произвольного объекта ссылочного типа, в том числе системных (дата, номер, код, наименование, родитель, владелец, пометка удаления).
Входит в состав конфигурации Подсистема "Настройка контроля заполнения объектов в момент записи" для 1С: Предприятия 8.1

Code:
// Возвращает значение или структуру с именами и значениями реквизитов произвольного объекта ссылочного типа
// прочитанные из информационной базы
//
// Параметры:
//  Ссылка - произвольный объект ссылочного типа (справочник, документ, план обмена, ПВХ, задача)
//  СтруктураРеквизитов - Необязательно. Может содержать значения:
//                      строка - имя реквизита объекта.
//                      строка - имена реквизитов, перечисленные через запятую, в формате требований к свойствам структуры.
//                      структура - структура с именами реквизитов.
//
//
// Возвращаемое значение:
//  Структура - если СтруктураРеквизитов имеет тип Структура и заполнен - структура с именами и значениями указанных реквизитов
//  Структура - если СтруктураРеквизитов не указан или не заполнен - структура с именами и значениями всех реквизитов объекта
//  Произвольный - если СтруктураРеквизитов строкового типа - значение данного реквизита
//
Функция ПолучитьРеквизитыОбъекта(Знач Ссылка, Знач СтруктураРеквизитов = Неопределено) Экспорт

   
МетаданныеОбъекта = Ссылка.Метаданные();
   
ИмяТаблицы = МетаданныеОбъекта.ПолноеИмя();

   
ЭтоСправочник = Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(Ссылка));
   
ЭтоПланОбмена = ПланыОбмена.ТипВсеСсылки().СодержитТип(ТипЗнч(Ссылка));
   
ЭтоПВХ = ПланыВидовХарактеристик.ТипВсеСсылки().СодержитТип(ТипЗнч(Ссылка));
   
ЭтоДокумент = Документы.ТипВсеСсылки().СодержитТип(ТипЗнч(Ссылка));
   
ЭтоЗадача = Задачи.ТипВсеСсылки().СодержитТип(ТипЗнч(Ссылка));

   
ТекстЗапроса = "ВЫБРАТЬ ";

   
//Формируем список реквизитов объекта для запроса
   
Если ТипЗнч(СтруктураРеквизитов) = Тип("Строка") И ЗначениеЗаполнено(СтруктураРеквизитов) Тогда

       
ТекстЗапроса = ТекстЗапроса + СокрЛП(СтруктураРеквизитов);
       
//Если передали список реквизитов, инициализируем структуру
       
Если Найти(СтруктураРеквизитов, ",") <> 0 Тогда
           
СтруктураРеквизитов = Новый Структура(СтруктураРеквизитов);
        КонецЕсли;

    ИначеЕсли
ТипЗнч(СтруктураРеквизитов) = Тип("Структура") И СтруктураРеквизитов.Количество() > 0 Тогда

        Для каждого
Реквизит Из СтруктураРеквизитов Цикл ТекстЗапроса = ТекстЗапроса + Реквизит.Ключ + ","; КонецЦикла;

       
//Отрезаем последнюю запятую
       
ТекстЗапроса = Лев(ТекстЗапроса, СтрДлина(ТекстЗапроса) - 1);

    Иначе

       
//Определяем список реквизитов объектов для подстановки в текст запроса
       
СписокРеквизитов = "";
        Если
ЭтоСправочник ИЛИ ЭтоПланОбмена ИЛИ ЭтоПВХ Тогда
            Если
МетаданныеОбъекта.ДлинаКода > 0 Тогда
               
СписокРеквизитов = "Код,";
            КонецЕсли;
            Если
МетаданныеОбъекта.ДлинаНаименования > 0 Тогда
               
СписокРеквизитов = СписокРеквизитов + "Наименование,";
            КонецЕсли;
            Если
ЭтоСправочник ИЛИ ЭтоПВХ Тогда
                Если
МетаданныеОбъекта.Иерархический Тогда
                   
СписокРеквизитов = СписокРеквизитов + "Родитель,";
                КонецЕсли;
                Если
ЭтоСправочник И (МетаданныеОбъекта.Владельцы.Количество() <> 0) Тогда
                   
СписокРеквизитов = СписокРеквизитов + "Владелец,";
                КонецЕсли;
            КонецЕсли;
        ИначеЕсли
ЭтоДокумент Тогда
            Если
МетаданныеОбъекта.ДлинаНомера > 0 Тогда
               
СписокРеквизитов = "Номер,";
            КонецЕсли;
           
СписокРеквизитов СписокРеквизитов + "Дата,";
        ИначеЕсли
ЭтоЗадача Тогда
            Если
МетаданныеОбъекта.ДлинаНомера > 0 Тогда
               
СписокРеквизитов = "Номер,";
            КонецЕсли;
           
СписокРеквизитов СписокРеквизитов + "Дата,";
            Если
МетаданныеОбъекта.ДлинаНаименования > 0 Тогда
               
СписокРеквизитов = СписокРеквизитов + "Наименование,";
            КонецЕсли;
        КонецЕсли;

       
СписокРеквизитов = СписокРеквизитов + "ПометкаУдаления,";

        Для каждого
Реквизит Из МетаданныеОбъекта.Реквизиты Цикл СписокРеквизитов = СписокРеквизитов + Реквизит.Имя + ","; КонецЦикла;

       
//Отрезаем последнюю запятую
       
СписокРеквизитов = Лев(СписокРеквизитов, СтрДлина(СписокРеквизитов) - 1);
       
СтруктураРеквизитов = Новый Структура(СписокРеквизитов);

       
ТекстЗапроса = ТекстЗапроса + СписокРеквизитов;

    КонецЕсли;

   
ТекстЗапроса = ТекстЗапроса + "
        |ИЗ "
+ ИмяТаблицы + "
        |ГДЕ Ссылка = &Ссылка"
;

   
Запрос = Новый Запрос;
   
Запрос.Текст = ТекстЗапроса;
   
Запрос.УстановитьПараметр("Ссылка", Ссылка);

   
РезультатЗапроса = Запрос.Выполнить();
    Если НЕ
РезультатЗапроса.Пустой() Тогда
       
Выборка = РезультатЗапроса.Выбрать();
        Если
Выборка.Следующий() Тогда
            Если
ТипЗнч(СтруктураРеквизитов) = Тип("Строка") И ЗначениеЗаполнено(СтруктураРеквизитов) Тогда
                Возврат
Выборка[СтруктураРеквизитов];
            Иначе
               
ЗаполнитьЗначенияСвойств(СтруктураРеквизитов, Выборка);
                Возврат
СтруктураРеквизитов;
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;

    Возврат Неопределено;

КонецФункции
//ПолучитьРеквизитыОбъекта()


_________________
Профессионал - это тот же дилетант, только знающий где ошибется.
Генератор db_update.php для phpBB2 с некоторыми удобствами.
Как ставить моды. Что такое [SQL] и с чем его едят | Как правильно задавать вопросы и получать адекватные ответы | Правила форума
Бесплатная техподдержка только на форуме! Не надо стучаться в аську, слать емайлы, пытаться писать в приват. Спасибо за понимание.
Please do not PM, ICQ or email me for support help - you won't get any reply. If you have a question or issue, post it in the appropriate forum/topic. Thanks!
Back to topOffline View user's profile Skype Name
Display posts from previous:   

Summary Rating For >> Функция. Чтение значений реквизитов объекта в структуру
Average Rating: 0.00 :: Min Rating: 0 :: Max Rating: 0 :: Number of Ratings: 0
Choose Rating: 1   2   3   4   5  

Similar Topics
Topic Author Forum Replies Last Post
No new posts Функция. Определение размера данных д... Sergey 1Сv8: Программирование, отчёты, обработки, статьи 0 Tue 06 Oct, 2009 02:55 View latest post
Sergey
No new posts Функция. Добавление колонки данных в ...
для конфигураций 1C: Предприятия 8.1
Sergey 1Сv8: Программирование, отчёты, обработки, статьи 0 Sat 03 Apr, 2010 01:38 View latest post
Sergey
No new posts Функция. Формирование и заполнение ст...
Управление торговлей 10.3
Sergey 1Сv8: Программирование, отчёты, обработки, статьи 0 Sat 03 Apr, 2010 01:45 View latest post
Sergey
No new posts Функция Русский MetaPhone и другие дл...
нечёткий поиск поиск информации
Sergey 1Сv8: Программирование, отчёты, обработки, статьи 2 Sun 16 May, 2010 02:33 View latest post
Sergey
No new posts Функция. Сортировка табличной части д...
Управление торговлей 10.3
Sergey 1Сv8: Программирование, отчёты, обработки, статьи 0 Sat 03 Apr, 2010 01:41 View latest post
Sergey




All times are UTC + 3 Hours
All times are synchronized with the forum server time
Users browsing this topic:
Registered Users: None

Jump to:   
printer-friendly view
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum