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

28.09.12

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

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

Скачать файл

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

Наименование По подписке [?] Купить один файл
Пример обработки по загрузки фото в AD
.epf 7,45Kb
42
42 Скачать (1 SM) Купить за 1 850 руб.

Допустим что перед нами стоит задача выгрузить фотографии сотрудников из 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С v8.3 Управляемые формы Анализ и прогнозирование Конфигурации 1cv8 Узбекистан Беларусь Кыргызстан Молдова Россия Казахстан Платные (руб)

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

15.11.2022    18971    17    SQV0    49    

37

Зарплата Внешние источники данных Бюджетный учет Перенос данных 1C Системный администратор Программист Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 8 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

84000 руб.

19.08.2020    24048    22    1    

24

Внешние источники данных Кадровый учет Файловый обмен (TXT, XML, DBF), FTP Перенос данных 1C Программист Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 10 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

60000 руб.

05.10.2022    10255    11    8    

13

Производство готовой продукции (работ, услуг) Внешние источники данных Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 Лесное и деревообрабатывающее хозяйство Россия Управленческий учет Платные (руб)

Обработка предназначена для загрузки файлов, выгруженных из системы Базис-мебельщик, в справочник 1С "Спецификации" для последующих процессов учета и диспетчирования полуфабрикатов и изделий.

10200 руб.

24.06.2021    20177    55    53    

33

Внешние источники данных Загрузка и выгрузка в Excel Зарплата Бюджетный учет Системный администратор Программист Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате из Парус 10(Торнадо) учреждений через файлы Excel в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ). В принципе, обработка может быть использована для загрузки из файлов Excel, полученных из любых информационных систем.

48000 руб.

16.11.2018    30572    21    31    

22

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

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

13200 руб.

19.12.2016    46579    85    105    

65
Внимание! Тема закрыта. Добавлять сообщения в закрытую тему запрещено.
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. comol 5073 02.10.12 09:05 Сейчас в теме
Если есть установленный sharepoint то это всё делается много проще...
2. Nas'ka 102 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 102 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 102 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
Сообщение было скрыто модератором.
...
Оставьте свое сообщение