В нашей компании есть регистр, в котором среди прочего хранятся идентификаторы пользователей и имена пользователей на внешнем портале обучения. Это необходимо для обновления данных сотрудников через интеграции
С некоторых пор появилась необходимость видеть эти данные в стандартном отчете "Отчеты по сотрудникам"
Мне показалось логичным, если бы эти поля были доступны в полях группировки "Физическое лицо" из настроек стандартного отчета в режиме предприятия
А т.к. нет желания менять СКД стандартных отчетов в метаданных во избежание проблем при дальнейших обновлениях, то было решено доработать механизм представлений. В частности, добавить в него наши поля.
План прост и надежен как швейцарские часы:
- Сначала мы смотрим по полям отчета - есть ли необходимость добавлять наши источники данных в отчет
- Если есть такая необходимость - добавляем источник (запрос, соединения)
- Добавим псевдонимы выбираемых полей в отчет
П.1-2 реализовываем в расширении, общий модуль "КадровыйУчетБазовый" (см. области #вставка)
&ИзменениеИКонтроль("ЗапросВТКадровыеДанныеСотрудников")
Функция ХХ_ЗапросВТКадровыеДанныеСотрудников(ТолькоРазрешенные, ОписательВременнойТаблицыОтборов, КадровыеДанные, ПоляОтбораПериодическихДанных, ФормироватьСПериодичностьДень, ИсточникиДанных, ИмяВТКадровыеДанныеСотрудников, ТаблицаОтборовСодержитПолеФизическоеЛицо, УничтожитьВспомогательныеТаблицы) Экспорт
ТекстыОписанияПолей = Новый Массив;
ТекстыОписанияПолейКадровыхДанныхФизическихЛиц = Новый Массив;
ТекстыОписанияПолейПостоянныхКадровыхДанныхСотрудников = Новый Массив;
ТекстЗапросаПолученияРазличныхЗаписей = "";
Если ИсточникиДанных = Неопределено Тогда
ИсточникиДанных = Новый Соответствие;
КонецЕсли;
ИмяКоллекцииОбработанныеПоля = "ОбработанныеПоляКадровыеДанныеСотрудников";
Если ТипЗнч(КадровыеДанные) = Тип("Массив") Тогда
ИменаКадровыхДанных = КадровыеДанные;
Иначе
ИменаКадровыхДанных = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(КадровыеДанные, ",", , Истина);
КонецЕсли;
ЕстьПодсистемаБухучет = ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ЗарплатаКадрыДляНебольшихОрганизаций.ОтражениеЗарплатыВБухгалтерскомУчете");
Если ЕстьПодсистемаБухучет Тогда
МодульОтражениеЗарплатыВБухучете = ОбщегоНазначения.ОбщийМодуль("ОтражениеЗарплатыВБухучетеБазовый");
КонецЕсли;
ФормироватьТаблицуРазличных = ПустаяСтрока(ОписательВременнойТаблицыОтборов.ИмяВременнойТаблицыОтборовРазличныхСотрудников);
Если ФормироватьТаблицуРазличных Тогда
ОписательВременнойТаблицыОтборов.ИмяВременнойТаблицыОтборовРазличныхСотрудников = "ВТОтборовРазличныхСотрудников";
КонецЕсли;
ОписательВТОтборов = КадровыйУчет.ОписаниеВременнойТаблицыОтборовСотрудников(ОписательВременнойТаблицыОтборов.ИмяВременнойТаблицыОтборовРазличныхСотрудников);
ОписательВТОтборов.ПутьКПолюОрганизацияФункциональныхОпций = ОписательВременнойТаблицыОтборов.ПутьКПолюОрганизацияФункциональныхОпций;
Если ИсточникиДанных.Получить("ЗапрашиваетсяТолькоКадроваяИсторияСотрудников") = Неопределено Тогда
ИсточникиДанных.Вставить("ЗапрашиваетсяТолькоКадроваяИсторияСотрудников", Истина);
КонецЕсли;
Для каждого ИмяЗапрашиваемыхДанных Из ИменаКадровыхДанных Цикл
ИмяКадровыхДанных = СокрЛП(ИмяЗапрашиваемыхДанных);
Если КадровыйУчет.ЭтоОбязательноеПолеКадровыхДанныхСотрудника(ИмяКадровыхДанных) Тогда
Продолжить;
ИначеЕсли КадровыйУчет.ЭтоОбработанноеПолеКадровыхДанных(ИмяКадровыхДанных, ИсточникиДанных, ИмяКоллекцииОбработанныеПоля) Тогда
Продолжить;
ИначеЕсли ДобавитьПолеСведенийКадровойИсторииСотрудников(ИмяКадровыхДанных, ТекстыОписанияПолей, ИсточникиДанных)
Или ДобавитьПолеСведенийОПлановыхАвансах(ИмяКадровыхДанных, ТекстыОписанияПолей, ИсточникиДанных)
Или ДобавитьПолеСведенийОбОплатеТруда(ИмяКадровыхДанных, ТекстыОписанияПолей, ИсточникиДанных)
Или ОбменСБанкамиПоЗарплатнымПроектам.ДобавитьПолеСведенийОЗарплатныхПроектах(ИмяКадровыхДанных, ТекстыОписанияПолей, ИсточникиДанных)
Или ДобавитьПолеСведенийОКлассахУсловийТруда(ИмяКадровыхДанных, ТекстыОписанияПолей, ИсточникиДанных)
Или ДобавитьПолеСведенийОВидахЗанятостиСотрудников(ИмяКадровыхДанных, ТекстыОписанияПолей, ИсточникиДанных)
Или ДобавитьПолеСведенийОДолеНеполногоРабочегоВремениСотрудников(ИмяКадровыхДанных, ТекстыОписанияПолей, ИсточникиДанных)
Или ЭлектронныеТрудовыеКнижки.ДобавитьПолеСведенийЗаявленийОВеденииТрудовойКнижки(ИмяКадровыхДанных, ТекстыОписанияПолей, ИсточникиДанных)
Или ЭлектронныеТрудовыеКнижки.ДобавитьПолеСведенийОМероприятияхТрудовойДеятельности(ИмяКадровыхДанных, ТекстыОписанияПолей, ИсточникиДанных)
Или ДобавитьПолеСведенийОбУсловияхДоговоровОпеки(ИмяКадровыхДанных, ТекстыОписанияПолей, ИсточникиДанных)
Или КадровыйУчет.ДобавитьПолеСведенийМестРаботыСотрудников(ИмяКадровыхДанных, ТекстыОписанияПолей, ИсточникиДанных)
#Вставка
// Проверим - есть ли необходимость добавлять наши источники данных
Или ХХ_КадровыйУчет.ДобавитьПолеДанныеПорталаОбученияФизическоеЛицо(ИмяКадровыхДанных, ТекстыОписанияПолей, ИсточникиДанных)
#КонецВставки
Или ЕстьПодсистемаБухучет
И МодульОтражениеЗарплатыВБухучете.ДобавитьПолеСведенийОбУчетеЗатрат(ИмяКадровыхДанных, ТекстыОписанияПолей, ИсточникиДанных)
Или Метаданные.РегистрыСведений["СостояниеСогласияНаПрисоединениеКЭДОБЗК"] <> Неопределено
И ОбщегоНазначения.ОбщийМодуль("РегистрыСведений.СостояниеСогласияНаПрисоединениеКЭДОБЗК").
ДобавитьПолеСведенийОСогласияхПодключенийКЭДОБЗК(ИмяКадровыхДанных, ТекстыОписанияПолей, ИсточникиДанных) Тогда
КадровыйУчет.ДобавитьВКоллекциюИмяОбработанныхКадровыхДанных(ИмяКадровыхДанных, ИсточникиДанных, ИмяКоллекцииОбработанныеПоля);
Если Не КадровыйУчет.НеобходимыСведенияКадровойИсторииСотрудников(ИмяКадровыхДанных)
Или КадровыйУчет.НеобходимыСведенияЗависящиеОтКадровойИсторииСотрудников(ИмяКадровыхДанных) Тогда
ИсточникиДанных.Вставить("ЗапрашиваетсяТолькоКадроваяИсторияСотрудников", Ложь);
КонецЕсли;
Продолжить;
ИначеЕсли Не ЭтоСтандартныйРеквизитСправочника(ИмяКадровыхДанных)
И ДобавитьПолеКадровыхДанныхФизическихЛиц(ИмяКадровыхДанных, ТекстыОписанияПолейКадровыхДанныхФизическихЛиц, ИсточникиДанных) Тогда
ИсточникиДанных.Вставить("ЗапрашиваетсяТолькоКадроваяИсторияСотрудников", Ложь);
Продолжить;
ИначеЕсли ДобавитьПолеПостоянныхКадровыхДанныхСотрудников(ИмяКадровыхДанных, ТекстыОписанияПолейПостоянныхКадровыхДанныхСотрудников, ИсточникиДанных) Тогда
ИсточникиДанных.Вставить("ЗапрашиваетсяТолькоКадроваяИсторияСотрудников", Ложь);
Продолжить;
Иначе
ИсточникиДанных.Вставить("ЗапрашиваетсяТолькоКадроваяИсторияСотрудников", Ложь);
ТекстСообщенияИсключения = НСтр("ru='Среди кадровых данных сотрудников нет данных с именем'") + " """ + ИмяКадровыхДанных + """";
ВызватьИсключение ТекстСообщенияИсключения;
КонецЕсли;
КонецЦикла;
Если ИсточникиДанных.Получить("ЗапрашиваетсяТолькоКадроваяИсторияСотрудников") = Истина Тогда
Запрос = ЗапросВТСведенияКадровойИсторииСотрудников(
ТолькоРазрешенные, ОписательВТОтборов, ПоляОтбораПериодическихДанных, ФормироватьСПериодичностьДень, ИмяВТКадровыеДанныеСотрудников);
Иначе
ОбработанныеПоляКадровыеДанныеСотрудников = ИсточникиДанных.Получить("ОбработанныеПоляКадровыеДанныеСотрудников");
Если (ОбработанныеПоляКадровыеДанныеСотрудников = Неопределено
Или ОбработанныеПоляКадровыеДанныеСотрудников.Количество() = 0)
И (ТекстыОписанияПолейПостоянныхКадровыхДанныхСотрудников.Количество() >0
Или ТекстыОписанияПолейКадровыхДанныхФизическихЛиц.Количество() > 0) Тогда
Если ТекстыОписанияПолейПостоянныхКадровыхДанныхСотрудников.Количество() > 0 Тогда
ПостоянныеКадровыеДанныеСотрудников = ИсточникиДанных.Получить("ПостоянныеКадровыеДанныеСотрудников");
ИсточникиДанных.Удалить("ПостоянныеКадровыеДанныеСотрудников");
ОписательВременнойТаблицыОтборов.ИмяВременнойТаблицыОтборовРазличныхСотрудников = "";
Запрос = КадровыйУчет.ЗапросВТПостоянныеКадровыеДанныеСотрудников(ТолькоРазрешенные, ОписательВременнойТаблицыОтборов, ПостоянныеКадровыеДанныеСотрудников, ИсточникиДанных, "ВТКадровыеДанныеСотрудников", Истина, ТаблицаОтборовСодержитПолеФизическоеЛицо, Ложь);
ЗаполнитьЗначенияСвойств(ОписательВТОтборов, ОписательВременнойТаблицыОтборов, "ИмяВременнойТаблицыОтборовРазличныхСотрудников,ИмяВременнойТаблицыОтборовСотрудников");
ФормироватьТаблицуРазличных = Ложь;
ИначеЕсли ТекстыОписанияПолейКадровыхДанныхФизическихЛиц.Количество() > 0 Тогда
КадровыеДанныеФизическихЛиц = ИсточникиДанных.Получить("КадровыеДанныеФизическихЛиц");
ИсточникиДанных.Удалить("КадровыеДанныеФизическихЛиц");
ОписательВременнойТаблицыОтборовФизическихЛиц = КадровыйУчет.ОписаниеВременнойТаблицыОтборовФизическихЛиц(ОписательВременнойТаблицыОтборов.ИмяВременнойТаблицыОтборовСотрудников);
ОписательВременнойТаблицыОтборовФизическихЛиц.ИмяПоляФизическоеЛицо = ОписательВременнойТаблицыОтборов.ИмяПоляСотрудник + ".ФизическоеЛицо";
ОписательВременнойТаблицыОтборовФизическихЛиц.Вставить("ИмяПоляСотрудник", ОписательВременнойТаблицыОтборов.ИмяПоляСотрудник);
Запрос = КадровыйУчет.ЗапросВТКадровыеДанныеФизическихЛиц(ТолькоРазрешенные, ОписательВременнойТаблицыОтборовФизическихЛиц, КадровыеДанныеФизическихЛиц, ПоляОтбораПериодическихДанных, ИсточникиДанных, "ВТКадровыеДанныеСотрудников", Истина, Ложь);
КонецЕсли;
Иначе
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ТаблицаОтборов.Период КАК Период,
| ТаблицаОтборов.Сотрудник КАК Сотрудник,
| ТаблицаОтборов.ФизическоеЛицо КАК ФизическоеЛицо
|ПОМЕСТИТЬ ВТКадровыеДанныеСотрудников
|ИЗ
| ВТОтборовРазличныхСотрудников КАК ТаблицаОтборов";
Если Не ФормироватьТаблицуРазличных Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст,
"ТаблицаОтборов.Период", "ТаблицаОтборов." + ОписательВременнойТаблицыОтборов.ИмяПоляПериод);
КонецЕсли;
Запрос.Текст = СтрЗаменить(Запрос.Текст, "ВТОтборовРазличныхСотрудников", ОписательВТОтборов.ИмяВременнойТаблицыОтборовСотрудников);
ЗарплатаКадрыОбщиеНаборыДанных.УстановитьВыборкуТолькоРазрешенныхДанных(Запрос.Текст, ТолькоРазрешенные);
КадровыйУчет.ДобавитьВТекстЗапросаОписаниеПолей(Запрос.Текст, ТекстыОписанияПолей, "ПОМЕСТИТЬ ВТКадровыеДанныеСотрудников");
Если Не ФормироватьТаблицуРазличных Тогда
ПрочиеРеквизитыСправочникаСотрудники = ИсточникиДанных.Получить("ПрочиеРеквизитыСправочникаСотрудники");
Если Не ТаблицаОтборовСодержитПолеФизическоеЛицо
Или ПрочиеРеквизитыСправочникаСотрудники <> Неопределено Тогда
ЧастиЗапроса = Новый Массив;
ЧастиЗапроса.Добавить(Запрос.Текст);
ЧастиЗапроса.Добавить(
" ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Сотрудники КАК Сотрудники
| ПО ТаблицаОтборов.Сотрудник = Сотрудники.Ссылка");
Запрос.Текст = СтрСоединить(ЧастиЗапроса, Символы.ПС);
Запрос.Текст = СтрЗаменить(Запрос.Текст,
"ТаблицаОтборов.ФизическоеЛицо", "Сотрудники.ФизическоеЛицо");
КонецЕсли;
Запрос.Текст = СтрЗаменить(Запрос.Текст,
"ТаблицаОтборов.ГоловнойСотрудник", "Сотрудники.ГоловнойСотрудник");
КонецЕсли;
КонецЕсли;
ДобавитьТекстЗапросаВТПостоянныеКадровыеДанныеСотрудников(Запрос, ТолькоРазрешенные, ОписательВТОтборов, ИсточникиДанных, "ВТКадровыеДанныеСотрудников", ФормироватьТаблицуРазличных);
ДобавитьТекстЗапросаВТКадровыеДанныеФизическихЛиц(Запрос, ТолькоРазрешенные, ОписательВТОтборов, ПоляОтбораПериодическихДанных, ИсточникиДанных, "ВТКадровыеДанныеСотрудников");
КадровыйУчет.ДобавитьТекстЗапросаВТСведенияКадроваяИсторияСотрудников(Запрос, ТолькоРазрешенные, ОписательВТОтборов, ПоляОтбораПериодическихДанных, ФормироватьСПериодичностьДень, ИсточникиДанных);
ДобавитьТекстЗапросаВТСведенийОПлановыхАвансах(Запрос, ТолькоРазрешенные, ОписательВТОтборов, ПоляОтбораПериодическихДанных, ИсточникиДанных, ФормироватьСПериодичностьДень);
ДобавитьТекстЗапросаВТСведенияОбОплатеТруда(Запрос, ТолькоРазрешенные, ОписательВТОтборов, ПоляОтбораПериодическихДанных, ИсточникиДанных, ФормироватьСПериодичностьДень);
ОбменСБанкамиПоЗарплатнымПроектам.ДобавитьТекстЗапросаВТСведенияОЗарплатныхПроектах(Запрос, ТолькоРазрешенные, ОписательВТОтборов, ПоляОтбораПериодическихДанных, ИсточникиДанных);
ДобавитьТекстЗапросаВТСведенияОКлассахУсловийТруда(Запрос, ТолькоРазрешенные, ОписательВТОтборов, ПоляОтбораПериодическихДанных, ИсточникиДанных);
ДобавитьТекстЗапросаВТСведенийОВидахЗанятостиСотрудников(Запрос, ТолькоРазрешенные, ОписательВТОтборов, ПоляОтбораПериодическихДанных, ИсточникиДанных, ФормироватьСПериодичностьДень);
ЭлектронныеТрудовыеКнижки.ДобавитьТекстЗапросаВТСведенийЗаявленийОВеденииТрудовойКнижки(Запрос, ТолькоРазрешенные, ОписательВТОтборов, ПоляОтбораПериодическихДанных, ИсточникиДанных);
ЭлектронныеТрудовыеКнижки.ДобавитьТекстЗапросаВТСведенийОМероприятияхТрудовойДеятельности(Запрос, ТолькоРазрешенные, ОписательВТОтборов, ПоляОтбораПериодическихДанных, ИсточникиДанных);
КадровыйУчет.ДобавитьТекстЗапросаВТСведенияОбУсловияхДоговоровОпеки(Запрос, ТолькоРазрешенные, ОписательВТОтборов, ПоляОтбораПериодическихДанных, ФормироватьСПериодичностьДень, ИсточникиДанных);
#Вставка
// Добавим наши источники данных, если есть такой запрос
ХХ_КадровыйУчет.ДобавитьТекстЗапроса_ВТДанныеПорталаОбученияФизическоеЛицо(Запрос, ТолькоРазрешенные, ОписательВТОтборов, ПоляОтбораПериодическихДанных, ИсточникиДанных, ФормироватьСПериодичностьДень);
#КонецВставки
....
далее все стандартно
А также своим модулем "ХХ_КадровыйУчет" в расширении, в котором реализованы процедуры "ДобавитьПолеДанныеПорталаОбученияФизическоеЛицо" и "ДобавитьТекстЗапроса_ВТДанныеПорталаОбученияФизическоеЛицо"
Функция ДобавитьПолеДанныеПорталаОбученияФизическоеЛицо(ИмяПоля, ТекстыОписанияПолей, ИсточникиДанных) Экспорт
ДобавленоПолеСведений = Ложь;
// Проверим - есть ли поля по порталу обучения в выбранных полях отчета
Если ВРег(ИмяПоля) = "ФИЗИЧЕСКОЕЛИЦОИДЕНТИФИКАТОРНАПОРТАЛЕОБУЧЕНИЯ"
Или ВРег(ИмяПоля) = "ФИЗИЧЕСКОЕЛИЦОНАИМЕНОВАНИЕНАПОРТАЛЕОБУЧЕНИЯ" Тогда
ДобавленоПолеСведений = Истина;
// Если есть - добавим свой флаг в источники данных
ИсточникиДанных.Вставить("ХХ_ДанныеПорталаОбучения_ФизическиеЛица", Истина);
// Имя виртуальной таблицы, где будут лежать эти данные
ПутьКДанным = " ВТДанныеПорталаОбучения_ФизическиеЛица." + ИмяПоля;
ТекстыОписанияПолей.Добавить(ПутьКДанным + " КАК " + ИмяПоля);
КонецЕсли;
Возврат ДобавленоПолеСведений;
КонецФункции
Процедура ДобавитьТекстЗапроса_ВТДанныеПорталаОбученияФизическоеЛицо(Запрос, ТолькоРазрешенные, ОписательВременнойТаблицыОтборов, ПоляОтбораПериодическихДанных, ИсточникиДанных, ФормироватьСПериодичностьДень) Экспорт
// Проверяем - есть ли необходимость в добавлении нашего источника данных
Если ИсточникиДанных.Получить("ХХ_ДанныеПорталаОбучения_ФизическиеЛица") = Неопределено Тогда
Возврат;
КонецЕсли;
// ВТОтборовРазличныхСотрудников - виртуалная таблица, генерируемая отчетом из коробки
ТекстЗапросаРезультат =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ХХ_ДанныеПорталаОбучения.Сущность КАК ФизическоеЛицоСущность,
| ХХ_ДанныеПорталаОбучения.ИдентификаторОбъекта КАК ФизическоеЛицоИдентификаторНаПорталеОбучения,
| ХХ_ДанныеПорталаОбучения.НаименованиеНаПортале КАК ФизическоеЛицоНаименованиеНаПорталеОбучения
|ПОМЕСТИТЬ ВТДанныеПорталаОбучения_ФизическиеЛица
|ИЗ
| ВТОтборовРазличныхСотрудников КАК ВТОтборовРазличныхСотрудников
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ХХ_ДанныеПорталаОбучения КАК ХХ_ДанныеПорталаОбучения
| ПО ВТОтборовРазличныхСотрудников.ФизическоеЛицо = ХХ_ДанныеПорталаОбучения.Сущность
| И (ХХ_ДанныеПорталаОбучения.ТипСущности = ЗНАЧЕНИЕ(Перечисление.ХХ_ТипыСущностейДляВыгрузкиВПорталОбучения.ФизическоеЛицо))";
ЧастиЗапроса = Новый Массив;
ЧастиЗапроса.Добавить(ТекстЗапросаРезультат);
ЧастиЗапроса.Добавить(ЗарплатаКадрыОбщиеНаборыДанных.РазделительЗапросов());
ЧастиЗапроса.Добавить(Запрос.Текст);
ЧастиЗапроса.Добавить(
" {ЛЕВОЕ СОЕДИНЕНИЕ ВТДанныеПорталаОбучения_ФизическиеЛица КАК ВТДанныеПорталаОбучения_ФизическиеЛица
| ПО ТаблицаОтборов.ФизическоеЛицо = ВТДанныеПорталаОбучения_ФизическиеЛица.ФизическоеЛицоСущность}");
Запрос.Текст = СтрСоединить(ЧастиЗапроса, Символы.ПС);
КонецПроцедуры
Добавление псевдонимов выбираемых полей (п.3 плана) производим также в расширении, модуль объекта отчета "ОтчетыПоСотрудникам":
&ИзменениеИКонтроль("ИнициализироватьОтчет")
Процедура ХХ_ИнициализироватьОтчет()
ДополнительныеПоляПредставлений = КадровыйУчет.ПоляПредставленийКадровыхДанныхСотрудников();
#Вставка
// Добавим наши псевдонимы выбираемых полей
ДобавитьПсевдонимы(ДополнительныеПоляПредставлений);
#КонецВставки
Если ДополнительныеПоляПредставлений = Неопределено Тогда
СоответствиеДополнительныхПолейПредставлениям = Неопределено;
Иначе
СоответствиеДополнительныхПолейПредставлениям = Новый Структура;
СоответствиеДополнительныхПолейПредставлениям.Вставить("Представления_КадровыеДанныеСотрудников", ДополнительныеПоляПредставлений);
КонецЕсли;
ЗарплатаКадрыОбщиеНаборыДанных.ЗаполнитьОбщиеИсточникиДанныхОтчета(ЭтотОбъект, СоответствиеДополнительныхПолейПредставлениям);
КонецПроцедуры
#Область СлужебныеПроцедурыИФункции
Процедура ДобавитьПсевдонимы(ДополнительныеПоляКадровыхДанныхСотрудников)
НовСтрока = ДополнительныеПоляКадровыхДанныхСотрудников.Добавить();
НовСтрока.ДляПоиска = Ложь;
НовСтрока.ЗаголовокПоляСКД = "";
НовСтрока.ИмяПоля = "ФизическоеЛицоИдентификаторНаПорталеОбучения";
НовСтрока.ПсевдонимыПолей = Новый Структура;
НовСтрока.ПустоеЗначениеНаЯзыкеЗапросов = "Выразить ("""" Как Строка(36))";
НовСтрока.ПутьПоляСКД = "ФизическоеЛицо.ИдентификаторНаПорталеОбучения";
НовСтрока.Соединения = Новый Массив;
НовСтрока = ДополнительныеПоляКадровыхДанныхСотрудников.Добавить();
НовСтрока.ДляПоиска = Ложь;
НовСтрока.ЗаголовокПоляСКД = "";
НовСтрока.ИмяПоля = "ФизическоеЛицоНаименованиеНаПорталеОбучения";
НовСтрока.ПсевдонимыПолей = Новый Структура;
НовСтрока.ПустоеЗначениеНаЯзыкеЗапросов = "Выразить ("""" Как Строка(200))";
НовСтрока.ПутьПоляСКД = "ФизическоеЛицо.НаименованиеНаПорталеОбучения";
НовСтрока.Соединения = Новый Массив;
КонецПроцедуры
#КонецОбласти
Наслаждаемся результатом в режиме предприятия:
Вступайте в нашу телеграмм-группу Инфостарт