Новые статьи
This commit is contained in:
parent
e410308e64
commit
651d1c19cc
@ -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 – путь, куда будет выгружена база данных.
|
@ -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>",
|
||||||
|
ЗаголовокВиджета,
|
||||||
|
КоличествоНовых,
|
||||||
|
КоличествоВРаботе,
|
||||||
|
КоличествоЗакрытых);
|
||||||
|
|
||||||
|
Возврат Текст;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
```
|
||||||
|
|
||||||
|
В результате получается что-то вроде
|
||||||
|

|
||||||
|
|
||||||
|
Для отработки кликов на элементах виджета нужно переопределить событие элемента «ПриНажатии», например:
|
||||||
|
```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
|
@ -0,0 +1,40 @@
|
|||||||
|
---
|
||||||
|
title: Обход всех строк динамического списка
|
||||||
|
---
|
||||||
|
|
||||||
|
```bsl
|
||||||
|
&НаСервере
|
||||||
|
Функция ДанныеВсехСтрокДинамическогоСпискаПулНоменклатурыРазмещение()
|
||||||
|
|
||||||
|
//Получаем схема компановки данных (здесь хранится текст запроса)
|
||||||
|
Схема = Элементы.ПулНоменклатурыРазмещение.ПолучитьИсполняемуюСхемуКомпоновкиДанных();
|
||||||
|
|
||||||
|
//Получаем настройки пользователя (отборы, сортировки и т.п.)
|
||||||
|
Настройки = Элементы.ПулНоменклатурыРазмещение.ПолучитьИсполняемыеНастройкиКомпоновкиДанных();
|
||||||
|
|
||||||
|
//Выводим динамический список в таблицу значений
|
||||||
|
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных();
|
||||||
|
МакетКомпоновки = КомпоновщикМакета.Выполнить(Схема, Настройки, , ,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
|
||||||
|
|
||||||
|
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
|
||||||
|
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);
|
||||||
|
|
||||||
|
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
|
||||||
|
Результат = ПроцессорВывода.Вывести(ПроцессорКомпоновки); // Тут таблица значений со строками ДС
|
||||||
|
|
||||||
|
ДанныеСтрок = Новый Массив;
|
||||||
|
|
||||||
|
Для Каждого Строка Из Результат Цикл // Обходим ТЗ
|
||||||
|
|
||||||
|
ДанныеСтроки = ПараметрыЗаполненияСтрокиТабличнойЧастиРазмещение();
|
||||||
|
ЗаполнитьЗначенияСвойств(ДанныеСтроки, Строка);
|
||||||
|
ДанныеСтроки.Количество = Строка.Разместить;
|
||||||
|
|
||||||
|
ДанныеСтрок.Добавить(ДанныеСтроки);
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Возврат ДанныеСтрок;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
```
|
@ -0,0 +1,13 @@
|
|||||||
|
---
|
||||||
|
title: Обход выделенных строк динамического списка
|
||||||
|
---
|
||||||
|
|
||||||
|
```bsl
|
||||||
|
&НаКлиенте
|
||||||
|
ВыделенныеСтроки = Элементы.ПулНоменклатурыРазмещение.ВыделенныеСтроки;
|
||||||
|
|
||||||
|
Для Каждого Идентификатор Из ВыделенныеСтроки Цикл
|
||||||
|
Строка = ПулНоменклатурыРазмещение.НайтиПоИдентификатору(Идентификатор);
|
||||||
|
<...>
|
||||||
|
КонецЦикла;
|
||||||
|
```
|
@ -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 - ", ПредставлениеУровняЛогирования(УровеньЛогированияЛога));
|
||||||
|
Лог = СтрЗаменить(Лог, УдаляемаяПодстрока, "");
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
```
|
@ -0,0 +1,43 @@
|
|||||||
|
```bsl
|
||||||
|
// Функция - Обращение к пользователю
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Пользователь - СправочникСсылка.Пользователи -
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Строка - Возвращает обращение вида "Уважаемый <Фамилия Имя Отчество>" с учетом пола.
|
||||||
|
// Если не удается определить пол, возвращается "Уважаемый(ая)...",
|
||||||
|
// если не удается распарсить ФИО, вместо <Фамилия Имя Отчество> выводится "пользователь"
|
||||||
|
//
|
||||||
|
Функция ОбращениеКПользователю(Пользователь)
|
||||||
|
|
||||||
|
Обращение = "Уважаемый(ая)";
|
||||||
|
|
||||||
|
ФИО = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Пользователь, "Наименование", Истина);
|
||||||
|
|
||||||
|
Если Не ЗначениеЗаполнено(ФИО) Тогда
|
||||||
|
ФИО = "пользователь";
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если ЗначениеЗаполнено(ФИО) Тогда
|
||||||
|
|
||||||
|
ЧастиИмени = СтрРазделить(ФИО, " ", Ложь);
|
||||||
|
|
||||||
|
Если ЧастиИмени.Количество() = 3 Тогда
|
||||||
|
|
||||||
|
Отчество = СокрЛП(ЧастиИмени.Получить(2));
|
||||||
|
|
||||||
|
Если СтрЗаканчиваетсяНа(НРег(Отчество), "вич") Тогда
|
||||||
|
Обращение = "Уважаемый";
|
||||||
|
ИначеЕсли СтрЗаканчиваетсяНа(НРег(Отчество), "вна") Тогда
|
||||||
|
Обращение = "Уважаемая";
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат СтрШаблон("%1 %2!", Обращение, ФИО);
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
```
|
@ -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;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
```
|
Loading…
x
Reference in New Issue
Block a user