Вот весь модуль объекта, обработка вроде и формирует сам скелет этого файла, но данные не выводит, почему-то. Как бы я не пытался, но не могу найти ошибку, поэтому прошу о помощи у вас, господа.
//Процедура определяет текущую конфигурацию
// Отталкиваясь от конфигурации будет запущена
// своя процедура для выгрузки
Процедура ПолучитьТекущуюКонфигурацию() Экспорт
ТекущаяКонфигурация = Метаданные.Имя;
КонецПроцедуры
Функция РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = ",") Экспорт
МассивСтрок = Новый Массив();
Если Разделитель = " " Тогда
Стр = СокрЛП(Стр);
Пока Истина Цикл
Поз = Найти(Стр,Разделитель);
Если Поз=0 Тогда
МассивСтрок.Добавить(Стр);
Возврат МассивСтрок;
КонецЕсли;
МассивСтрок.Добавить(Лев(Стр,Поз-1));
Стр = СокрЛ(Сред(Стр,Поз));
КонецЦикла;
Иначе
ДлинаРазделителя = СтрДлина(Разделитель);
Пока Истина Цикл
Поз = Найти(Стр,Разделитель);
Если Поз=0 Тогда
МассивСтрок.Добавить(Стр);
Возврат МассивСтрок;
КонецЕсли;
МассивСтрок.Добавить(Лев(Стр,Поз-1));
Стр = Сред(Стр,Поз+ДлинаРазделителя);
КонецЦикла;
КонецЕсли;
КонецФункции // глРазложить
// На вход идет выборка из результата запроса
//&НаСервере
Процедура СохранитьВКаталог(ВыборкаТоваров) Экспорт
// Проверим существование папки для записи изображений
Если ЛокальнаяВыгрузка = Ложь Тогда
Каталог = "C:\1C";
КонецЕсли;
ПутьКИзображениям =Каталог + "\Picture\";
КоличествоВыгруженныхТоваров = 0;
ПапкаКатолога = Новый Файл(Каталог);
Если Не ПапкаКатолога.Существует() Тогда
СоздатьКаталог(ПутьКИзображениям);
КонецЕсли;
ПапкаХранилища = Новый Файл(ПутьКИзображениям);
// Очищаем каталог перд загрзузкой новых файлов
Если Не ПапкаХранилища.Существует() Тогда
СоздатьКаталог(ПутьКИзображениям);
Иначе
Попытка
УдалитьФайлы(ПутьКИзображениям,"*.*");
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
ЗаписьХМL = Новый ЗаписьXML;
ЗаписьХМL.ОткрытьФайл(Каталог + "\" + Организация + ".xml");
// Записать директиву
ЗаписьХМL.ЗаписатьОбъявлениеXML();
//ЗаписьХМL.ЗаписатьНачалоЭлемента(Строка("OCTYPE xml_catalog SYSTEM" +" " + "hops.dtd"));
ЗаписьХМL.ЗаписатьНачалоЭлемента("yml_catalog");
ЗаписьХМL.ЗаписатьАтрибут("date",Строка(Формат(КонецДня(ТекущаяДата()) - 3539, "ДФ=yyyy-MM-dd")+" "+Формат(КонецДня(ТекущаяДата()) - 3539, "ДФ=ЧЧ")+":"+Формат(КонецДня(ТекущаяДата()) - 3539, "ДФ=мм")));
ЗаписьХМL.ЗаписатьНачалоЭлемента("shop");
// начинаем обход результата запроса
ЗаписьХМL.ЗаписатьНачалоЭлемента("name");
ЗаписьХМL.ЗаписатьТекст (Строка("HBH"));
//Operation name;
ЗаписьХМL.ЗаписатьКонецЭлемента();
//ВыборкаНоменклатура = ВыборкаНоменклатураРодитель.Выбрать();
//Пока ВыборкаНоменклатура.Следующий() Цикл
ЗаписьХМL.ЗаписатьНачалоЭлемента("company");
ЗаписьХМL.ЗаписатьТекст (Строка("Berkut"));
//company name;
ЗаписьХМL.ЗаписатьКонецЭлемента();
ЗаписьХМL.ЗаписатьНачалоЭлемента("url");
//url;
ЗаписьХМL.ЗаписатьКонецЭлемента();
ЗаписьХМL.ЗаписатьНачалоЭлемента("currencies");
ЗаписьХМL.ЗаписатьТекст (Строка("UAH"));
ЗаписьХМL.ЗаписатьКонецЭлемента();
//ОбходПоГруппирокам = ОбходРезультатаЗапроса.ПоГруппировкам;
ТЗКатегории = ВыборкаТоваров.Скопировать();
ТЗКатегории.Свернуть("НоменклатураРодитель");
//ВыборкаНоменклатураРодитель = ТЗКатегории;
ЗаписьХМL.ЗаписатьНачалоЭлемента("categories");
Для каждого СтрокаПеребора Из ТЗКатегории Цикл
ЗаписьХМL.ЗаписатьНачалоЭлемента("category");
ЗаписьХМL.ЗаписатьАтрибут("id",Прав(СтрокаПеребора.НоменклатураРодитель.Код,7 ));
ЗаписьХМL.ЗаписатьТекст(Строка(СтрокаПеребора.НоменклатураРодитель.Наименование));
ЗаписьХМL.ЗаписатьКонецЭлемента();
КонецЦикла;
ЗаписьХМL.ЗаписатьКонецЭлемента();
ЗаписьХМL.ЗаписатьНачалоЭлемента("offers");
//Пока ВыборкаТоваров.Следующий() Цикл
Для каждого НоваяПеременнаяЦикла из ВыборкаТоваров цикл
ЗаписьХМL.ЗаписатьНачалоЭлемента("offer");
Если ЗначениеЗаполнено(НоваяПеременнаяЦикла.Код) Тогда
КоличествоВыгруженныхТоваров = КоличествоВыгруженныхТоваров + 1;
ЗаписьХМL.ЗаписатьАтрибут("id",Прав(НоваяПеременнаяЦикла.Код,7 ));
Если ВыборкаТоваров.Остаток > 0 И НЕ НоваяПеременнаяЦикла.НоменклатураСсылка.шЗаказная Тогда
ЗаписьХМL.ЗаписатьАтрибут("available",Строка("в наличии"));
ИначеЕсли НоваяПеременнаяЦикла.Остаток >= 0 И НоваяПеременнаяЦикла.НоменклатураСсылка.шЗаказная Тогда
ЗаписьХМL.ЗаписатьАтрибут("available",Строка("под заказ"));
Иначе
ЗаписьХМL.ЗаписатьАтрибут("available",Строка("наличие уточняйте"));
КонецЕсли;
ЗаписьХМL.ЗаписатьНачалоЭлемента("url");
///
ЗаписьХМL.ЗаписатьКонецЭлемента();
ЗаписьХМL.ЗаписатьНачалоЭлемента("price");
Если ЗначениеЗаполнено(ВыборкаТоваров.Цена) Тогда
ЗаписьХМL.ЗаписатьТекст(СтрЗаменить(Строка(ВыборкаТоваров.Цена),",","."));
КонецЕсли;
ЗаписьХМL.ЗаписатьКонецЭлемента();
ЗаписьХМL.ЗаписатьНачалоЭлемента("currencyId");
ЗаписьХМL.ЗаписатьТекст (Строка("UAH"));
ЗаписьХМL.ЗаписатьКонецЭлемента();
ЗаписьХМL.ЗаписатьНачалоЭлемента("measure");
ЗаписьХМL.ЗаписатьТекст (Строка(ВыборкаТоваров.ЕдиницаИзмерения));
ЗаписьХМL.ЗаписатьКонецЭлемента();
ЗаписьХМL.ЗаписатьНачалоЭлемента("categoryId");
ЗаписьХМL.ЗаписатьТекст("id",Прав(ВыборкаТоваров.НоменклатураРодитель.Код,7 ));
ЗаписьХМL.ЗаписатьКонецЭлемента();
ЗаписьХМL.ЗаписатьНачалоЭлемента("picture");
//ЗаписьХМL.ЗаписатьТекст (ВыборкаТоваров.НаименованиеПолное);
ЗаписьХМL.ЗаписатьКонецЭлемента();
// ЗДЕСЬ ДОЛЖЕН БЫТЬ <vendor>Польша</vendor>
// <vendorCode></vendorCode>
ЗаписьХМL.ЗаписатьНачалоЭлемента("model");
ЗаписьХМL.ЗаписатьТекст(ВыборкаТоваров.Наименование);
ЗаписьХМL.ЗаписатьКонецЭлемента();
ЗаписьХМL.ЗаписатьНачалоЭлемента("description");
ЗаписьХМL.ЗаписатьТекст (ВыборкаТоваров.Описание);
ЗаписьХМL.ЗаписатьКонецЭлемента();
КонецЕСли;
ЗаписьХМL. ЗаписатьКонецЭлемента(); //Относится к "offer"
КонецЦикла;
ЗаписьХМL.ЗаписатьКонецЭлемента(); //Относится к "offers"
ЗаписьХМL.ЗаписатьКонецЭлемента(); //Относится к элементу "shop"
ЗаписьХМL.ЗаписатьКонецЭлемента(); //Относится к элементу "yml_catalog"
ЗаписьХМL.Закрыть();
Если ЛокальнаяВыгрузка = Ложь Тогда
ОтправитьФайлНаСервер(КоличествоВыгруженныхТоваров);
Иначе
Сообщить("Выгрузка успешно завершилась. Выгружено " + КоличествоВыгруженныхТоваров + " товаров");
КонецЕсли;
КонецПроцедуры
// Процедура записывает изображения в каталог
Процедура ИзвлечьИзХранилища(Хранилище,ИмяФайлаХранилища, ПапкаХранилища)
Префикс = "_1";
Файл=Хранилище.Получить();
ИмяФайла=СокрЛП(ПапкаХранилища)+СокрЛП(ИмяФайлаХранилища)+ Префикс + ".bmp";
Файл.Записать(ИмяФайла);
//Сообщить("Файл записан: "+ИмяФайла);
КонецПроцедуры
// В случае, когда не стоит галочка "Выгружать основное изображение",
// выгружаются все имеющиеся изображения у позиции номенклатуры
Процедура ВыгрузитьГруппуИзображений(Номенклатура,ПутьКИзображениям)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ХранилищеДополнительнойИнформации.Объект.Код КАК НоменклатураКод,
| ХранилищеДополнительнойИнформации.Хранилище
|ИЗ
| Справочник.ХранилищеДополнительнойИнформации КАК ХранилищеДополнительнойИнформации
|ГДЕ
| ХранилищеДополнительнойИнформации.ВидДанных = &Изображение
| И ХранилищеДополнительнойИнформации.Объект = &Номенклатура";
Запрос.УстановитьПараметр("Изображение", Перечисления.ВидыДополнительнойИнформацииОбъектов.Изображение);
Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
РезультатЗапроса = Запрос.Выполнить().Выбрать();
Префикс = 0;
Пока РезультатЗапроса.Следующий() Цикл
Префикс = Префикс + 1;
Файл= РезультатЗапроса.Хранилище.Получить();
ИмяФайла=СокрЛП(ПутьКИзображениям)+СокрЛП(РезультатЗапроса.НоменклатураКод)+ "_" + Префикс + ".bmp";
Файл.Записать(ИмяФайла);
КонецЦикла;
КонецПроцедуры
Процедура ОтправитьФайлНаСервер(КоличествоВыгруженныхТоваров) Экспорт
// Имя файла которое будем передавать
ИмяФайлаДанных = ДобавитьФайлыВАрхив();
// Определяем разделитель разделов — границу boundary в POST-запросе.
Boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", "");
//Определяем имя файла ответа от веб-сервера
ИмяФайлаОтвета = КаталогВременныхФайлов() + "answer.tmp";
//Закодируем содержимое файла по Base64, то есть преобразуем его к URL-неактивному виду.
СодержимоеZIP = Base64Строка(Новый ДвоичныеДанные(ИмяФайлаДанных));
ИмяФайлаОтправки = КаталогВременныхФайлов() + "post.txt";
ФайлОтправки = Новый ЗаписьТекста(ИмяФайлаОтправки, КодировкаТекста.ANSI, Символы.ПС, ЛОЖЬ);
//Определяем раздел двоичных данных
ФайлОтправки.ЗаписатьСтроку("--" + Boundary);
//Указываем имя файла для передачи
ФайлОтправки.ЗаписатьСтроку("Content-Disposition: form-data; name=""data""; filename=""" + ИмяФайлаДанных + """");
//Указываем тип передаваемых данных.
//С таким же успехом в Content-Type можно указать application/x-octet-stream
ФайлОтправки.ЗаписатьСтроку("Content-Type: application/x-zip-compressed" + Символы.ПС + Символы.ПС);
//Записываем кодированные двоичные данные
ФайлОтправки.ЗаписатьСтроку(СодержимоеZIP);
ФайлОтправки.ЗаписатьСтроку("--" + Boundary);
//Соответствует HTML-тэгу input type="submit" name="submit" value="Submit" /
ФайлОтправки.ЗаписатьСтроку("--" + Boundary);
ФайлОтправки.ЗаписатьСтроку("Content-disposition: form-data; name=""submit""" + Символы.ПС);
ФайлОтправки.ЗаписатьСтроку("1");
ФайлОтправки.ЗаписатьСтроку("--" + Boundary);
//Соответствует HTML-тэгу
//input type="text" name="some_field" value="Some text" /
ФайлОтправки.ЗаписатьСтроку("--" + Boundary);
ФайлОтправки.ЗаписатьСтроку("Content-disposition: form-data; name=""ID""" + Символы.ПС);
ФайлОтправки.ЗаписатьСтроку(СокрЛП(Организация));
ФайлОтправки.ЗаписатьСтроку("--" + Boundary);
ФайлОтправки.Закрыть();
// Формируем заголовок POST-запроса
ЗаголовокHTTP = Новый Соответствие();
//При необходимости зададим Referer, например таким образом
//СтрокаСоединения = СтрокаСоединенияИнформационнойБазы();
//СерверИсточник = НСтр(СтрокаСоединения, "Srvr") + НСтр(СтрокаСоединения, "Ref");
//ЗаголовокHTTP.Вставить("Referer", СерверИсточник);
ЗаголовокHTTP.Вставить("ID", Организация);
//Укажем формат данных Content-Type
ЗаголовокHTTP.Вставить("Content-Type", "multipart/form-data; boundary=" + Boundary);
//Укажем длину POST-запроса Content-Length
ФайлОтправки = Новый Файл(ИмяФайлаОтправки);
РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер());
ЗаголовокHTTP.Вставить("Content-Length", РазмерФайлаОтправки);
//http://control.neobroker.ru/cgi-bin/get_xml_1c.pl - адрес сервера
Сервер = "";
Порт = "";
//ИспользоватьПрокси =Ложь;
Если ИспользоватьПрокси Тогда
Прокси = Новый ИнтернетПрокси;
Прокси.НеИспользоватьПроксиДляЛокальныхАдресов = Истина;
Прокси.Пароль = ПарольПрокси; // укажите своё значение
Прокси.Пользователь = ПользовательПрокси; // укажите своё значение
НТТР = Новый HTTPСоединение(Сервер, Порт, , , Прокси);
Иначе
НТТР = Новый HTTPСоединение(Сервер, Порт);
КонецЕсли;
АдресСкрипта = "/cgi-bin/get_xml_1c.pl"; //http:// Естественно, следует указать имя своего скрипта.
Попытка
НТТР.ОтправитьДляОбработки(ИмяФайлаОтправки, АдресСкрипта, ИмяФайлаОтвета, ЗаголовокHTTP);
НТТР = Неопределено;
Исключение
//Пример обработки ошибки соединения.
#Если Клиент Тогда
Сообщить("Неудачная попытка соединения: " + ОписаниеОшибки());
#Иначе
ЗаписьЖурналаРегистрации("HTTPСоединение", УровеньЖурналаРегистрации.Ошибка, , , "Неудачная попытка соединения: " + ОписаниеОшибки());
#КонецЕсли
Возврат;
КонецПопытки;
//Удалим файл отправки POST-запроса. Больше он нам не нужен.
УдалитьФайлы(ИмяФайлаОтправки);
//Отправили данные, анализируем ответ сервера.
ФайлОтвета = Новый Файл(ИмяФайлаОтвета);
Если ФайлОтвета.Существует() Тогда
ТекстОтвета = Новый ТекстовыйДокумент();
ТекстОтвета.Прочитать(ИмяФайлаОтвета);
Если ТекстОтвета.КоличествоСтрок() > 0 Тогда
ОтветСервера = ТекстОтвета.ПолучитьТекст();
#Если Клиент Тогда
Сообщить(ОтветСервера);
#КонецЕсли
Иначе
#Если Клиент Тогда
Сообщить("Отправка файла на сервер: Получен пустой ответ сервера.");
#Иначе
ЗаписьЖурналаРегистрации("HTTPСоединение", УровеньЖурналаРегистрации.Ошибка, , , "Получен пустой ответ сервера.");
#КонецЕсли
КонецЕсли;
УдалитьФайлы(ИмяФайлаОтвета);
Иначе
#Если Клиент Тогда
Сообщить("Отправка файла на сервер: Ответ сервера не получен.");
#Иначе
ЗаписьЖурналаРегистрации("HTTPСоединение", УровеньЖурналаРегистрации.Ошибка, , , "Ответ сервера не получен.");
#КонецЕсли
КонецЕсли;
Сообщить("Выгрузка успешно завершилась! Выгружено " + КоличествоВыгруженныхТоваров + " товаров");
УдалитьФайлы(Каталог);
КонецПроцедуры
Функция ДобавитьФайлыВАрхив() Экспорт
ПутьКФайлам =Каталог;
ПутьКФайлам = Новый Файл(ПутьКФайлам);
Если Не ПутьКФайлам.Существует() Тогда
СоздатьКаталог(ПутьКФайлам);
КонецЕсли;
ИмяФайлаДанных = Каталог+"\" + СокрЛП(Организация) + ".zip";
//УдалитьФайлы(ИмяФайлаДанных);
ФайлZip = Новый ЗаписьZipФайла;
ФайлZip.Открыть(ИмяФайлаДанных);
ФайлZip.Добавить(Каталог+"\", РежимСохраненияПутейZIP.СохранятьОтносительныеПути,РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно);
Попытка
ФайлZip.Записать();
Возврат ИмяФайлаДанных;
Исключение
// Сообщить(ОписаниеОшибки());
ДобавитьФайлыВАрхив();
//Возврат Неопределено;
КонецПопытки;
КонецФункции
Процедура ИнициализацияПостроителяОтчета() Экспорт
ТекстЗапроса =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Номенклатура
|ПОМЕСТИТЬ ВТНоменклатура
|{ВЫБРАТЬ
| Номенклатура.* КАК Номенклатура}
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТНоменклатура.Номенклатура.Код КАК Код,
| ВТНоменклатура.Номенклатура.Наименование КАК Наименование,
| ВТНоменклатура.Номенклатура.Артикул КАК Артикул,
| ВТНоменклатура.Номенклатура.БазоваяЕдиницаИзмерения КАК ЕдиницаИзмерения,
| ВТНоменклатура.Номенклатура.Комментарий КАК Комментарий,
| ВТНоменклатура.Номенклатура.НаименованиеПолное КАК НаименованиеПолное,
| ВТНоменклатура.Номенклатура.ДополнительноеОписаниеНоменклатуры КАК Описание,
| ЦеныНоменклатурыСрезПоследних.Цена,
| ВТНоменклатура.Номенклатура.Родитель КАК НоменклатураРодитель,
| ВТНоменклатура.Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
| ТоварыНаСкладахОстатки.Склад,
| ЦеныНоменклатурыСрезПоследних.ТипЦен,
| ТоварыНаСкладахОстатки.КоличествоОстаток КАК Остаток,
| ВТНоменклатура.Номенклатура.ОсновноеИзображение.Хранилище КАК Хранилище,
| ВТНоменклатура.Номенклатура.ОсновноеИзображение.Объект.Код КАК КодИзображения,
| ВТНоменклатура.Номенклатура.Ссылка КАК НоменклатураСсылка
|{ВЫБРАТЬ
| НоменклатураСсылка.* КАК Номенклатура,
| ТипЦен.* КАК ТипЦен,
| Склад.* КАК Склад}
|ИЗ
| ВТНоменклатура КАК ВТНоменклатура
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(, {(Номенклатура).* КАК Номенклатура, (Склад).* КАК Склад}) КАК ТоварыНаСкладахОстатки
| ПО ВТНоменклатура.Номенклатура.Ссылка = ТоварыНаСкладахОстатки.Номенклатура
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, {(Номенклатура).* КАК Номенклатура, (ТипЦен).* КАК ТипЦен}) КАК ЦеныНоменклатурыСрезПоследних
| ПО ВТНоменклатура.Номенклатура.Ссылка = ЦеныНоменклатурыСрезПоследних.Номенклатура
|ГДЕ
| ТоварыНаСкладахОстатки.Склад.ТипЦенРозничнойТорговли = ЦеныНоменклатурыСрезПоследних.ТипЦен
|{ГДЕ
| ВТНоменклатура.Номенклатура.Ссылка.* КАК Номенклатура,
| ЦеныНоменклатурыСрезПоследних.ТипЦен.* КАК ТипЦен,
| ТоварыНаСкладахОстатки.Склад.* КАК Склад}
|
|УПОРЯДОЧИТЬ ПО
| НоменклатураСсылка
|;
|
|////////////////////////////////////////////////////////////////////////////////
|УНИЧТОЖИТЬ ВТНоменклатура";
ПостроительОтчета.Текст = ТекстЗапроса;
ПараметрыПостроителя = ПостроительОтчета.Параметры;
//ПараметрыПостроителя.Вставить("ТипЦен", ТипЦен);
ПараметрыПостроителя.Вставить("ВидДанных", Перечисления.ВидыДополнительнойИнформацииОбъектов.Изображение);
КонецПроцедуры
Процедура НастроитьПостроительОтчета() Экспорт
Перем НастройкиПостроителяОтчета;
НастройкиПостроителяОтчета = ПостроительОтчета.ПолучитьНастройки();
ИнициализацияПостроителяОтчета();
ПостроительОтчета.УстановитьНастройки(НастройкиПостроителяОтчета);
КонецПроцедуры