загрузка...
Дата публикации: 26.01.2018 17:12:52


Первая часть обмена между нетиповой 1с конфигурацией и сайтом.
Реализация обмена нетиповой 1с с нетиповым сайтом реализована загрузка выгрузка членов само-регулируемой организации с их документами между сайтом и самописной конфигурацией 1с по учету членов само-регулируемой организации часть 1 1С оформление в виде обработки.
 

Функция РазбитьСтроку(ИсходнаяСтрока,Разделитель) Экспорт 
	Рез = Новый Массив;
	Строки = СтрЗаменить(ИсходнаяСтрока,Разделитель,Символы.ПС);
	Для Ном = 1 По СтрЧислоСтрок(Строки) Цикл
		Рез.Добавить(СтрПолучитьСтроку(Строки,Ном));
	КонецЦикла;
	Возврат Рез;
КонецФункции 

функция ВыгрузкаЧлена(член)
если член.SiteID ="" тогда
СайтИД="";		
сообщить("Добавим члена "+член);
имяВыходногоФайла = ПолучитьимяВременногоФайла("txt");
Соединение = Новый HTTPСоединение("website.com", , "login","pass",);
Соединение.Получить("/entry/export.php?param=addu&F="+член.Фамилия+"&I="+член.Имя+"&O="+член.Отчество+"&Mail="+член.email, имяВыходногоФайла);

ТекстовыйДокумент = Новый ТекстовыйДокумент;
ТекстовыйДокумент.Прочитать(имяВыходногоФайла,"utf-8");
Для ТекСтрока = 1 По ТекстовыйДокумент.КоличествоСтрок() Цикл
		ВыводСтр= ТекстовыйДокумент.ПолучитьСтроку(ТекСтрока);
	    Сообщить(ВыводСтр);
		если Найти(ВыводСтр,"#")>0 тогда
			СайтИД=ВыводСтр;
			сообщить("Принят id члена "+СайтИД);
		конецесли;	
КонецЦикла;
	
член.SiteID=СокрЛП(СайтИД);
член.Записать();

доки = член.Документы;
для каждого док из доки цикл
если док.Наименованиедокумента <> Справочники.ВидыПрилагаемыхДокументов.ПустаяСсылка() и док.документ.Получить() <> Неопределено Тогда	
	ВыгрузитьДокумент(член,док.Наименованиедокумента.код);
конецесли
КонецЦикла;
	


иначе
сообщить("Уже есть член "+член);
КонецЕсли;	
	
КонецФункции	

функция ВыгрузитьДокумент(член,doc)
	
	id=ПустоеЧисло(ЛЕВ(член.SiteID,Найти(член.SiteID,"#")-1));
	U=ПустоеЧисло(СРЕД(член.SiteID,Найти(член.SiteID,"#")+1));
	ИмяФайлаДляЗагрузки="";
	ИмяФайлаОтправки="";
	доки = член.Документы;
	для каждого док из доки цикл
		если док.Наименованиедокумента.код = doc тогда
            ТипДокумента = док.Наименованиедокумента.Ссылка;
			ТипФайла = ТипДокумента.типфайла;
			ЗначТФ = Нрег(Строка(ТипФайла));
		    ИмяФайлаОтправки = ПолучитьимяВременногоФайла(ЗначТФ);
			ИмяФайлаДляЗагрузки=ИмяФайлаОтправки;
			сообщить(ИмяФайлаОтправки);
    		ДвоичныеДанные = док.документ.Получить();
  			ДвоичныеДанные.Записать(ИмяФайлаОтправки);
		конецесли	
	конеццикла;
	
	// Вставить содержимое обработчика.
	Boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", ""); 
	
	
	ИмяФайлаОтвета = КаталогВременныхФайлов() + "answer.tmp"; 
	
если ИмяФайлаДляЗагрузки <>"" тогда
	
	МассивФайловДляОбъединения = Новый Массив; 

    //Формируем начальный фрагмент файла POST-запроса 
    ИмяФайлаОтправкиНачало = ПолучитьИмяВременногоФайла("txt"); 
    ФайлОтправкиНачало = Новый ЗаписьТекста(ИмяФайлаОтправкиНачало, КодировкаТекста.ANSI, Символы.ПС, Ложь); 
    //Определяем раздел двоичных данных 
    ФайлОтправкиНачало.ЗаписатьСтроку("--" + Boundary); 
    //Указываем имя файла для передачи 
    //На сервере оно появится в массиве $_FILES['datafile']['name'] 
    ФайлОтправкиНачало.ЗаписатьСтроку("Content-Disposition: form-data; name=""datafile""; filename=""" + ИмяФайлаДляЗагрузки + """"); 
    //Указываем тип передаваемых данных. 
    //С таким же успехом в Content-Type можно указать application/x-octet-stream или application/x-zip-compressed 
    ФайлОтправкиНачало.ЗаписатьСтроку("Content-Type: application/x-octet-stream"); 
    ФайлОтправкиНачало.ЗаписатьСтроку(""); 
    ФайлОтправкиНачало.Закрыть(); 

    МассивФайловДляОбъединения.Добавить(ИмяФайлаОтправкиНачало); 

    //Копируем файл для загрузки во временный и добавляем в массив файлов для объединения 
    ИмяФайлаДляЗагрузкиВременный = ПолучитьИмяВременногоФайла("tmp"); 
    КопироватьФайл(ИмяФайлаДляЗагрузки, ИмяФайлаДляЗагрузкиВременный); 
    МассивФайловДляОбъединения.Добавить(ИмяФайлаДляЗагрузкиВременный); 

    //Формируем конечный фрагмент файла POST-запроса 
    ИмяФайлаОтправкиКонец = ПолучитьИмяВременногоФайла("txt"); 
    ФайлОтправкиКонец = Новый ЗаписьТекста(ИмяФайлаОтправкиКонец, КодировкаТекста.ANSI, Символы.ПС, Ложь); 

    //Завершение раздела двоичных данных 
    ФайлОтправкиКонец.ЗаписатьСтроку("--" + Boundary); 

    //Определяем раздел для каких либо других POST-данных, например содержимого полей виртуальной HTML-формы. 

    //Соответствует полю HTML-формы input type="submit" name="submit" value="Submit" / 
    ФайлОтправкиКонец.ЗаписатьСтроку("--" + Boundary); 
    ФайлОтправкиКонец.ЗаписатьСтроку("Content-disposition: form-data; name=""submit""" + Символы.ПС); 
    ФайлОтправкиКонец.ЗаписатьСтроку("1"); 
    ФайлОтправкиКонец.ЗаписатьСтроку("--" + Boundary); 

    //Соответствует полю HTML-формы input type="checkbox" name="decode" value="decode" / 
    ФайлОтправкиКонец.ЗаписатьСтроку("--" + Boundary); 
    ФайлОтправкиКонец.ЗаписатьСтроку("Content-disposition: form-data; name=""decode""" + Символы.ПС); 
	//ФайлОтправкиКонец.ЗаписатьСтроку(?(КодироватьФайл, "1", "0")); 
    ФайлОтправкиКонец.ЗаписатьСтроку("0"); 
    ФайлОтправкиКонец.ЗаписатьСтроку("--" + Boundary); 

    //Соответствует полю HTML-формы input type="text" name="some_field" value="Some text" / 
    ФайлОтправкиКонец.ЗаписатьСтроку("--" + Boundary); 
    ФайлОтправкиКонец.ЗаписатьСтроку("Content-disposition: form-data; name=""message""" + Символы.ПС); 
    ФайлОтправкиКонец.ЗаписатьСтроку("Передача файла из базы данных 1С Предприятия"); 
    //Завершение сообщения для сервера 
    ФайлОтправкиКонец.ЗаписатьСтроку("--" + Boundary + "--"); 
    ФайлОтправкиКонец.Закрыть(); 

    МассивФайловДляОбъединения.Добавить(ИмяФайлаОтправкиКонец); 

    //Теперь сформированные фрагменты сообщения для сервера объединяем в один файл POST-запроса 
    ОбъединитьФайлы(МассивФайловДляОбъединения, ИмяФайлаОтправки); 



//Формируем заголовок POST-запроса.


    

	ЗаголовокHTTP = Новый Соответствие(); 
   //Обязательные поля заголовка      
   //Укажем формат данных Content-Type 
    ЗаголовокHTTP.Вставить("Content-Type", "multipart/form-data; boundary=" + Boundary); 

    //Укажем длину POST-запроса Content-Length 
    ФайлОтправки = Новый Файл(ИмяФайлаОтправки); 
    РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер()); 
    ЗаголовокHTTP.Вставить("Content-Length", РазмерФайлаОтправки);
    //При необходимости зададим Referer, например таким образом 
    СтрокаСоединения = СтрокаСоединенияИнформационнойБазы(); 
    СерверИсточник = НСтр(СтрокаСоединения, "Srvr") + НСтр(СтрокаСоединения, "Ref"); 
    ЗаголовокHTTP.Вставить("Referer", СерверИсточник);


//Если вы получите ошибку сервера вида Failed sending data to the peer, попробуйте убрать параметр Referer из заголовка.

//Инициализируем HTTPСоединение. При необходимости задаём параметры прокси. 


    
    //ИспользоватьПрокси - какая-то логическая переменная, может быть значение флажка на форме или переключатель 
	//Если ИспользоватьПрокси Тогда 
	//	Прокси = Новый ИнтернетПрокси; 
	//	Прокси.НеИспользоватьПроксиДляЛокальныхАдресов = Истина; 
	//	Прокси.Пароль = "ПарольПрокси"; // укажите своё значение 
	//	Прокси.Пользователь = "ПользовательПрокси"; // укажите своё значение 
	//	НТТР = Новый HTTPСоединение( СерверПриемник , Порт, , , Прокси); 
	//Иначе 

		НТТР =  Новый HTTPСоединение("website.com", , "login","pass",);
	//КонецЕсли; 



//Собственно, отправка данных серверу.

  

АдресСкрипта = "/entry/export.php?param=loadf&id="+id+"&dtype="+doc+"&U="+U; //Естественно, следует указать имя своего скрипта. 
    Попытка 
        НТТР.ОтправитьДляОбработки(ИмяФайлаОтправки, АдресСкрипта, ИмяФайлаОтвета, ЗаголовокHTTP); 
    Исключение 
        //Пример обработки ошибки соединения. 
         Сообщить("Неудачная попытка соединения: " + ОписаниеОшибки()); 
    КонецПопытки; 

    //Удаляем файлы POST-запроса и фрагменты сообщения. Больше они не нужны 
    УдалитьФайлы(ИмяФайлаОтправки); 
	//Если НЕ КодироватьФайл Тогда 
	//	Для каждого ЭлементМассива Из МассивФайловДляОбъединения Цикл 
	//		УдалитьФайлы(ЭлементМассива); 
	//	КонецЦикла; 
	//КонецЕсли; 

	ТекстовыйДокумент = Новый ТекстовыйДокумент;
	ТекстовыйДокумент.Прочитать(ИмяФайлаОтвета,"utf-8");
	Для ТекСтрока = 1 По ТекстовыйДокумент.КоличествоСтрок() Цикл
	    Сообщить(ТекстовыйДокумент.ПолучитьСтроку(ТекСтрока));
	КонецЦикла;
Иначе
	сообщить("Документ+"+doc+"не найден");
КонецЕсли;
	
КонецФункции

функция ЗагрузитьДокумент(член,doc)
	id=ПустоеЧисло(ЛЕВ(член.SiteID,Найти(член.SiteID,"#")-1));
	U=ПустоеЧисло(СРЕД(член.SiteID,Найти(член.SiteID,"#")+1));
	ИмяФайлаДляВыгрузкиВременный = ПолучитьИмяВременногоФайла("tmp"); 
	сообщить(ИмяФайлаДляВыгрузкиВременный);
        Соединение = Новый HTTPСоединение("website.com", , "login","pass",);
	АдресСкрипта = "/entry/export.php?param=uloadf&id="+id+"&dtype="+doc; //Естественно, следует указать имя своего скрипта. 
	Соединение.Получить(АдресСкрипта, ИмяФайлаДляВыгрузкиВременный);
	типфайла = "tmp";
	ТекстовыйДокумент = Новый ТекстовыйДокумент;
	Попытка
    	ТекстовыйДокумент.Прочитать(ИмяФайлаДляВыгрузкиВременный,"utf-8");
	Исключение
    	Сообщить("Ошибка открытия файла!");
	КонецПопытки;
	ТекстоваяСтрока = ТекстовыйДокумент.ПолучитьСтроку(1);	
	СтрокиМассива = РазбитьСтроку(ТекстоваяСтрока,";");
	// /upload/iblock/ce0/ce0411a153172a8ffceeb50c8031e765. ; application/pdf ; ce0411a153172a8ffceeb50c8031e765. ; 2587331
	если СокрЛП(СтрокиМассива[1])="application/pdf" тогда
		типфайла = "pdf";	
	конецесли;
	если СокрЛП(СтрокиМассива[1])="application/octet-stream" тогда
		типфайла = "docx";	
		если doc = 1 тогда
			попытка
        член.адрес = сокрЛП(СтрокиМассива[4]);
		член.ИНН = сокрЛП(СтрокиМассива[5]);
		член.ФактАдрес = сокрЛП(СтрокиМассива[6]);
		член.УдостоверяющийДокумент="паспорт гражданина Российской Федерации, №"+сокрЛП(СтрокиМассива[6])+", выдан: "+сокрЛП(СтрокиМассива[7])+", " +сокрЛП(СтрокиМассива[8]);
		член.НомерАтестата="Квалификационный аттестат № "+сокрЛП(СтрокиМассива[9]) + " , выдан "+сокрЛП(СтрокиМассива[10])+", " +сокрЛП(СтрокиМассива[11]);
			Исключение
		    сообщить("Не смог дозаполнить данные...");
		    КонецПопытки;
		конецесли;	
	конецесли;
	
	если СокрЛП(СтрокиМассива[1])="image/jpeg" тогда
		типфайла = "jpg";	
	конецесли;

	ИмяФайлаДляВыгрузки = ПолучитьИмяВременногоФайла(типфайла); 
	Соединение.Получить(СокрЛП(СтрокиМассива[0]), ИмяФайлаДляВыгрузки);
	НовыйДок=член.Документы.Добавить();
	НовыйДок.Наименованиедокумента = Справочники.ВидыПрилагаемыхДокументов.НайтиПоКоду(doc).Ссылка;
	НовыйДок.документ = Новый ХранилищеЗначения(Новый ДвоичныеДанные(ИмяФайлаДляВыгрузки), Новый СжатиеДанных());
	НовыйДок.ИмяФайла = СокрЛП(СтрокиМассива[2]);
	член.Записать();
КонецФункции	

функция ПустоеЧисло(зн) Экспорт 
зн = ""+зн;
НовЗн = "";
Для Ном=1 По СтрДлина(зн) Цикл
символ = СРЕД(зн,Ном,1);		
НовЗн=НовЗн+?(Найти(".,0123456789",символ)>0,символ,"");
КонецЦикла;	
зн = НовЗн;	
если СокрЛП(зн) ="" или зн = неопределено тогда
	возврат число(0);
иначе
фа =0;	
попытка	
фа =число(зн);
исключение
фа =число(0);
КонецПопытки;

возврат фа;
	
конецесли;	
КонецФункции	




Процедура КнопкаВыполнитьНажатие(Кнопка)
	
		// Вставить содержимое обработчика.
//Режим = РежимДиалогаВыбораФайла.Открытие;
//Диалог = Новый ДиалогВыбораФайла(Режим);
//Диалог.Заголовок = "Выбор файла для загрузки";
//Диалог.Фильтр = "Файл (*.csv)|*.csv";
//	
//Если Не Диалог.Выбрать() Тогда
//   Возврат ;
//Иначе
//   ИмяФайла= Диалог.ПолноеИмяФайла;
//КонецЕсли;
имяВыходногоФайла = ПолучитьимяВременногоФайла("csv");
Соединение = Новый HTTPСоединение("website.com", , "login","pass",);
Соединение.Получить("/entry/export.php", имяВыходногоФайла);



ТекстовыйДокумент = Новый ТекстовыйДокумент;
Попытка
    ТекстовыйДокумент.Прочитать(имяВыходногоФайла,"utf-8");
Исключение
    Сообщить("Ошибка открытия файла!");
    Возврат;
КонецПопытки;

ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("DocID");
ТЗ.Колонки.Добавить("UID");
ТЗ.Колонки.Добавить("Фамилия");
ТЗ.Колонки.Добавить("Имя");
ТЗ.Колонки.Добавить("Отчество");
ТЗ.Колонки.Добавить("email");
ТЗ.Колонки.Добавить("ссылка");
ТЗ.Колонки.Добавить("Дата");

Члены = Справочники.ЧленствоВсро;
Для ТекСтрока = 1 По ТекстовыйДокумент.КоличествоСтрок() Цикл
	ТекстоваяСтрока = ТекстовыйДокумент.ПолучитьСтроку(ТекСтрока);
	СтрокиМассива = РазбитьСтроку(ТекстоваяСтрока,";");
	НайденнаяСсылка = Члены.НайтиПоРеквизиту("email",СокрЛП(СтрокиМассива[5]));
	Если НайденнаяСсылка = Члены.ПустаяСсылка() Тогда
    	Сообщить("Пользователя с email""" + СтрокиМассива[5] + """ еще нет.");
		СтрТЗ=ТЗ.Добавить();
		СтрТЗ.DocID = СокрЛП(СтрокиМассива[0]);
		СтрТЗ.UID = СокрЛП(СтрокиМассива[1]);
		СтрТЗ.Фамилия = СокрЛП(СтрокиМассива[2]);
		СтрТЗ.Имя = СокрЛП(СтрокиМассива[3]);
		СтрТЗ.Отчество = СокрЛП(СтрокиМассива[4]);
		СтрТЗ.email = СокрЛП(СтрокиМассива[5]);
		СтрТЗ.Дата = СокрЛП(СтрокиМассива[6]);
	Иначе
		Рез = НайденнаяСсылка.ПолучитьОбъект();
		ФИО = СокрЛП(СтрокиМассива[2])+" "+СокрЛП(СтрокиМассива[3])+" "+СокрЛП(СтрокиМассива[4]);
		если ФИО <> НайденнаяСсылка.Наименование Тогда
			Сообщить("Есть несоответствие  "+ФИО+" <> "+НайденнаяСсылка.Наименование);
		КонецЕсли;
	    если Рез.SiteID = "" тогда
    		Рез.SiteID = ""+сокрлп(СтрокиМассива[0])+"#"+сокрлп(СтрокиМассива[1]);
			Рез.Записать();
		КонецЕсли;
	КонецЕсли;
КонецЦикла;

СписокОтмеченных = Новый СписокЗначений;
СписокЗначений = Новый СписокЗначений;
	СписокЗначений.ЗагрузитьЗначения(ТЗ.ВыгрузитьКолонку("email"));
	Если СписокЗначений.ОтметитьЭлементы("Отметь логины для загрузки в 1с") Тогда 
	Сообщить("Отмечено:");		
    	Для каждого ЭлементC из СписокЗначений Цикл
			Если ЭлементC.Пометка Тогда
			//СписокОтмеченных.Добавить(СтрЗаменить(СокрЛП(ЭлементC)," ","_"));	
			СписокОтмеченных.Добавить(СокрЛП(ЭлементC));	
			//СписокОтмеченных = СписокОтмеченных + "#" +	ЭлементC;
            сообщить(ЭлементC);
        	КонецЕсли;
		КонецЦикла;
		если СписокОтмеченных.Количество() = 0  Тогда
    		сообщить("Пусто.");
		Иначе		
			СписокОтмеченных.СортироватьПоЗначению(НаправлениеСортировки.Возр);
		КонецЕсли;		
	Иначе
    	сообщить("Отказ.");
	КонецЕсли;


для каждого стрТЗ из ТЗ цикл
если Не СписокОтмеченных.НайтиПоЗначению(СтрТЗ.email) = Неопределено Тогда	
//сообщить(СтрТЗ.DocID+"#"+СтрТЗ.UID +";"+СтрТЗ.Фамилия+";"+СтрТЗ.Имя+";"+СтрТЗ.Отчество+";"+СтрТЗ.email); 	
спр = Справочники.ЧленствоВсро.СоздатьЭлемент();
спр.email = СокрЛП(СтрТЗ.email);
спр.SiteID = СокрЛП(СтрТЗ.DocID)+"#"+СокрЛП(СтрТЗ.UID);
спр.Наименование = СокрЛП(СтрТЗ.Фамилия)+" "+СокрЛП(СтрТЗ.Имя)+" "+СокрЛП(СтрТЗ.Отчество);
спр.Имя=СокрЛП(СтрТЗ.Имя);
спр.Фамилия=СокрЛП(СтрТЗ.Фамилия);
спр.Отчество=СокрЛП(СтрТЗ.Отчество);
спр.ДатаПодачиЗаявки = ДАТА(XMLЗначение(Тип("Дата"),СокрЛП(СтрЗаменить(СтрТЗ.Дата,".","-"))));
спр.Записать();
доки = спр.Документы;

Выборка=Справочники.ВидыПрилагаемыхДокументов.Выбрать();
Пока Выборка.Следующий() Цикл
ЗагрузитьДокумент(спр,Выборка.Код);
КонецЦикла;


КонецЕсли;
КонецЦикла;

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

Процедура ОсновныеДействияФормыотпрф(Кнопка)
	

     ФормаВыбора = Справочники.ЧленствоВсро.ПолучитьФормуВыбора();
     ФормаВыбора.Отбор.Готов.Установить("Да");
     ФормаВыбора.Отбор.Готов.ВидСравнения = ВидСравнения.Равно; 	 
     член = ФормаВыбора.ОткрытьМодально(); 
     член= член.ПолучитьОбъект();
	
	
доки = член.Документы;
для каждого док из доки цикл
если док.Наименованиедокумента <> Справочники.ВидыПрилагаемыхДокументов.ПустаяСсылка() и док.документ.Получить() <> Неопределено  Тогда	
	ВыгрузитьДокумент(член,док.Наименованиедокумента.код);
конецесли
КонецЦикла;
	
	
КонецПроцедуры

Процедура ВыгрузитьЧлена(Кнопка)
	// Вставить содержимое обработчика.
	
	//член = Справочники.ЧленствоВсро.НайтиПоКоду("000000201").ПолучитьОбъект();
	
	
      

     ФормаВыбора = Справочники.ЧленствоВсро.ПолучитьФормуВыбора();
     ФормаВыбора.Отбор.SiteID.Установить("");
     ФормаВыбора.Отбор.SiteID.ВидСравнения = ВидСравнения.Равно; 	 
     ФормаВыбора.Отбор.Готов.Установить("Да");
     ФормаВыбора.Отбор.Готов.ВидСравнения = ВидСравнения.Равно; 	 
     член = ФормаВыбора.ОткрытьМодально(); 
     член= член.ПолучитьОбъект();

	член.SiteID ="";
	член.Записать();
	ВыгрузкаЧлена(член);
	
	
//1	01. Заполненное заявление установленного	Pdf
//2	02. Копия квалификационного аттестата кадастрового инженера	Pdf
//3	03. Копия свидетельства о постановке на учет в налоговом органе.	Pdf
//4	04. Копия паспорта или иного документа, удостоверяющего личность в соответствии с законодательством Российской Федерации.	Pdf
//5	05.  Копия свидетельства о государственной регистрации физического лица в качестве индивидуального предпринимателя или копию подписанного труд. догов.	Pdf
//6	06. Копия документа о высшем или средне-профессиональном образовании.	Pdf
//7	07. СНИЛС	Pdf
//8	08. Фото	Pdf
//9	09. Согласие на обработку персональных данных	Pdf
//1010. Справка об отсутствии непогашенной или неснятой судимости за совершение умышленного преступления.	Pdf
//1111. Справка об отсутствии наказания в виде дисквалификации.	Pdf	
КонецПроцедуры



 

Назад в раздел

Личный кабинет

Логин:
Пароль:
Регистрация
Забыли свой пароль?
Войти как пользователь:
Войти как пользователь
Вы можете войти на сайт, если вы зарегистрированы на одном из этих сервисов:

Ссылки

Яндекс.Метрика

Последняя новость

Сайт начал работу в обновленном режиме

22 января 2016

Сайт начал работу в обновленном режиме...
Подробнее

О погоде

Яндекс.Погода