Как программно создать нового пользователя или скопировать настройки существующего? Часто встречаю вопросы касаемые программного создания и настройки прав пользователей.
В этот статье я приведу примеры для Обычного и Управляемого приложений, которые программно создают пользователя в конфигураторе и в режиме Предприятие (справочник пользователи) и установку Групп пользователей.
В приложении к статье обработки, код которых приведен ниже: Скачать обработки
Обработки были написаны под УТ, но, при необходимости, вы можете их легко доработать под другие конфигурации.
Управляемое приложение: В конфигурациях на управляемом интерфейсе (Такси) изменили подход к ведению пользователей. Если вы добавляете не программно, то добавлять нужно из режима Предприятия - тогда пользователь ИБ у вас сам создатся. И если раньше, в обычном приложении, достаточно будет добавить польз в конфигураторе - и при заходе в Предприятие, этот польз сам создавался в спр Пользователи, то с управляемым приложением такой фокус не прокатит - система не даст зайти под пользователем ИБ, которого нет в справочнике Пользователи.
! В типовых конфигурациях для работы с пользователями активно используется БСП !
В общем модуле Пользователи используется программный интерфейс процедур и функций НовоеОписаниеПользователяИБ , ПрочитатьПользователяИБ , ЗаписатьПользователяИБ иУдалитьПользователяИБ .
Код создания нового пользователя с использованием БСП:
Код 1C v 8.3 &НаСервере
Функция КопированиеВсехНастроек(ПользовательСсылка,ПользовательПриемник)
Пользователь = Обработки. НастройкиПользователей. ИмяПользователяИБ( ПользовательСсылка) ;
Приемники = Новый Массив;
ТаблицаПользователей = Новый ТаблицаЗначений;
ТаблицаПользователей. Колонки. Добавить( "Пользователь" ) ;
ТаблицаПользователей = Обработки. НастройкиПользователей. ПользователиДляКопирования( ПользовательСсылка, ТаблицаПользователей,
ТипЗнч( ПользовательСсылка) = Тип( "СправочникСсылка.ВнешниеПользователи" ) ) ;
Для Каждого СтрокаТаблицы Из ТаблицаПользователей Цикл
Приемники. Добавить( ПользовательПриемник) ;
КонецЦикла ;
КопируемыеНастройки = Новый Массив;
КопируемыеНастройки. Добавить( "НастройкиОтчетов" ) ;
КопируемыеНастройки. Добавить( "НастройкиВнешнегоВида" ) ;
КопируемыеНастройки. Добавить( "ПерсональныеНастройки" ) ;
КопируемыеНастройки. Добавить( "Избранное" ) ;
КопируемыеНастройки. Добавить( "НастройкиПечати" ) ;
КопируемыеНастройки. Добавить( "ПрочиеПользовательскиеНастройки" ) ;
НастройкиСкопированы = Обработки. НастройкиПользователей.
КопированиеНастроекПользователей( ПользовательСсылка, Приемники, КопируемыеНастройки) ;
Возврат НастройкиСкопированы;
КонецФункции
Функция СоздатьНовыйУровеньДоступа(ФИО)
Рез = Справочники. CRM_УровниДоступа. НайтиПоНаименованию( ФИО) ;
Если Рез = Неопределено ИЛИ Рез = Справочники. CRM_УровниДоступа. ПустаяСсылка( ) Тогда
НовыйОбъект = Справочники. CRM_УровниДоступа. СоздатьЭлемент( ) ;
НовыйОбъект. Наименование = ФИО;
НовыйОбъект. Записать( ) ;
возврат НовыйОбъект. Ссылка;
КонецЕсли ;
КонецФункции
Процедура ОбновитьДанныеПользователяИБ(ПользовательНастроек, Знач ОтображатьИмя = Истина)
Если ПользовательНастроек = Неопределено Тогда
Возврат ;
КонецЕсли ;
ПроверкаНаСуществующегоПользователя = ПользователиИнформационнойБазы. НайтиПоИмени( Объект. ФИОСоздаваемогоПользователя) ;
Если ПроверкаНаСуществующегоПользователя = Неопределено Тогда
Пользователь_Шаблон = ПользователиИнформационнойБазы. НайтиПоИмени( сокрлп( ПользовательНастроек. Наименование) ) ;
ОписаниеПользователяИБ = Пользователи. НовоеОписаниеПользователяИБ( ) ;
ПользовательИБСуществует = Ложь ;
ДоступКИнформационнойБазеРазрешен = Ложь ;
Если ОбщегоНазначенияПовтИсп. РазделениеВключено( ) Тогда
ОписаниеПользователяИБ. ПоказыватьВСпискеВыбора = Ложь ;
Иначе
ОписаниеПользователяИБ. ПоказыватьВСпискеВыбора =
НЕ Константы. ИспользоватьВнешнихПользователей. Получить( ) ;
КонецЕсли ;
ОписаниеПользователяИБ. АутентификацияСтандартная = Истина ;
ОписаниеПользователяИБ. Роли = Новый Массив;
ПрочитанныеСвойства = Неопределено ;
Если Пользователи. ПрочитатьПользователяИБ(
ПользовательНастроек. ИдентификаторПользователяИБ, ПрочитанныеСвойства
) Тогда
ЗаполнитьЗначенияСвойств(
ОписаниеПользователяИБ,
ПрочитанныеСвойства,
"АутентификацияOpenID,
|АутентификацияСтандартная,
|ЗапрещеноИзменятьПароль,
|ПоказыватьВСпискеВыбора,
|АутентификацияОС,
|РежимЗапуска,
|Язык,
|Роли" ) ;
КонецЕсли ;
ОписаниеПользователяИБ. Вставить( "Действие" , "Записать" ) ;
ОписаниеПользователяИБ. Вставить( "Имя" , Объект. ФИОСоздаваемогоПользователя) ;
НовыйПользователь = Справочники. Пользователи. СоздатьЭлемент( ) ;
НовыйПользователь. Наименование = Объект. ФИОСоздаваемогоПользователя;
НовыйПользователь. ТекущееПодразделение = ПользовательНастроек. ТекущееПодразделение;
НовыйПользователь. CRM_УровеньДоступа = СоздатьНовыйУровеньДоступа( Объект. ФИОСоздаваемогоПользователя) ;
НовыйПользователь. Недействителен = ложь ;
НовыйПользователь. ДополнительныеСвойства. Вставить(
"ОписаниеПользователяИБ" , ОписаниеПользователяИБ) ;
НовыйПользователь. Записать( ) ;
Запрос = Новый Запрос;
Запрос. Текст =
"ВЫБРАТЬ
| ГруппыПользователейПользователиГруппы.Ссылка
|ИЗ
| Справочник.ГруппыПользователей.Состав КАК ГруппыПользователейПользователиГруппы
|ГДЕ
| ГруппыПользователейПользователиГруппы.Пользователь =Пользователь
|
|СГРУППИРОВАТЬ ПО
| ГруппыПользователейПользователиГруппы.Ссылка" ;
Запрос. УстановитьПараметр( "Пользователь" , ПользовательНастроек) ;
РезультатЗапроса = Запрос. Выполнить( ) ;
ВыборкаДетальныеЗаписи = РезультатЗапроса. Выбрать( ) ;
Пока ВыборкаДетальныеЗаписи. Следующий( ) Цикл
объ = ВыборкаДетальныеЗаписи. Ссылка. ПолучитьОбъект( ) ;
НоваяСтрока = объ. Состав. Добавить( ) ;
НоваяСтрока. Пользователь = НовыйПользователь. Ссылка;
объ. Записать( ) ;
КонецЦикла ;
Запрос. Текст =
"ВЫБРАТЬ
| ГруппыДоступаПользователи.Ссылка
|ИЗ
| Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи
|ГДЕ
| ГруппыДоступаПользователи.Пользователь =Пользователь
|
|СГРУППИРОВАТЬ ПО
| ГруппыДоступаПользователи.Ссылка" ;
Запрос. УстановитьПараметр( "Пользователь" , ПользовательНастроек) ;
РезультатЗапроса = Запрос. Выполнить( ) ;
ВыборкаДетальныеЗаписи = РезультатЗапроса. Выбрать( ) ;
Пока ВыборкаДетальныеЗаписи. Следующий( ) Цикл
объ = ВыборкаДетальныеЗаписи. Ссылка. ПолучитьОбъект( ) ;
НоваяСтрока = объ. Пользователи. Добавить( ) ;
НоваяСтрока. Пользователь = НовыйПользователь. Ссылка;
объ. Записать( ) ;
КонецЦикла ;
КопированиеВсехНастроек( ПользовательНастроек, НовыйПользователь. Ссылка) ;
Иначе
сообщить( "Указанное ФИО Пользователя уже используется !!! " ) ;
КонецЕсли ;
КонецПроцедуры
&НаКлиенте
Процедура СоздатьПользователя(Команда)
СоздатьПользователяНаСервере( ) ;
КонецПроцедуры
&НаСервере
Процедура СоздатьПользователяНаСервере()
Если НЕ ЗначениеЗаполнено( Объект. ШаблонПользователяДляСозданияНового) Тогда
Возврат ;
КонецЕсли ;
ОбновитьДанныеПользователяИБ( Объект. ШаблонПользователяДляСозданияНового, Ложь ) ;
КонецПроцедуры
&НаСервере
Процедура СкопироватьНастройкиНаСервере(ИзменяемыйПользователь,ШаблонПользователяДляКопирования)
тИзменяемыйПользователь = ПользователиИнформационнойБазы. НайтиПоИмени( сокрлп( ИзменяемыйПользователь. Наименование) ) ;
тШаблонПользователяДляКопирования = ПользователиИнформационнойБазы. НайтиПоИмени( сокрлп( ШаблонПользователяДляКопирования. Наименование) ) ;
тИзменяемыйПользователь. Роли. Очистить( ) ;
СписокДоступныхРолейПользователяИБ = Новый СписокЗначений;
Для Каждого мРоль Из Метаданные. Роли Цикл
СтрокаСписокаДоступныхРолей = СписокДоступныхРолейПользователяИБ. Добавить( ) ;
СтрокаСписокаДоступныхРолей. Представление = мРоль. Представление( ) ;
СтрокаСписокаДоступныхРолей. Значение = мРоль;
КонецЦикла ;
Для Каждого СтрокаСпискаДоступныхРолей Из СписокДоступныхРолейПользователяИБ Цикл
Если тШаблонПользователяДляКопирования. Роли. Содержит( СтрокаСпискаДоступныхРолей. Значение) Тогда
тИзменяемыйПользователь. Роли. Добавить( СтрокаСпискаДоступныхРолей. Значение) ;
КонецЕсли ;
КонецЦикла ;
тИзменяемыйПользователь. Записать( ) ;
КопированиеВсехНастроек( ШаблонПользователяДляКопирования, ИзменяемыйПользователь) ;
КонецПроцедуры
&НаКлиенте
Процедура СкопироватьНастройки(Команда)
СкопироватьНастройкиНаСервере( Объект. ИзменяемыйПользователь, Объект. ШаблонПользователяДляКопирования) ;
КонецПроцедуры
Обычное приложение: В обычном все проще:
Код 1C v 8.х Процедура КнопкаВыполнитьНажатие(Кнопка)
Если НЕ ЗначениеЗаполнено( ШаблонПользователяДляСозданияНового) Тогда
Возврат ;
КонецЕсли ;
ОбновитьДанныеПользователяИБ( ШаблонПользователяДляСозданияНового, Ложь ) ;
КонецПроцедуры
Процедура ОбновитьДанныеПользователяИБ(ПользовательНастроек, Знач ОтображатьИмя = Истина)
Если ПользовательНастроек = Неопределено Тогда
Возврат ;
КонецЕсли ;
ПроверкаНаСуществующегоПользователя = ПользователиИнформационнойБазы. НайтиПоИмени( ФИОСоздаваемогоПользователя) ;
Если ПроверкаНаСуществующегоПользователя = Неопределено Тогда
Пользователь_Шаблон = ПользователиИнформационнойБазы. НайтиПоИмени( сокрлп( ПользовательНастроек. Код) ) ;
ПользовательИБ = ПользователиИнформационнойБазы. СоздатьПользователя( ) ;
ПользовательИБ. Имя = ФИОСоздаваемогоПользователя;
ПользовательИБ. АутентификацияСтандартная = Истина ;
ПользовательИБ. Пароль = ПарольСоздаваемогоПользователя;
ПользовательИБ. ПолноеИмя = ФИОСоздаваемогоПользователя;
ПользовательИБ. ПоказыватьВСпискеВыбора = Истина ;
ПользовательИБ. ОсновнойИнтерфейс = Пользователь_Шаблон. ОсновнойИнтерфейс;
ПользовательИБ. Язык = Пользователь_Шаблон. Язык;
СписокДоступныхРолейПользователяИБ = Новый СписокЗначений;
Для Каждого мРоль Из Метаданные. Роли Цикл
СтрокаСписокаДоступныхРолей = СписокДоступныхРолейПользователяИБ. Добавить( ) ;
СтрокаСписокаДоступныхРолей. Представление = мРоль. Представление( ) ;
СтрокаСписокаДоступныхРолей. Значение = мРоль;
КонецЦикла ;
Для Каждого СтрокаСпискаДоступныхРолей Из СписокДоступныхРолейПользователяИБ Цикл
Если Пользователь_Шаблон. Роли. Содержит( СтрокаСпискаДоступныхРолей. Значение) Тогда
ПользовательИБ. Роли. Добавить( СтрокаСпискаДоступныхРолей. Значение) ;
КонецЕсли ;
КонецЦикла ;
ПользовательИБ. Записать( ) ;
НовыйПользователь = Справочники. Пользователи. СоздатьЭлемент( ) ;
НовыйПользователь. Код = ФИОСоздаваемогоПользователя;
НовыйПользователь. Наименование = ФИОСоздаваемогоПользователя;
НовыйПользователь. Родитель = ПользовательНастроек. Родитель;
НовыйПользователь. Подразделение = ПользовательНастроек. Подразделение;
НовыйПользователь. Категория = ПользовательНастроек. Категория;
НовыйПользователь. Руководитель = ПользовательНастроек. Руководитель;
НовыйПользователь. Действует = ПользовательНастроек. Действует;
НовыйПользователь. Записать( ) ;
НаборПользователя = РегистрыСведений. НастройкиПользователей. СоздатьНаборЗаписей( ) ;
НаборПользователя. Отбор. Пользователь. Установить( ПользовательНастроек) ;
НаборПользователя. Прочитать( ) ;
НаборНовогоПользователя = РегистрыСведений. НастройкиПользователей. СоздатьНаборЗаписей( ) ;
НаборНовогоПользователя. Отбор. Пользователь. Установить( НовыйПользователь. Ссылка) ;
Для Каждого СтрокаНастроек из НаборПользователя Цикл
НоваяСтрокаНастроек = НаборНовогоПользователя. Добавить( ) ;
ЗаполнитьЗначенияСвойств( НоваяСтрокаНастроек, СтрокаНастроек) ;
НоваяСтрокаНастроек. Пользователь = НовыйПользователь. Ссылка;
Если Найти( СтрокаНастроек. Настройка. Наименование, "Основной ответственный" ) Тогда
НоваяСтрокаНастроек. Значение = НовыйПользователь. Ссылка;
КонецЕсли ;
КонецЦикла ;
Если НаборНовогоПользователя. Количество( ) > 0 Тогда
НаборНовогоПользователя. Записать( ) ;
КонецЕсли ;
сообщить( "Создан пользователь " + ФИОСоздаваемогоПользователя) ;
Запрос = Новый Запрос;
Запрос. Текст =
"ВЫБРАТЬ
| ГруппыПользователейПользователиГруппы.Ссылка
|ИЗ
| Справочник.ГруппыПользователей.ПользователиГруппы КАК ГруппыПользователейПользователиГруппы
|ГДЕ
| ГруппыПользователейПользователиГруппы.Пользователь =Пользователь
|
|СГРУППИРОВАТЬ ПО
| ГруппыПользователейПользователиГруппы.Ссылка" ;
Запрос. УстановитьПараметр( "Пользователь" , ПользовательНастроек) ;
РезультатЗапроса = Запрос. Выполнить( ) ;
ВыборкаДетальныеЗаписи = РезультатЗапроса. Выбрать( ) ;
Пока ВыборкаДетальныеЗаписи. Следующий( ) Цикл
объ = ВыборкаДетальныеЗаписи. Ссылка. ПолучитьОбъект( ) ;
НоваяСтрока = объ. ПользователиГруппы. Добавить( ) ;
НоваяСтрока. Пользователь = НовыйПользователь. Ссылка;
объ. Записать( ) ;
КонецЦикла ;
Иначе
сообщить( "Указанное ФИО Пользователя уже используется !!! " ) ;
КонецЕсли ;
КонецПроцедуры
еще пример:
Код 1C v 8.х Функция ДобавитьПользователя(ИмяПользователя, ДоменноеИмя, ПользовательАктивен, АутентификацияОС, Авторизация1СПредприятия, МассивРолей) Экспорт
Пользователь = ПользователиИнформационнойБазы. НайтиПоИмени( ИмяПользователя) ;
Если Пользователь = Неопределено Тогда
Для Каждого ТекущийПользователь Из ПользователиИнформационнойБазы. ПолучитьПользователей( ) Цикл
Если ТекущийПользователь. ПользовательОС = ДоменноеИмя Тогда
Пользователь = ТекущийПользователь;
Прервать ;
Конецесли ;
КонецЦикла ;
КонецЕсли ;
Если Пользователь = Неопределено Тогда
Пользователь = ПользователиИнформационнойБазы. СоздатьПользователя( ) ;
КонецЕсли ;
Пользователь. АутентификацияОС = АутентификацияОС;
Пользователь. АутентификацияСтандартная = Авторизация1 СПредприятия;
Пользователь. ЗапрещеноИзменятьПароль = Истина ;
Пользователь. Имя = ИмяПользователя;
Пользователь. ПолноеИмя = ИмяПользователя;
Пользователь. ПоказыватьВСпискеВыбора = Ложь ;
Пользователь. ПользовательОС = ДоменноеИмя;
Пользователь. Роли. Очистить( ) ;
МассивИменРолей = Новый Массив( ) ;
Для Каждого Роль Из МассивРолей. Role Цикл
МассивИменРолей. Добавить( Роль) ;
КонецЦикла ;
ТекстЗапроса = "ВЫБРАТЬ
| ПрофилиГруппДоступаРоли.Роль.Имя КАК Имя
|ИЗ
| Справочник.ПрофилиГруппДоступа.Роли КАК ПрофилиГруппДоступаРоли
|ГДЕ
| ПрофилиГруппДоступаРоли.Ссылка.Наименование В(&МассивИменРолей)" ;
Запрос = Новый Запрос( ТекстЗапроса) ;
Запрос. УстановитьПараметр( "МассивИменРолей" , МассивИменРолей) ;
Результат = Запрос. Выполнить( ) . Выгрузить( ) ;
Для Каждого Роль Из Результат Цикл
НайденнаяРоль = Метаданные. Роли. Найти( Роль. Имя) ;
Если НайденнаяРоль < > Неопределено Тогда
Пользователь. Роли. Добавить( НайденнаяРоль) ;
КонецЕсли ;
КонецЦикла ;
Пользователь. Записать( ) ;
Если Не ПользовательАктивен Тогда
ДективироватьПользователя( Пользователь) ;
КонецЕсли ;
ЗаполнитьСправочникПользователя( Пользователь) ;
Возврат Истина ;
КонецФункции
Процедура ЗаполнитьСправочникПользователя(ПользовательИБ) Экспорт
ТекстЗапроса = "ВЫБРАТЬ
| ИСТИНА КАК ЕстьПользователь,
| Пользователи.Ссылка КАК Пользователь
|ИЗ
| Справочник.Пользователи КАК Пользователи
|ГДЕ
| Пользователи.ИдентификаторПользователяИБ =ИдентификаторПользователяИБ
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ЛОЖЬ,
| NULL" ;
Запрос = Новый Запрос( ТекстЗапроса) ;
Запрос. УстановитьПараметр( "ИдентификаторПользователяИБ" , ПользовательИБ. УникальныйИдентификатор) ;
Результат = Запрос. Выполнить( ) . Выгрузить( ) [0 ];
ОписаниеПользователя = Пользователи. НовоеОписаниеПользователяИБ( ) ;
Если Результат. ЕстьПользователь Тогда
ПользовательОбъект = Результат. Пользователь. ПолучитьОбъект( ) ;
Иначе
ПользовательОбъект = Справочники. Пользователи. СоздатьЭлемент( ) ;
ПользовательОбъект. ИдентификаторПользователяИБ = ПользовательИБ. УникальныйИдентификатор;
ПользовательОбъект. Наименование = ПользовательИБ. Имя;
ОписаниеПользователя. Вставить( "Действие" , "Записать" ) ;
ПользовательОбъект. ДополнительныеСвойства. Вставить( "ОписаниеПользователяИБ" , ОписаниеПользователя) ;
КонецЕсли ;
ЗаполнитьЗначенияСвойств( ОписаниеПользователя, ПользовательИБ) ;
Для Каждого Элемент Из ОписаниеПользователя Цикл
ПользовательОбъект. ДополнительныеСвойства. Вставить( Элемент. Ключ, Элемент. Значение) ;
КонецЦикла ;
ПользовательОбъект. ДополнительныеСвойства. Удалить( "Роли" ) ;
ПользовательОбъект. Записать( ) ;
КонецПроцедуры
Категория:
Пользователь, роль доступа, интерфейс Получение расшифровки для текущей ячейки СКД Код 1C v 8.х
&НаСервере
Функция ПолучитьЗначениеРасшифровки(КодРасшифровки)
Если КодРасшифровки = Неопределено тогда
Возврат Неопределено ;
КонецЕсли ;
ДР= ПолучитьИзВременногоХранилища( ДанныеРасшифровки) ;
КоллекцияПолей = ДР. Элементы[КодРасшифровки]. ПолучитьПоля( ) ;
Если КоллекцияПолей. Количество( ) = 0 тогда
Возврат Неопределено
Иначе
Возврат КоллекцияПолей[0 ]. Значение ;
КонецЕсли ;
КонецФункции
&НаКлиенте
. . .
РасшифровкаЗначение = ПолучитьЗначениеРасшифровки( Результат. ТекущаяОбласть. Расшифровка) ;
. . .
Категория:
Управляемое приложение, Тонкий клиент Вертикальная автофиксация для СКД В СКД очень не хватает возможности автофиксации строк. Обусловлено это невозможностью однозначно определить их количество в общем случае. Однако в большинстве случаев это можно сделать
Обращаю ваше внимание, что приведенная процедура работает не всегда корректно. Но в большинстве случаев она сделает свое дело.
Код 1C v 8.х
Процедура ЛксВывестиРезультатКомпоновкиСАвтофиксациейСтрок(Таб, ПроцессорКомпоновкиДанных, ЭлементыРасшировки,
Знач МассивИгнорируемыхПолей = Неопределено, РазрешитьПрерывание = Истина) Экспорт
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода. УстановитьДокумент( Таб) ;
ПроцессорВывода. НачатьВывод( ) ;
ФиксацияВыполнена = Ложь ;
Если МассивИгнорируемыхПолей = Неопределено Тогда
МассивИгнорируемыхПолей = Новый Массив;
КонецЕсли ;
Пока Истина Цикл
ЭлементРезультатаКомпоновкиДанных = ПроцессорКомпоновкиДанных. Следующий( ) ;
Если ЭлементРезультатаКомпоновкиДанных = Неопределено Тогда
Прервать ;
КонецЕсли ;
Если Не ФиксацияВыполнена Тогда
Для Каждого ЗначениеПараметра Из ЭлементРезультатаКомпоновкиДанных. ЗначенияПараметров Цикл
Если ТипЗнч( ЗначениеПараметра. Значение) = Тип( "ИдентификаторРасшифровкиКомпоновкиДанных" ) Тогда
ЗначенияПолейРасшифровки = ЭлементыРасшировки[ЗначениеПараметра. Значение]. ПолучитьПоля( ) ;
Для Каждого ЗначениеПоляРасшифровки Из ЗначенияПолейРасшифровки Цикл
Если МассивИгнорируемыхПолей. Найти( ЗначениеПоляРасшифровки. Поле) = Неопределено Тогда
Таб. ФиксацияСверху = Таб. ВысотаТаблицы;
ФиксацияВыполнена = Истина ;
Прервать ;
КонецЕсли ;
КонецЦикла ;
Если ФиксацияВыполнена Тогда
Прервать ;
КонецЕсли ;
КонецЕсли ;
КонецЦикла ;
КонецЕсли ;
ПроцессорВывода. ВывестиЭлемент( ЭлементРезультатаКомпоновкиДанных) ;
Если РазрешитьПрерывание Тогда
ОбработкаПрерыванияПользователя( ) ;
КонецЕсли ;
КонецЦикла ;
ПроцессорВывода. ЗакончитьВывод( ) ;
КонецПроцедуры
tormozit Категория:
Схема Компоновки Данных Вывод картинки в строках отчета на СКД В этом примере показан метод вывода в строку отчета картинки, вид которой завист от значения другого поля.
Ради примера, в отчет выведем справоник «Банки» - реквизит «Ссылка» и картинку возле этого реквизита. Вид картинки зависит от значения реквизита «ЭтоГруппа»
Создаем новый
отчет - Основная схема компоновки данных:
В
Вычисляемые поля добавлено поле «ПолеКартинка». В выражение добавлено значение «%Картинка%», поэтому выражению будем искать область ячеек куда необходимо вставить нашу картинку:
В это поле будет выводится картинка.
В настройках указываем:
В модуле объекта пишем код:
Код 1C v 8.х Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь ;
ДокументРезультат. Очистить( ) ;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
Макет = КомпоновщикМакета. Выполнить( СхемаКомпоновкиДанных, КомпоновщикНастроек. Настройки, ДанныеРасшифровки) ;
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки. Инициализировать( Макет, , ДанныеРасшифровки) ;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода. УстановитьДокумент( ДокументРезультат) ;
ПолеПоКоторомуНеобходимоПолучитьЗначение = "Ссылка" ;
ПроцессорВывода. НачатьВывод( ) ;
Пока истина Цикл
ЭлементРезультата = ПроцессорКомпоновки. Следующий( ) ;
Если ЭлементРезультата = Неопределено Тогда
прервать ;
КонецЕсли ;
ПроцессорВывода. ВывестиЭлемент( ЭлементРезультата) ;
Если ЭлементРезультата. ЗначенияПараметров. Количество( ) > 0 Тогда
ЗначениеВыводимыхДанных = Неопределено ;
Для каждого ЗначениеПараметра из ЭлементРезультата. ЗначенияПараметров Цикл
Если ТипЗнч( ЗначениеПараметра. Значение) = Тип( "ИдентификаторРасшифровкиКомпоновкиДанных" ) Тогда
ПоляРасшифровки = ДанныеРасшифровки. Элементы[ЗначениеПараметра. Значение]. ПолучитьПоля( ) ;
Для Каждого ПолеРасшифровки из ПоляРасшифровки Цикл
Если ПолеРасшифровки. Поле = ПолеПоКоторомуНеобходимоПолучитьЗначение Тогда
ЗначениеВыводимыхДанных = ПолеРасшифровки. Значение;
Прервать ;
КонецЕсли ;
КонецЦикла ;
КонецЕсли ;
КонецЦикла ;
Если ЗначениеЗаполнено( ЗначениеВыводимыхДанных) Тогда
Рис = ДокументРезультат. Рисунки. Добавить( ТипРисункаТабличногоДокумента. Картинка) ;
Рис. РазмерКартинки = РазмерКартинки. РеальныйРазмер;
Индекс = ДокументРезультат. Рисунки. Индекс( Рис) ;
Если ЗначениеВыводимыхДанных. ЭтоГруппа Тогда
ДокументРезультат. Рисунки[Индекс]. Картинка = БиблиотекаКартинок. ГруппаИЭлемент;
Иначе
ДокументРезультат. Рисунки[Индекс]. Картинка = БиблиотекаКартинок. Сформировать;
КонецЕсли ;
ВысотаТабДок = ДокументРезультат. ВысотаТаблицы;
ОбластьДляКартинки = ДокументРезультат. НайтиТекст( "%Картинка%" ) ;
Если ОбластьДляКартинки < > Неопределено Тогда
ДокументРезультат. Рисунки[Индекс]. Расположить( ОбластьДляКартинки) ;
ОбластьДляКартинки. Текст = "%КартинкаДобавлена%"
КонецЕсли ;
КонецЕсли ;
КонецЕсли ;
КонецЦикла ;
ПроцессорВывода. ЗакончитьВывод( ) ;
КонецПроцедуры
В результате:
Скачать пример этого отчета(Работает в любой конфишурации где есть справочник Банки):
Скачивать файлы может только зарегистрированный пользователь! Категория:
Схема Компоновки Данных Как выгрузить журнал регистрации в XML-формате? Код 1C v 8.х ВыгрузитьЖурналРегистрации( "C:\log.xml" ) ;
Пользователи = ПользователиИнформационнойБазы. ПолучитьПользователей( ) ;
Для Каждого Пользователь из Пользователи Цикл
НовыйЭлемент = СписокПользователей. Добавить( ) ;
НовыйЭлемент. Пометка = Истина ;
НовыйЭлемент. Значение = Пользователь;
НовыйЭлемент. Представление = Пользователь. Имя;
КонецЦикла ;
Массив = Новый Массив;
Для Каждого Пользователь Из СписокПользователей Цикл
Если Пользователь. Пометка Тогда
Массив. Добавить( Пользователь) ;
КонецЕсли ;
КонецЦикла ;
СтруктураФильтра = Новый Структура;
СтруктураФильтра. Вставить( "Пользователь" , Массив) ;
ВыгрузитьЖурналРегистрации( "C:\log.xml" , СтруктураФильтра, "Дата, Пользователь, ПредставлениеСобытия" ) ;
Категория:
Встроенные Функции Реализация расшифровки в Системе Компоновки Данных. Продолжая свой цикл заметок про СКД, сегодня я хотел бы поподробнее остановиться на расшифровке.
В СКД расшифровка представляет собой всплывающее меню (по двойному клику на ячейке), содержащие доступные пользователю действия, такие как открытие ссылки на элемент, упорядочивание, группировка, оформление и пр. Здесь я приведу примеры решения наиболее распространенных задач, связанных с расшифровкой, таких как:
1. Ограничение доступных действий;
2. Добавление в меню своего произвольного действия;
3. Добавление в меню различных действий, в зависимости от ячейки, для которой выполняется расшифровка.
Вся работа с расшифровкой, выполняется в событии ОбработкаРасшифровки. Что бы получить доступ к этому событию, необходимо сначала сгенерировать основную форму отчета. Затем ПолеТабличногоДокумента > Свойства > События.
Итак, задача №1. Постановка:
Необходимо доступные действия для пользователя ограничить только: открытием элемента, упорядочиванием и оформлением.
Решение:
Код 1C v 8.х Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
Перем ВыполненноеДействие;
СтандартнаяОбработка= Ложь ;
ОбработкаРасшифровки= Новый ОбработкаРасшифровкиКомпоновкиДанных( ДанныеРасшифровки, Новый ИсточникДоступныхНастроекКомпоновкиДанных( СхемаКомпоновкиДанных) ) ;
ДоступныеДействия= Новый Массив;
ДоступныеДействия. Добавить( ДействиеОбработкиРасшифровкиКомпоновкиДанных. Оформить) ;
ДоступныеДействия. Добавить( ДействиеОбработкиРасшифровкиКомпоновкиДанных. ОткрытьЗначение) ;
ДоступныеДействия. Добавить( ДействиеОбработкиРасшифровкиКомпоновкиДанных. Упорядочить) ;
Настройки= ОбработкаРасшифровки. Выполнить( Расшифровка, ВыполненноеДействие, ДоступныеДействия) ;
Если Настройки< > Неопределено Тогда
КомпоновщикНастроек. ЗагрузитьНастройки( Настройки) ;
ЭлементыФормы. Результат. Очистить( ) ;
СкомпоноватьРезультат( ЭлементыФормы. Результат, ДанныеРасшифровки) ;
КонецЕсли ;
КонецПроцедуры
Задача №2. Постановка:
Необходимо добавить в меню свое действие, открывающее основную форму элемента, содержащегося в ячейке, для которой выполняется расшифровка.
Решение:
Код 1C v 8.х Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
Перем ВыполненноеДействие;
СтандартнаяОбработка= Ложь ;
ОбработкаРасшифровки= Новый ОбработкаРасшифровкиКомпоновкиДанных( ДанныеРасшифровки, Новый ИсточникДоступныхНастроекКомпоновкиДанных( СхемаКомпоновкиДанных) ) ;
ДополнительныеДействия= Новый СписокЗначений;
ДополнительныеДействия. Добавить( "Действие1" , "Дополнительное действие 1" ) ;
Настройки= ОбработкаРасшифровки. Выполнить( Расшифровка, ВыполненноеДействие, , ДополнительныеДействия) ;
Если Настройки< > Неопределено Тогда
КомпоновщикНастроек. ЗагрузитьНастройки( Настройки) ;
ЭлементыФормы. Результат. Очистить( ) ;
СкомпоноватьРезультат( ЭлементыФормы. Результат, ДанныеРасшифровки) ;
Иначе
Если ВыполненноеДействие= "Действие1" Тогда
ВыполнитьДействие1 ( Расшифровка) ;
КонецЕсли ;
КонецЕсли ;
КонецПроцедуры
В процедуре ВыполнитьДействие1(Расшифровка) получаем ПараметрРасшифровки для выбранной ячейки и открывает основную форму:
Код 1C v 8.х Процедура ВыполнитьДействие1(Расшифровка)
Ссылка= ДанныеРасшифровки. Элементы[Расшифровка]. ПолучитьПоля( ) [0 ]. Значение;
Ссылка. ПолучитьФорму( ) . Открыть( ) ;
КонецПроцедуры
Задача №3. Постановка:
Необходимо в зависимости от колонки, для которой выполняется расшифровка, добавлять свои действия: для «Поле1» - «Действие1», для «Поле2» - «Действие2».
Решение:
Код 1C v 8.х Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
Перем ВыполненноеДействие;
СтандартнаяОбработка= Ложь ;
ОбработкаРасшифровки= Новый ОбработкаРасшифровкиКомпоновкиДанных( ДанныеРасшифровки, Новый ИсточникДоступныхНастроекКомпоновкиДанных( СхемаКомпоновкиДанных) ) ;
ДополнительныеДействия= Новый СписокЗначений;
Если ДанныеРасшифровки. Элементы[Расшифровка]. ПолучитьПоля( ) [0 ]. Поле= "Поле1" Тогда
ДополнительныеДействия. Добавить( "Действие1" , "Дополнительное действие 1" ) ;
ИначеЕсли ДанныеРасшифровки. Элементы[Расшифровка]. ПолучитьПоля( ) [0 ]. Поле= "Поле2" Тогда
ДополнительныеДействия. Добавить( "Действие2" , "Дополнительное действие 2" ) ;
КонецЕсли ;
Настройки= ОбработкаРасшифровки. Выполнить( Расшифровка, ВыполненноеДействие, , ДополнительныеДействия) ;
Если Настройки< > Неопределено Тогда
КомпоновщикНастроек. ЗагрузитьНастройки( Настройки) ;
ЭлементыФормы. Результат. Очистить( ) ;
СкомпоноватьРезультат( ЭлементыФормы. Результат, ДанныеРасшифровки) ;
Иначе
Если ВыполненноеДействие= "Действие1" Тогда
ВыполнитьДействие1 ( Расшифровка) ;
ИначеЕсли ВыполненноеДействие= "Действие2" Тогда
ВыполнитьДействие2 ( Расшифровка) ;
КонецЕсли ;
КонецЕсли ;
КонецПроцедуры
Как видите, ничего сложного здесь нет!
Источник
При использовании в типовой конфигурации:
Код 1C v 8.х
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
Если ДанныеРасшифровки. Элементы. Получить( Расшифровка) . ПолучитьПоля( ) [0 ]. Поле = "ДокументОприходования" Тогда
Док = ДанныеРасшифровки. Элементы. Получить( Расшифровка) . ПолучитьПоля( ) . Найти( "ДокументОприходования" ) . Значение;
Если ТипЗнч( Док) = Тип( "ДокументСсылка.ПоступлениеТоваровУслуг" ) Тогда
СтандартнаяОбработка = Ложь ;
Предупреждение( Док. Комментарий) ;
Возврат ;
КонецЕсли ;
КонецЕсли ;
ТиповыеОтчеты. СтандартнаяОбработкаРасшифровкиТиповогоОтчета( ОтчетОбъект, ЭтаФорма, Расшифровка, СтандартнаяОбработка) ;
КонецПроцедуры
Категория:
Схема Компоновки Данных Смена пароля у всех пользователей, у которых отсутствует пароль Код 1C v 8.х Пользователи = ПользователиИнформационнойБазы. ПолучитьПользователей( ) ;
Для Каждого Пользователь Из Пользователи Цикл
Если НЕ Пользователь. ПарольУстановлен Тогда
Пользователь. АутентификацияСтандартная = Истина ;
Пользователь. Пароль = "НужныйПароль" ;
Пользователь. Записать( ) ;
КонецЕсли ;
КонецЦикла ;
Категория:
Пользователь, роль доступа, интерфейс Как получить Имя Пользователя? Код 1C v 8.2 УП &НаКлиенте
Процедура СообщитьИмяПользователя(Команда)
Сообщить( ПолучитьПользователя( ) ) ;
КонецПроцедуры
&НаСервере
Функция ПолучитьПользователя()
Перем ВыбПользователь;
ВыбПользователь = ПользователиИнформационнойБазы. ТекущийПользователь( ) ;
Возврат ВыбПользователь. Имя;
КонецФункции ;
Сообщить( ИмяПользователя( ) ) ;
Сообщить( ПолноеИмяПользователя( ) ) ;
Код 1C v 8.х ИмяПользователя = ИмяПользователя( ) ;
Если ПустаяСтрока( ИмяПользователя) Тогда
ИмяПользователя = "НеАвторизован" ;
Иначе
ИмяПользователя = ПолноеИмяПользователя( ) ;
КонецЕсли ;
Код 1C v 7.x Сообщить( ИмяПользователя( ) )
Сообщить( ПолноеИмяПользователя( ) )
Категория:
Пользователь, роль доступа, интерфейс Как закрепить шапку таблицы отчета? Код 1C v 8.х
Процедура скдФиксироватьШапкуОтчета(ТабДок, Фиксировать, Строка = "Номенклатура" , Поправка = 0) Экспорт
Если Фиксировать Тогда
Область = ТабДок. НайтиТекст( Строка, , , , Истина ) ;
ТабДок. ФиксацияСверху = ? ( ЗначениеЗаполнено( Область) , Область. Верх + Поправка, 0 ) ;
Иначе
ТабДок. ФиксацияСверху = 0 ;
КонецЕсли ;
КонецПроцедуры
Код 1C v 8.х
ПроцессорВывода. НачатьВывод( ) ;
ТаблицаЗафиксирована = Ложь ;
Пока Истина Цикл
ЭлементРезультата = ПроцессорКомпоновкиДанных. Следующий( ) ;
Если ЭлементРезультата= Неопределено Тогда
Прервать ;
Иначе
ПроцессорВывода. ВывестиЭлемент( ЭлементРезультата) ;
Если Не ТаблицаЗафиксирована И ЭлементРезультата. ЗначенияПараметров. Количество( ) > 0 Тогда
ТаблицаЗафиксирована = Истина ;
Таб. ФиксацияСверху = Таб. ВысотаТаблицы;
КонецЕсли ;
КонецЕсли ;
КонецЦикла ;
ПроцессорВывода. ЗакончитьВывод( ) ;
Код 1C v 8.х
Процедура глВывестиРезультатКомпоновкиСАвтофиксациейСтрок( Таб,
ПроцессорКомпоновкиДанных,
ЭлементыРасшировки,
Знач МассивИгнорируемыхПолей = Неопределено,
РазрешитьПрерывание = Истина) Экспорт
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода. УстановитьДокумент( Таб) ;
ПроцессорВывода. НачатьВывод( ) ;
ФиксацияВыполнена = Ложь ;
Если МассивИгнорируемыхПолей = Неопределено Тогда
МассивИгнорируемыхПолей = Новый Массив;
КонецЕсли ;
Пока Истина Цикл
ЭлементРезультатаКомпоновкиДанных = ПроцессорКомпоновкиДанных. Следующий( ) ;
Если ЭлементРезультатаКомпоновкиДанных = Неопределено Тогда
Прервать ;
КонецЕсли ;
Если Не ФиксацияВыполнена Тогда
Для Каждого ЗначениеПараметра Из ЭлементРезультатаКомпоновкиДанных. ЗначенияПараметров Цикл
Если ТипЗнч( ЗначениеПараметра. Значение) = Тип( "ИдентификаторРасшифровкиКомпоновкиДанных" ) Тогда
ЗначенияПолейРасшифровки = ЭлементыРасшировки[ЗначениеПараметра. Значение]. ПолучитьПоля( ) ;
Для Каждого ЗначениеПоляРасшифровки Из ЗначенияПолейРасшифровки Цикл
Если МассивИгнорируемыхПолей. Найти( ЗначениеПоляРасшифровки. Поле) = Неопределено Тогда
Таб. ФиксацияСверху = Таб. ВысотаТаблицы;
ФиксацияВыполнена = Истина ;
Прервать ;
КонецЕсли ;
КонецЦикла ;
Если ФиксацияВыполнена Тогда
Прервать ;
КонецЕсли ;
КонецЕсли ;
КонецЦикла ;
КонецЕсли ;
ПроцессорВывода. ВывестиЭлемент( ЭлементРезультатаКомпоновкиДанных) ;
Если РазрешитьПрерывание Тогда
#Если Клиент тогда
ОбработкаПрерыванияПользователя( ) ;
#КонецЕсли
КонецЕсли ;
КонецЦикла ;
ПроцессорВывода. ЗакончитьВывод( ) ;
КонецПроцедуры
Категория:
Схема Компоновки Данных Сохранение рабочей конфигурации в файл средствами встроенного языка Как сохранить рабочую конфигурацию из конфигуратора знают все, но это не всегда удобно. Мне понадобилось сохранять рабочую конфигурацию и тут-же этот файл обрабатывать. Предлагаю простую процедуру:
Код 1C v 8.х
функция СохранитьТекущуюКонфигурацию (Логин, Пароль, ИмяФайла="" ) экспорт
результат = Ложь ;
Если ИмяФайла = "" Тогда
ИмяФайла = КаталогВременныхФайлов( ) + "1Cv8.cf" ;
КонецЕсли ;
СтрокаБазы = СтрокаСоединенияИнформационнойБазы( ) ;
Если Лев( СтрокаБазы, 5 ) = "File=" Тогда
СтрокаБазы = Сред( СтрокаБазы, 6 , СтрДлина( СтрокаБазы) - 6 ) ;
Иначе
возврат Ложь ;
КонецЕсли ;
ВыбФайл = Новый Файл( ИмяФайла) ;
Если ВыбФайл. Существует( ) Тогда
Сигнатура = Строка( ВыбФайл. Размер( ) ) + Строка( ВыбФайл. ПолучитьВремяИзменения( ) ) ;
Иначе
Сигнатура = "" ;
КонецЕсли ;
СтрокаЗапуска = """ " + КаталогПрограммы( ) + "1cv8.exe"" CONFIG /F " + СтрокаБазы
+ ? ( Логин = "" , "" , " /N " + Логин)
+ ? ( Пароль = "" , "" , " /P " + Пароль) + " /DumpDBCfg "" " + ИмяФайла + """ " ;
WshShell = Новый COMОбъект( "WScript.Shell" ) ;
WshShell. Run( СтрокаЗапуска, 0 , Истина ) ;
ВыбФайл = Новый Файл( ИмяФайла) ;
Если ВыбФайл. Существует( ) Тогда
НоваяСигнатура = Строка( ВыбФайл. Размер( ) ) + Строка( ВыбФайл. ПолучитьВремяИзменения( ) ) ;
Если Сигнатура < > НоваяСигнатура Тогда
Результат = Истина ;
КонецЕсли ;
КонецЕсли ;
Возврат Результат;
КонецФункции
ну и пример использования (работает если нет пароля):
Код 1C v 8.х Функция ЗаписатьКонфигурациюВФайл(ИмяФайла="" )
Результат = Ложь ;
ВыбФайл = Новый Файл( ИмяФайла) ;
Если ВыбФайл. Существует( ) Тогда
Если ВыбФайл. ЭтоКаталог( ) Тогда
ИмяФайла= "" ;
КонецЕсли ;
КонецЕсли ;
Попытка
Массив = ПользователиИнформационнойБазы. ПолучитьПользователей( ) ;
Логин = "" ;
Пароль = "" ;
Если Массив. Количество( ) > 0 тогда
Пользователь = ПользователиИнформационнойБазы. ТекущийПользователь( ) ;
Логин = Пользователь. Имя;
Если Пользователь. ПарольУстановлен Тогда
Предупреждение( "У Вас установлен пароль, этот режим сейчас не доступен" ) ;
Возврат Ложь ;
КонецЕсли
КонецЕсли ;
Результат = СохранитьТекущуюКонфигурацию( Логин, Пароль, ИмяФайла) ;
Если не Результат Тогда
Предупреждение( "Конфигурация не сохранена" ) ;
Иначе
Сообщить( "Конфигурация успешно сохранена в файл: " + ИмяФайла) ;
КонецЕсли ;
Исключение
Предупреждение( "У Вас не достаточно прав для сохранения конфигурации" ) ;
Возврат Ложь ;
КонецПопытки ;
Возврат Результат;
КонецФункции
Автор статьи: vde69 Категория:
Полезные, Универсальные Функции Как получить данные о зарегистрированных пользователях информационной базы? Получение данных о пользователях
Код 1C v 8.х Выборка = ПользователиИнформационнойБазы. ПолучитьПользователей( ) ;
Для Каждого ЭлементМассива Из Выборка Цикл
ИмяПользователя = ЭлементМассива. Имя;
ПолноеИмяПользователя = ЭлементМассива. ПолноеИмя;
ЕстьПароль = ЭлементМассива. ПарольУстановлен;
Роли = ЭлементМассива. Роли;
Для Каждого Роль Из Роли Цикл
ИмяРоли = Роль. Имя;
КонецЦикла ;
КонецЦикла ;
В указанной процедуре работа по получению списка пользователей начинается с обращения к свойству глобального контекста ПользователиИнформационнойБазы. Метод ПолучитьПользователей() возвращает массив объектов ПользовательИнформационнойБазы, который обходится потом в цикле.
Для 1С 7.7 посмотрите Пример получения списка пользователей из файла users.usr Категория:
Пользователь, роль доступа, интерфейс Как получить список зарегистрированных пользователей базы 1С Код 1C v 8.х Выборка = ПользователиИнформационнойБазы. ПолучитьПользователей( ) ;
Для Каждого ЭлементМассива Из Выборка Цикл
ИмяПользователя = ЭлементМассива. Имя;
ПолноеИмяПользователя = ЭлементМассива. ПолноеИмя;
ЕстьПароль = ЭлементМассива. ПарольУстановлен;
Роли = ЭлементМассива. Роли;
Для Каждого Роль Из Роли Цикл
ИмяРоли = Роль. Имя;
КонецЦикла ;
КонецЦикла ;
Код 1C v 7.x
функция сзПолучитьПользователей(стрПутьКБазе)
Ответ = создатьобъект( "СписокЗначений" ) ;
стрИмяФайла = стрПутьКБазе + "\UsrDEF\Users.USR" ;
если фс. СуществуетФайл( стрИмяФайла) > 0 тогда
обФСО = создатьобъект( "Scripting.FileSystemObject" ) ;
тхтФайл = обФСО. OpenTextFile( стрИмяФайла) ;
стрБуфер = "" ;
чисПозиция = 0 ;
пока тхтФайл. AtEndOfStream = 0 цикл
чисПозиция = чисПозиция + 1 ;
стрСимв = тхтФайл. Read( 1 ) ;
если кодсимв( стрСимв) > 31 тогда
стрБуфер = стрБуфер + стрСимв;
конецесли ;
конеццикла ;
стрПоиска = "{"" UserItemType"" ,"" Page." ;
чисПозиция = найти( стрБуфер, стрПоиска) ;
если чисПозиция > 0 тогда
стрБуфер = сред( стрБуфер, чисПозиция) ;
чисПозиция = 1 ;
конецесли ;
пока чисПозиция > 0 цикл
стрБуфер = сред( стрБуфер, чисПозиция + 22 ) ;
чисСмещение = найти( стрБуфер, """ ,"" " ) + 3 ;
стрБуфер = сред( стрБуфер, чисСмещение) ;
стрИмяПользователя = лев( стрБуфер, найти( стрБуфер, """ ,"" " ) - 1 ) ;
Ответ. ДобавитьЗначение( стрИмяПользователя) ;
чисПозиция = найти( стрБуфер, стрПоиска) ;
конеццикла ;
конецесли ;
возврат Ответ;
конецфункции
еще Пример получения списка пользователей из файла users.usr Категория:
Полезные, Универсальные Функции Функция Определить пол работника Код 1C v 8.х
Функция ПолучитьПол(ОтчествоРаботника) Экспорт
Если Прав( ОтчествоРаботника, 2 ) = "ич" Тогда
Возврат Перечисления. Пол. Мужской;
ИначеЕсли Прав( ОтчествоРаботника, 2 ) = "на" Тогда
Возврат Перечисления. Пол. Женский;
КонецЕсли ;
Возврат Перечисления. Пол. ПустаяСсылка( ) ;
КонецФункции
Категория:
Полезные, Универсальные Функции