Все публикации

БСП
Разработки

Запуск внешнего отчета в сформированном виде

Отчет находится по наименованию, указывается нужный вариант отчета.
RomanVG 95 5 2
&НаКлиенте
Процедура ИнформацияПоЗданиям(Команда)

	ВнешнийОтчетОбработкаДляОткрытияСсылка = ПолучитьСсылкуНаВнешнийОтчетОбработкуПоИмениНаСервере("Информация по зданиям");
	Если Не ЗначениеЗаполнено(ВнешнийОтчетОбработкаДляОткрытияСсылка) Тогда
		Сообщить("Отчет не найден");
		Возврат;
	КонецЕсли;
    
    ИмяОбработкиСлужебное = ДополнительныеОтчетыИОбработкиВызовСервера.ПодключитьВнешнююОбработку(ВнешнийОтчетОбработкаДляОткрытияСсылка);
    
    ПараметрыФормы = Новый Структура;
    
    ПараметрыФормы.Вставить("КлючВарианта", "Основной");
    ПараметрыФормы.Вставить("СформироватьПриОткрытии", Истина);
    
    ОткрытьФорму("ВнешнийОтчет." + ИмяОбработкиСлужебное + ".Форма", ПараметрыФормы, ЭтаФорма);

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

&НаСервереБезКонтекста
Функция ПолучитьСсылкуНаВнешнийОтчетОбработкуПоИмениНаСервере(ИмяОтчетаОбработки)
    Возврат Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию(ИмяОтчетаОбработки).Ссылка;
КонецФункции

Добавление команды в общую форму отчета на БСП

В общем модуле ВариантыОтчетовПереопределяемый, в процедуре НастроитьВариантыОтчетов добавляем Процедура НастроитьВариантыОтчетов(Настройки) Экспорт ВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.тдс_ОтчетПоДебиторскойЗадолжен...
RomanVG 95 5 2

1С Менеджер конфигураций Наш выбор

1С Менеджер конфигураций — альтернативный стартер информационных баз 1С:Предприятие.
1 200 руб.

Преобразование отчета на СКД в таблицу значений на табличном документе

Иногда с отчетами удобнее (или быстрее) работать в MS Excel, например, когда необходимо связать несколько разных отчетов. Если отчеты выводятся с группировкой, то связать их бывает проблематично. Если у отчета нет своей формы, то можно применить такое унив...
RomanVG 95 5 2

ЗначениеПеречисленияПоСинониму

Возвращает значение перечисления по его синониму // Описание функции // // Параметры: // СинонимПеречисления - Тип.Строка - Синоним перечисления // // ИмяПеречисления - Тип.Строка - Имя метаданных перечисления в базе // ...
Razlomalo 20 1 1

Скрипт автодополнения в стиле Vim (VimComplete)

vigor 3
Бесплатно

Скрипт по командам для работы с отладкой (debugHelpers)

vigor 3
Бесплатно

Замер времени выполнения кода с выводом результата замера в формате ЧЧ:мм:сс

Razlagutt 19 1 2
ДатаНачала = ТекущаяУниверсальнаяДатаВМиллисекундах();
// Какой-то код
Дельта = (ТекущаяУниверсальнаяДатаВМиллисекундах() - ДатаНачала)/1000;
ВремяВыполнения = Формат(Дата(1,1,1) + Дельта, "ДЛФ=T");

Таблица из набора данных СКД

Возвращает таблицу значений с колонками набора данных СКД
SeiOkami 463 5 11 9
// Возвращает таблицу значений с колонками набора данных СКД
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/132
// 
// Параметры:
//  НаборДанных - НаборДанныхОбъектСхемыКомпоновкиДанных
// 
// Возвращаемое значение:
//  ТаблицаЗначений
//  
// Пример:
// 	Таблица = ТаблицаИзНабораДанных(СКД.НаборыДанных.Получить(0));
// 	//Таблица содержит пустую ТЗ со всеми колонками для набора. 
// 	//Теперь её можно заполнять данными и далее "скармливать" при формировании СКД
//  
Функция ТаблицаИзНабораДанных(Знач НаборДанных) Экспорт
	
	Результат = Новый ТаблицаЗначений();
	
	Для Каждого Поле Из НаборДанных.Поля Цикл
		Результат.Колонки.Добавить(Поле.Поле, Поле.ТипЗначения, Поле.Заголовок);
	КонецЦикла;
	
	Возврат Результат;
	
КонецФункции

СтрШаблон (с проверкой существования параметров)

Перед вставкой параметров проверяет существование параметра в шаблоне
SeiOkami 463 5 11 9
// @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 Тогда
		Параметр = Неопределено;
	КонецЕсли;
	
КонецПроцедуры

Строка из символа

Возвращает строку нужной длины из указанного символа
SeiOkami 463 5 11 9
// Возвращает строку нужной длины из указанного символа
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/120
// 
// Параметры:
//  Длина - Число
//  Символ - Строка
// 
// Возвращаемое значение:
//  Строка
Функция СтрокаСимволов(Знач Длина, Знач Символ = " ") Экспорт
	
	Квалификатор = Новый КвалификаторыСтроки(Длина, ДопустимаяДлина.Фиксированная);
	ОписаниеТипов = Новый ОписаниеТипов("Строка", Квалификатор);
	Результат = ОписаниеТипов.ПривестиЗначение(""); // Строка
	Если Символ <> " " Тогда
		Результат = СтрЗаменить(Результат, " ", Символ);
	КонецЕсли;
	
	Возврат Результат;
	
КонецФункции

Проверить корректность шаблона для СтрШаблон()

Проверяет шаблон строки на корректность для передачи в СтрШаблон()
SeiOkami 463 5 11 9
// Возвращает результат проверки корректности шаблона строки (метода СтрШаблон)
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/12
//  
// Параметры:
//  ШаблонСтроки - Строка
// 
// Возвращаемое значение:
//  Булево - Корректен ли шаблон строки
Функция ШаблонСтрокиКорректен(Знач ШаблонСтроки) Экспорт
	
	Попытка
		ПроверитьШаблонСтроки(ШаблонСтроки);
		Возврат Истина;
	Исключение
		Возврат Ложь;
	КонецПопытки;
	
КонецФункции

// Проверяет корректность шаблона строки (метода СтрШаблон)
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/12
// 
// Параметры:
//  ШаблонСтроки - Строка
Процедура ПроверитьШаблонСтроки(Знач ШаблонСтроки) Экспорт
	
	СтрШаблон(ШаблонСтроки, Неопределено, Неопределено, 
    	Неопределено, Неопределено, Неопределено, Неопределено, 
    	Неопределено, Неопределено, Неопределено, Неопределено);
	
КонецПроцедуры

Найти подстроку и выделить оформлением

Метод выделяет подстроку внутри подстроки с использованием метода см. СтрНайтиИВыделитьОформлением Платформенный метод СтрНайтиИВыделитьОформлением() находит только с начала слова Например, если искать "200", то в код элемента не будет выделен: "CNT-000**200**"
SeiOkami 463 5 11 9
// Метод выделяет подстроку внутри подстроки с использованием метода см. СтрНайтиИВыделитьОформлением
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/3
//  
// Параметры:
//  Строка - Строка - Исходная строка
//  Подстрока - Строка - Искомая строка
// 
// Возвращаемое значение:
//  ФорматированнаяСтрока, Неопределено - вернет форматированную строку, если хотя бы одно вхождение найдено
Функция СтрокаНайтиИВыделитьОформлением(Знач Строка, Знач Подстрока) Экспорт

	СтрокаВрег = ВРег(Строка);
	ПодстрокаВрег = ВРег(Подстрока);

	ДлинаСтроки = СтрДлина(Строка);
	ДлинаПодстроки = СтрДлина(Подстрока);

	ЧастиРезультата = Новый Массив; // Массив из Строка, ФорматированнаяСтрока

	НачалоПоиска = 1;
	Пока НачалоПоиска <= ДлинаСтроки Цикл

		ТекущаяКоордината = СтрНайти(СтрокаВрег, ПодстрокаВрег, , НачалоПоиска);
		Если ТекущаяКоордината = 0 Тогда

			Если ЗначениеЗаполнено(ЧастиРезультата) Тогда
				ЧастьСтроки = Сред(Строка, НачалоПоиска);
				ЧастиРезультата.Добавить(ЧастьСтроки);
				Прервать;
			Иначе
				Возврат Неопределено;
			КонецЕсли;

		Иначе

			Если НачалоПоиска < ТекущаяКоордината Тогда
				ЧастьСтроки = Сред(Строка, НачалоПоиска, ТекущаяКоордината - НачалоПоиска);
				ЧастиРезультата.Добавить(ЧастьСтроки);
			КонецЕсли;

			ЧастьСтроки = Сред(Строка, ТекущаяКоордината, ДлинаПодстроки);
			ЧастьСтроки = СтрНайтиИВыделитьОформлением(ЧастьСтроки, Подстрока);
			ЧастиРезультата.Добавить(ЧастьСтроки);

			НачалоПоиска = ТекущаяКоордината + ДлинаПодстроки;

		КонецЕсли;
		
	КонецЦикла;

	Возврат Новый ФорматированнаяСтрока(ЧастиРезультата);

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

Строка выделенная оформлением

Возвращает форматированную строку, в которой части выделены. Например, "Выдели `слово` в предложении"
SeiOkami 463 5 11 9
// Возвращает форматированную строку, в которой части выделены.
// Например, "Выдели `слово` в предложении"
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/4
//  
// Параметры:
//  Строка - Строка
//  Выделитель - Строка - Символ, который обрамляет выделяемую строку
// 
// Возвращаемое значение:
//  Строка
Функция СтрокаВыделеннаяОформлением(Знач Строка, Знач Выделитель = "`") Экспорт
	
	ЭтоВыделить = Ложь;
	ЧастиСтроки = СтрРазделить(Строка, Выделитель, Истина);
	Для Индекс = 0 По ЧастиСтроки.Количество() - 1 Цикл
		
		Если ЭтоВыделить Тогда
			ЧастьСтроки = ЧастиСтроки[Индекс];
			ЧастьСтроки = СтрНайтиИВыделитьОформлением(ЧастьСтроки, ЧастьСтроки);
			ЧастиСтроки[Индекс] = ЧастьСтроки;
			ЭтоВыделить = Ложь;
		Иначе
			ЭтоВыделить = Истина;
		КонецЕсли;
		
	КонецЦикла;
	
	Возврат Новый ФорматированнаяСтрока(ЧастиСтроки);
	
КонецФункции

Вставить параметры в строку

Заменяет в строке именованные параметры на значения свойств объекта (по формату %ИмяСвойства%)
SeiOkami 463 5 11 9
// Заменяет в строке именованные параметры на значения свойств объекта (по формату %ИмяСвойства%)
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/1
//  
// Параметры:
//  ШаблонСтроки - Строка - Строка, в которую необходимо всавить свойства объекта
//  Объект - Произвольный - Произвольный объект, свойства которого необходимо вставить в строку
// 
// Возвращаемое значение:
//  Строка
Функция ВставитьПараметрыВСтроку(Знач ШаблонСтроки, Знач Объект) Экспорт
	
	Разделитель = "%";
	ЭтоПараметр = Ложь;
	ЧастиСтроки = СтрРазделить(ШаблонСтроки, Разделитель, Истина);
	Для Индекс = 0 По ЧастиСтроки.Количество() - 1 Цикл
		
		Если ЭтоПараметр Тогда
			ИмяСвойства = ЧастиСтроки[Индекс];
			Если ИмяСвойства = "" Тогда //Экранирование символа разделителя
				ЗначениеСвойства = Разделитель;
			Иначе
				ЗначениеСвойства = Строка(Объект[ИмяСвойства]);
			КонецЕсли;
			ЧастиСтроки[Индекс] = ЗначениеСвойства;
			ЭтоПараметр = Ложь;
		Иначе
			ЭтоПараметр = Истина;
		КонецЕсли;
		
	КонецЦикла;
	
	Возврат СтрСоединить(ЧастиСтроки, "");
	
КонецФункции

Текущие данные таблицы формы

Текущие данные таблицы (клиент-сервеный метод для упрощения получания текущих данных табицы формы).
SeiOkami 463 5 11 9
// Текущие данные таблицы (клиент-сервеный метод для упрощения получания текущих данных табицы формы).
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/88
// 
// Параметры:
//  Форма - ФормаКлиентскогоПриложения
//  ИмяТаблицы - Строка
// 
// Возвращаемое значение:
//  ДанныеФормыЭлементКоллекции
Функция ТекущиеДанныеТаблицы(Знач Форма, Знач ИмяТаблицы) Экспорт
	
	Результат = Неопределено; // ДанныеФормыЭлементКоллекции
	
	ЭлементФормы = Форма.Элементы[ИмяТаблицы];
	
	#Если Клиент Тогда
		
		Результат = ЭлементФормы.ТекущиеДанные;
		
	#Иначе
		
		ТекущаяСтрока = ЭлементФормы.ТекущаяСтрока;
		Если ТипЗнч(ТекущаяСтрока) = Тип("Число") Тогда
			
			ТаблицаФормы = Форма; // ДанныеФормыДерево
			ЧастиПути = СтрРазделить(ЭлементФормы.ПутьКДанным, ".");
			Для Каждого ЧастьПути Из ЧастиПути Цикл
				ТаблицаФормы = ТаблицаФормы[ЧастьПути];
			КонецЦикла;
			
			Если ТипЗнч(ТаблицаФормы) = Тип("ДанныеФормыКоллекция")
				ИЛИ ТипЗнч(ТаблицаФормы) = Тип("ДанныеФормыСтруктураСКоллекцией")
				ИЛИ ТипЗнч(ТаблицаФормы) = Тип("ДанныеФормыДерево") Тогда
				Результат = ТаблицаФормы.НайтиПоИдентификатору(ТекущаяСтрока);
			КонецЕсли;
			
		КонецЕсли;
			
	#КонецЕсли
	
	Возврат Результат;
	
КонецФункции

Обновить признак предупреждения при редактировании элемента

Обновить признак предупреждения при редактировании элемента в зависимости от заполненности указанных данных.
SeiOkami 463 5 11 9
// Обновить признак предупреждения при редактировании элемента в зависимости от заполненности указанных данных.
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/100
// 
// Параметры:
//  Форма - ФормаКлиентскогоПриложения
//  ИменаЭлементов - Строка, Массив из Строка - Имена элементов предупреждения
//  ПроверяемыеДанные - Строка, Массив из Строка - Проверяемые данные
Процедура ОбновитьПризнакПредупрежденияПриРедактированииЭлемента(Знач Форма, Знач ИменаЭлементов, Знач ПроверяемыеДанные) Экспорт
	
	Если ТипЗнч(ИменаЭлементов) = Тип("Строка") Тогда
		ИменаЭлементов = СтрРазделить(ИменаЭлементов, "," + Символы.ПС, Ложь);
	КонецЕсли;
	
	Если ТипЗнч(ПроверяемыеДанные) = Тип("Строка") Тогда
		ПроверяемыеДанные = СтрРазделить(ПроверяемыеДанные, "," + Символы.ПС, Ложь);
	КонецЕсли;
	
	ПризнакПредупреждения = ОтображениеПредупрежденияПриРедактировании.НеОтображать;
	Для Каждого ИмяДанных Из ПроверяемыеДанные Цикл
		ДанныеЗаполнены = ЗначениеЗаполнено(Форма[ИмяДанных]);
		Если ДанныеЗаполнены Тогда
			ПризнакПредупреждения = ОтображениеПредупрежденияПриРедактировании.Отображать;
			Прервать;
		КонецЕсли;
	КонецЦикла;
	
	Для Каждого ИмяЭлемента Из ИменаЭлементов Цикл
		
		Элемент = Форма.Элементы.Найти(ИмяЭлемента);
		Если Элемент.ОтображениеПредупрежденияПриРедактировании <> ПризнакПредупреждения Тогда
			Элемент.ОтображениеПредупрежденияПриРедактировании = ПризнакПредупреждения;
		КонецЕсли;
		
	КонецЦикла;
	
КонецПроцедуры

Новый элемент условного оформления

Добавляет элемент условного оформления по параметрам
SeiOkami 463 5 11 9
// Добавляет элемент условного оформления по параметрам
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/83
//
// Параметры:
//  УсловноеОформление	 - УсловноеОформлениеКомпоновкиДанных - Коллекция условного оформления
//  ОформляемыеПоля		 - Строка, Массив из Строка - Имена полей, на которых распространяется условное оформление
//  УсловияОтбора		 - Структура, Массив из Структура - Условия отбора оформления. 
//  ПараметрыОформления	 - Структура - Параметры оформления
// 
// Возвращаемое значение:
//  ЭлементУсловногоОформленияКомпоновкиДанных  - добавленный элемент
//
Функция НовыйЭлементУсловногоОформления(Знач УсловноеОформление, 
	Знач ОформляемыеПоля, Знач УсловияОтбора, Знач ПараметрыОформления) Экспорт
	
	НовыйЭлемент = УсловноеОформление.Элементы.Добавить();
	НовыйЭлемент.Использование = Истина;
	
	Для Каждого КлючИЗначение Из ПараметрыОформления Цикл
		НовыйЭлемент.Оформление.УстановитьЗначениеПараметра(КлючИЗначение.Ключ, КлючИЗначение.Значение);
	КонецЦикла;
	
	Если ТипЗнч(ОформляемыеПоля) = Тип("Строка") Тогда
		КоллекцияДобавляемыхПолей = СтрРазделить(ОформляемыеПоля, ",");
	Иначе
		КоллекцияДобавляемыхПолей = ОформляемыеПоля;
	КонецЕсли;
	
	Для Каждого ДобавляемоеПоле Из КоллекцияДобавляемыхПолей Цикл
		ОформляемоеПолеКомпоновкиДанных = НовыйЭлемент.Поля.Элементы.Добавить();
		ОформляемоеПолеКомпоновкиДанных.Использование = Истина;
		ОформляемоеПолеКомпоновкиДанных.Поле = Новый ПолеКомпоновкиДанных(ДобавляемоеПоле);
	КонецЦикла;
	
	Если ТипЗнч(УсловияОтбора) = Тип("Массив") Тогда
		КоллекцияУсловий = УсловияОтбора;
	Иначе
		КоллекцияУсловий = Новый Массив(1);
		КоллекцияУсловий[0] = УсловияОтбора;
	КонецЕсли;
	
	Для Каждого УсловиеОтбора Из КоллекцияУсловий Цикл
		ЭлементОтбора = НовыйЭлемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
		ЗаполнитьЗначенияСвойств(ЭлементОтбора, УсловиеОтбора);
	КонецЦикла;
	
	Возврат НовыйЭлемент;
	
КонецФункции

Структура из параметров формы

Возвращает структуру из параметров формы.
SeiOkami 463 5 11 9
// Возвращает структуру из параметров формы.
// Источник: 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.Закрыть();
	
	ЗаполнитьЗначенияСвойств(Результат, ПараметрыФормы);
	
	Возврат Результат;
	
КонецФункции

Метод существует

Функция определяет существование метода объекта
SeiOkami 463 5 11 9
// Функция определяет существование метода объекта
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/56
// 
// Параметры:
//  Объект - Произвольный
//  ИмяМетода - Строка
// 
// Возвращаемое значение:
//  Булево - Существует ли метод объекта
Функция МетодСуществует(Знач Объект, Знач ИмяМетода) Экспорт
	
	ШаблонКода = "Объект.%1(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)";
	Алгоритм = СтрШаблон(ШаблонКода, ИмяМетода);
	
	Попытка
		//@skip-check server-execution-safe-mode, module-unused-local-variable
		НеобработанныйРезультат = Вычислить(Алгоритм);
	Исключение
		ИнформацияОбОшибке = ИнформацияОбОшибке();
		Если СтрНачинаетсяС(ИнформацияОбОшибке.Описание, "Значение не является значением объектного типа") Тогда
			Возврат Ложь;
		ИначеЕсли ИнформацияОбОшибке.Описание = "Слишком много фактических параметров" Тогда
			Возврат Истина;
		ИначеЕсли СтрНачинаетсяС(ИнформацияОбОшибке.Описание, "Обращение к процедуре объекта как к функции") Тогда
			Возврат Истина;
		ИначеЕсли СтрНачинаетсяС(ИнформацияОбОшибке.Описание, "Метод объекта не обнаружен") Тогда
			Возврат Ложь;
		Иначе
			НеобработанныйРезультат = ИнформацияОбОшибке.Описание;
		КонецЕсли;
	КонецПопытки;
	
	//На всякий случай
	ТекстИсключения = "Проверяемый метод ""%1"" объекта ""%2"" типа ""%3"" содержит неопределенное число параметров и не может быть проверен!
		|Результат выполнения: %4";
	ТекстИсключения = СтрШаблон(ТекстИсключения, ИмяМетода, Объект, ТипЗнч(Объект), НеобработанныйРезультат);
	ВызватьИсключение ТекстИсключения;
	
КонецФункции

Заменить ссылки на навигационные

Заменяет в объекте все ссылки на элементы на их навигационные ссылки
SeiOkami 463 5 11 9
// Заменяет в объекте все ссылки на элементы на их навигационные ссылки
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/127
// 
// Параметры:
//  Объект - Массив из Произвольный
//         - Структура
//         - Соответствие из КлючИЗначение
//         - Произвольный
//
// Пример:
//  
//  ПараметрыВыполнения = ПараметрыВыполненияСуперМетода();
//  //... Выполняем метод ...
//  ЗаменитьСсылкиНаНавигационные(ПараметрыВыполнения);
//  ЧитабельныйТекст = ОбщегоНазначения.ЗначениеВСтрокуXML(ПараметрыВыполнения);
//  ЗаписьЖурналаРегистрации("Лог", УровеньЖурналаРегистрации.Информация,,,ЧитабельныйТекст);
//
Процедура ЗаменитьСсылкиНаНавигационные(Объект) Экспорт
	
	Если ТипЗнч(Объект) = Тип("Массив") Тогда
		
		Для Индекс = 0 По Объект.Количество() - 1 Цикл
			Значение = Объект[Индекс];
			ЗаменитьСсылкиНаНавигационные(Значение);
			Объект[Индекс] = Значение;
		КонецЦикла;
		
	ИначеЕсли ТипЗнч(Объект) = Тип("Структура")
		ИЛИ ТипЗнч(Объект) = Тип("Соответствие") Тогда
		
		Для Каждого КлючИЗначение Из Объект Цикл
			Значение = КлючИЗначение.Значение;
			ЗаменитьСсылкиНаНавигационные(Значение);
			Объект[КлючИЗначение.Ключ] = Значение;
		КонецЦикла;
		
	Иначе
		
		ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипЗнч(Объект));
		Если ОбъектМетаданных <> Неопределено Тогда
			Объект = ПолучитьНавигационнуюСсылку(Объект);
		КонецЕсли;
		
	КонецЕсли;
	
КонецПроцедуры