// Возвращает всех родителей элемента, согласно рекомендациям на ИТС:
// "Получение всех родителей элемента" (https://its.1c.ru/db/metod8dev/content/2659/hdoc)
//
// Параметры:
// СсылкаНаЭлемент - СправочникСсылка, ПланВидовХарактеристикСсылка - Ссылка на элемент, родителей которого нужно найти
// КоличествоВыбираемыхЗаПорцию - Число - Количество выбираемых родителей за одно выполнение запроса.
// Используется минимальное число из переданного и ограничения количества уровней в конфигураторе
//
// Возвращаемое значение:
// Массив[СправочникСсылка, ПланВидовХарактеристикСсылка] - массив с родителями элемента
//
&НаСервереБезКонтекста
Функция РодителиЭлемента(СсылкаНаЭлемент, Знач КоличествоВыбираемыхЗаПорцию = 5)
РодителиЭлемента = Новый Массив;
Если НЕ ЗначениеЗаполнено(СсылкаНаЭлемент) Тогда
Возврат РодителиЭлемента;
КонецЕсли;
МетаданныеЭлемента = СсылкаНаЭлемент.Метаданные();
Если МетаданныеЭлемента.ОграничиватьКоличествоУровней Тогда
КоличествоВыбираемыхЗаПорцию = Мин(КоличествоВыбираемыхЗаПорцию, МетаданныеЭлемента.КоличествоУровней);
КонецЕсли;
ВыбираемыеПоля = Новый Массив;
ВыбираемоеПоле = "Родитель";
Для НомерРодителя = 1 По КоличествоВыбираемыхЗаПорцию Цикл
ВыбираемыеПоля.Добавить(ВыбираемоеПоле);
ВыбираемоеПоле = ВыбираемоеПоле + ".Родитель";
КонецЦикла;
ТекстЗапроса = "ВЫБРАТЬ %1 ИЗ %2 ГДЕ Ссылка = &ТекущийЭлемент";
ТекстЗапроса = СтрШаблон(ТекстЗапроса, СтрСоединить(ВыбираемыеПоля, ","), МетаданныеЭлемента.ПолноеИмя());
Запрос = Новый Запрос(ТекстЗапроса);
ТекущийЭлемент = СсылкаНаЭлемент;
Пока ЗначениеЗаполнено(ТекущийЭлемент) Цикл
Запрос.УстановитьПараметр("ТекущийЭлемент", ТекущийЭлемент);
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
Прервать;
КонецЕсли;
Выборка = Результат.Выбрать();
Выборка.Следующий();
Для НомерКолонки = 0 По Результат.Колонки.Количество() - 1 Цикл
ТекущийЭлемент = Выборка[НомерКолонки];
Если ЗначениеЗаполнено(ТекущийЭлемент) Тогда
РодителиЭлемента.Добавить(ТекущийЭлемент);
Иначе
Прервать;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Возврат РодителиЭлемента;
КонецФункции
ОповеститьОбИзменении(Тип("ДокументСсылка.РаботаВВыходныеИПраздничныеДни"));
Автор: ildarovich
//Например, чтобы удалить любое количество точек в конце строки, можно воспользоваться выражением:
СтрЗаменить(СокрП(СтрЗаменить(ИсходнаяСтрока, ".", " ")), " ", ".")
//Правда, если исходная строка изначально содержит пробелы, то результат будет неправильным. В этом случае предварительно требуется заменить пробелы каким-либо редким сочетанием символов, а после преобразования выполнить обратную замену.
СтрЗаменить(СтрЗаменить(СокрП(СтрЗаменить(СтрЗаменить(ИсходнаяСтрока, " ", Символы.НПП), ".", " ")), " ", "."), Символы.НПП, " ")
//Функция для определения вместится ли текст в ячейку:
//
// Параметры:
// пОбласть -Область табличного документа- Область табличного документа, которую надо проверить на вместимости.
// "пОбласть = пТабДок.Области.ТекстЗаготовки;". "ТекстЗаготовки" имя ячейки.
//
// Для возможности использования этого метода необходимо соблюдать следующие условия:
//
// пТабДок - Табличный документ - Табличный документ, в котором происходит проверка.
// "пТабДок = Макет.ПолучитьОбласть("ТекстЗаготовки");"
//
// пТекст - Строка - Проверяемый текст.
//
// 1. Необходимо как-нибудь назвать область.
// 2. Заполнение области = Текст, а не Параметр или Шаблон.
// Во всяком случае, я ничего простого не придумал. И так как жизнь это усложняет не сильно не стал заморачиваться из-за этого.
// 3. Размещение текста (Параметр ячейки) = Перенос. Вот это нужно обязательно! Размещение текста програмно поставить можно, но эффект от изменения,
// насколько я понял, появляется только после отображения табличного документа с этой ячейкой.
//
// Возвращаемое значение:
// Булево.
//
Функция ТекстУмещаетсяВЯчейке(пОбласть, пТабДок, пТекст) Экспорт
ВысотаДо = ВысотаОбластиВмм(пОбласть, пТабДок);
// Скопируем область в новый табличный документ.
// И там уже будем играть с её свойствами.
ВремТабДок = Новый ТабличныйДокумент;
ВремТабДок.Вывести(пТабДок);
ВремОбласть = ВремТабДок.Область(пОбласть.Имя);
ВремОбласть.АвтоВысотаСтроки = Истина;
ВремОбласть.ВысотаСтроки = 0;
ВремОбласть.Текст = пТекст + "Щ"; // Для исключения ситуаций вида "на грани переноса"
ВысотаПосле = ВысотаОбластиВмм(ВремОбласть, ВремТабДок);
Возврат ВысотаДо >= ВысотаПосле;
КонецФункции
//Функция возвращает высоту области таб. документа в мм
//
// Параметры:
// пОбласть - Область табличного документа - Область табличного документа которую надо проверить.
//
// пТабДок - Табличный документ - Табличный документ, в котором происходит проверка.
//
// Возвращаемое значение:
// число.
//
Функция ВысотаОбластиВмм(пОбласть, пТабДок)
Надпись = пТабДок.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Текст);
Надпись.Расположить(пОбласть);
Высота = Надпись.Высота;
пТабДок.Рисунки.Удалить(Надпись);
Возврат(Высота);
КонецФункции
&НаКлиентеНаСервере
Функция АктуальныеСимволыПрепроцессора() Экспорт
Результат = новый Массив;
#Если НаКлиенте Тогда
Результат.Добавить("НаКлиенте");
#КонецЕсли
#Если НаСервере Тогда
Результат.Добавить("НаСервере");
#КонецЕсли
#Если Клиент Тогда
Результат.Добавить("Клиент");
#КонецЕсли
#Если Сервер Тогда
Результат.Добавить("Сервер");
#КонецЕсли
#Если МобильноеПриложениеКлиент Тогда
Результат.Добавить("МобильноеПриложениеКлиент");
#КонецЕсли
#Если МобильноеПриложениеСервер Тогда
Результат.Добавить("МобильноеПриложениеСервер");
#КонецЕсли
#Если МобильныйКлиент Тогда
Результат.Добавить("МобильныйКлиент");
#КонецЕсли
#Если ТолстыйКлиентОбычноеПриложение Тогда
Результат.Добавить("ТолстыйКлиентОбычноеПриложение");
#КонецЕсли
#Если ТолстыйКлиентУправляемоеПриложение Тогда
Результат.Добавить("ТолстыйКлиентУправляемоеПриложение");
#КонецЕсли
#Если ВнешнееСоединение Тогда
Результат.Добавить("ВнешнееСоединение");
#КонецЕсли
#Если ТонкийКлиент Тогда
Результат.Добавить("ТонкийКлиент");
#КонецЕсли
#Если ВебКлиент Тогда
Результат.Добавить("ВебКлиент");
#КонецЕсли
Возврат Результат;
КонецФункции
// Функция возвращает сведения о внешней обработке.
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = Новый Структура;
ПараметрыРегистрации.Вставить("Вид", "ДополнительнаяОбработка");
ПараметрыРегистрации.Вставить("Наименование", "Демо обработка");
ПараметрыРегистрации.Вставить("Версия", "1.0");
ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина);
ПараметрыРегистрации.Вставить("Информация", "Демо обработка");
ТаблицаКоманд = ПолучитьТаблицуКоманд();
ДобавитьКоманду(ТаблицаКоманд,
"Демо обработка",
"Идентификатор",
"ВызовСерверногоМетода",
Истина,"");
ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
Возврат ПараметрыРегистрации;
КонецФункции
Функция ПолучитьТаблицуКоманд()
Команды = Новый ТаблицаЗначений;
Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
Возврат Команды;
КонецФункции
Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")
НоваяКоманда = ТаблицаКоманд.Добавить();
НоваяКоманда.Представление = Представление;
НоваяКоманда.Идентификатор = Идентификатор;
НоваяКоманда.Использование = Использование;
НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
НоваяКоманда.Модификатор = Модификатор;
КонецПроцедуры
Процедура ВыполнитьКоманду(Идентификатор, ОбъектыНазначения) Экспорт
// Тело процедуры
КонецПроцедуры
//добавим скидку на товары
Если НЕ СуммаСкидки = 0 Тогда
Ограничения = Новый ТаблицаЗначений;
Ограничения.Колонки.Добавить("ЦеноваяГруппа");
Ограничения.Колонки.Добавить("СуммаБезСкидки");
Ограничения.Колонки.Добавить("СуммаРучнойСкидки");
Ограничения.Колонки.Добавить("СуммаАвтоматическойСкидки");
Ограничения.Колонки.Добавить("МаксимальныйПроцентРучнойСкидки");
Ограничения.Колонки.Добавить("МаксимальныйПроцентРучнойНаценки");
Ограничения.Колонки.Добавить("МаксимальнаяСуммаРучнойСкидки");
Ограничения.Колонки.Добавить("МаксимальнаяСуммаРучнойНаценки");
СтрОграничения = Ограничения.Добавить();
СтрОграничения.ЦеноваяГруппа = Справочники.ЦеновыеГруппы.ПустаяСсылка();
СтрОграничения.СуммаБезСкидки = ЗаказКлиентаОбъект.Товары.Итог("Сумма");
СтрОграничения.СуммаРучнойСкидки = 0;
СтрОграничения.СуммаАвтоматическойСкидки = 0;
СтрОграничения.МаксимальныйПроцентРучнойСкидки = 999.99;
СтрОграничения.МаксимальныйПроцентРучнойНаценки = 999.99;
СтрОграничения.МаксимальнаяСуммаРучнойСкидки = (ЗаказКлиентаОбъект.Товары.Итог("Сумма")*999.99)/100;
СтрОграничения.МаксимальнаяСуммаРучнойНаценки = (ЗаказКлиентаОбъект.Товары.Итог("Сумма")*999.99)/100;
ТЗ_Товары = ЗаказКлиентаОбъект.Товары.Выгрузить();
ТЗ_Товары.Колонки.Добавить("ЦеноваяГруппа");
АдресВремХранилища = ПоместитьВоВременноеХранилище(Новый Структура("Ограничения, Товары, ИспользоватьОграниченияРучныхСкидок", Ограничения, ТЗ_Товары, Ложь), Новый УникальныйИдентификатор());
СкидкиНаценкиСервер.НазначитьРучнуюСкидку(ЗаказКлиентаОбъект,"Товары", СуммаСкидки,Ложь,Ложь,Ложь,Ложь,Неопределено,АдресВремХранилища,Ложь);
КонецЕсли;
Процедура МодифицироватьНоменклатураФормаЭлемента(ЭтаФорма) Экспорт
ЭлементыФормы = ЭтаФорма.ЭлементыФормы;
ШиринаНадписи = 160;
ВерхНадписи = 5;
ЛевоНадписи = 5;
СтраницаАнализПитания = ЭлементыФормы.ПанельСвойствНоменклатуры.Страницы.Добавить("АнализПитания", "Анализ питания");
ЭлементыФормы.ПанельСвойствНоменклатуры.ТекущаяСтраница = СтраницаАнализПитания;
НадписьГруппаПродуктовПитания = ЭтаФорма.ЭлементыФормы.Добавить(Тип("Надпись"), "НадписьГруппаПродуктовПитания", Истина, ЭлементыФормы.ПанельСвойствНоменклатуры);
НадписьГруппаПродуктовПитания.Заголовок = "Группа продуктов питания: ";
НадписьГруппаПродуктовПитания.Ширина = ШиринаНадписи;
НадписьГруппаПродуктовПитания.Верх = ВерхНадписи;
НадписьГруппаПродуктовПитания.Лево = ЛевоНадписи;
ПолеГруппаПродуктовПитания = ЭтаФорма.ЭлементыФормы.Добавить(Тип("ПолеВвода"), "ПолеГруппаПродуктовПитания", Истина, ЭлементыФормы.ПанельСвойствНоменклатуры);
ПолеГруппаПродуктовПитания.Данные = "ГруппаПродуктовПитания";
ПолеГруппаПродуктовПитания.Ширина = 150;
ПолеГруппаПродуктовПитания.Верх = ВерхНадписи;
ПолеГруппаПродуктовПитания.Лево = ЛевоНадписи + ШиринаНадписи + 5;
ЭлементыФормы.ПанельСвойствНоменклатуры.ТекущаяСтраница = ЭлементыФормы.ПанельСвойствНоменклатуры.Страницы.Общее;
КонецПроцедуры
//выбираем сотрудника
ЗапросВ = КомСоединение.NewObject("Запрос");
ЗапросВ.Текст = "
|ВЫБРАТЬ первые 1
|Сотрудники.Ссылка КАК Сотрудник
|ИЗ
|Справочник.Сотрудники КАК Сотрудники
|ГДЕ
|НЕ Сотрудники.СтруктураКомпании = ЗНАЧЕНИЕ(Справочник.СтруктураКомпании.ПустаяСсылка)
|И Сотрудники.ФизическоеЛицо.Наименование = &ФизическоеЛицо
|И Сотрудники.ПометкаУдаления = ЛОЖЬ
|";
ЗапросВ.УстановитьПараметр("ФизическоеЛицо", СтруктураДанных.Сотрудник.Наименование);
com_Результат = ЗапросВ.Выполнить().Выбрать();// COM объект
Если com_Результат.следующий() Тогда
//нашли сотрудника
com_ТЗ_Сотрудники = com_Результат.Сотрудник;// COM объект
// Получаем таблицу значений из COM-объекта
// COMОбъект в -> строку
// Запишем COMОбъект в строку на стороне базы-источника
стр_ТЗ_Сотрудники = КомСоединение.ЗначениеВСтрокуВнутр(com_ТЗ_Сотрудники);
// получим таблицу значений из строки
ТЗ_Сотрудники = ЗначениеИзСтрокиВнутр(стр_ТЗ_Сотрудники);
МенеджерДокумента = КомСоединение.Документы.ЗаписьВРНФактическиеОтпуска;
КомСоединение.УстановитьБезопасныйРежим(Ложь);
КомСоединение.УстановитьПривилегированныйРежим(Истина);
НовДок = МенеджерДокумента.СоздатьДокумент();
НовДок.Дата = СтруктураДанных.Период;
НовДок.Сотрудник...
Иначе
//соответственно не нашли
com_ТЗ_Сотрудники = Неопределено;
КонецЕсли;
&НаСервереБезКонтекста
Функция ПолучитьИмяФормыВыбора(Ссылка)
Возврат Ссылка.Метаданные().ПолноеИмя() + ".ФормаВыбора";
КонецФункции
&НаСервере
Процедура ВыбратьДокументыНаСервере()
ТЗДокументы.Очистить();
СписокИменДокументов = СформироватьСписокСТипамиДокументов();
ТекстЗапроса = "";
Для каждого Вид Из СписокИменДокументов Цикл
Если ТекстЗапроса<>"" Тогда
ТекстЗапроса=ТекстЗапроса+"
|ОБЪЕДИНИТЬ ВСЕ ";
КонецЕсли;
Шаблон =
"ВЫБРАТЬ
| ТЧ.Ссылка КАК Ссылка,
| ТЧ.Номенклатура КАК Номенклатура
|ИЗ
| Документ.ПриобретениеТоваровУслуг.Товары КАК ТЧ
|ГДЕ ТЧ.Ссылка.Проведен И ТЧ.Номенклатура.ВидНоменклатуры = &ВидНоменклатуры";
ТекстЗапроса = ТекстЗапроса+СтрЗаменить(Шаблон, "ПриобретениеТоваровУслуг", Вид);
КонецЦикла;
Запрос = Новый Запрос(ТекстЗапроса);
Запрос.УстановитьПараметр("ВидНоменклатуры", ВидНоменклатуры);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
НоваСтрокаТЗ = ТЗДокументы.Добавить();
НоваСтрокаТЗ.Документ = Выборка.Ссылка;
КонецЦикла;
КонецПроцедуры
Функция СформироватьСписокСТипамиДокументов()
СписокТиповДокументов = Новый Массив;
СписокТиповДокументов.Добавить(Метаданные.Документы.ПриобретениеТоваровУслуг.Имя);
СписокТиповДокументов.Добавить(Метаданные.Документы.ВозвратТоваровОтКлиента.Имя);
СписокТиповДокументов.Добавить(Метаданные.Документы.ВозвратТоваровПоставщику.Имя);
СписокТиповДокументов.Добавить(Метаданные.Документы.ПеремещениеТоваров.Имя);
СписокТиповДокументов.Добавить(Метаданные.Документы.СборкаТоваров.Имя);
СписокТиповДокументов.Добавить(Метаданные.Документы.ПрочееОприходованиеТоваров.Имя);
Возврат СписокТиповДокументов;
КонецФункции
&НаСервере
Функция СхемаКомпоновкиСтрокой(Схема) Экспорт
СтрокаСхемы = "";
ЗаписьXML = Новый ЗаписьXML;
Путь = ПолучитьИмяВременногоФайла("xml");
ЗаписьXML.ОткрытьФайл(Путь);
СериализаторXDTO.ЗаписатьXML(
ЗаписьXML,
Схема,
"dataComposition",
"http://v8.1c.ru/8.1/data-composition-system/composition-template");
ЗаписьXML.Закрыть();
ЧтениеТекста = Новый ЧтениеТекста(Путь);
СтрокаСхемы = ЧтениеТекста.Прочитать();
ЧтениеТекста.Закрыть();
Возврат СтрокаСхемы;
КонецФункции
Процедура ВыполнитьНажатие(Команда)
ИмяФайла = "Обмен";
//ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
//
//ДиалогОткрытияФайла.ПолноеИмяФайла = ИмяФайла+".csv";
//ДиалогОткрытияФайла.Каталог = "C:\Users\Сотрудник_1С\Desktop\Внешние обработки";
Режим = РежимДиалогаВыбораФайла.Открытие;
ДиалогВыбора = новый ДиалогВыбораФайла(Режим);
//ДиалогВыбора.ПолноеИмяФайла = "";
//Фильтр = "Файл данных (*.csv)|*.csv";
//ДиалогВыбора.Фильтр = Фильтр;
ДиалогВыбора.Заголовок = "Выберите Каталог";
Если ДиалогВыбора.Выбрать() Тогда
ИмяФайла = ДиалогВыбора.ПолноеИмяФайла;
КонецЕсли;
//ИмяФайла = "C:\Users\Сотрудник_1С\Desktop\Внешние обработки"+"Обмен.csv";
ВыгрузитьВCSV(ИмяФайла);
КонецПроцедуры
Функция ВыгрузитьВCSV(имяФайлаCSV);
разделитель = ";";
ТаблицаЗначений = ПолучитьНоменклатуру();
//Тут может быть любое получение данных, в моем случае номенклатура, цены, бренд и остатки
текст = СоздатьДанныеCSV(ТаблицаЗначений,разделитель);
ЗаписатьCSV(текст,имяФайлаCSV);
КонецФункции
Функция СоздатьДанныеCSV(ТаблицаЗначений,разделитель)
текст="";
для каждого запись из ТаблицаЗначений Цикл
если текст="" тогда
текст=СоздатьЗаголовкиCSV(ТаблицаЗначений,разделитель)
+ Символы.ПС;
КонецЕсли;
сообщить(запись.Наименование);
текст = текст + запись.Код
+ разделитель + запись.КодПроизводителя
+ разделитель + запись.Наименование
+ разделитель + запись.Цена
+ разделитель + запись.Бренд
+ разделитель + запись.Наличие
+ Символы.ПС;
КонецЦикла;
//сообщить(текст);
Возврат текст;
КонецФункции //
Функция ЗаписатьCSV(текст,имяФайла)
кодировка = КодировкаТекста.ANSI;
ТекстовыйФайлЗапись = Новый ЗаписьТекста(имяФайла,Кодировка);
//ТекстовыйФайлЗапись.ЗаписатьСтроку(текст);
ТекстовыйФайлЗапись.Записать(текст);
ТекстовыйФайлЗапись.Закрыть();
Возврат 0;
КонецФункции
&НаСервере
мПользователи = ПользователиИнформационнойБазы.ПолучитьПользователей();
Для Каждого мПользователь Из мПользователи Цикл
Если ПустаяСтрока(
мПользователь.СохраняемоеЗначениеПароля)
И мПользователь.АутентификацияСтандартная Тогда
Сообщить(мПользователь);
КонецЕсли;
КонецЦикла;
&НаСервере
Процедура СоздатьПользователя(ИмяПользователя, ПолноеИмя, Пароль, ГруппаДоступа)
ОписаниеПользователяИБ = Пользователи.НовоеОписаниеПользователяИБ();
ОписаниеПользователяИБ.Имя = ИмяПользователя;
ОписаниеПользователяИБ.ПолноеИмя = ПолноеИмя;
ОписаниеПользователяИБ.Пароль = Пароль;
ОписаниеПользователяИБ.ПарольУстановлен = Истина;
ОписаниеПользователяИБ.ПоказыватьВСпискеВыбора = Истина;
ОписаниеПользователяИБ.АутентификацияСтандартная = Истина;
ОписаниеПользователяИБ.АутентификацияОС = Ложь;
СоздаватьПользователяИБ = Истина;
НачатьТранзакцию();
Попытка
// Создадим пользователя ИБ с заданными настройками
Пользователи.УстановитьСвойстваПользователяИБ(
ИмяПользователя, ОписаниеПользователяИБ, СоздаватьПользователяИБ);
// Создадим пользователя в справочнике "Пользователи"
ПользовательОбъект = Справочники.Пользователи.СоздатьЭлемент();
ПользовательОбъект.Наименование = ОписаниеПользователяИБ.ПолноеИмя;
// Установим связь пользователя ИБ и пользователя из справочника "Пользователи"
СвойстваПользователяИБ = Новый Структура;
СвойстваПользователяИБ.Вставить("Действие", "Записать");
СвойстваПользователяИБ.Вставить("УникальныйИдентификатор", ОписаниеПользователяИБ.УникальныйИдентификатор);
ПользовательОбъект.ДополнительныеСвойства.Вставить("ОписаниеПользователяИБ", СвойстваПользователяИБ);
ПользовательОбъект.Записать();
// Добавим пользователя в группу доступа;
ГруппаДоступа = ГруппаДоступа.ПолучитьОбъект();
ПользователиВГруппе = ГруппаДоступа.Пользователи.Добавить();
ПользователиВГруппе.Пользователь = ПользовательОбъект.Ссылка;
ГруппаДоступа.Записать();
// Пример добавления дополнительных ролей пользователю,
// в случае если не все необходимые роли есть в группах доступа
// Сначала получим свойства созданного пользователя с ролями,
// которые были назначены из заданных групп доступа
СвойстваСозданногоПользователяИБ =
Пользователи.СвойстваПользователяИБ(ОписаниеПользователяИБ.УникальныйИдентификатор);
// в массиве указываются названия ролей из конфигурации
СвойстваСозданногоПользователяИБ.Роли.Добавить("ЗапускВебКлиента");
СвойстваСозданногоПользователяИБ.Роли.Добавить("БазовыеПраваБСП");
СвойстваСозданногоПользователяИБ.Роли.Добавить("ПолныеПрава");
// Отключаем флаг создания нового, так как пользователь уже создан
СоздаватьПользователяИБ = Ложь;
Пользователи.УстановитьСвойстваПользователяИБ(
ИмяПользователя, СвойстваСозданногоПользователяИБ, СоздаватьПользователяИБ);
ЗафиксироватьТранзакцию();
Исключение
Если ТранзакцияАктивна() Тогда
ОтменитьТранзакцию();
КонецЕсли;
ИмяСобытия = "Создание пользователя";
ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Ошибка,, ИмяПользователя, ОписаниеОшибки());
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры