Отчет находится по наименованию, указывается нужный вариант отчета.
&НаКлиенте
Процедура ИнформацияПоЗданиям(Команда)
ВнешнийОтчетОбработкаДляОткрытияСсылка = ПолучитьСсылкуНаВнешнийОтчетОбработкуПоИмениНаСервере("Информация по зданиям");
Если Не ЗначениеЗаполнено(ВнешнийОтчетОбработкаДляОткрытияСсылка) Тогда
Сообщить("Отчет не найден");
Возврат;
КонецЕсли;
ИмяОбработкиСлужебное = ДополнительныеОтчетыИОбработкиВызовСервера.ПодключитьВнешнююОбработку(ВнешнийОтчетОбработкаДляОткрытияСсылка);
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("КлючВарианта", "Основной");
ПараметрыФормы.Вставить("СформироватьПриОткрытии", Истина);
ОткрытьФорму("ВнешнийОтчет." + ИмяОбработкиСлужебное + ".Форма", ПараметрыФормы, ЭтаФорма);
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьСсылкуНаВнешнийОтчетОбработкуПоИмениНаСервере(ИмяОтчетаОбработки)
Возврат Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию(ИмяОтчетаОбработки).Ссылка;
КонецФункции
&НаКлиенте
Процедура ИнформацияПоЗданиям(Команда)
ВнешнийОтчетОбработкаДляОткрытияСсылка = ПолучитьСсылкуНаВнешнийОтчетОбработкуПоИмениНаСервере("Информация по зданиям");
Если Не ЗначениеЗаполнено(ВнешнийОтчетОбработкаДляОткрытияСсылка) Тогда
Сообщить("Отчет не найден");
Возврат;
КонецЕсли;
ИмяОбработкиСлужебное = ДополнительныеОтчетыИОбработкиВызовСервера.ПодключитьВнешнююОбработку(ВнешнийОтчетОбработкаДляОткрытияСсылка);
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("КлючВарианта", "Основной");
ПараметрыФормы.Вставить("СформироватьПриОткрытии", Истина);
ОткрытьФорму("ВнешнийОтчет." + ИмяОбработкиСлужебное + ".Форма", ПараметрыФормы, ЭтаФорма);
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьСсылкуНаВнешнийОтчетОбработкуПоИмениНаСервере(ИмяОтчетаОбработки)
Возврат Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию(ИмяОтчетаОбработки).Ссылка;
КонецФункции
В общем модуле ВариантыОтчетовПереопределяемый, в процедуре НастроитьВариантыОтчетов добавляем
Процедура НастроитьВариантыОтчетов(Настройки) Экспорт
ВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.тдс_ОтчетПоДебиторскойЗадолжен...
1С Менеджер конфигураций — альтернативный стартер информационных баз 1С:Предприятие.
Иногда с отчетами удобнее (или быстрее) работать в MS Excel, например, когда необходимо связать несколько разных отчетов. Если отчеты выводятся с группировкой, то связать их бывает проблематично. Если у отчета нет своей формы, то можно применить такое унив...
Возвращает значение перечисления по его синониму
// Описание функции
//
// Параметры:
// СинонимПеречисления - Тип.Строка - Синоним перечисления
//
// ИмяПеречисления - Тип.Строка - Имя метаданных перечисления в базе
// ...
ДатаНачала = ТекущаяУниверсальнаяДатаВМиллисекундах();
// Какой-то код
Дельта = (ТекущаяУниверсальнаяДатаВМиллисекундах() - ДатаНачала)/1000;
ВремяВыполнения = Формат(Дата(1,1,1) + Дельта, "ДЛФ=T");
ДатаНачала = ТекущаяУниверсальнаяДатаВМиллисекундах();
// Какой-то код
Дельта = (ТекущаяУниверсальнаяДатаВМиллисекундах() - ДатаНачала)/1000;
ВремяВыполнения = Формат(Дата(1,1,1) + Дельта, "ДЛФ=T");
Возвращает таблицу значений с колонками набора данных СКД
// Возвращает таблицу значений с колонками набора данных СКД
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/132
//
// Параметры:
// НаборДанных - НаборДанныхОбъектСхемыКомпоновкиДанных
//
// Возвращаемое значение:
// ТаблицаЗначений
//
// Пример:
// Таблица = ТаблицаИзНабораДанных(СКД.НаборыДанных.Получить(0));
// //Таблица содержит пустую ТЗ со всеми колонками для набора.
// //Теперь её можно заполнять данными и далее "скармливать" при формировании СКД
//
Функция ТаблицаИзНабораДанных(Знач НаборДанных) Экспорт
Результат = Новый ТаблицаЗначений();
Для Каждого Поле Из НаборДанных.Поля Цикл
Результат.Колонки.Добавить(Поле.Поле, Поле.ТипЗначения, Поле.Заголовок);
КонецЦикла;
Возврат Результат;
КонецФункции
// Возвращает таблицу значений с колонками набора данных СКД
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/132
//
// Параметры:
// НаборДанных - НаборДанныхОбъектСхемыКомпоновкиДанных
//
// Возвращаемое значение:
// ТаблицаЗначений
//
// Пример:
// Таблица = ТаблицаИзНабораДанных(СКД.НаборыДанных.Получить(0));
// //Таблица содержит пустую ТЗ со всеми колонками для набора.
// //Теперь её можно заполнять данными и далее "скармливать" при формировании СКД
//
Функция ТаблицаИзНабораДанных(Знач НаборДанных) Экспорт
Результат = Новый ТаблицаЗначений();
Для Каждого Поле Из НаборДанных.Поля Цикл
Результат.Колонки.Добавить(Поле.Поле, Поле.ТипЗначения, Поле.Заголовок);
КонецЦикла;
Возврат Результат;
КонецФункции
Перед вставкой параметров проверяет существование параметра в шаблоне
// @skip-check method-too-many-params
// Перед вставкой параметров проверяет существование параметра в шаблоне
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/129
//
// Параметры:
// Шаблон - Строка
// Параметр1 - Произвольный
// Параметр2 - Произвольный
// Параметр3 - Произвольный
// Параметр4 - Произвольный
// Параметр5 - Произвольный
// Параметр6 - Произвольный
// Параметр7 - Произвольный
// Параметр8 - Произвольный
// Параметр9 - Произвольный
// Параметр10 - Произвольный
//
// Возвращаемое значение:
// Строка
Функция СтрШаблонБезопасно(Знач Шаблон, Знач Параметр1 = Неопределено,
Знач Параметр2 = Неопределено, Знач Параметр3 = Неопределено, Знач Параметр4 = Неопределено,
Знач Параметр5 = Неопределено, Знач Параметр6 = Неопределено, Знач Параметр7 = Неопределено,
Знач Параметр8 = Неопределено, Знач Параметр9 = Неопределено, Знач Параметр10 = Неопределено) Экспорт
ЗатеретьПараметрПриЕгоОтсутствииВШаблоне(Шаблон, Параметр1, 1);
ЗатеретьПараметрПриЕгоОтсутствииВШаблоне(Шаблон, Параметр2, 2);
ЗатеретьПараметрПриЕгоОтсутствииВШаблоне(Шаблон, Параметр3, 3);
ЗатеретьПараметрПриЕгоОтсутствииВШаблоне(Шаблон, Параметр4, 4);
ЗатеретьПараметрПриЕгоОтсутствииВШаблоне(Шаблон, Параметр5, 5);
ЗатеретьПараметрПриЕгоОтсутствииВШаблоне(Шаблон, Параметр6, 6);
ЗатеретьПараметрПриЕгоОтсутствииВШаблоне(Шаблон, Параметр7, 7);
ЗатеретьПараметрПриЕгоОтсутствииВШаблоне(Шаблон, Параметр8, 8);
ЗатеретьПараметрПриЕгоОтсутствииВШаблоне(Шаблон, Параметр9, 9);
ЗатеретьПараметрПриЕгоОтсутствииВШаблоне(Шаблон, Параметр10, 10);
Возврат СтрШаблон(Шаблон,
Параметр1, Параметр2, Параметр3, Параметр4, Параметр5,
Параметр6, Параметр7, Параметр8, Параметр9, Параметр10);
КонецФункции
// Затереть параметр при его отсутствии в шаблоне.
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/129
//
// Параметры:
// Шаблон - Строка
// Параметр - Произвольный
// Номер - Число
Процедура ЗатеретьПараметрПриЕгоОтсутствииВШаблоне(Знач Шаблон, Параметр, Знач Номер) Экспорт
Если Параметр <> Неопределено И СтрНайти(Шаблон, "%" + Номер) = 0 Тогда
Параметр = Неопределено;
КонецЕсли;
КонецПроцедуры
// @skip-check method-too-many-params
// Перед вставкой параметров проверяет существование параметра в шаблоне
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/129
//
// Параметры:
// Шаблон - Строка
// Параметр1 - Произвольный
// Параметр2 - Произвольный
// Параметр3 - Произвольный
// Параметр4 - Произвольный
// Параметр5 - Произвольный
// Параметр6 - Произвольный
// Параметр7 - Произвольный
// Параметр8 - Произвольный
// Параметр9 - Произвольный
// Параметр10 - Произвольный
//
// Возвращаемое значение:
// Строка
Функция СтрШаблонБезопасно(Знач Шаблон, Знач Параметр1 = Неопределено,
Знач Параметр2 = Неопределено, Знач Параметр3 = Неопределено, Знач Параметр4 = Неопределено,
Знач Параметр5 = Неопределено, Знач Параметр6 = Неопределено, Знач Параметр7 = Неопределено,
Знач Параметр8 = Неопределено, Знач Параметр9 = Неопределено, Знач Параметр10 = Неопределено) Экспорт
ЗатеретьПараметрПриЕгоОтсутствииВШаблоне(Шаблон, Параметр1, 1);
ЗатеретьПараметрПриЕгоОтсутствииВШаблоне(Шаблон, Параметр2, 2);
ЗатеретьПараметрПриЕгоОтсутствииВШаблоне(Шаблон, Параметр3, 3);
ЗатеретьПараметрПриЕгоОтсутствииВШаблоне(Шаблон, Параметр4, 4);
ЗатеретьПараметрПриЕгоОтсутствииВШаблоне(Шаблон, Параметр5, 5);
ЗатеретьПараметрПриЕгоОтсутствииВШаблоне(Шаблон, Параметр6, 6);
ЗатеретьПараметрПриЕгоОтсутствииВШаблоне(Шаблон, Параметр7, 7);
ЗатеретьПараметрПриЕгоОтсутствииВШаблоне(Шаблон, Параметр8, 8);
ЗатеретьПараметрПриЕгоОтсутствииВШаблоне(Шаблон, Параметр9, 9);
ЗатеретьПараметрПриЕгоОтсутствииВШаблоне(Шаблон, Параметр10, 10);
Возврат СтрШаблон(Шаблон,
Параметр1, Параметр2, Параметр3, Параметр4, Параметр5,
Параметр6, Параметр7, Параметр8, Параметр9, Параметр10);
КонецФункции
// Затереть параметр при его отсутствии в шаблоне.
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/129
//
// Параметры:
// Шаблон - Строка
// Параметр - Произвольный
// Номер - Число
Процедура ЗатеретьПараметрПриЕгоОтсутствииВШаблоне(Знач Шаблон, Параметр, Знач Номер) Экспорт
Если Параметр <> Неопределено И СтрНайти(Шаблон, "%" + Номер) = 0 Тогда
Параметр = Неопределено;
КонецЕсли;
КонецПроцедуры
Возвращает строку нужной длины из указанного символа
// Возвращает строку нужной длины из указанного символа
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/120
//
// Параметры:
// Длина - Число
// Символ - Строка
//
// Возвращаемое значение:
// Строка
Функция СтрокаСимволов(Знач Длина, Знач Символ = " ") Экспорт
Квалификатор = Новый КвалификаторыСтроки(Длина, ДопустимаяДлина.Фиксированная);
ОписаниеТипов = Новый ОписаниеТипов("Строка", Квалификатор);
Результат = ОписаниеТипов.ПривестиЗначение(""); // Строка
Если Символ <> " " Тогда
Результат = СтрЗаменить(Результат, " ", Символ);
КонецЕсли;
Возврат Результат;
КонецФункции
// Возвращает строку нужной длины из указанного символа
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/120
//
// Параметры:
// Длина - Число
// Символ - Строка
//
// Возвращаемое значение:
// Строка
Функция СтрокаСимволов(Знач Длина, Знач Символ = " ") Экспорт
Квалификатор = Новый КвалификаторыСтроки(Длина, ДопустимаяДлина.Фиксированная);
ОписаниеТипов = Новый ОписаниеТипов("Строка", Квалификатор);
Результат = ОписаниеТипов.ПривестиЗначение(""); // Строка
Если Символ <> " " Тогда
Результат = СтрЗаменить(Результат, " ", Символ);
КонецЕсли;
Возврат Результат;
КонецФункции
Проверяет шаблон строки на корректность для передачи в СтрШаблон()
// Возвращает результат проверки корректности шаблона строки (метода СтрШаблон)
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/12
//
// Параметры:
// ШаблонСтроки - Строка
//
// Возвращаемое значение:
// Булево - Корректен ли шаблон строки
Функция ШаблонСтрокиКорректен(Знач ШаблонСтроки) Экспорт
Попытка
ПроверитьШаблонСтроки(ШаблонСтроки);
Возврат Истина;
Исключение
Возврат Ложь;
КонецПопытки;
КонецФункции
// Проверяет корректность шаблона строки (метода СтрШаблон)
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/12
//
// Параметры:
// ШаблонСтроки - Строка
Процедура ПроверитьШаблонСтроки(Знач ШаблонСтроки) Экспорт
СтрШаблон(ШаблонСтроки, Неопределено, Неопределено,
Неопределено, Неопределено, Неопределено, Неопределено,
Неопределено, Неопределено, Неопределено, Неопределено);
КонецПроцедуры
// Возвращает результат проверки корректности шаблона строки (метода СтрШаблон)
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/12
//
// Параметры:
// ШаблонСтроки - Строка
//
// Возвращаемое значение:
// Булево - Корректен ли шаблон строки
Функция ШаблонСтрокиКорректен(Знач ШаблонСтроки) Экспорт
Попытка
ПроверитьШаблонСтроки(ШаблонСтроки);
Возврат Истина;
Исключение
Возврат Ложь;
КонецПопытки;
КонецФункции
// Проверяет корректность шаблона строки (метода СтрШаблон)
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/12
//
// Параметры:
// ШаблонСтроки - Строка
Процедура ПроверитьШаблонСтроки(Знач ШаблонСтроки) Экспорт
СтрШаблон(ШаблонСтроки, Неопределено, Неопределено,
Неопределено, Неопределено, Неопределено, Неопределено,
Неопределено, Неопределено, Неопределено, Неопределено);
КонецПроцедуры
Метод выделяет подстроку внутри подстроки с использованием метода см. СтрНайтиИВыделитьОформлением
Платформенный метод СтрНайтиИВыделитьОформлением() находит только с начала слова
Например, если искать "200", то в код элемента не будет выделен: "CNT-000**200**"
// Метод выделяет подстроку внутри подстроки с использованием метода см. СтрНайтиИВыделитьОформлением
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/3
//
// Параметры:
// Строка - Строка - Исходная строка
// Подстрока - Строка - Искомая строка
//
// Возвращаемое значение:
// ФорматированнаяСтрока, Неопределено - вернет форматированную строку, если хотя бы одно вхождение найдено
Функция СтрокаНайтиИВыделитьОформлением(Знач Строка, Знач Подстрока) Экспорт
СтрокаВрег = ВРег(Строка);
ПодстрокаВрег = ВРег(Подстрока);
ДлинаСтроки = СтрДлина(Строка);
ДлинаПодстроки = СтрДлина(Подстрока);
ЧастиРезультата = Новый Массив; // Массив из Строка, ФорматированнаяСтрока
НачалоПоиска = 1;
Пока НачалоПоиска <= ДлинаСтроки Цикл
ТекущаяКоордината = СтрНайти(СтрокаВрег, ПодстрокаВрег, , НачалоПоиска);
Если ТекущаяКоордината = 0 Тогда
Если ЗначениеЗаполнено(ЧастиРезультата) Тогда
ЧастьСтроки = Сред(Строка, НачалоПоиска);
ЧастиРезультата.Добавить(ЧастьСтроки);
Прервать;
Иначе
Возврат Неопределено;
КонецЕсли;
Иначе
Если НачалоПоиска < ТекущаяКоордината Тогда
ЧастьСтроки = Сред(Строка, НачалоПоиска, ТекущаяКоордината - НачалоПоиска);
ЧастиРезультата.Добавить(ЧастьСтроки);
КонецЕсли;
ЧастьСтроки = Сред(Строка, ТекущаяКоордината, ДлинаПодстроки);
ЧастьСтроки = СтрНайтиИВыделитьОформлением(ЧастьСтроки, Подстрока);
ЧастиРезультата.Добавить(ЧастьСтроки);
НачалоПоиска = ТекущаяКоордината + ДлинаПодстроки;
КонецЕсли;
КонецЦикла;
Возврат Новый ФорматированнаяСтрока(ЧастиРезультата);
КонецФункции
// Метод выделяет подстроку внутри подстроки с использованием метода см. СтрНайтиИВыделитьОформлением
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/3
//
// Параметры:
// Строка - Строка - Исходная строка
// Подстрока - Строка - Искомая строка
//
// Возвращаемое значение:
// ФорматированнаяСтрока, Неопределено - вернет форматированную строку, если хотя бы одно вхождение найдено
Функция СтрокаНайтиИВыделитьОформлением(Знач Строка, Знач Подстрока) Экспорт
СтрокаВрег = ВРег(Строка);
ПодстрокаВрег = ВРег(Подстрока);
ДлинаСтроки = СтрДлина(Строка);
ДлинаПодстроки = СтрДлина(Подстрока);
ЧастиРезультата = Новый Массив; // Массив из Строка, ФорматированнаяСтрока
НачалоПоиска = 1;
Пока НачалоПоиска <= ДлинаСтроки Цикл
ТекущаяКоордината = СтрНайти(СтрокаВрег, ПодстрокаВрег, , НачалоПоиска);
Если ТекущаяКоордината = 0 Тогда
Если ЗначениеЗаполнено(ЧастиРезультата) Тогда
ЧастьСтроки = Сред(Строка, НачалоПоиска);
ЧастиРезультата.Добавить(ЧастьСтроки);
Прервать;
Иначе
Возврат Неопределено;
КонецЕсли;
Иначе
Если НачалоПоиска < ТекущаяКоордината Тогда
ЧастьСтроки = Сред(Строка, НачалоПоиска, ТекущаяКоордината - НачалоПоиска);
ЧастиРезультата.Добавить(ЧастьСтроки);
КонецЕсли;
ЧастьСтроки = Сред(Строка, ТекущаяКоордината, ДлинаПодстроки);
ЧастьСтроки = СтрНайтиИВыделитьОформлением(ЧастьСтроки, Подстрока);
ЧастиРезультата.Добавить(ЧастьСтроки);
НачалоПоиска = ТекущаяКоордината + ДлинаПодстроки;
КонецЕсли;
КонецЦикла;
Возврат Новый ФорматированнаяСтрока(ЧастиРезультата);
КонецФункции
Возвращает форматированную строку, в которой части выделены.
Например, "Выдели `слово` в предложении"
// Возвращает форматированную строку, в которой части выделены.
// Например, "Выдели `слово` в предложении"
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/4
//
// Параметры:
// Строка - Строка
// Выделитель - Строка - Символ, который обрамляет выделяемую строку
//
// Возвращаемое значение:
// Строка
Функция СтрокаВыделеннаяОформлением(Знач Строка, Знач Выделитель = "`") Экспорт
ЭтоВыделить = Ложь;
ЧастиСтроки = СтрРазделить(Строка, Выделитель, Истина);
Для Индекс = 0 По ЧастиСтроки.Количество() - 1 Цикл
Если ЭтоВыделить Тогда
ЧастьСтроки = ЧастиСтроки[Индекс];
ЧастьСтроки = СтрНайтиИВыделитьОформлением(ЧастьСтроки, ЧастьСтроки);
ЧастиСтроки[Индекс] = ЧастьСтроки;
ЭтоВыделить = Ложь;
Иначе
ЭтоВыделить = Истина;
КонецЕсли;
КонецЦикла;
Возврат Новый ФорматированнаяСтрока(ЧастиСтроки);
КонецФункции
// Возвращает форматированную строку, в которой части выделены.
// Например, "Выдели `слово` в предложении"
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/4
//
// Параметры:
// Строка - Строка
// Выделитель - Строка - Символ, который обрамляет выделяемую строку
//
// Возвращаемое значение:
// Строка
Функция СтрокаВыделеннаяОформлением(Знач Строка, Знач Выделитель = "`") Экспорт
ЭтоВыделить = Ложь;
ЧастиСтроки = СтрРазделить(Строка, Выделитель, Истина);
Для Индекс = 0 По ЧастиСтроки.Количество() - 1 Цикл
Если ЭтоВыделить Тогда
ЧастьСтроки = ЧастиСтроки[Индекс];
ЧастьСтроки = СтрНайтиИВыделитьОформлением(ЧастьСтроки, ЧастьСтроки);
ЧастиСтроки[Индекс] = ЧастьСтроки;
ЭтоВыделить = Ложь;
Иначе
ЭтоВыделить = Истина;
КонецЕсли;
КонецЦикла;
Возврат Новый ФорматированнаяСтрока(ЧастиСтроки);
КонецФункции
Заменяет в строке именованные параметры на значения свойств объекта (по формату %ИмяСвойства%)
// Заменяет в строке именованные параметры на значения свойств объекта (по формату %ИмяСвойства%)
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/1
//
// Параметры:
// ШаблонСтроки - Строка - Строка, в которую необходимо всавить свойства объекта
// Объект - Произвольный - Произвольный объект, свойства которого необходимо вставить в строку
//
// Возвращаемое значение:
// Строка
Функция ВставитьПараметрыВСтроку(Знач ШаблонСтроки, Знач Объект) Экспорт
Разделитель = "%";
ЭтоПараметр = Ложь;
ЧастиСтроки = СтрРазделить(ШаблонСтроки, Разделитель, Истина);
Для Индекс = 0 По ЧастиСтроки.Количество() - 1 Цикл
Если ЭтоПараметр Тогда
ИмяСвойства = ЧастиСтроки[Индекс];
Если ИмяСвойства = "" Тогда //Экранирование символа разделителя
ЗначениеСвойства = Разделитель;
Иначе
ЗначениеСвойства = Строка(Объект[ИмяСвойства]);
КонецЕсли;
ЧастиСтроки[Индекс] = ЗначениеСвойства;
ЭтоПараметр = Ложь;
Иначе
ЭтоПараметр = Истина;
КонецЕсли;
КонецЦикла;
Возврат СтрСоединить(ЧастиСтроки, "");
КонецФункции
// Заменяет в строке именованные параметры на значения свойств объекта (по формату %ИмяСвойства%)
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/1
//
// Параметры:
// ШаблонСтроки - Строка - Строка, в которую необходимо всавить свойства объекта
// Объект - Произвольный - Произвольный объект, свойства которого необходимо вставить в строку
//
// Возвращаемое значение:
// Строка
Функция ВставитьПараметрыВСтроку(Знач ШаблонСтроки, Знач Объект) Экспорт
Разделитель = "%";
ЭтоПараметр = Ложь;
ЧастиСтроки = СтрРазделить(ШаблонСтроки, Разделитель, Истина);
Для Индекс = 0 По ЧастиСтроки.Количество() - 1 Цикл
Если ЭтоПараметр Тогда
ИмяСвойства = ЧастиСтроки[Индекс];
Если ИмяСвойства = "" Тогда //Экранирование символа разделителя
ЗначениеСвойства = Разделитель;
Иначе
ЗначениеСвойства = Строка(Объект[ИмяСвойства]);
КонецЕсли;
ЧастиСтроки[Индекс] = ЗначениеСвойства;
ЭтоПараметр = Ложь;
Иначе
ЭтоПараметр = Истина;
КонецЕсли;
КонецЦикла;
Возврат СтрСоединить(ЧастиСтроки, "");
КонецФункции
Текущие данные таблицы (клиент-сервеный метод для упрощения получания текущих данных табицы формы).
// Текущие данные таблицы (клиент-сервеный метод для упрощения получания текущих данных табицы формы).
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/88
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения
// ИмяТаблицы - Строка
//
// Возвращаемое значение:
// ДанныеФормыЭлементКоллекции
Функция ТекущиеДанныеТаблицы(Знач Форма, Знач ИмяТаблицы) Экспорт
Результат = Неопределено; // ДанныеФормыЭлементКоллекции
ЭлементФормы = Форма.Элементы[ИмяТаблицы];
#Если Клиент Тогда
Результат = ЭлементФормы.ТекущиеДанные;
#Иначе
ТекущаяСтрока = ЭлементФормы.ТекущаяСтрока;
Если ТипЗнч(ТекущаяСтрока) = Тип("Число") Тогда
ТаблицаФормы = Форма; // ДанныеФормыДерево
ЧастиПути = СтрРазделить(ЭлементФормы.ПутьКДанным, ".");
Для Каждого ЧастьПути Из ЧастиПути Цикл
ТаблицаФормы = ТаблицаФормы[ЧастьПути];
КонецЦикла;
Если ТипЗнч(ТаблицаФормы) = Тип("ДанныеФормыКоллекция")
ИЛИ ТипЗнч(ТаблицаФормы) = Тип("ДанныеФормыСтруктураСКоллекцией")
ИЛИ ТипЗнч(ТаблицаФормы) = Тип("ДанныеФормыДерево") Тогда
Результат = ТаблицаФормы.НайтиПоИдентификатору(ТекущаяСтрока);
КонецЕсли;
КонецЕсли;
#КонецЕсли
Возврат Результат;
КонецФункции
// Текущие данные таблицы (клиент-сервеный метод для упрощения получания текущих данных табицы формы).
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/88
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения
// ИмяТаблицы - Строка
//
// Возвращаемое значение:
// ДанныеФормыЭлементКоллекции
Функция ТекущиеДанныеТаблицы(Знач Форма, Знач ИмяТаблицы) Экспорт
Результат = Неопределено; // ДанныеФормыЭлементКоллекции
ЭлементФормы = Форма.Элементы[ИмяТаблицы];
#Если Клиент Тогда
Результат = ЭлементФормы.ТекущиеДанные;
#Иначе
ТекущаяСтрока = ЭлементФормы.ТекущаяСтрока;
Если ТипЗнч(ТекущаяСтрока) = Тип("Число") Тогда
ТаблицаФормы = Форма; // ДанныеФормыДерево
ЧастиПути = СтрРазделить(ЭлементФормы.ПутьКДанным, ".");
Для Каждого ЧастьПути Из ЧастиПути Цикл
ТаблицаФормы = ТаблицаФормы[ЧастьПути];
КонецЦикла;
Если ТипЗнч(ТаблицаФормы) = Тип("ДанныеФормыКоллекция")
ИЛИ ТипЗнч(ТаблицаФормы) = Тип("ДанныеФормыСтруктураСКоллекцией")
ИЛИ ТипЗнч(ТаблицаФормы) = Тип("ДанныеФормыДерево") Тогда
Результат = ТаблицаФормы.НайтиПоИдентификатору(ТекущаяСтрока);
КонецЕсли;
КонецЕсли;
#КонецЕсли
Возврат Результат;
КонецФункции
Обновить признак предупреждения при редактировании элемента в зависимости от заполненности указанных данных.
// Обновить признак предупреждения при редактировании элемента в зависимости от заполненности указанных данных.
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/100
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения
// ИменаЭлементов - Строка, Массив из Строка - Имена элементов предупреждения
// ПроверяемыеДанные - Строка, Массив из Строка - Проверяемые данные
Процедура ОбновитьПризнакПредупрежденияПриРедактированииЭлемента(Знач Форма, Знач ИменаЭлементов, Знач ПроверяемыеДанные) Экспорт
Если ТипЗнч(ИменаЭлементов) = Тип("Строка") Тогда
ИменаЭлементов = СтрРазделить(ИменаЭлементов, "," + Символы.ПС, Ложь);
КонецЕсли;
Если ТипЗнч(ПроверяемыеДанные) = Тип("Строка") Тогда
ПроверяемыеДанные = СтрРазделить(ПроверяемыеДанные, "," + Символы.ПС, Ложь);
КонецЕсли;
ПризнакПредупреждения = ОтображениеПредупрежденияПриРедактировании.НеОтображать;
Для Каждого ИмяДанных Из ПроверяемыеДанные Цикл
ДанныеЗаполнены = ЗначениеЗаполнено(Форма[ИмяДанных]);
Если ДанныеЗаполнены Тогда
ПризнакПредупреждения = ОтображениеПредупрежденияПриРедактировании.Отображать;
Прервать;
КонецЕсли;
КонецЦикла;
Для Каждого ИмяЭлемента Из ИменаЭлементов Цикл
Элемент = Форма.Элементы.Найти(ИмяЭлемента);
Если Элемент.ОтображениеПредупрежденияПриРедактировании <> ПризнакПредупреждения Тогда
Элемент.ОтображениеПредупрежденияПриРедактировании = ПризнакПредупреждения;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
// Обновить признак предупреждения при редактировании элемента в зависимости от заполненности указанных данных.
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/100
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения
// ИменаЭлементов - Строка, Массив из Строка - Имена элементов предупреждения
// ПроверяемыеДанные - Строка, Массив из Строка - Проверяемые данные
Процедура ОбновитьПризнакПредупрежденияПриРедактированииЭлемента(Знач Форма, Знач ИменаЭлементов, Знач ПроверяемыеДанные) Экспорт
Если ТипЗнч(ИменаЭлементов) = Тип("Строка") Тогда
ИменаЭлементов = СтрРазделить(ИменаЭлементов, "," + Символы.ПС, Ложь);
КонецЕсли;
Если ТипЗнч(ПроверяемыеДанные) = Тип("Строка") Тогда
ПроверяемыеДанные = СтрРазделить(ПроверяемыеДанные, "," + Символы.ПС, Ложь);
КонецЕсли;
ПризнакПредупреждения = ОтображениеПредупрежденияПриРедактировании.НеОтображать;
Для Каждого ИмяДанных Из ПроверяемыеДанные Цикл
ДанныеЗаполнены = ЗначениеЗаполнено(Форма[ИмяДанных]);
Если ДанныеЗаполнены Тогда
ПризнакПредупреждения = ОтображениеПредупрежденияПриРедактировании.Отображать;
Прервать;
КонецЕсли;
КонецЦикла;
Для Каждого ИмяЭлемента Из ИменаЭлементов Цикл
Элемент = Форма.Элементы.Найти(ИмяЭлемента);
Если Элемент.ОтображениеПредупрежденияПриРедактировании <> ПризнакПредупреждения Тогда
Элемент.ОтображениеПредупрежденияПриРедактировании = ПризнакПредупреждения;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Добавляет элемент условного оформления по параметрам
// Добавляет элемент условного оформления по параметрам
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/83
//
// Параметры:
// УсловноеОформление - УсловноеОформлениеКомпоновкиДанных - Коллекция условного оформления
// ОформляемыеПоля - Строка, Массив из Строка - Имена полей, на которых распространяется условное оформление
// УсловияОтбора - Структура, Массив из Структура - Условия отбора оформления.
// ПараметрыОформления - Структура - Параметры оформления
//
// Возвращаемое значение:
// ЭлементУсловногоОформленияКомпоновкиДанных - добавленный элемент
//
Функция НовыйЭлементУсловногоОформления(Знач УсловноеОформление,
Знач ОформляемыеПоля, Знач УсловияОтбора, Знач ПараметрыОформления) Экспорт
НовыйЭлемент = УсловноеОформление.Элементы.Добавить();
НовыйЭлемент.Использование = Истина;
Для Каждого КлючИЗначение Из ПараметрыОформления Цикл
НовыйЭлемент.Оформление.УстановитьЗначениеПараметра(КлючИЗначение.Ключ, КлючИЗначение.Значение);
КонецЦикла;
Если ТипЗнч(ОформляемыеПоля) = Тип("Строка") Тогда
КоллекцияДобавляемыхПолей = СтрРазделить(ОформляемыеПоля, ",");
Иначе
КоллекцияДобавляемыхПолей = ОформляемыеПоля;
КонецЕсли;
Для Каждого ДобавляемоеПоле Из КоллекцияДобавляемыхПолей Цикл
ОформляемоеПолеКомпоновкиДанных = НовыйЭлемент.Поля.Элементы.Добавить();
ОформляемоеПолеКомпоновкиДанных.Использование = Истина;
ОформляемоеПолеКомпоновкиДанных.Поле = Новый ПолеКомпоновкиДанных(ДобавляемоеПоле);
КонецЦикла;
Если ТипЗнч(УсловияОтбора) = Тип("Массив") Тогда
КоллекцияУсловий = УсловияОтбора;
Иначе
КоллекцияУсловий = Новый Массив(1);
КоллекцияУсловий[0] = УсловияОтбора;
КонецЕсли;
Для Каждого УсловиеОтбора Из КоллекцияУсловий Цикл
ЭлементОтбора = НовыйЭлемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЗаполнитьЗначенияСвойств(ЭлементОтбора, УсловиеОтбора);
КонецЦикла;
Возврат НовыйЭлемент;
КонецФункции
// Добавляет элемент условного оформления по параметрам
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/83
//
// Параметры:
// УсловноеОформление - УсловноеОформлениеКомпоновкиДанных - Коллекция условного оформления
// ОформляемыеПоля - Строка, Массив из Строка - Имена полей, на которых распространяется условное оформление
// УсловияОтбора - Структура, Массив из Структура - Условия отбора оформления.
// ПараметрыОформления - Структура - Параметры оформления
//
// Возвращаемое значение:
// ЭлементУсловногоОформленияКомпоновкиДанных - добавленный элемент
//
Функция НовыйЭлементУсловногоОформления(Знач УсловноеОформление,
Знач ОформляемыеПоля, Знач УсловияОтбора, Знач ПараметрыОформления) Экспорт
НовыйЭлемент = УсловноеОформление.Элементы.Добавить();
НовыйЭлемент.Использование = Истина;
Для Каждого КлючИЗначение Из ПараметрыОформления Цикл
НовыйЭлемент.Оформление.УстановитьЗначениеПараметра(КлючИЗначение.Ключ, КлючИЗначение.Значение);
КонецЦикла;
Если ТипЗнч(ОформляемыеПоля) = Тип("Строка") Тогда
КоллекцияДобавляемыхПолей = СтрРазделить(ОформляемыеПоля, ",");
Иначе
КоллекцияДобавляемыхПолей = ОформляемыеПоля;
КонецЕсли;
Для Каждого ДобавляемоеПоле Из КоллекцияДобавляемыхПолей Цикл
ОформляемоеПолеКомпоновкиДанных = НовыйЭлемент.Поля.Элементы.Добавить();
ОформляемоеПолеКомпоновкиДанных.Использование = Истина;
ОформляемоеПолеКомпоновкиДанных.Поле = Новый ПолеКомпоновкиДанных(ДобавляемоеПоле);
КонецЦикла;
Если ТипЗнч(УсловияОтбора) = Тип("Массив") Тогда
КоллекцияУсловий = УсловияОтбора;
Иначе
КоллекцияУсловий = Новый Массив(1);
КоллекцияУсловий[0] = УсловияОтбора;
КонецЕсли;
Для Каждого УсловиеОтбора Из КоллекцияУсловий Цикл
ЭлементОтбора = НовыйЭлемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЗаполнитьЗначенияСвойств(ЭлементОтбора, УсловиеОтбора);
КонецЦикла;
Возврат НовыйЭлемент;
КонецФункции
Возвращает структуру из параметров формы.
// Возвращает структуру из параметров формы.
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/133
//
// Параметры:
// ПараметрыФормы - ДанныеФормыСтруктура
//
// Возвращаемое значение:
// Структура
Функция СтруктураИзПараметровФормы(Знач ПараметрыФормы) Экспорт
Результат = Новый Структура;
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку();
СериализаторXDTO.ЗаписатьXML(ЗаписьXML, ПараметрыФормы, НазначениеТипаXML.Явное);
СтрокаXML = ЗаписьXML.Закрыть();
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(СтрокаXML);
Пока ЧтениеXML.Прочитать() Цикл
Если ЧтениеXML.Имя = "structure"
И ЧтениеXML.ПолучитьАтрибут("name") = "parameters"
И ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда
Прервать;
ИначеЕсли ЧтениеXML.Имя = "field" Тогда
ТекущийКлюч = ЧтениеXML.ПолучитьАтрибут("nameRu");
ТекущийКлюч = ?(ЗначениеЗаполнено(ТекущийКлюч), ТекущийКлюч, ЧтениеXML.ПолучитьАтрибут("name"));
Если ЗначениеЗаполнено(ТекущийКлюч) Тогда
Результат.Вставить(ТекущийКлюч);
КонецЕсли;
КонецЕсли;
КонецЦикла;
ЧтениеXML.Закрыть();
ЗаполнитьЗначенияСвойств(Результат, ПараметрыФормы);
Возврат Результат;
КонецФункции
// Возвращает структуру из параметров формы.
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/133
//
// Параметры:
// ПараметрыФормы - ДанныеФормыСтруктура
//
// Возвращаемое значение:
// Структура
Функция СтруктураИзПараметровФормы(Знач ПараметрыФормы) Экспорт
Результат = Новый Структура;
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку();
СериализаторXDTO.ЗаписатьXML(ЗаписьXML, ПараметрыФормы, НазначениеТипаXML.Явное);
СтрокаXML = ЗаписьXML.Закрыть();
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(СтрокаXML);
Пока ЧтениеXML.Прочитать() Цикл
Если ЧтениеXML.Имя = "structure"
И ЧтениеXML.ПолучитьАтрибут("name") = "parameters"
И ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда
Прервать;
ИначеЕсли ЧтениеXML.Имя = "field" Тогда
ТекущийКлюч = ЧтениеXML.ПолучитьАтрибут("nameRu");
ТекущийКлюч = ?(ЗначениеЗаполнено(ТекущийКлюч), ТекущийКлюч, ЧтениеXML.ПолучитьАтрибут("name"));
Если ЗначениеЗаполнено(ТекущийКлюч) Тогда
Результат.Вставить(ТекущийКлюч);
КонецЕсли;
КонецЕсли;
КонецЦикла;
ЧтениеXML.Закрыть();
ЗаполнитьЗначенияСвойств(Результат, ПараметрыФормы);
Возврат Результат;
КонецФункции
Функция определяет существование метода объекта
// Функция определяет существование метода объекта
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/56
//
// Параметры:
// Объект - Произвольный
// ИмяМетода - Строка
//
// Возвращаемое значение:
// Булево - Существует ли метод объекта
Функция МетодСуществует(Знач Объект, Знач ИмяМетода) Экспорт
ШаблонКода = "Объект.%1(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)";
Алгоритм = СтрШаблон(ШаблонКода, ИмяМетода);
Попытка
//@skip-check server-execution-safe-mode, module-unused-local-variable
НеобработанныйРезультат = Вычислить(Алгоритм);
Исключение
ИнформацияОбОшибке = ИнформацияОбОшибке();
Если СтрНачинаетсяС(ИнформацияОбОшибке.Описание, "Значение не является значением объектного типа") Тогда
Возврат Ложь;
ИначеЕсли ИнформацияОбОшибке.Описание = "Слишком много фактических параметров" Тогда
Возврат Истина;
ИначеЕсли СтрНачинаетсяС(ИнформацияОбОшибке.Описание, "Обращение к процедуре объекта как к функции") Тогда
Возврат Истина;
ИначеЕсли СтрНачинаетсяС(ИнформацияОбОшибке.Описание, "Метод объекта не обнаружен") Тогда
Возврат Ложь;
Иначе
НеобработанныйРезультат = ИнформацияОбОшибке.Описание;
КонецЕсли;
КонецПопытки;
//На всякий случай
ТекстИсключения = "Проверяемый метод ""%1"" объекта ""%2"" типа ""%3"" содержит неопределенное число параметров и не может быть проверен!
|Результат выполнения: %4";
ТекстИсключения = СтрШаблон(ТекстИсключения, ИмяМетода, Объект, ТипЗнч(Объект), НеобработанныйРезультат);
ВызватьИсключение ТекстИсключения;
КонецФункции
// Функция определяет существование метода объекта
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/56
//
// Параметры:
// Объект - Произвольный
// ИмяМетода - Строка
//
// Возвращаемое значение:
// Булево - Существует ли метод объекта
Функция МетодСуществует(Знач Объект, Знач ИмяМетода) Экспорт
ШаблонКода = "Объект.%1(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)";
Алгоритм = СтрШаблон(ШаблонКода, ИмяМетода);
Попытка
//@skip-check server-execution-safe-mode, module-unused-local-variable
НеобработанныйРезультат = Вычислить(Алгоритм);
Исключение
ИнформацияОбОшибке = ИнформацияОбОшибке();
Если СтрНачинаетсяС(ИнформацияОбОшибке.Описание, "Значение не является значением объектного типа") Тогда
Возврат Ложь;
ИначеЕсли ИнформацияОбОшибке.Описание = "Слишком много фактических параметров" Тогда
Возврат Истина;
ИначеЕсли СтрНачинаетсяС(ИнформацияОбОшибке.Описание, "Обращение к процедуре объекта как к функции") Тогда
Возврат Истина;
ИначеЕсли СтрНачинаетсяС(ИнформацияОбОшибке.Описание, "Метод объекта не обнаружен") Тогда
Возврат Ложь;
Иначе
НеобработанныйРезультат = ИнформацияОбОшибке.Описание;
КонецЕсли;
КонецПопытки;
//На всякий случай
ТекстИсключения = "Проверяемый метод ""%1"" объекта ""%2"" типа ""%3"" содержит неопределенное число параметров и не может быть проверен!
|Результат выполнения: %4";
ТекстИсключения = СтрШаблон(ТекстИсключения, ИмяМетода, Объект, ТипЗнч(Объект), НеобработанныйРезультат);
ВызватьИсключение ТекстИсключения;
КонецФункции
Заменяет в объекте все ссылки на элементы на их навигационные ссылки
// Заменяет в объекте все ссылки на элементы на их навигационные ссылки
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/127
//
// Параметры:
// Объект - Массив из Произвольный
// - Структура
// - Соответствие из КлючИЗначение
// - Произвольный
//
// Пример:
//
// ПараметрыВыполнения = ПараметрыВыполненияСуперМетода();
// //... Выполняем метод ...
// ЗаменитьСсылкиНаНавигационные(ПараметрыВыполнения);
// ЧитабельныйТекст = ОбщегоНазначения.ЗначениеВСтрокуXML(ПараметрыВыполнения);
// ЗаписьЖурналаРегистрации("Лог", УровеньЖурналаРегистрации.Информация,,,ЧитабельныйТекст);
//
Процедура ЗаменитьСсылкиНаНавигационные(Объект) Экспорт
Если ТипЗнч(Объект) = Тип("Массив") Тогда
Для Индекс = 0 По Объект.Количество() - 1 Цикл
Значение = Объект[Индекс];
ЗаменитьСсылкиНаНавигационные(Значение);
Объект[Индекс] = Значение;
КонецЦикла;
ИначеЕсли ТипЗнч(Объект) = Тип("Структура")
ИЛИ ТипЗнч(Объект) = Тип("Соответствие") Тогда
Для Каждого КлючИЗначение Из Объект Цикл
Значение = КлючИЗначение.Значение;
ЗаменитьСсылкиНаНавигационные(Значение);
Объект[КлючИЗначение.Ключ] = Значение;
КонецЦикла;
Иначе
ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипЗнч(Объект));
Если ОбъектМетаданных <> Неопределено Тогда
Объект = ПолучитьНавигационнуюСсылку(Объект);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
// Заменяет в объекте все ссылки на элементы на их навигационные ссылки
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/127
//
// Параметры:
// Объект - Массив из Произвольный
// - Структура
// - Соответствие из КлючИЗначение
// - Произвольный
//
// Пример:
//
// ПараметрыВыполнения = ПараметрыВыполненияСуперМетода();
// //... Выполняем метод ...
// ЗаменитьСсылкиНаНавигационные(ПараметрыВыполнения);
// ЧитабельныйТекст = ОбщегоНазначения.ЗначениеВСтрокуXML(ПараметрыВыполнения);
// ЗаписьЖурналаРегистрации("Лог", УровеньЖурналаРегистрации.Информация,,,ЧитабельныйТекст);
//
Процедура ЗаменитьСсылкиНаНавигационные(Объект) Экспорт
Если ТипЗнч(Объект) = Тип("Массив") Тогда
Для Индекс = 0 По Объект.Количество() - 1 Цикл
Значение = Объект[Индекс];
ЗаменитьСсылкиНаНавигационные(Значение);
Объект[Индекс] = Значение;
КонецЦикла;
ИначеЕсли ТипЗнч(Объект) = Тип("Структура")
ИЛИ ТипЗнч(Объект) = Тип("Соответствие") Тогда
Для Каждого КлючИЗначение Из Объект Цикл
Значение = КлючИЗначение.Значение;
ЗаменитьСсылкиНаНавигационные(Значение);
Объект[КлючИЗначение.Ключ] = Значение;
КонецЦикла;
Иначе
ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипЗнч(Объект));
Если ОбъектМетаданных <> Неопределено Тогда
Объект = ПолучитьНавигационнуюСсылку(Объект);
КонецЕсли;
КонецЕсли;
КонецПроцедуры