+7 (495) 926-37-81ООО «Центр КТ» (495) 926-37-81
МОСКВА
Офис в Москве



Работа с пользователями в «1С: 8»

Данная статья рассказывает о синхронизации справочника «Пользователи» с пользователями БД. Типовые конфигурации от «1С» обладают достаточно сложной конфигурацией для понимания теми людьми, которые впервые сталкиваются с данной платформой и программированием на ней. В этой статье приводится наглядный пример, упрощающий схему работы пользователей.

Для создания формы списка справочника «Пользователи» следует создать новый справочник «Пользователи» без реквизитов, которые в случае необходимости могут быть добавлены позже. Отображение списка пользователей произойдет после создания «Формы Списка» опять же без реквизитов. Вместо этого создается реквизит «Таблица Значений», далее в него добавляются колонки.

Затем на форме размещается «Элемент таблица» с названием «Список Пользователей», в нее необходимо добавить два поля:  «Список Пользователей Полное Имя» (Путь к информации – Список. Полное имя) и «Список Пользователей Имя» (Путь к информации – Список. Имя). После создания данной таблицы она заполняется сведениями с помощью создания события формы «При Создании На Сервере» и добавляется следующий код:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ,СтандартнаяОбработка)

        ОМПользователи.ОбновитьСписокПользователей(Список);

КонецПроцедуры

Функция «Обновить Список Пользователей (Список)» размещается в общем модуле, а сама она теперь выглядит следующим образом:

ПроцедураОбновитьСписокПользователей(СписокПользователей) Экспорт

        Перем ПользователиИБ,СпрПользователейДляПоиска, СсылкаНаНайденногоПользователя;

        СпрПользователейДляПоиска=Справочники.Пользователи;
        ПользователиИБ =ПользователиИнформационнойБазы.ПолучитьПользователей();

        Для КаждогоПользовательИБ Из ПользователиИБ Цикл

                СсылкаНаНайденногоПользователя =СпрПользователейДляПоиска.НайтиПоНаименованию(ПользовательИБ.Имя);

                Если СсылкаНаНайденногоПользователя =СпрПользователейДляПоиска.ПустаяСсылка()Тогда
                        НоваяСтрока =СписокПользователей.Добавить();
                        НоваяСтрока.Имя =ПользовательИБ.Имя;
                        НоваяСтрока.ПолноеИмя =ПользовательИБ.ПолноеИмя;
                        НоваяСтрока.Ссылка =СсылкаНаНайденногоПользователя;
                        НоваяСтрока.СуществуетВСправочнике =Ложь;
                Иначе
                        НоваяСтрока =СписокПользователей.Добавить(); 
                        НоваяСтрока.Имя =ПользовательИБ.Имя;
                        НоваяСтрока.ПолноеИмя =ПользовательИБ.ПолноеИмя;
                        НоваяСтрока.Ссылка =СсылкаНаНайденногоПользователя;
                        НоваяСтрока.СуществуетВСправочнике =Истина;
                КонецЕсли;

        КонецЦикла;

КонецПроцедуры

В данной функции перебираются пользователи БД, они добавляются в «Список Пользователей». Если этот элемент присутствует в справочнике «Пользователи», то обязательно устанавливается флажок «Существует В Справочнике», это требуется для условного форматирования в оформлении, то есть программа видит незаведенного в справочник пользователя и отображает его другим цветом. В свойствах формы указывается это же форматирование:

Затем создается новое форматирование за счет нажатия на кнопку «Добавить». Параметры их колонки «Оформление» должны выглядеть следующим образом:

Параметры колонки «Условие» должны выглядеть следующим образом:

Параметры колонки «Оформляемые поля» должны выглядеть следующим образом:

Для создания элемента справочника «Пользователи» следует добавить новую форму в справочник «Пользователи»:

После этого в форму добавляется новое поле со строковым реквизитом «Полное Наименование»:

Затем требуется вернуться к форме «Форма Списка» и создать событие «Выбор» для списка «Список Пользователей» с добавлением данного кода:


&НаКлиенте
Процедура СписокПользователейВыбор(Элемент,ВыбраннаяСтрока, Поле,СтандартнаяОбработка)

        Перем ТекущиеДанные;

        ТекущиеДанные =Элементы.СписокПользователей.ТекущиеДанные;

        //Если в справочнике Пользователи элемента нет тогда создаем новый
        Если ТекущиеДанные.Ссылка.Пустая() Тогда

                //В открываемую форму передаем 2 параметра:
                //имя пользователя и полное имя пользователя

                ОткрытьФорму("Справочник.Пользователи.ФормаОбъекта",
                Новый
Структура("ИмяПользователя, ПолноеИмяПользователя", 
                ТекущиеДанные.Имя,ТекущиеДанные.ПолноеИмя)); 
        //Иначе открываем существующий элемент справочника
        Иначе 
                //В открываемую форму передаем 2 параметра:
                //ссылка на существующий справочник и полное имя пользователя
                ОткрытьФорму("Справочник.Пользователи.ФормаОбъекта",
                Новый Структура("Ключ, ПолноеИмяПользователя",
                ТекущиеДанные.Ссылка, ТекущиеДанные.ПолноеИмя)); 
        КонецЕсли;

КонецПроцедуры

После отправления параметров в открываемую форму осуществляется их прием и обработка, что делается благодаря созданию нового события формы «При Создании На Сервере» в форме элемента справочника «Пользователи»:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

        Попытка 
                Объект.Наименование =Параметры.ИмяПользователя;
        Исключение
        КонецПопытки;

        Попытка
                ПолноеНаименование =Параметры.ПолноеИмяПользователя;
        Исключение
        КонецПопытки;


КонецПроцедуры

Форма элемента закончена, однако во время записи элемента справочника форма списка не обновляется. Для обновления формы справочника нужно воспользоваться функцией «Обработка Оповещения», что делается при помощи создания в форме элемента справочника события «После Записи» с добавлением следующего кода:

&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
        Оповестить("ОбновитьФормуСписка");
КонецПроцедуры

Далее в форме списка справочника создается событие «Обработка Оповещения» с добавлением кода:

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия,Параметр,Источник)

        Если ИмяСобытия = "ОбновитьФормуСписка" Тогда
                ЭтаФорма.Список.Очистить();
                ОбновитьСписокПользователей();
        КонецЕсли;

КонецПроцедуры

Функция «Обновить Список Пользователей» теперь выглядит следующим образом:

&НаСервере
Процедура ОбновитьСписокПользователей() 
        ОМПользователи.ОбновитьСписокПользователей(Список);
КонецПроцедуры

Процесс завершен, мы получили готовую конфигурацию:

Нашли ошибку на сайте? Напишите о ней нам!
Наверх Обратный звонок