1c-obrabotki.at.ua Суббота, 08.02.2025, 07:22
Главная | Регистрация | Вход Приветствую Вас Гость | RSS
Форма входа

Меню сайта

Категории раздела
Мои статьи [48]

Курс валют
Курс Валют Информер
Российский рубль Российский рубль валюта России
(EUR)//-//
(USD)//-//
(CZK)//-//
(GBP)//-//

Главная » Статьи » Мои статьи

Работа с пользователями в 1С 8.2
Введение
 
        В данной статье речь пойдет о том, как синхронизировать пользователей БД со справочником Пользователи. В типовых конфигурациях от фирмы 1С синхронизация этих данных достаточна сложна для понимания людей только что столкнувшихся с программированием на данной платформе. Мы попытались на данном примере упростить эту схему. Что из этого получилось, читайте ниже.
 
Создание формы списка справочника Пользователи
 
        Для начала создадим новый справочник "Пользователи". Реквизитов никаких добавлять не будем, если кто захочет, потом самостоятельно добавит нужные ему реквизиты. Для отображения списка пользователей, мы создадим ФормуСписка, но на ней никаких реквизитов добавлять не будем. Вместо этого создадим реквизит типа ТаблицаЗначений и добавим в нее колонки, как показано на рисунке:

 
Теперь разместим на форме Элемент таблица и назовем ее "СписокПользователей" в которую добавим 2 поля - СписокПользователейИмя (Путь к данным - Список.Имя) и СписокПользователейПолноеИмя (Путь к данным - Список.Полное имя). После этого нам нужно заполнить эту таблицу данными. Для этого создадим событие формы ПриСозданииНаСервере и добавим следующий код:
 
&НаСервере 
Процедура ПриСозданииНаСервере(Отказ,СтандартнаяОбработка)

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

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

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

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

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

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

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

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

        КонецЦикла; 

КонецПроцедуры
 
В этой функции мы перебираем пользователей БД, добавляем их в наш СписокПользователей и в зависимости от того, есть ли данный элемент в справочнике Пользователи устанавливаем флаг СуществуетВСправочнике. Для чего же нужен флаг СуществуетВСправочнике? Ответ прост. Этот флаг нам понадобится для условного форматирования в оформлении, т.е. программа будет видеть, что данный пользователь еще не заведен в справочник, и отображать другим цветом. Для этого в свойствах формы определим это самое форматирование:
 
 
 
Теперь создадим новое форматирование, нажав кнопку добавить. Значение в колонке "Оформление" будет выглядеть так:
 
 
значение в колонке "Условие":
 
 
значение в колонке "Оформляемые поля":
 
 
Создание элемента справочника Пользователи
 
        Добавим новую форму в справочник пользователи:

Добавим в форму новое поле и строковой реквизит "ПолноеНаименование":
 
 
Теперь вернемся к форме "ФормаСписка" и создадим для списка "СписокПользователей" событие "Выбор", в которое добавим следующий код:
 

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

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

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

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

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

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

КонецПроцедуры
Параметры в открываемую форму мы отправили, теперь необходимо их принять и обработать. Для этого открываем форму элемента справочника Пользователи и создаем новое событие формы "ПриСозданииНаСервере":
 

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

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

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

КонецПроцедуры
 
Форма элемента готова. Но при записи элемента справочника форма списка не обновляется. Чтобы обновить форму справочника воспользуемся функцией ОбработкаОповещения. Для этого в форме элемента справочника создадим событие ПослеЗаписи и добавим код:
 
&НаКлиенте 
Процедура ПослеЗаписи(ПараметрыЗаписи)
        Оповестить("ОбновитьФормуСписка");
КонецПроцедуры
 
а в форме списка справочника создадим событие ОбработкаОповещения с кодом:

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

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



Источник: http://alsproject.ru/publ/primery/rabota_s_polzovateljami_v_1s_8_2/4-1-0-14
Категория: Мои статьи | Добавил: Sam1488 (24.05.2013)
Просмотров: 1281 | Рейтинг: 0.0/0
Всего комментариев: 0
Погода

Поиск

Новости

Copyright MyCorp © 2025