загрузка...
Дата публикации: 26.01.2018 17:12:52 |
Первая часть обмена между нетиповой 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
КонецПроцедуры
Назад в раздел