Новые статьи

This commit is contained in:
wakadakawaka 2025-04-16 00:59:02 +05:00
parent e410308e64
commit 651d1c19cc
9 changed files with 597 additions and 0 deletions

View File

@ -0,0 +1,17 @@
---
title: Утилита ibcmd.exe
---
Утилита **ibcmd.exe** входит в состав поставки сервера 1C
С помощью этой утилиты можно выгрузить информационную базу в .dt без получения монопольного режима. Для этого нужно создать текстовый файл, задать ему расширение .bat. В теле этого файла прописывается строка:
```
«C:\Program Files\1cv8\{ВЕРСИЯ ПЛАТФОРМЫ}\bin\ibcmd.exe» infobase dump —db-server={ИМЯ СЕРВЕРА} —dbms=MSSQLServer —db-name={ИМЯ БАЗЫ НА СЕРВЕРЕ} —db-user={ИМЯ ПОЛЬЗОВАТЕЛЯ SQL} —db-pwd={ПАРОЛЬ ПОЛЬЗОВАТЕЛЯ SQL} «c:\my_database.dt»
```
* **dbms** тип SQL сервера с базами данных.
* **db-server** адрес или доменное имя по которому доступен SQL сервер.
* **db-name** имя базы данных на SQL сервере.
* **db-user** имя пользователя на SQL сервере, которому доступны необходимые базы данных.
* **db-pwd** пароль от этого пользователя.
* **user** имя пользователя в 1С от этой базы.
* **password** и пароль от него. (ранее программа работала без пользователя 1С) C:\backup\SQL_DB_NAME_date.dt путь, куда будет выгружена база данных.

View File

@ -0,0 +1,128 @@
---
title: Виджет из HTML-документа
---
HTML-документ можно использовать для создания нестандартных элементов управления. Ниже приведен пример создания виджетов
```bsl
&НаКлиенте
Функция ТекстHTMLДляВиджета(КоличествоНовых, КоличествоВРаботе, КоличествоЗакрытых, КоличествоВсего)
ЗаголовокВиджета = "Информация о заявках";
Текст = СтрШаблон(
"<!DOCTYPE html>
|<html lang=""ru"">
|
|<head>
| <meta charset=""UTF-8"">
| <meta http-equiv=""X-UA-Compatible"" content=""IE=edge"">
| <meta name=""viewport"" content=""width=device-width, initial-scale=1.0"">
| <title>Document</title>
| <style>
| p {
| margin: 0;
| padding: 0;
| }
| .wrap {
| padding: 0px;
| }
| .status {
| font-family: ""Arial"";
| font-weight: 600;
| font-size: 12px;
| margin-bottom: 5px;
| margin-left: 2px;
| margin-right: 5px;
| padding: 3px;
| border-radius: 5px;
| display: flex;
| justify-content: space-between;
| }
| .status-opened {
| border: 1px solid #A0A0A0;
| background-color: #F4F7FC;
| }
| .status-work {
| border: 1px solid #A0A0A0;
| background-color: #FBED9E;
| }
| .status-closed {
| border: 1px solid #A0A0A0;
| background-color: #ddffdd;
| }
| .status-all {
| border: 1px solid #A0A0A0;
| font-size: 16px;
| }
| .status-header {
| margin-bottom: 3px;
| padding: 2px;
| font-size: 12px;
| }
| .bottom {
| padding: 0px;
| margin-top: 6px;
| text-align: right;
| font-size: 11px;
| font-family: ""Arial"";
| }
| </style>
|</head>
|
|<body>
| <div class=""wrap"">
| <div class=""status status-header"">
| <p><b>%1</b></p>
| </div>
| <div class=""status status-opened"">
| <p><a href=""#"" class=""link-opened"">Новые</a></p>
| <p>%2</p>
| </div>
| <div class=""status status-work"">
| <p><a href=""#"" class=""link-work"">В работе</a></p>
| <p>%3</p>
| </div>
| <div class=""status status-closed"">
| <p><a href=""#"" class=""link-closed"">Закрытые</a></p>
| <p>%4</p>
| </div>
| <div class=""bottom"">
| <div class=""bottom bottom-refresh"">
| <p><a href=""#"" class=""link-refresh"">Сбросить</a></p>
| </div>
| </div>
|</body>
|
|</html>",
ЗаголовокВиджета,
КоличествоНовых,
КоличествоВРаботе,
КоличествоЗакрытых);
Возврат Текст;
КонецФункции
```
В результате получается что-то вроде
![пример виджета.png](https://sinenikolsky.ru/s/QEWSKmHn7HKGJX4/download?path=%2F2025%2F04%2F15&files=c04e4c34-8a25-42a1-bb74-da0929bfa69c.png)
Для отработки кликов на элементах виджета нужно переопределить событие элемента «ПриНажатии», например:
```bls
&НаКлиенте
Процедура ВиджетПриНажатии(Элемент, ДанныеСобытия, СтандартнаяОбработка)
СписокКлассов = СтрРазделить(ДАнныеСобытия.Element.className, " ", Ложь);
Если СписокКлассов.Найти("link-opened") <> Неопределено Тогда
// Свой обработчик
КонецЕсли;
КонецПроцедуры
```
В тексте HTML-класс «link-opened» созданного элемента расположен в следующем блоке
```html
<div class=""status status-opened"">
<p><a href=""#"" class=""link-opened"">Новые</a></p>
<p>%2</p>
</div>
```
Соответственно можно создавать произвольные элементы — кнопки, ссылки, параграфы и пр., что допускается HTML+CSS

View File

@ -0,0 +1,40 @@
---
title: Обход всех строк динамического списка
---
```bsl
&НаСервере
Функция ДанныеВсехСтрокДинамическогоСпискаПулНоменклатурыРазмещение()
//Получаем схема компановки данных (здесь хранится текст запроса)
Схема = Элементы.ПулНоменклатурыРазмещение.ПолучитьИсполняемуюСхемуКомпоновкиДанных();
//Получаем настройки пользователя (отборы, сортировки и т.п.)
Настройки = Элементы.ПулНоменклатурыРазмещение.ПолучитьИсполняемыеНастройкиКомпоновкиДанных();
//Выводим динамический список в таблицу значений
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных();
МакетКомпоновки = КомпоновщикМакета.Выполнить(Схема, Настройки, , ,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
Результат = ПроцессорВывода.Вывести(ПроцессорКомпоновки); // Тут таблица значений со строками ДС
ДанныеСтрок = Новый Массив;
Для Каждого Строка Из Результат Цикл // Обходим ТЗ
ДанныеСтроки = ПараметрыЗаполненияСтрокиТабличнойЧастиРазмещение();
ЗаполнитьЗначенияСвойств(ДанныеСтроки, Строка);
ДанныеСтроки.Количество = Строка.Разместить;
ДанныеСтрок.Добавить(ДанныеСтроки);
КонецЦикла;
Возврат ДанныеСтрок;
КонецФункции
```

View File

@ -0,0 +1,13 @@
---
title: Обход выделенных строк динамического списка
---
```bsl
&НаКлиенте
ВыделенныеСтроки = Элементы.ПулНоменклатурыРазмещение.ВыделенныеСтроки;
Для Каждого Идентификатор Из ВыделенныеСтроки Цикл
Строка = ПулНоменклатурыРазмещение.НайтиПоИдентификатору(Идентификатор);
<...>
КонецЦикла;
```

View File

@ -0,0 +1,238 @@
```bsl
#Область ПрограммныйИнтерфейс
// Процедура - Записать сообщение в лог
//
// Параметры:
// Сообщение - Строка - Тело сообщения
// УровеньЛогирования - Число - Значение, полученное функциями УровеньЛогирования...()
// МассивЛогов - Массив Из Строка, Неопределено - Массив, в который будет записан лог. Если Неопределено, тогда создается новый массив
// ЗаписыватьУровеньОтладка - Булево - Если Ложь, то сообщения с уровнем "Отладка" не будут добавлены в массив. По умолчанию Ложь
// ВыводБезДополнительнойИнформации - Булево - Если Истина, то не будут выведена информация об уровне отладки и дате события. По умолчанию Ложь
// МаксимальнаяДлинаТелаСообщения - Число - Если задано, то тело сообщения будет обрезано до указанного числа, если нет - выведено без ограничений. По умолчанию 0.
//
Процедура ЗаписатьСообщениеВЛог(Знач Сообщение,
УровеньЛогирования,
МассивЛогов = Неопределено,
РежимОтладки = Ложь,
ВыводБезДополнительнойИнформации = Ложь,
МаксимальнаяДлинаТелаСообщения = 0) Экспорт
Если МаксимальнаяДлинаТелаСообщения > 0 Тогда
Если СтрДлина(Сообщение) > МаксимальнаяДлинаТелаСообщения Тогда
Сообщение = СтрШаблон("%1...", Лев(Сообщение, МаксимальнаяДлинаТелаСообщения - 3));
КонецЕсли;
КонецЕсли;
Если МассивЛогов = Неопределено Тогда
МассивЛогов = Новый Массив;
КонецЕсли;
Если УровеньЛогирования = УровеньЛогированияОтладка() И Не РежимОтладки Тогда
Возврат;
КонецЕсли;
Если ВыводБезДополнительнойИнформации Тогда
МассивЛогов.Добавить(Сообщение);
Иначе
ПредставлениеУровняЛога = ПредставлениеУровняЛогирования(УровеньЛогирования);
ТекстСообщения = СтрШаблон("%1 - %2", ПредставлениеУровняЛога, Сообщение);
МассивЛогов.Добавить(ТекстСообщения);
КонецЕсли;
КонецПроцедуры
// Процедура - Добавляет запись вида "[Отладка] 2024-11-10 - <Сообщение>" в массив логов
//
// Параметры:
// Сообщение - Строка - Тело сообщения
// МассивЛогов - Массив Из Строка -
// РежимОтладки - Булево - Если Истина, то запись уровня отладка будет добавлена в массив
//
Процедура ДобавитьЗаписьУровняОтладка(Сообщение, МассивЛогов, РежимОтладки = Ложь) Экспорт
ЗаписатьСообщениеВЛог(Сообщение, УровеньЛогированияОтладка(), МассивЛогов, РежимОтладки, Ложь);
КонецПроцедуры
// Процедура - Добавляет запись вида "[Информация] 2024-11-10 - <Сообщение>" в массив логов
//
// Параметры:
// Сообщение - Строка - Тело сообщения
// МассивЛогов - Массив Из Строка -
//
Процедура ДобавитьЗаписьУровняИнформация(Сообщение, МассивЛогов) Экспорт
ЗаписатьСообщениеВЛог(Сообщение, УровеньЛогированияИнформация(), МассивЛогов, Ложь, Ложь);
КонецПроцедуры
// Процедура - Добавляет запись вида "[Предупреждение] 2024-11-10 - <Сообщение>" в массив логов
//
// Параметры:
// Сообщение - Строка - Тело сообщения
// МассивЛогов - Массив Из Строка -
//
Процедура ДобавитьЗаписьУровняПредупреждение(Сообщение, МассивЛогов) Экспорт
ЗаписатьСообщениеВЛог(Сообщение, УровеньЛогированияПредупреждение(), МассивЛогов, Ложь, Ложь);
КонецПроцедуры
// Процедура - Добавляет запись вида "[Ошибка] 2024-11-10 - <Сообщение>" в массив логов
//
// Параметры:
// Сообщение - Строка - Тело сообщения
// МассивЛогов - Массив Из Строка -
//
Процедура ДобавитьЗаписьУровняОшибка(Сообщение, МассивЛогов) Экспорт
ЗаписатьСообщениеВЛог(Сообщение, УровеньЛогированияОшибка(), МассивЛогов, Ложь, Ложь);
КонецПроцедуры
// Функция - Массив логов в текст
//
// Параметры:
// МассивЛогов - Массив Из Строка - Массив логов, заполненный с помощью процедур модуля ЛогированиеКлиентСервер
// ПараметрыВывода - Структура - Параметры, полученные функцией ПараметрыВыводаМассиваЛоговВТекст()
//
// Возвращаемое значение:
// Строка - Логи выполнения в виде строки
//
Функция МассивЛоговВТекст(МассивЛогов, ПараметрыВывода) Экспорт
ВыводитьПрефикс = ПараметрыВывода.ВыводитьПрефикс;
ВыводитьЗаписиУровняОтладка = ПараметрыВывода.ВыводитьЗаписиУровняОтладка;
ВыводитьЗаписиУровняИнформация = ПараметрыВывода.ВыводитьЗаписиУровняИнформация;
ВыводитьЗаписиУровняПредупреждение = ПараметрыВывода.ВыводитьЗаписиУровняПредупреждение;
ВыводитьЗаписиУровняОшибка = ПараметрыВывода.ВыводитьЗаписиУровняОшибка;
НумероватьСтроки = ПараметрыВывода.НумероватьСтроки;
ЛогиКВыводу = Новый Массив;
Сч = 1;
Для Каждого Лог Из МассивЛогов Цикл
ТекущийУровеньЛога = УровеньЛогированияТекущегоЛога(Лог);
Если Не ВыводитьЗаписиУровняОтладка И ТекущийУровеньЛога = УровеньЛогированияОтладка() Тогда
Продолжить;
КонецЕсли;
Если Не ВыводитьЗаписиУровняИнформация И ТекущийУровеньЛога = УровеньЛогированияИнформация() Тогда
Продолжить;
КонецЕсли;
Если Не ВыводитьЗаписиУровняПредупреждение И ТекущийУровеньЛога = УровеньЛогированияПредупреждение() Тогда
Продолжить;
КонецЕсли;
Если Не ВыводитьЗаписиУровняОшибка И ТекущийУровеньЛога = УровеньЛогированияОшибка() Тогда
Продолжить;
КонецЕсли;
Если Не ВыводитьПрефикс Тогда
УдалитьПрефиксИзЛога(Лог);
КонецЕсли;
Если НумероватьСтроки Тогда
ЛогиКВыводу.Добавить(СтрШаблон("%1. %2", Сч, Лог));
Иначе
ЛогиКВыводу.Добавить(Лог);
КонецЕсли;
Сч = Сч + 1;
КонецЦикла;
Возврат СтрСоединить(ЛогиКВыводу, СтрШаблон("%1%2", Символы.ПС + Символы.ВК, Символы.ПС + Символы.ВК));
КонецФункции
// Функция - Параметры вывода массива логов в текст
//
// Возвращаемое значение:
// Структура - Структура параметров с ключами:
// * ВыводитьПрефикс - Булево - устанавливает, выводить ли представление уровня логирования.
// Истина - будет сообщение вида "[Информация] - <Сообщение>"
// Ложь - будет сообщение вида "<Сообщение>". По умолчанию Истина
// * ВыводитьЗаписиУровняОтладка - Булево - устанавливает, будут ли выведены записи уровня "Отладка". По умолчанию Истина
// * ВыводитьЗаписиУровняИнформация - Булево - устанавливает, будут ли выведены записи уровня "Информация". По умолчанию Истина
// * ВыводитьЗаписиУровняПредупреждение - Булево - устанавливает, будут ли выведены записи уровня "Предупреждение". По умолчанию Истина
// * ВыводитьЗаписиУровняОшибка - Булево - устанавливает, будут ли выведены записи уровня "Ошибка". По умолчанию Истина
//
Функция ПараметрыВыводаМассиваЛоговВТекст() Экспорт
ПараметрыВывода = Новый Структура;
ПараметрыВывода.Вставить("ВыводитьПрефикс", Истина);
ПараметрыВывода.Вставить("ВыводитьЗаписиУровняОтладка", Истина);
ПараметрыВывода.Вставить("ВыводитьЗаписиУровняИнформация", Истина);
ПараметрыВывода.Вставить("ВыводитьЗаписиУровняПредупреждение", Истина);
ПараметрыВывода.Вставить("ВыводитьЗаписиУровняОшибка", Истина);
ПараметрыВывода.Вставить("НумероватьСтроки", Ложь);
Возврат ПараметрыВывода;
КонецФункции
#Область УровниЛогирования
Функция ПредставлениеУровняЛогирования(УровеньЛогирования) Экспорт
Представление = "[Неопределено]";
Если УровеньЛогирования = УровеньЛогированияОтладка() Тогда
Представление = "[Отладка]";
ИначеЕсли УровеньЛогирования = УровеньЛогированияИнформация() Тогда
Представление = "[Информация]";
ИначеЕсли УровеньЛогирования = УровеньЛогированияПредупреждение() Тогда
Представление = "[Предупреждение]";
ИначеЕсли УровеньЛогирования = УровеньЛогированияОшибка() Тогда
Представление = "[Ошибка]";
КонецЕсли;
Возврат Представление;
КонецФункции
Функция УровеньЛогированияОтладка() Экспорт
Возврат 4;
КонецФункции
Функция УровеньЛогированияИнформация() Экспорт
Возврат 3;
КонецФункции
Функция УровеньЛогированияПредупреждение() Экспорт
Возврат 2;
КонецФункции
Функция УровеньЛогированияОшибка() Экспорт
Возврат 1;
КонецФункции
#КонецОбласти
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Функция УровеньЛогированияТекущегоЛога(Лог)
Результат = -1;
Если СтрНачинаетсяС(Лог, ПредставлениеУровняЛогирования(УровеньЛогированияОтладка())) Тогда
Результат = УровеньЛогированияОтладка();
ИначеЕсли СтрНачинаетсяС(Лог, ПредставлениеУровняЛогирования(УровеньЛогированияИнформация())) Тогда
Результат = УровеньЛогированияИнформация();
ИначеЕсли СтрНачинаетсяС(Лог, ПредставлениеУровняЛогирования(УровеньЛогированияПредупреждение())) Тогда
Результат = УровеньЛогированияПредупреждение();
ИначеЕсли СтрНачинаетсяС(Лог, ПредставлениеУровняЛогирования(УровеньЛогированияОшибка())) Тогда
Результат = УровеньЛогированияОшибка();
КонецЕсли;
Возврат Результат;
КонецФункции
Процедура УдалитьПрефиксИзЛога(Лог)
УровеньЛогированияЛога = УровеньЛогированияТекущегоЛога(Лог);
УдаляемаяПодстрока = СтрШаблон("%1 - ", ПредставлениеУровняЛогирования(УровеньЛогированияЛога));
Лог = СтрЗаменить(Лог, УдаляемаяПодстрока, "");
КонецПроцедуры
#КонецОбласти
```

View File

@ -0,0 +1,43 @@
```bsl
// Функция - Обращение к пользователю
//
// Параметры:
// Пользователь - СправочникСсылка.Пользователи -
//
// Возвращаемое значение:
// Строка - Возвращает обращение вида "Уважаемый <Фамилия Имя Отчество>" с учетом пола.
// Если не удается определить пол, возвращается "Уважаемый(ая)...",
// если не удается распарсить ФИО, вместо <Фамилия Имя Отчество> выводится "пользователь"
//
Функция ОбращениеКПользователю(Пользователь)
Обращение = "Уважаемый(ая)";
ФИО = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Пользователь, "Наименование", Истина);
Если Не ЗначениеЗаполнено(ФИО) Тогда
ФИО = "пользователь";
КонецЕсли;
Если ЗначениеЗаполнено(ФИО) Тогда
ЧастиИмени = СтрРазделить(ФИО, " ", Ложь);
Если ЧастиИмени.Количество() = 3 Тогда
Отчество = СокрЛП(ЧастиИмени.Получить(2));
Если СтрЗаканчиваетсяНа(НРег(Отчество), "вич") Тогда
Обращение = "Уважаемый";
ИначеЕсли СтрЗаканчиваетсяНа(НРег(Отчество), "вна") Тогда
Обращение = "Уважаемая";
КонецЕсли;
КонецЕсли;
КонецЕсли;
Возврат СтрШаблон("%1 %2!", Обращение, ФИО);
КонецФункции
```

View File

@ -0,0 +1,118 @@
```bsl
// Функция - Уникальный идентификатор набора ссылок. Ключ записи.
//
// Параметры:
// СписокUUID - Массив Из Ссылка - Массив со ссылками на объекты БД
// ВозвращатьКакУИД - Булево - определяет, возвращать ли результат как УникальныйИдентификатор. Если Ложь - возвращается строкой
//
// Возвращаемое значение:
// Строка, УникальныйИдентификатор - Ключ записи для некоторого набора ссылок
//
Функция УникальныйИдентификаторНабораСсылок(СписокСсылок, ВозвращатьКакУИД = Ложь) Экспорт
// получаем UUID строкой по ссылкам
ЧастиЗапроса = Новый Массив;
ЧастьЗапросаВыборка =
"ВЫБРАТЬ
| ПРЕДСТАВЛЕНИЕ(УНИКАЛЬНЫЙИДЕНТИФИКАТОР(Ссылка))
|ИЗ
| %ИМЯ ТАБЛИЦЫ%
|ГДЕ
| Ссылка В (&СписокСсылок)
|";
ПерваяСсылка = Истина;
Для Каждого Ссылка Из СписокСсылок Цикл
Если Не ПерваяСсылка Тогда
ЧастиЗапроса.Добавить("
| ОБЪЕДИНИТЬ ВСЕ
|
|");
КонецЕсли;
ПолноеИмяМетаданных = Ссылка.Метаданные().ПолноеИмя();
ЧастиЗапроса.Добавить(СтрЗаменить(ЧастьЗапросаВыборка, "%ИМЯ ТАБЛИЦЫ%", ПолноеИмяМетаданных));
ПерваяСсылка = Ложь;
КонецЦикла;
Запрос = Новый Запрос;
Запрос.Текст = СтрСоединить(ЧастиЗапроса, "");
Запрос.УстановитьПараметр("СписокСсылок", СписокСсылок);
Возврат УникальныйИдентификаторНабораСтрок(Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку(0), ВозвращатьКакУИД);
КонецФункции
// Функция - Уникальный идентификатор набора строк. Ключ записи.
//
// Параметры:
// СписокUUID - Массив Из Строка - Массив с произвольными строками
// ВозвращатьКакУИД - Булево - определяет, возвращать ли результат как УникальныйИдентификатор. Если Ложь - возвращается строкой
//
// Возвращаемое значение:
// Строка, УникальныйИдентификатор - Ключ записи для некоторого набора строк
//
Функция УникальныйИдентификаторНабораСтрок(СписокСтрок, ВозвращатьКакУИД = Ложь) Экспорт
СписокДляСортировки = Новый СписокЗначений;
СписокДляСортировки.ЗагрузитьЗначения(СписокСтрок);
СписокДляСортировки.СортироватьПоЗначению(НаправлениеСортировки.Возр);
СписокСтрок = СписокДляСортировки.ВыгрузитьЗначения();
СтрокаОбщая = СтрСоединить(СписокСтрок, ",");
Хеширование = Новый ХешированиеДанных(ХешФункция.SHA1);
Хеширование.Добавить(СтрокаОбщая);
ДвоичныеДанные = Хеширование.ХешСумма;
Хеш = НРеголучитьHexСтрокуИзДвоичныхДанных(ДвоичныеДанные));
// Преобразуем хеш в массив байтов (берем первые 16 байтов)
МассивБайтов = Новый Массив;
Сч = 1;
Пока Сч < 32 Цикл
Байт = Сред(Хеш, Сч, 2);
МассивБайтов.Добавить(Байт);
Сч = Сч + 2;
КонецЦикла;
// Версия UUID 5
МассивБайтов[6] = СтрШаблон("5%1", Прав(МассивБайтов[6], 1));
// Вариант RFC 4122
ДесятичноеЧисло = ЧислоИзШестнадцатеричнойСтроки(СтрШаблон("0x%1", МассивБайтов[8]));
БезДвухБитов = ПобитовоеИ(ДесятичноеЧисло, 63); // обнуляем старшие 2 бита, 63 = 0011 1111
ИтоговыйБайт = ПобитовоеИли(БезДвухБитов, 128); // записываем в старшие 2 бита 10, 128 = 1000 000
СимволыHEX = "0123456789abcdef";
СтаршийРазряд = Сред(СимволыHEX, Цел(ИтоговыйБайт / 16) + 1, 1);
МладшийРазряд = Сред(СимволыHEX, (ИтоговыйБайт % 16) + 1, 1);
МассивБайтов[8] = СтаршийРазряд + МладшийРазряд;
UUIDБезРазделителей = СтрСоединить(МассивБайтов, "");
ИтоговыйUUID = СтрШаблон("%1-%2-%3-%4-%5",
Сред(UUIDБезРазделителей, 1, 8),
Сред(UUIDБезРазделителей, 9, 4),
Сред(UUIDБезРазделителей, 13, 4),
Сред(UUIDБезРазделителей, 17, 4),
Сред(UUIDБезРазделителей, 20, 12));
Если Не СтроковыеФункцииКлиентСервер.ЭтоУникальныйИдентификатор(ИтоговыйUUID) Тогда
ВызватьИсключение "Не удалось получить уникальный идентификатор из входных данных. Строка " + ИтоговыйUUID + " не отвечает требованиям УИД";
КонецЕсли;
Если ВозвращатьКакУИД Тогда
ИтоговыйUUID = Новый УникальныйИдентификатор(ИтоговыйUUID);
КонецЕсли;
Возврат ИтоговыйUUID;
КонецФункции
```