Добавление фотографий из 1с в ActiveDirectory

28.09.12

Интеграция - Внешние источники данных

Расскажу Вам о том как я добавляла фотографию из 1с (справочника физические лица) в карточку пользователя ActiveDirectory

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Пример обработки по загрузки фото в AD
.epf 7,45Kb
42 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Допустим что перед нами стоит задача выгрузить фотографии сотрудников из 1с в ActiveDirectory.

С чего начнем. Начнем с создания подключения к AD.

     

    // Подключимся к AD
   
Попытка
       
oConnect = ПолучитьCOMОбъект("","ADODB.Connection");
       
oConnect.Provider = "ADSDSOObject";
       
oConnect.Properties("User ID").Value = "ВашАдминскийЮзер";
       
oConnect.Properties("Password").Value = "ЕгоПароль";
       
oConnect.Properties("Encrypt Password").Value = True;
       
oConnect.Open("Active Directory Provider");
    Исключение
        Возврат;
    КонецПопытки;

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

 

// Список записанных фото
   
СписокФотоФизЛиц = Новый СписокЗначений;
   
// Прочитаем регистр изменений фотографий физ. лиц
   
ИзменениеФотоФизЛица = РегистрыСведений.ИзменениеФотоФизЛица.СоздатьНаборЗаписей();
   
ИзменениеФотоФизЛица.Прочитать();
    Для каждого
ФотоФизЛица Из ИзменениеФотоФизЛица Цикл
       
Записали = Ложь;
       
// Получить имя временного файла
       
ИмяФайла = ПолучитьИмяВременногоФайла();
       
мТекущееИзображение = ФотоФизЛица.Фото.Хранилище.Получить();
       
// Страховой номер ПФР является поисковым реквизитом
       
НомерПФР = ФотоФизЛица.Физлицо.СтраховойНомерПФР;
        Если Не
ПустаяСтрока(НомерПФР) И мТекущееИзображение <> Неопределено Тогда
           
мТекущееИзображение.Записать(ИмяФайла);

 

Как вы заметили Страховой номер у меня это уникальный идентификатор, т.е. в AD в EmployeeID должно быть равно номеру ПФР.

Для помещения картинки в AD она должна соответствовать размеру (не более 10 К и ширина, высота - 96). Для изменения размера картинки воспользуемся стандартной библиотекой Windows Image Acquisition Automation Library (в Windows 7 входит в состав дистрибутива). Библиотеку wiaaut.dll придется зарегистрировать командой regsvr32.

 

     Попытка
        
Фото       = Новый COMОбъект("WIA.ImageFile");
        
Процессор  = Новый COMОбъект("WIA.ImageProcess");
        
Фото.LoadFile(ИмяФайла);
         Если
Окр(Фото.FileData.Count / 1024, 2) > 10 Тогда  //Сравниваем размер файла
            
Процессор.Filters.Add(Процессор.FilterInfos("Scale").FilterID);
            
Процессор1 = Процессор.Filters(1);
             Для
К = 1 По Процессор1.Properties.Count Цикл
                 Если
Процессор1.Properties(К).Name = "MaximumWidth" Тогда
                    
Процессор1.Properties(К).Value = 96; //Задаем ширину
                
КонецЕсли;
                 Если
Процессор1.Properties(К).Name = "MaximumHeight" Тогда
                    
Процессор1.Properties(К).Value = 96; //Задаем высоту
                
КонецЕсли;
             КонецЦикла;
            
Фото = Процессор.Apply(Фото);
         КонецЕсли;
        
ИмяФайла = Лев(ИмяФайла, СтрДлина(ИмяФайла) - 4) + ".jpg";
        
Фото.SaveFile(ИмяФайла);
        
Фото = Новый COMОбъект("ADODB.Stream");
        
Фото.Type = 1;
        
Фото.Open();
        
Фото.LoadFromFile(ИмяФайла);
     Исключение
        
Сообщить("Возникла проблема " + ОписаниеОшибки());
     КонецПопытки;

 

Ну а теперь находим пользователя в AD и записываем ему фото:

       Query = "SELECT Name, sAMAccountName, ADsPath FROM 'LDAP://Домен/DC=ВашСервер,DC=ru' WHERE objectCategory='User' And employeeID='"+НомерПФР+"'";
      
Records = oConnect.Execute(query);
       Если НЕ
Records.EOF Тогда
          
ADsPath = Records.Fields("ADsPath").Value;
          
CN = ПолучитьCOMОбъект(Records.Fields("ADsPath").Value).Name;
          
ADsPath = СтрЗаменить(ADsPath, CN+",", "");
          
PreObj = ПолучитьCOMОбъект("LDAP:");
          
objContainer = PreObj.OpenDSObject(ADsPath, "ВашАдминскийЮзер", "ЕгоПароль", 1);
          
UpdateObject = objContainer.GetObject("User", CN);
          
UpdateObject.Put("thumbnailPhoto", Фото.Read());
          
UpdateObject.SetInfo();
       КонецЕсли;
      
Записали = Истина;
   Исключение
   КонецПопытки;

Закрываем подключение. Прибираемся. Уходим. Вот и всё!!!

 

        // Удалим фото из регистра
       
СписокФотоФизЛиц.Добавить(ФотоФизЛица);
       
// Удалим временный файл
       
УдалитьФайлы(ИмяФайла);
    КонецЕсли;
КонецЦикла;
// Закроем AD
oConnect.Close();
// Запишим изменения в регистр изменений фотографий физ. лиц
Для каждого ФотоФизЛица Из СписокФотоФизЛиц Цикл
   
ИзменениеФотоФизЛица.Удалить(ФотоФизЛица.Значение);
КонецЦикла;
ИзменениеФотоФизЛица.Записать(Истина);

 

Успехов Wink. В прикрепленных файлах есть обработка (не забудьте изменить строки подключения)

На скриншотах Вы можете увидеть результат работы обработки - на закладке Редактор аттрибутов в атрибуте thumbnailPhoto появилась строка с двоичными данными. В дальнейшем эти фотографии могут быть импортированы в Outlook.

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Внешние источники данных Программист Бизнес-аналитик Пользователь 1С:Предприятие 8 1C:Бухгалтерия Узбекистан Беларусь Кыргызстан Молдова Россия Казахстан Платные (руб)

Готовое решение для автоматической выгрузки данных из 1С 8.3 в базу данных ClickHouse, PostgreSQL или Microsoft SQL для работы с данными 1С в BI-системах. «Экстрактор данных 1С в BI» работает со всеми типовыми и нестандартными конфигурациями 1С 8.3 и упрощает работу бизнес-аналитиков. Благодаря этому решению, специалистам не требуется быть программистами, чтобы легко получать данные из 1С в вашей BI-системе.

28500 руб.

15.11.2022    29405    36    49    

44

Внешние источники данных Программист Бизнес-аналитик 1С:Предприятие 8 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x 1С:Розница 3.0 Платные (руб)

Обработка для выгрузки данных из подготовленных СКД в фоновом режиме в базу ClickHouseDB, PostgreSQL, MySQL, в шину данных с поддержкой REST API (CSV, JSON. SQL), в локальные файлы (CSV, JSON, XLS, XLSX) или в Google Sheets. Это дополнительная подключаемая обработка.

18000 руб.

21.08.2024    6912    17    4    

15

Розничная торговля Внешние источники данных Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Бухгалтерия 3.0 Фармацевтика, аптеки Россия Бухгалтерский учет Платные (руб)

Внешняя обработка загрузки данных из файла-выгрузки, сформированного в программе F3 TAIL версии 3.4 (и выше) или еФарма версии 2.1, в базу конфигурации 1С: Бухгалтерия предприятия 8, ред. 3.0 (Базовая, ПРОФ, КОРП, ФРЕШ (тонкий клиент)).

17080 руб.

19.12.2016    52366    111    107    

78

Оптовая торговля Розничная торговля Внешние источники данных Прайсы 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Управленческий учет Платные (руб)

Хотите, чтобы остатки и цены товаров в вашей базе всегда были актуальными без лишних усилий? Теперь это возможно - автоматизируйте процесс загрузки и обновления данных о номенклатуре от ваших поставщиков или конкурентов. Как это работает? Вы сами настраиваете правила и расписание для каждого поставщика, чтобы обновление информации из произвольных форматов прайс-листов происходило автоматически.

15250 руб.

15.05.2024    3540    6    1    

7

Внешние источники данных Мастера заполнения Бизнес-аналитик Бухгалтер Пользователь 1С:Предприятие 8 1С:Бухгалтерия государственного учреждения 1С:Бухгалтерия 3.0 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 1С:Управление торговлей 11 1С:Розница 3.0 1С:Документооборот Россия Платные (руб)

Решение позволяет по ИНН производить проверку контрагентов, получая сведения: видов деятельности, данных ЕГРЮЛ, связанных организаций, отчетности, налогов, финансовый анализ, а также в один клик заполнить карточки справочников контрагентов/партнеров по ИНН в программе 1С по данным государственных реестров.

6000 руб.

12.08.2025    2200    7    7    

7

Внешние источники данных Программист Бухгалтер 1С:Предприятие 8 1С:Бухгалтерия 3.0 Рестораны, кафе и фаст-фуд Россия Бухгалтерский учет Платные (руб)

Внешняя обработка для загрузки номенклатуры и документов продаж из базы данных SQL программы R-keeper 7 фирмы UCS в 1с Бухгалтерию 8.3. С возможностью загрузки за период и синхронизации справочников.

9150 руб.

16.10.2019    26134    12    13    

16
Внимание! Тема закрыта. Добавлять сообщения в закрытую тему запрещено.
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. comol 02.10.12 09:05 Сейчас в теме
Если есть установленный sharepoint то это всё делается много проще...
2. Nas'ka 104 02.10.12 09:28 Сейчас в теме
(1) comol, Поделитесь с нами опытом
adhocprog; +1 Ответить
3. dimaster 40 25.10.12 08:18 Сейчас в теме
есть еще такая удобная штука:

Скачать библиотеку можно тут: www.dewdney.co.uk/adext/adext.zip
оф кос, это не пакетная загрузка, но удобней смотреть, чем
4. Nas'ka 104 25.10.12 08:28 Сейчас в теме
(3) Есть еще и такая "CodeTwo Active Directory Photos". Я ею пользовалась. Удобная софтинка. Не принципиально.
adhocprog; +1 Ответить
5. nanik 6 11.09.15 05:14 Сейчас в теме
Подскажите, можно ли получить фото из AD средствами 1с?
6. Nas'ka 104 11.09.15 09:06 Сейчас в теме
(5) Конечно можно, например следующий код открывает фото на просмотр:
Query = "SEL ECT Name, sAMAccountName, ADsPath, thumbnailPhoto  FR OM 'LDAP://ИмяДомена/DC=ИмяДомена,DC=ru' WHERE objectCategory='User' And employeeID='"+НомерПФР+"'";  //или какой то другой уникальный признак
	Records = oConnect.Execute(query); 
	Пока НЕ Records.EOF Цикл 
		Если Records.Fields("thumbnailPhoto").Value = Null Тогда //Или вместо thumbnailPhoto ваше поле с фото
			Предупреждение("Пусто");
		Иначе
			ИмяФайла 	= ПолучитьИмяВременногоФайла("bmp");
			
			Поток 		= Новый COMОбъект("ADODB.Stream");
			Поток.Type 	= 1;
			Поток.Mode 	= 3;
			Поток.Open();
			Поток.Write(Records.Fields("thumbnailPhoto").Value);
			Поток.SaveToFile(ИмяФайла);
			Поток.Close();
			
			ЗапуститьПриложение("explorer " + ИмяФайла);
		КонецЕсли;
		Records.MoveNext();
	КонецЦикла;
Показать
Dudasmit; adhocprog; +2 Ответить
7. nanik 6 14.09.15 02:15 Сейчас в теме
8. пользователь 07.06.22 17:45
Сообщение было скрыто модератором.
...
Для отправки сообщения требуется регистрация/авторизация