TSDZakazScladVasilek/CommonModules/ОбщегоНазначенияБПО/Ext/Module.bsl

1565 lines
85 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#Область ПрограммныйИнтерфейс
// Получает текущую дату сервера, приведенную к часовому поясу сеанса.
// Предназначена для использования вместо функции ТекущаяДатаСеанса.
//
// Возвращаемое значение:
// Дата - текущая дата сеанса.
//
Функция ДатаСеанса() Экспорт
#Если МобильноеПриложениеСервер Тогда
// BSLLS:DeprecatedCurrentDate-off
//@skip-check use-non-recommended-method
Возврат ТекущаяДата(); // АПК: 143 особенность мобильного приложения
// BSLLS:DeprecatedCurrentDate-on
#Иначе
Возврат ТекущаяДатаСеанса();
#КонецЕсли
КонецФункции
#Область РаботаСXML
// Функция читает корневой элемент XML.
//
// Параметры:
// СтрокаXML - Строка - XML строка.
//
// Возвращаемое значение:
// Структура
//
Функция ПрочитатьКорневойЭлементXML(СтрокаXML) Экспорт
Результат = Новый Структура();
Если Не ПустаяСтрока(СтрокаXML) Тогда
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(СтрокаXML);
ЧтениеXML.ПерейтиКСодержимому();
Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
Если ЧтениеXML.КоличествоАтрибутов() > 0 Тогда
Пока ЧтениеXML.ПрочитатьАтрибут() Цикл
Результат.Вставить(ЧтениеXML.Имя, ЧтениеXML.Значение);
КонецЦикла
КонецЕсли;
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
#КонецОбласти
#КонецОбласти
#Область СлужебныйПрограммныйИнтерфейс
// Функция возвращает Истина, если внедрена Библиотека стандартных подсистем
//
// Возвращаемое значение:
// Булево.
Функция ИспользуетсяБСП() Экспорт
// Вызов БСП
СтандартныеПодсистемы = Метаданные.Подсистемы.Найти("СтандартныеПодсистемы");
Если СтандартныеПодсистемы = Неопределено Тогда
Возврат Ложь;
КонецЕсли;
Возврат СтандартныеПодсистемы.Подсистемы.Найти("БазоваяФункциональность") <> Неопределено;
// Конец Вызов БСП
КонецФункции
// Возвращает установленную версию БСП, если БСП не установлена тогда
// возвращает "0.0.0.0"
//
// Возвращаемое значение:
// Строка
Функция ВерсияБСП() Экспорт
Версия = "0.0.0.0";
// Вызов БСП
Если ИспользуетсяБСП() Тогда
МодульСтандартныеПодсистемыСервер = ОбщийМодуль("СтандартныеПодсистемыСервер");
Если МодульСтандартныеПодсистемыСервер <> Неопределено Тогда
Версия = МодульСтандартныеПодсистемыСервер.ВерсияБиблиотеки();
КонецЕсли;
КонецЕсли;
// Конец Вызов БСП
Возврат Версия;
КонецФункции
#Область ОповещениеПользователя
// Формирует и выводит сообщение, которое может быть связано с элементом управления формы.
//
// Параметры:
// ТекстСообщенияПользователю - Строка - текст сообщения.
// КлючДанных - ЛюбаяСсылка - объект или ключ записи информационной базы, к которому это сообщение относится.
// Поле - Строка - наименование реквизита формы.
// ПутьКДанным - Строка - путь к данным (путь к реквизиту формы).
// Отказ - Булево - выходной параметр, всегда устанавливается в значение Истина.
//@skip-check method-too-many-params
Процедура СообщитьПользователю(Знач ТекстСообщенияПользователю, Знач КлючДанных = Неопределено, Знач Поле = "",
Знач ПутьКДанным = "", Отказ = Ложь) Экспорт
Если ИспользуетсяБСП() Тогда
// Вызов БСП
ОбщегоНазначенияМодуль = ОбщийМодуль("ОбщегоНазначения");
ОбщегоНазначенияМодуль.СообщитьПользователю(ТекстСообщенияПользователю, КлючДанных, Поле, ПутьКДанным, Отказ);
// Конец Вызов БСП
Иначе
СообщитьПользователюБПО(ТекстСообщенияПользователю, КлючДанных, Поле, ПутьКДанным, Отказ);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
// Формирует запись ошибки в журнал регистрации.
//
// Параметры:
// ИмяСобытия - Строка
// Комментарий - Строка, Неопределено -
// Метаданные - ОбъектМетаданных -
//
Процедура ЗаписатьОшибкуВЖурналРегистрации(ИмяСобытия, Комментарий = Неопределено, ПредставлениеУровня = "Ошибка", Метаданные = Неопределено) Экспорт
#Если МобильноеПриложениеСервер Тогда
ОбщегоНазначенияБПОПереопределяемый.ЗаписатьОшибкуВМобильномПриложении(ИмяСобытия, ПредставлениеУровня, Метаданные, Комментарий);
#Иначе
Если Комментарий = Неопределено Тогда
Комментарий = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
КонецЕсли;
Уровень = УровеньСобытияПоПредставлению(ПредставлениеУровня);
ЗаписьЖурналаРегистрации(ИмяСобытия, Уровень, Метаданные, ,Комментарий);
#КонецЕсли
КонецПроцедуры
// Возвращает структуру, содержащую значения реквизитов прочитанные из информационной базы
// по ссылке на объект.
//
// Если доступа к одному из реквизитов нет, возникнет исключение прав доступа.
// Если необходимо зачитать реквизит независимо от прав текущего пользователя,
// то следует использовать предварительный переход в привилегированный режим.
//
// Функция не предназначена для получения значений реквизитов пустых ссылок.
//
// Параметры:
// Ссылка - ЛюбаяСсылка - объект, значения реквизитов которого необходимо получить.
//
// Реквизиты - Строка - имена реквизитов, перечисленные через запятую, в формате
// требований к свойствам структуры.
// Например, "Код, Наименование, Родитель".
// - Структура, ФиксированнаяСтруктура - в качестве ключа передается
// псевдоним поля для возвращаемой структуры с результатом, а в качестве
// значения (опционально) фактическое имя поля в таблице.
// Если значение не определено, то имя поля берется из ключа.
// - Массив из Строка
// - ФиксированныйМассив из Строка - имена реквизитов в формате требований
// к свойствам структуры.
//
// Возвращаемое значение:
// Структура - содержит имена (ключи) и значения затребованных реквизитов.
// Если строка затребованных реквизитов пуста, то возвращается пустая структура.
// Если в качестве объекта передана пустая ссылка, то все реквизиты вернутся со значением Неопределено.
//
Функция ЗначенияРеквизитовОбъекта(Ссылка, Знач Реквизиты) Экспорт
Если ИспользуетсяБСП() Тогда
// Вызов БСП
ОбщегоНазначенияМодуль = ОбщийМодуль("ОбщегоНазначения");
Возврат ОбщегоНазначенияМодуль.ЗначенияРеквизитовОбъекта(Ссылка, Реквизиты);
// Конец Вызов БСП
Иначе
Возврат ЗначенияРеквизитовОбъектаБПО(Ссылка, Реквизиты);
КонецЕсли;
КонецФункции
// Возвращает значение реквизита, прочитанного из информационной базы по ссылке на объект.
//
// Если доступа к реквизиту нет, возникнет исключение прав доступа.
// Если необходимо зачитать реквизит независимо от прав текущего пользователя,
// то следует использовать предварительный переход в привилегированный режим.
//
// Функция не предназначена для получения значений реквизитов пустых ссылок.
//
// Параметры:
// Ссылка - ЛюбаяСсылка - элемент справочника, документ, ...
// ИмяРеквизита - Строка -например, "Код".
//
// Возвращаемое значение:
// Произвольный - зависит от типа значения прочитанного реквизита.
//
Функция ЗначениеРеквизитаОбъекта(Ссылка, ИмяРеквизита) Экспорт
Результат = ЗначенияРеквизитовОбъекта(Ссылка, ИмяРеквизита);
Возврат Результат[СтрЗаменить(ИмяРеквизита, ".", "")];
КонецФункции
// Возвращает код основного языка конфигурации, например "ru".
//
// Возвращаемое значение:
// Строка - код языка.
//
Функция КодОсновногоЯзыка() Экспорт
Если ИспользуетсяБСП() Тогда
// Вызов БСП
ОбщегоНазначенияМодуль = ОбщийМодуль("ОбщегоНазначения");
Возврат ОбщегоНазначенияМодуль.КодОсновногоЯзыка();
// Конец Вызов БСП
КонецЕсли;
Возврат Метаданные.ОсновнойЯзык.КодЯзыка;
КонецФункции
// Определяет режим эксплуатации информационной базы файловый (Истина) или серверный (Ложь).
// При проверке используется СтрокаСоединенияИнформационнойБазы, которую можно указать явно.
//
// Параметры:
// СтрокаСоединенияИнформационнойБазы - Строка - параметр используется, если
// нужно проверить строку соединения не текущей информационной базы.
//
// Возвращаемое значение:
// Булево.
//
Функция ИнформационнаяБазаФайловая(Знач СтрокаСоединенияИнформационнойБазы = "") Экспорт
Если ПустаяСтрока(СтрокаСоединенияИнформационнойБазы) Тогда
СтрокаСоединенияИнформационнойБазы = СтрокаСоединенияИнформационнойБазы();
КонецЕсли;
Возврат СтрНайти(ВРег(СтрокаСоединенияИнформационнойБазы), "FILE=") = 1;
КонецФункции
// Возвращает Истина, если эта информационная база подключена к 1С:Fresh.
//
// Возвращаемое значение:
// Булево - признак автономного рабочего места.
//
Функция ЭтоАвтономноеРабочееМесто() Экспорт
// Вызов БСП
Если ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда
МодульОбменДаннымиСервер = ОбщийМодуль("ОбменДаннымиСервер");
Возврат МодульОбменДаннымиСервер.ЭтоАвтономноеРабочееМесто();
КонецЕсли;
// Конец Вызов БСП
Возврат Ложь;
КонецФункции
// Возвращает Истина, если приложение запущено через веб-клиент
//
// Возвращаемое значение:
// Булево - признак веб клиента.
//
Функция ЭтоВебКлиент() Экспорт
Если ИспользуетсяБСП() Тогда
// Вызов БСП
ОбщегоНазначенияМодуль = ОбщийМодуль("ОбщегоНазначения");
Возврат ОбщегоНазначенияМодуль.ЭтоВебКлиент();
// Конец Вызов БСП
Иначе
Возврат Ложь;
КонецЕсли;
КонецФункции
// Возвращает Истина, если мобильное приложение или мобильный клиент
//
// Возвращаемое значение:
// Булево - признак мобильной платформы.
//
Функция ЭтоМобильнаяПлатформа() Экспорт
ТипПриложения = КлиентскоеПриложение.ТипПриложения();
МобильнаяПлатформа = ТипПриложения = ТипКлиентскогоПриложения.МобильноеПриложениеКлиент Или ТипПриложения = ТипКлиентскогоПриложения.МобильныйКлиент;
Возврат МобильнаяПлатформа;
КонецФункции
// Возвращает признак работы в режиме разделения данных по областям
// (технически это признак условного разделения).
//
// Возвращает Ложь, если конфигурация не может работать в режиме разделения данных
// (не содержит общих реквизитов, предназначенных для разделения данных).
//
// Возвращаемое значение:
// Булево - Истина, если разделение включено,
// Ложь, если разделение выключено или не поддерживается.
//
Функция РазделениеВключено() Экспорт
Если ИспользуетсяБСП() Тогда
// Вызов БСП
ОбщегоНазначенияМодуль = ОбщийМодуль("ОбщегоНазначения");
Возврат ОбщегоНазначенияМодуль.РазделениеВключено();
// Конец Вызов БСП
КонецЕсли;
Возврат Ложь;
КонецФункции
Функция ИмяКомпьютераКлиента() Экспорт
#Если НЕ МобильноеПриложениеСервер Тогда
Возврат ПолучитьТекущийСеансИнформационнойБазы().ИмяКомпьютера;
#Иначе
Возврат "";
#КонецЕсли
КонецФункции
// Возвращает признак возможности обращения к разделенным данным (которые входят в состав разделителей).
// Признак относится к сеансу, но может меняться во время работы сеанса, если разделение было включено
// в самом сеансе, поэтому проверку следует делать непосредственно перед обращением к разделенным данным.
//
// Возвращает Истина, если конфигурация не может работать в режиме разделения данных
// (не содержит общих реквизитов, предназначенных для разделения данных).
//
// Возвращаемое значение:
// Булево - Истина, если разделение не поддерживается, либо разделение выключено,
// либо разделение включено и разделители установлены.
// Ложь, если разделение включено и разделители не установлены.
//
Функция ДоступноИспользованиеРазделенныхДанных() Экспорт
Если ИспользуетсяБСП() Тогда
// Вызов БСП
ОбщегоНазначенияМодуль = ОбщийМодуль("ОбщегоНазначения");
Возврат ОбщегоНазначенияМодуль.ДоступноИспользованиеРазделенныхДанных();
// Конец Вызов БСП
КонецЕсли;
Возврат Истина;
КонецФункции
// Возвращает Истина, если "функциональная" подсистема существует в конфигурации.
// Предназначена для реализации вызова необязательной подсистемы (условного вызова).
//
// У "функциональной" подсистемы снят флажок "Включать в командный интерфейс".
//
// Параметры:
// ПолноеИмяПодсистемы - Строка - полное имя объекта метаданных подсистема
// без слов "Подсистема." и с учетом регистра символов.
// Например: "СтандартныеПодсистемы.ВариантыОтчетов".
//
// Пример:
//
// Если ОбщегоНазначенияБПО.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда
// МодульВариантыОтчетов = ОбщегоНазначенияБПО.ОбщийМодуль("ВариантыОтчетов");
// МодульВариантыОтчетов.<Имя метода>();
// КонецЕсли;
//
// Возвращаемое значение:
// Булево.
//
Функция ПодсистемаСуществует(ПолноеИмяПодсистемы) Экспорт
Если ИспользуетсяБСП() Тогда
// Вызов БСП
ОбщегоНазначенияМодуль = ОбщийМодуль("ОбщегоНазначения");
Возврат ОбщегоНазначенияМодуль.ПодсистемаСуществует(ПолноеИмяПодсистемы);
// Конец Вызов БСП
Иначе
ИменаПодсистем = ОбщегоНазначенияБПОПовтИсп.ИменаПодсистем();
Возврат ИменаПодсистем.Получить(ПолноеИмяПодсистемы) <> Неопределено;
КонецЕсли;
КонецФункции
// Возвращает ссылку на общий модуль по имени.
//
// Параметры:
// Имя - Строка - имя общего модуля, например:
// "ОбщегоНазначения",
// "ОбщегоНазначенияКлиент".
//
// Возвращаемое значение:
// ОбщийМодуль.
//
Функция ОбщийМодуль(Имя) Экспорт
Если ИспользуетсяБСП() Тогда
// Вызов БСП
ОбщегоНазначенияМодуль = ОбщийМодульБПО("ОбщегоНазначения");
Возврат ОбщегоНазначенияМодуль.ОбщийМодуль(Имя);
// Конец Вызов БСП
Иначе
Возврат ОбщийМодульБПО(Имя);
КонецЕсли;
КонецФункции
// Выполняет действия перед продолжением выполнения обработчика регламентного задания.
//
// Например, проверяет возможность выполнения обработчика регламентного задания.
// Если администратор не заблокировал выполнение регламентных заданий до
// окончания обновления ИБ, тогда требуется прекратить выполнение обработчика.
//
// Параметры:
// РегламентноеЗадание - РегламентноеЗадание - регламентное задание,
// из которого был вызван данный метод. Необходимо передавать для проверки доступности
// по функциональным опциям.
//
Процедура ПриНачалеВыполненияРегламентногоЗадания(РегламентноеЗадание = Неопределено) Экспорт
Если ИспользуетсяБСП() Тогда
// Вызов БСП
ОбщегоНазначенияМодуль = ОбщийМодуль("ОбщегоНазначения");
ОбщегоНазначенияМодуль.ПриНачалеВыполненияРегламентногоЗадания(РегламентноеЗадание);
// Конец Вызов БСП
КонецЕсли;
КонецПроцедуры
// Вычисляет контрольную сумму для произвольных данных по указанному алгоритму.
//
// Параметры:
// Данные - Произвольный - любое сериализуемое значение.
// Алгоритм - ХешФункция - алгоритм расчета контрольной суммы. По умолчанию, MD5.
//
// Возвращаемое значение:
// Строка - контрольная сумма строкой без пробелов (например 32 символа).
//
Функция КонтрольнаяСуммаСтрокой(Знач Данные, Знач Алгоритм = Неопределено) Экспорт
Если ИспользуетсяБСП() Тогда
// Вызов БСП
ОбщегоНазначенияМодуль = ОбщийМодуль("ОбщегоНазначения");
Возврат ОбщегоНазначенияМодуль.КонтрольнаяСуммаСтрокой(Данные, Алгоритм);
// Конец Вызов БСП
Иначе
Возврат КонтрольнаяСуммаСтрокойБПО(Данные, Алгоритм);
КонецЕсли;
КонецФункции
// Преобразует таблицу значений в массив структур.
// Может использоваться для передачи на клиент данных в том случае, если таблица
// значений содержит только такие значения, которые могут
// быть переданы с сервера на клиент.
//
// Полученный массив содержит структуры, каждая из которых повторяет
// структуру колонок таблицы значений.
//
// Не рекомендуется использовать для преобразования таблиц значений
// с большим количеством строк.
//
// Параметры:
// ТаблицаЗначений - ТаблицаЗначений - исходная таблица значений.
//
// Возвращаемое значение:
// Массив - коллекция строк таблицы в виде структур.
//
Функция ТаблицаЗначенийВМассив(ТаблицаЗначений) Экспорт
Если ИспользуетсяБСП() Тогда
// Вызов БСП
ОбщегоНазначенияМодуль = ОбщийМодуль("ОбщегоНазначения");
Возврат ОбщегоНазначенияМодуль.ТаблицаЗначенийВМассив(ТаблицаЗначений);
// Конец Вызов БСП
Иначе
Массив = Новый Массив();
СтруктураСтрокой = "";
НужнаЗапятая = Ложь;
Для Каждого Колонка Из ТаблицаЗначений.Колонки Цикл
Если НужнаЗапятая Тогда
СтруктураСтрокой = СтруктураСтрокой + ",";
КонецЕсли;
СтруктураСтрокой = СтруктураСтрокой + Колонка.Имя;
НужнаЗапятая = Истина;
КонецЦикла;
Для Каждого Строка Из ТаблицаЗначений Цикл
НоваяСтрока = Новый Структура(СтруктураСтрокой);
ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка);
Массив.Добавить(НоваяСтрока);
КонецЦикла;
Возврат Массив;
КонецЕсли;
КонецФункции
// Проверяет, умещаются ли переданные табличные документы на страницу при печати.
//
// Параметры:
// ТабДокумент - ТабличныйДокумент - табличный документ.
// ВыводимыеОбласти - Массив из ТабличныйДокумент
// - ТабличныйДокумент - массив из проверяемых таблиц или табличный документ.
// РезультатПриОшибке - Булево - какой возвращать результат при возникновении ошибки.
//
// Возвращаемое значение:
// Булево - умещаются или нет переданные документы.
//
Функция ПроверитьВыводТабличногоДокумента(ТабДокумент, ВыводимыеОбласти, РезультатПриОшибке = Истина) Экспорт
Попытка
Возврат ТабДокумент.ПроверитьВывод(ВыводимыеОбласти);
Исключение
Возврат РезультатПриОшибке;
КонецПопытки;
КонецФункции
// Возвращает структуру сформированную по регистру сведений
//
// Параметры:
// МетаданныеРегистрСведений - ОбъектМетаданныхРегистрСведений
// МассивХранилищ - Массив из Строка - куда будут записаны имена полей регистра сведений содержащие тип ХранилищеЗначений
//
// Возвращаемое значение:
// Структура
//
Функция СтруктураИзМетаданныхРегистраСведений(МетаданныеРегистрСведений, МассивХранилищ = Неопределено) Экспорт
Результат = Новый Структура();
Если ТипЗнч(МассивХранилищ) <> Тип("Массив") Тогда
МассивХранилищ = Новый Массив();
КонецЕсли;
Для Каждого Измерение Из МетаданныеРегистрСведений.Измерения Цикл
Результат.Вставить(Измерение.Имя);
КонецЦикла;
Для Каждого Ресурс Из МетаданныеРегистрСведений.Ресурсы Цикл
Если Ресурс.Тип.СодержитТип(Тип("ХранилищеЗначения")) Тогда
МассивХранилищ.Добавить(Ресурс.Имя);
Продолжить;
КонецЕсли;
Результат.Вставить(Ресурс.Имя);
КонецЦикла;
Для Каждого Реквизит Из МетаданныеРегистрСведений.Реквизиты Цикл
Если Реквизит.Тип.СодержитТип(Тип("ХранилищеЗначения")) Тогда
МассивХранилищ.Добавить(Реквизит.Имя);
Продолжить;
КонецЕсли;
Результат.Вставить(Реквизит.Имя);
КонецЦикла;
Возврат Результат;
КонецФункции // СтруктураИзМетаданныхОбъекта()
#Область ИнтерфейсныйПроцедурыИФункции
// Установить свойства элемента управления
//
// Параметры:
// ЭлементУправления - ПолеФормы
//
Процедура ПодготовитьЭлементУправления(ЭлементУправления) Экспорт
ЭлементУправления.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Верх;
ЭлементУправления.ШрифтЗаголовка = ШрифтыСтиля.МелкийШрифтТекста;
КонецПроцедуры
#КонецОбласти
// Преобразует строку таблицы значений в структуру.
// Свойства структуры и их значения совпадают с колонками переданной строки.
//
// Параметры:
// СтрокаТаблицыЗначений - СтрокаТаблицыЗначений
//
// Возвращаемое значение:
// Структура - преобразованная строка таблицы значений.
//
Функция СтрокаТаблицыЗначенийВСтруктуру(СтрокаТаблицыЗначений) Экспорт
Структура = Новый Структура;
Для каждого Колонка Из СтрокаТаблицыЗначений.Владелец().Колонки Цикл
Структура.Вставить(Колонка.Имя, СтрокаТаблицыЗначений[Колонка.Имя]);
КонецЦикла;
Возврат Структура;
КонецФункции
#Область Данные
// Создает полную копию структуры, соответствия, массива, списка или таблицы значений, рекурсивно,
// с учетом типов дочерних элементов. При этом содержимое значений объектных типов
// (СправочникОбъект, ДокументОбъект и т.п.) не копируются, а возвращаются ссылки на исходный объект.
//
// Параметры:
// Источник - Структура
// - ФиксированнаяСтруктура
// - Соответствие
// - ФиксированноеСоответствие
// - Массив
// - ФиксированныйМассив
// - СписокЗначений - объект, который необходимо скопировать.
// ФиксироватьДанные - Булево - если Истина - фиксировать, если Ложь - снять фиксацию.
// - Неопределено - не изменять.
//
// Возвращаемое значение:
// Структура,
// ФиксированнаяСтруктура,
// Соответствие
// ФиксированноеСоответствие
// Массив
// ФиксированныйМассив
// СписокЗначений - копия объекта, переданного в параметре Источник.
//
Функция СкопироватьРекурсивно(Источник, ФиксироватьДанные = Неопределено) Экспорт
Перем Приемник;
ТипИсточника = ТипЗнч(Источник);
Если ТипИсточника = Тип("ТаблицаЗначений") Тогда
Возврат Источник.Скопировать();
КонецЕсли;
Если ТипИсточника = Тип("Структура")
Или ТипИсточника = Тип("ФиксированнаяСтруктура") Тогда
Приемник = СкопироватьСтруктуру(Источник, ФиксироватьДанные);
ИначеЕсли ТипИсточника = Тип("Соответствие")
Или ТипИсточника = Тип("ФиксированноеСоответствие") Тогда
Приемник = СкопироватьСоответствие(Источник, ФиксироватьДанные);
ИначеЕсли ТипИсточника = Тип("Массив")
Или ТипИсточника = Тип("ФиксированныйМассив") Тогда
Приемник = СкопироватьМассив(Источник, ФиксироватьДанные);
ИначеЕсли ТипИсточника = Тип("СписокЗначений") Тогда
Приемник = СкопироватьСписокЗначений(Источник, ФиксироватьДанные);
Иначе
Приемник = Источник;
КонецЕсли;
Возврат Приемник;
КонецФункции
// Приводит строковое значение к дате.
//
// Параметры:
// Значение - Строка - строковое значение, которое приводится к дате.
//
// Возвращаемое значение:
// Дата - приведенное значение.
//
Функция СтрокаВДату(Знач Значение) Экспорт
Если ИспользуетсяБСП() Тогда
// Вызов БСП
ОбщегоНазначенияКлиентСерверМодуль = ОбщийМодуль("ОбщегоНазначенияКлиентСервер");
Возврат ОбщегоНазначенияКлиентСерверМодуль.СтрокаВДату(Значение);
// Конец Вызов БСП
Иначе
Возврат СтрокаВДатуБПО(Значение);
КонецЕсли;
КонецФункции
#КонецОбласти
#Область ДоступныеПодсистемы
// Возвращает Истина, если используется устройства ввода и эти подсистемы существует в конфигурации.
// Предназначена для реализации вызова необязательной подсистемы (условного вызова).
//
// Возвращаемое значение:
// Булево.
//
Функция ИспользуетсяУстройстваВвода() Экспорт
Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.УстройстваВвода");
КонецФункции
// Возвращает Истина, если используется устройства "Шаблоны магнитных карт" и эти подсистемы существует в конфигурации.
// Предназначена для реализации вызова необязательной подсистемы (условного вызова).
//
// Возвращаемое значение:
// Булево.
//
Функция ИспользуетсяШаблоныМагнитныхКарт() Экспорт
Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.УстройстваВвода.ШаблоныМагнитныхКарт");
КонецФункции
// Возвращает Истина, если используется подсистемы фискальных устройств и эти подсистемы существует в конфигурации.
// Предназначена для реализации вызова необязательной подсистемы (условного вызова).
//
// Возвращаемое значение:
// Булево.
//
Функция ИспользуетсяЧекопечатающиеУстройства() Экспорт
Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.ЧекопечатающиеУстройства");
КонецФункции
// Возвращает Истина, если используется "Кассовая смена" и эти подсистема существует в конфигурации.
// Предназначена для реализации вызова необязательной подсистемы (условного вызова).
//
// Возвращаемое значение:
// Булево.
//
Функция ИспользуетсяКассоваяСмена() Экспорт
Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.ЧекопечатающиеУстройства.КассоваяСмена");
КонецФункции
// Возвращает Истина, если используется "РассылкаЭлектронныхЧеков" и эти подсистема существует в конфигурации.
// Предназначена для реализации вызова необязательной подсистемы (условного вызова).
//
// Возвращаемое значение:
// Булево.
//
Функция ИспользуетсяРассылкаЭлектронныхЧеков() Экспорт
Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.ЧекопечатающиеУстройства.РассылкаЭлектронныхЧеков");
КонецФункции
// Возвращает Истина, если используется "ФорматноЛогическийКонтроль" и эти подсистема существует в конфигурации.
// Предназначена для реализации вызова необязательной подсистемы (условного вызова).
//
// Возвращаемое значение:
// Булево.
//
Функция ИспользуетсяФорматноЛогическийКонтроль() Экспорт
Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.ЧекопечатающиеУстройства.ФорматноЛогическийКонтроль");
КонецФункции
// Возвращает Истина, если используется "Маркировка" и эти подсистема существует в конфигурации.
// Предназначена для реализации вызова необязательной подсистемы (условного вызова).
//
// Возвращаемое значение:
// Булево.
//
Функция ИспользуетсяМаркировка() Экспорт
Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.ЧекопечатающиеУстройства.Маркировка");
КонецФункции
// Возвращает Истина, если используется подсистема "Платежные системы" и эта подсистема существует в конфигурации.
// Предназначена для реализации вызова необязательной подсистемы (условного вызова).
//
// Возвращаемое значение:
// Булево.
//
Функция ИспользуетсяПлатежныеСистемы() Экспорт
Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.ПлатежныеСистемы");
КонецФункции
// Возвращает Истина, если используется подсистема "Дисплеи покупателя" и эта подсистема существует в конфигурации.
// Предназначена для реализации вызова необязательной подсистемы (условного вызова).
//
// Возвращаемое значение:
// Булево.
//
Функция ИспользуетсяДисплеиПокупателя() Экспорт
Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.ДисплеиПокупателя");
КонецФункции
// Возвращает Истина, если используется подсистема "Весовое оборудование" и эта подсистема существует в конфигурации.
// Предназначена для реализации вызова необязательной подсистемы (условного вызова).
//
// Возвращаемое значение:
// Булево.
//
Функция ИспользуетсяВесовоеОборудование() Экспорт
Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.ВесовоеОборудование");
КонецФункции
// Возвращает Истина, если используется подсистема "Терминалы сбора данных" и эта подсистема существует в конфигурации.
// Предназначена для реализации вызова необязательной подсистемы (условного вызова).
//
// Возвращаемое значение:
// Булево.
//
Функция ИспользуетсяТерминалыСбораДанных() Экспорт
Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.ТерминалыСбораДанных");
КонецФункции
// Возвращает Истина, если используется подсистема "Принтеры этикеток" и эта подсистема существует в конфигурации.
// Предназначена для реализации вызова необязательной подсистемы (условного вызова).
//
// Возвращаемое значение:
// Булево.
//
Функция ИспользуетсяПринтерыЭтикеток() Экспорт
Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.ПринтерыЭтикеток");
КонецФункции
// Возвращает Истина, если используется подсистема "Считыватель RFID" и эта подсистема существует в конфигурации.
// Предназначена для реализации вызова необязательной подсистемы (условного вызова).
//
// Возвращаемое значение:
// Булево.
//
Функция ИспользуетсяСчитывательRFID() Экспорт
Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.СчитывательRFID");
КонецФункции
// Возвращает Истина, если используется подсистема "УстройствоРаспознавания" и эта подсистема существует в конфигурации.
// Предназначена для реализации вызова необязательной подсистемы (условного вызова).
//
// Возвращаемое значение:
// Булево.
//
Функция ИспользуетсяУстройствоРаспознавания() Экспорт
Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.УстройствоРаспознавания");
КонецФункции
// Возвращает Истина, если используется подсистема "ОблачныеККТ" и эта подсистема существует в конфигурации.
// Предназначена для реализации вызова необязательной подсистемы (условного вызова).
//
// Возвращаемое значение:
// Булево.
//
Функция ИспользуютсяОблачныеККТ() Экспорт
Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.ОблачныеККТ");
КонецФункции
// Возвращает Истина, если используется подсистема "Офлайн-оборудование" и эта подсистема существует в конфигурации.
// Предназначена для реализации вызова необязательной подсистемы (условного вызова).
//
// Возвращаемое значение:
// Булево.
//
Функция ИспользуетсяОфлайнОборудование() Экспорт
Возврат ПодсистемаСуществует("ПоддержкаОборудования.ОфлайнОборудование");
КонецФункции
// Возвращает Истина, если используется подсистема "Печать этикеток и ценников" и эта подсистема существует в конфигурации.
// Предназначена для реализации вызова необязательной подсистемы (условного вызова).
//
// Возвращаемое значение:
// Булево.
//
Функция ИспользуетсяПечатьЭтикетокИЦенников() Экспорт
Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПечатьЭтикетокИЦенников");
КонецФункции
// Возвращает Истина если существует подсистема ПоддержкаОборудования.СообщенияВСлужбуТехническойПоддержки
//
// Возвращаемое значение:
// Булево
Функция ИспользуетсяСообщенияВСлужбуТехническойПоддержки() Экспорт
// Вызов БИП
Возврат ПодсистемаСуществует("ИнтернетПоддержкаПользователей.СообщенияВСлужбуТехническойПоддержки")
И ПодсистемаСуществует("ПоддержкаОборудования.СообщенияВСлужбуТехническойПоддержки");
// Конец Вызов БИП
КонецФункции
// Возвращает Истина, если используется подсистема "Электронные сертификаты НСПК" и эта подсистема существует в конфигурации.
// Предназначена для реализации вызова необязательной подсистемы (условного вызова).
//
// Возвращаемое значение:
// Булево.
//
Функция ИспользуетсяЭлектронныеСертификатыНСПК() Экспорт
Возврат ПодсистемаСуществует("ПоддержкаОборудования.ЭлектронныеСертификаты");
КонецФункции
// Возвращает Истина, если используется подсистема "СертификатыНУЦМинцифры" и эта подсистема существует в конфигурации.
// Предназначена для реализации вызова необязательной подсистемы (условного вызова).
//
// Возвращаемое значение:
// Булево.
//
Функция ИспользуетсяСертификатыНУЦМинцифры() Экспорт
Возврат ПодсистемаСуществует("ПоддержкаОборудования.ЭлектронныеСертификаты.СертификатыНУЦМинцифры");
КонецФункции
// Возвращает Истина, если используется подсистема "РаспределеннаяФискализация" и эта подсистема существует в конфигурации.
// Предназначена для реализации вызова необязательной подсистемы (условного вызова).
//
// Возвращаемое значение:
// Булево.
//
Функция ИспользуетсяРаспределеннаяФискализация() Экспорт
Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.ЧекопечатающиеУстройства.РаспределеннаяФискализация");
КонецФункции
// Возвращает Истина, если используется "АвтономнаяККТ" и эти подсистема существует в конфигурации.
// Предназначена для реализации вызова необязательной подсистемы (условного вызова).
//
// Возвращаемое значение:
// Булево.
//
Функция ИспользуетсяАвтономнаяККТ() Экспорт
Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.ЧекопечатающиеУстройства.АвтономнаяККТ");
КонецФункции
// Возвращает Истина, если используется подсистема "НастройкиПрограммы" и эта подсистема существует в конфигурации.
// Предназначена для реализации вызова необязательной подсистемы (условного вызова).
//
// Возвращаемое значение:
// Булево.
//
Функция ИспользуетсяНастройкиПрограммыБПО() Экспорт
Возврат ПодсистемаСуществует("ПоддержкаОборудования.НастройкиПрограммы");
КонецФункции
// Возвращает Истина, если используется подсистема "ЛогированиеОборудования" и эта подсистема существует в конфигурации.
// Предназначена для реализации вызова необязательной подсистемы (условного вызова).
//
// Возвращаемое значение:
// Булево.
//
Функция ИспользуетсяПодсистемаЛогирования() Экспорт
Возврат ПодсистемаСуществует("ПоддержкаОборудования.ЛогированиеОборудования");
КонецФункции
// Возвращает Истина, если используется подсистема "НесертифицированноеОборудование" и эта подсистема существует в конфигурации.
// Предназначена для реализации вызова необязательной подсистемы (условного вызова).
//
// Возвращаемое значение:
// Булево.
//
Функция ИспользуетсяНесертифицированноеОборудование() Экспорт
Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.НесертифицированноеОборудование");
КонецФункции
#КонецОбласти
// Преобразовать в булево возможные значения строки
//
// Параметры:
// Строка - Строка
//
// Возвращаемое значение:
// Булево
//
Функция ПреобразоватьВБулево(Строка) Экспорт
Попытка
Возврат XMLЗначение(Тип("Булево"), Строка);
Исключение
Возврат ВРег(Строка) = "ДА" Или ВРег(Строка) = "TRUE" Или ВРег(Строка) = "YES";
КонецПопытки;
КонецФункции
Функция ИмяЗначенияПеречисления(Значение) Экспорт
ИмяПеречисления = Значение.Метаданные().Имя;
ИндексЗначенияПеречисления = Перечисления[ИмяПеречисления].Индекс(Значение);
ИмяЗначенияПеречисления = Метаданные.Перечисления[ИмяПеречисления].ЗначенияПеречисления[ИндексЗначенияПеречисления].Имя;
Возврат ИмяЗначенияПеречисления;
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
#Область ОповещениеПользователя
// Формирует и выводит сообщение, которое может быть связано с элементом управления формы.
//
// Параметры:
// ТекстСообщенияПользователю - Строка - текст сообщения.
// КлючДанных - ЛюбаяСсылка - объект или ключ записи информационной базы, к которому это сообщение относится.
// Поле - Строка - наименование реквизита формы.
// ПутьКДанным - Строка - путь к данным (путь к реквизиту формы).
// Отказ - Булево - выходной параметр, всегда устанавливается в значение Истина.
//@skip-check method-too-many-params
Процедура СообщитьПользователюБПО(
Знач ТекстСообщенияПользователю,
Знач КлючДанных = Неопределено,
Знач Поле = "",
Знач ПутьКДанным = "",
Отказ = Ложь)
ЭтоОбъект = Ложь;
Если КлючДанных <> Неопределено
И XMLТипЗнч(КлючДанных) <> Неопределено Тогда
ТипЗначенияСтрокой = XMLТипЗнч(КлючДанных).ИмяТипа;
ЭтоОбъект = СтрНайти(ТипЗначенияСтрокой, "Object.") > 0;
КонецЕсли;
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = ТекстСообщенияПользователю;
Сообщение.Поле = Поле;
//@skip-check empty-except-statement
// АПК: 280-выкл
Попытка
Если ЭтоОбъект Тогда
Сообщение.УстановитьДанные(КлючДанных);
Иначе
Сообщение.КлючДанных = КлючДанных;
КонецЕсли;
Если НЕ ПустаяСтрока(ПутьКДанным) Тогда
Сообщение.ПутьКДанным = ПутьКДанным;
КонецЕсли;
Исключение
КонецПопытки;
// АПК: 280-вкл
Сообщение.Сообщить();
Отказ = Истина;
КонецПроцедуры
#КонецОбласти
// Возвращает структуру, содержащую значения реквизитов прочитанные из информационной базы
// по ссылке на объект.
//
// Если доступа к одному из реквизитов нет, возникнет исключение прав доступа.
// Если необходимо зачитать реквизит независимо от прав текущего пользователя,
// то следует использовать предварительный переход в привилегированный режим.
//
// Функция не предназначена для получения значений реквизитов пустых ссылок.
//
// Параметры:
// Ссылка - ЛюбаяСсылка - объект, значения реквизитов которого необходимо получить.
//
// Реквизиты - Строка - имена реквизитов, перечисленные через запятую, в формате
// требований к свойствам структуры.
// Например, "Код, Наименование, Родитель".
// - Структура, ФиксированнаяСтруктура - в качестве ключа передается
// псевдоним поля для возвращаемой структуры с результатом, а в качестве
// значения (опционально) фактическое имя поля в таблице.
// Если значение не определено, то имя поля берется из ключа.
// - Массив из Строка - имена реквизитов в формате требований
// к свойствам структуры.
//
// Возвращаемое значение:
// Структура - содержит имена (ключи) и значения затребованных реквизитов.
// Если строка затребованных реквизитов пуста, то возвращается пустая структура.
// Если в качестве объекта передана пустая ссылка, то все реквизиты вернутся со значением Неопределено.
//
Функция ЗначенияРеквизитовОбъектаБПО(Ссылка, Знач Реквизиты)
Если ТипЗнч(Реквизиты) = Тип("Строка") Тогда
Если ПустаяСтрока(Реквизиты) Тогда
Возврат Новый Структура;
КонецЕсли;
Реквизиты = СтрРазделить(Реквизиты, ",", Ложь);
КонецЕсли;
СтруктураРеквизитов = Новый Структура;
Если ТипЗнч(Реквизиты) = Тип("Структура") Или ТипЗнч(Реквизиты) = Тип("ФиксированнаяСтруктура") Тогда
СтруктураРеквизитов = Реквизиты;
ИначеЕсли ТипЗнч(Реквизиты) = Тип("Массив") Или ТипЗнч(Реквизиты) = Тип("ФиксированныйМассив") Тогда
Для Каждого Реквизит Из Реквизиты Цикл
СтруктураРеквизитов.Вставить(СтрЗаменить(Реквизит, ".", ""), Реквизит);
КонецЦикла;
Иначе
ВызватьИсключение СтрШаблон(НСтр("ru = 'Неверный тип второго параметра Реквизиты: %1'"), Строка(ТипЗнч(Реквизиты)));
КонецЕсли;
ТекстПолей = "";
Для Каждого КлючИЗначение Из СтруктураРеквизитов Цикл
ИмяПоля = ?(ЗначениеЗаполнено(КлючИЗначение.Значение),
СокрЛП(КлючИЗначение.Значение),
СокрЛП(КлючИЗначение.Ключ));
Псевдоним = СокрЛП(КлючИЗначение.Ключ);
ТекстПолей = ТекстПолей + ?(ПустаяСтрока(ТекстПолей), "", ",") + "
| " + ИмяПоля + " КАК " + Псевдоним;
КонецЦикла;
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Запрос.Текст =
"ВЫБРАТЬ
| &ТекстПолей
|ИЗ
| &ПолноеИмя КАК ПсевдонимЗаданнойТаблицы
|ГДЕ
| ПсевдонимЗаданнойТаблицы.Ссылка = &Ссылка";
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ТекстПолей", ТекстПолей);
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ПолноеИмя", Ссылка.Метаданные().ПолноеИмя());
Выборка = Запрос.Выполнить().Выбрать();
Выборка.Следующий();
Результат = Новый Структура;
Для Каждого КлючИЗначение Из СтруктураРеквизитов Цикл
Результат.Вставить(КлючИЗначение.Ключ);
КонецЦикла;
ЗаполнитьЗначенияСвойств(Результат, Выборка);
Возврат Результат;
КонецФункции
// Возвращает ссылку на общий модуль по имени.
//
// Параметры:
// Имя - Строка - имя общего модуля, например:
// "ОбщегоНазначения",
// "ОбщегоНазначенияКлиент".
//
// Возвращаемое значение:
// ОбщийМодуль.
//
Функция ОбщийМодульБПО(Имя)
Если Метаданные.ОбщиеМодули.Найти(Имя) <> Неопределено Тогда
// АПК:486-выкл ВычислитьВБезопасномРежиме не используется, чтобы избежать вызова ОбщийМодуль рекурсивно.
#Если Не МобильноеПриложениеСервер Тогда
УстановитьБезопасныйРежим(Истина);
#КонецЕсли
Модуль = Вычислить(Имя);
// АПК:486-вкл
ИначеЕсли СтрЧислоВхождений(Имя, ".") = 1 Тогда
Возврат СерверныйМодульМенеджера(Имя);
Иначе
Модуль = Неопределено;
КонецЕсли;
Если ТипЗнч(Модуль) <> Тип("ОбщийМодуль") Тогда
ВызватьИсключение СтрШаблон(НСтр("ru = 'Общий модуль ""%1"" не существует.'"), Имя);
КонецЕсли;
Возврат Модуль;
КонецФункции
// Вычисляет контрольную сумму для произвольных данных по указанному алгоритму.
//
// Параметры:
// Данные - Произвольный - любое сериализуемое значение.
// Алгоритм - ХешФункция - алгоритм расчета контрольной суммы. По умолчанию, MD5.
//
// Возвращаемое значение:
// Строка - контрольная сумма строкой без пробелов (например 32 символа).
//
Функция КонтрольнаяСуммаСтрокойБПО(Знач Данные, Знач Алгоритм = Неопределено) Экспорт
Если Алгоритм = Неопределено Тогда
Алгоритм = ХешФункция.MD5;
КонецЕсли;
ХешированиеДанных = Новый ХешированиеДанных(Алгоритм);
Если ТипЗнч(Данные) <> Тип("Строка") И ТипЗнч(Данные) <> Тип("ДвоичныеДанные") Тогда
Данные = ЗначениеВСтрокуXML(Данные);
КонецЕсли;
ХешированиеДанных.Добавить(Данные);
Если ТипЗнч(ХешированиеДанных.ХешСумма) = Тип("ДвоичныеДанные") Тогда
Результат = СтрЗаменить(ХешированиеДанных.ХешСумма, " ", "");
ИначеЕсли ТипЗнч(ХешированиеДанных.ХешСумма) = Тип("Число") Тогда
Результат = Формат(ХешированиеДанных.ХешСумма, "ЧГ=");
КонецЕсли;
Возврат Результат;
КонецФункции
// Возвращает серверный модуль менеджера по имени объекта.
Функция СерверныйМодульМенеджера(Имя)
ОбъектНайден = Ложь;
ЧастиИмени = СтрРазделить(Имя, ".");
Если ЧастиИмени.Количество() = 2 Тогда
ИмяВида = ВРег(ЧастиИмени[0]);
ИмяОбъекта = ЧастиИмени[1];
Если ИмяВида = ВРег("Константы") Тогда
Если Метаданные.Константы.Найти(ИмяОбъекта) <> Неопределено Тогда
ОбъектНайден = Истина;
КонецЕсли;
ИначеЕсли ИмяВида = ВРег("РегистрыСведений") Тогда
Если Метаданные.РегистрыСведений.Найти(ИмяОбъекта) <> Неопределено Тогда
ОбъектНайден = Истина;
КонецЕсли;
ИначеЕсли ИмяВида = ВРег("РегистрыНакопления") Тогда
Если Метаданные.РегистрыНакопления.Найти(ИмяОбъекта) <> Неопределено Тогда
ОбъектНайден = Истина;
КонецЕсли;
ИначеЕсли ИмяВида = ВРег("РегистрыБухгалтерии") Тогда
Если Метаданные.РегистрыБухгалтерии.Найти(ИмяОбъекта) <> Неопределено Тогда
ОбъектНайден = Истина;
КонецЕсли;
ИначеЕсли ИмяВида = ВРег("РегистрыРасчета") Тогда
Если Метаданные.РегистрыРасчета.Найти(ИмяОбъекта) <> Неопределено Тогда
ОбъектНайден = Истина;
КонецЕсли;
ИначеЕсли ИмяВида = ВРег("Справочники") Тогда
Если Метаданные.Справочники.Найти(ИмяОбъекта) <> Неопределено Тогда
ОбъектНайден = Истина;
КонецЕсли;
ИначеЕсли ИмяВида = ВРег("Документы") Тогда
Если Метаданные.Документы.Найти(ИмяОбъекта) <> Неопределено Тогда
ОбъектНайден = Истина;
КонецЕсли;
ИначеЕсли ИмяВида = ВРег("Отчеты") Тогда
Если Метаданные.Отчеты.Найти(ИмяОбъекта) <> Неопределено Тогда
ОбъектНайден = Истина;
КонецЕсли;
ИначеЕсли ИмяВида = ВРег("Обработки") Тогда
Если Метаданные.Обработки.Найти(ИмяОбъекта) <> Неопределено Тогда
ОбъектНайден = Истина;
КонецЕсли;
ИначеЕсли ИмяВида = ВРег("БизнесПроцессы") Тогда
Если Метаданные.БизнесПроцессы.Найти(ИмяОбъекта) <> Неопределено Тогда
ОбъектНайден = Истина;
КонецЕсли;
ИначеЕсли ИмяВида = ВРег("ЖурналыДокументов") Тогда
Если Метаданные.ЖурналыДокументов.Найти(ИмяОбъекта) <> Неопределено Тогда
ОбъектНайден = Истина;
КонецЕсли;
ИначеЕсли ИмяВида = ВРег("Задачи") Тогда
Если Метаданные.Задачи.Найти(ИмяОбъекта) <> Неопределено Тогда
ОбъектНайден = Истина;
КонецЕсли;
ИначеЕсли ИмяВида = ВРег("ПланыСчетов") Тогда
Если Метаданные.ПланыСчетов.Найти(ИмяОбъекта) <> Неопределено Тогда
ОбъектНайден = Истина;
КонецЕсли;
ИначеЕсли ИмяВида = ВРег("ПланыОбмена") Тогда
Если Метаданные.ПланыОбмена.Найти(ИмяОбъекта) <> Неопределено Тогда
ОбъектНайден = Истина;
КонецЕсли;
ИначеЕсли ИмяВида = ВРег("ПланыВидовХарактеристик") Тогда
Если Метаданные.ПланыВидовХарактеристик.Найти(ИмяОбъекта) <> Неопределено Тогда
ОбъектНайден = Истина;
КонецЕсли;
ИначеЕсли ИмяВида = ВРег("ПланыВидовРасчета") Тогда
Если Метаданные.ПланыВидовРасчета.Найти(ИмяОбъекта) <> Неопределено Тогда
ОбъектНайден = Истина;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если Не ОбъектНайден Тогда
ВызватьИсключение СтрШаблон(
НСтр("ru = 'Объект метаданных ""%1"" не найден,
|либо для него не поддерживается получение модуля менеджера.'"), Имя);
КонецЕсли;
// АПК: 486-выкл, 488-выкл ВычислитьВБезопасномРежиме не используется, чтобы избежать вызова ОбщийМодуль рекурсивно.
#Если Не МобильноеПриложениеСервер Тогда
УстановитьБезопасныйРежим(Истина);
#КонецЕсли
Модуль = Вычислить(Имя);
// АПК: 486-вкл, 488-вкл
Возврат Модуль;
КонецФункции
// Преобразует (сериализует) любое значение в XML-строку.
// Преобразованы в могут быть только те объекты, для которых в синтакс-помощнике указано, что они сериализуются.
// См. также ЗначениеИзСтрокиXML.
//
// Параметры:
// Значение - Произвольный - значение, которое необходимо сериализовать в XML-строку.
//
// Возвращаемое значение:
// Строка - XML-строка.
//
Функция ЗначениеВСтрокуXML(Значение)
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку();
СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Значение, НазначениеТипаXML.Явное);
Возврат ЗаписьXML.Закрыть();
КонецФункции
// Приводит строковое значение к дате.
//
// Параметры:
// Значение - Строка - строковое значение, которое приводится к дате.
//
// Возвращаемое значение:
// Дата - приведенное значение.
//
Функция СтрокаВДатуБПО(Знач Значение)
ПустаяДата = Дата(1, 1, 1);
Если Не ЗначениеЗаполнено(Значение) Тогда
Возврат ПустаяДата;
КонецЕсли;
ОписаниеДаты = Новый ОписаниеТипов("Дата");
Дата = ОписаниеДаты.ПривестиЗначение(Значение);
Если ТипЗнч(Дата) = Тип("Дата")
И ЗначениеЗаполнено(Дата) Тогда
Возврат Дата;
КонецЕсли;
#Область ПодготовкаЧастейДаты
КоличествоСимволов = СтрДлина(Значение);
Если КоличествоСимволов > 25 Тогда
Возврат ПустаяДата;
КонецЕсли;
ЧастиЗначения = Новый Массив;
ЧастьЗначения = "";
Для НомерСимвола = 1 По КоличествоСимволов Цикл
Символ = Сред(Значение, НомерСимвола, 1);
Если ЭтоЧисло(Символ) Тогда
ЧастьЗначения = ЧастьЗначения + Символ;
Иначе
Если Не ПустаяСтрока(ЧастьЗначения) Тогда
ЧастиЗначения.Добавить(ЧастьЗначения);
КонецЕсли;
ЧастьЗначения = "";
КонецЕсли;
Если НомерСимвола = КоличествоСимволов
И Не ПустаяСтрока(ЧастьЗначения) Тогда
ЧастиЗначения.Добавить(ЧастьЗначения);
КонецЕсли;
КонецЦикла;
Если ЧастиЗначения.Количество() < 3 Тогда
Возврат ПустаяДата;
КонецЕсли;
Если ЧастиЗначения.Количество() < 4 Тогда
ЧастиЗначения.Добавить("00");
КонецЕсли;
Если ЧастиЗначения.Количество() < 5 Тогда
ЧастиЗначения.Добавить("00");
КонецЕсли;
Если ЧастиЗначения.Количество() < 6 Тогда
ЧастиЗначения.Добавить("00");
КонецЕсли;
#КонецОбласти
// Если формат ггггММддЧЧммсс:
НормализованноеЗначение = ЧастиЗначения[2] + ЧастиЗначения[1] + ЧастиЗначения[0]
+ ЧастиЗначения[3] + ЧастиЗначения[4] + ЧастиЗначения[5];
Дата = ОписаниеДаты.ПривестиЗначение(НормализованноеЗначение);
Если ТипЗнч(Дата) = Тип("Дата")
И ЗначениеЗаполнено(Дата) Тогда
Возврат Дата;
КонецЕсли;
// Если формат ггггддММЧЧммсс
НормализованноеЗначение = ЧастиЗначения[2] + ЧастиЗначения[0] + ЧастиЗначения[1]
+ ЧастиЗначения[3] + ЧастиЗначения[4] + ЧастиЗначения[5];
Дата = ОписаниеДаты.ПривестиЗначение(НормализованноеЗначение);
Если ТипЗнч(Дата) = Тип("Дата")
И ЗначениеЗаполнено(Дата) Тогда
Возврат Дата;
КонецЕсли;
Возврат ПустаяДата;
КонецФункции
// Возвращает признак того, что переданное значение является, либо не является, числом.
//
// Параметры:
// ПроверяемоеЗначение - Строка - значение, которое проверяется на соответствие числу.
//
// Возвращаемое значение:
// Булево - признак того, что переданное значение является, либо не является, числом.
//
Функция ЭтоЧисло(Знач ПроверяемоеЗначение)
Если ПроверяемоеЗначение = "0" Тогда
Возврат Истина;
КонецЕсли;
ОписаниеЧисла = Новый ОписаниеТипов("Число");
Возврат ОписаниеЧисла.ПривестиЗначение(ПроверяемоеЗначение) <> 0;
КонецФункции
#Область Данные
#Область СкопироватьРекурсивно
Функция СкопироватьСтруктуру(СтруктураИсточник, ФиксироватьДанные)
СтруктураРезультат = Новый Структура;
Для Каждого КлючИЗначение Из СтруктураИсточник Цикл
СтруктураРезультат.Вставить(КлючИЗначение.Ключ, СкопироватьРекурсивно(КлючИЗначение.Значение, ФиксироватьДанные));
КонецЦикла;
Если ФиксироватьДанные = Истина
Или ФиксироватьДанные = Неопределено
И ТипЗнч(СтруктураИсточник) = Тип("ФиксированнаяСтруктура") Тогда
Возврат Новый ФиксированнаяСтруктура(СтруктураРезультат);
КонецЕсли;
Возврат СтруктураРезультат;
КонецФункции
Функция СкопироватьСоответствие(СоответствиеИсточник, ФиксироватьДанные)
СоответствиеРезультат = Новый Соответствие;
Для Каждого КлючИЗначение Из СоответствиеИсточник Цикл
СоответствиеРезультат.Вставить(КлючИЗначение.Ключ, СкопироватьРекурсивно(КлючИЗначение.Значение, ФиксироватьДанные));
КонецЦикла;
Если ФиксироватьДанные = Истина
Или ФиксироватьДанные = Неопределено
И ТипЗнч(СоответствиеИсточник) = Тип("ФиксированноеСоответствие") Тогда
Возврат Новый ФиксированноеСоответствие(СоответствиеРезультат);
КонецЕсли;
Возврат СоответствиеРезультат;
КонецФункции
Функция СкопироватьМассив(МассивИсточник, ФиксироватьДанные)
МассивРезультат = Новый Массив;
Для Каждого Элемент Из МассивИсточник Цикл
МассивРезультат.Добавить(СкопироватьРекурсивно(Элемент, ФиксироватьДанные));
КонецЦикла;
Если ФиксироватьДанные = Истина
Или ФиксироватьДанные = Неопределено
И ТипЗнч(МассивИсточник) = Тип("ФиксированныйМассив") Тогда
Возврат Новый ФиксированныйМассив(МассивРезультат);
КонецЕсли;
Возврат МассивРезультат;
КонецФункции
Функция СкопироватьСписокЗначений(СписокИсточник, ФиксироватьДанные)
СписокРезультат = Новый СписокЗначений;
Для Каждого ЭлементСписка Из СписокИсточник Цикл
СписокРезультат.Добавить(
СкопироватьРекурсивно(ЭлементСписка.Значение, ФиксироватьДанные),
ЭлементСписка.Представление,
ЭлементСписка.Пометка,
ЭлементСписка.Картинка);
КонецЦикла;
Возврат СписокРезультат;
КонецФункции
#КонецОбласти
#КонецОбласти
#Если Не МобильноеПриложениеСервер Тогда
Функция УровеньСобытияПоПредставлению(ПредставлениеУровня)
Если ПредставлениеУровня = "Информация" Тогда
Возврат УровеньЖурналаРегистрации.Информация;
ИначеЕсли ПредставлениеУровня = "Ошибка" Тогда
Возврат УровеньЖурналаРегистрации.Ошибка;
ИначеЕсли ПредставлениеУровня = "Предупреждение" Тогда
Возврат УровеньЖурналаРегистрации.Предупреждение;
ИначеЕсли ПредставлениеУровня = "Примечание" Тогда
Возврат УровеньЖурналаРегистрации.Примечание;
КонецЕсли;
КонецФункции
#КонецЕсли
#КонецОбласти