Вот весь модуль объекта, обработка вроде и формирует сам скелет этого файла, но данные не выводит, почему-то. Как бы я не пытался, но не могу найти ошибку, поэтому прошу о помощи у вас, господа.
//Процедура определяет текущую конфигурацию // Отталкиваясь от конфигурации будет запущена // своя процедура для выгрузки Процедура ПолучитьТекущуюКонфигурацию() Экспорт ТекущаяКонфигурация = Метаданные.Имя; КонецПроцедуры
Функция РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = ",") Экспорт
МассивСтрок = Новый Массив(); Если Разделитель = " " Тогда Стр = СокрЛП(Стр); Пока Истина Цикл Поз = Найти(Стр,Разделитель); Если Поз=0 Тогда МассивСтрок.Добавить(Стр); Возврат МассивСтрок; КонецЕсли; МассивСтрок.Добавить(Лев(Стр,Поз-1)); Стр = СокрЛ(Сред(Стр,Поз)); КонецЦикла; Иначе ДлинаРазделителя = СтрДлина(Разделитель); Пока Истина Цикл Поз = Найти(Стр,Разделитель); Если Поз=0 Тогда МассивСтрок.Добавить(Стр); Возврат МассивСтрок; КонецЕсли; МассивСтрок.Добавить(Лев(Стр,Поз-1)); Стр = Сред(Стр,Поз+ДлинаРазделителя); КонецЦикла; КонецЕсли;
КонецФункции // глРазложить
// На вход идет выборка из результата запроса //&НаСервере Процедура СохранитьВКаталог(ВыборкаТоваров) Экспорт
// Проверим существование папки для записи изображений Если ЛокальнаяВыгрузка = Ложь Тогда Каталог = "C:\1C"; КонецЕсли; ПутьКИзображениям =Каталог + "\Picture\"; КоличествоВыгруженныхТоваров = 0; ПапкаКатолога = Новый Файл(Каталог); Если Не ПапкаКатолога.Существует() Тогда СоздатьКаталог(ПутьКИзображениям); КонецЕсли; ПапкаХранилища = Новый Файл(ПутьКИзображениям); // Очищаем каталог перд загрзузкой новых файлов Если Не ПапкаХранилища.Существует() Тогда СоздатьКаталог(ПутьКИзображениям); Иначе Попытка УдалитьФайлы(ПутьКИзображениям,"*.*"); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; КонецЕсли;
ЗаписьХМL = Новый ЗаписьXML;
ЗаписьХМL.ОткрытьФайл(Каталог + "\" + Организация + ".xml");
ЗаписьХМ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.ЗаписатьНачалоЭлемента("price"); Если ЗначениеЗаполнено(ВыборкаТоваров.Цена) Тогда ЗаписьХМL.ЗаписатьТекст(СтрЗаменить(Строка(ВыборкаТоваров.Цена),",",".")); КонецЕсли; ЗаписьХМL.ЗаписатьКонецЭлемента();
КонецЕСли; ЗаписьХМL. ЗаписатьКонецЭлемента(); //Относится к "offer" КонецЦикла;
ЗаписьХМL.ЗаписатьКонецЭлемента(); //Относится к "offers" ЗаписьХМL.ЗаписатьКонецЭлемента(); //Относится к элементу "shop" ЗаписьХМL.ЗаписатьКонецЭлемента(); //Относится к элементу "yml_catalog" ЗаписьХМL.Закрыть();
Если ЛокальнаяВыгрузка = Ложь Тогда ОтправитьФайлНаСервер(КоличествоВыгруженныхТоваров); Иначе Сообщить("Выгрузка успешно завершилась. Выгружено " + КоличествоВыгруженныхТоваров + " товаров"); КонецЕсли;
// В случае, когда не стоит галочка "Выгружать основное изображение", // выгружаются все имеющиеся изображения у позиции номенклатуры Процедура ВыгрузитьГруппуИзображений(Номенклатура,ПутьКИзображениям)
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ХранилищеДополнительнойИнформации.Объект.Код КАК НоменклатураКод, | ХранилищеДополнительнойИнформации.Хранилище |ИЗ | Справочник.ХранилищеДополнительнойИнформации КАК ХранилищеДополнительнойИнформации |ГДЕ | ХранилищеДополнительнойИнформации.ВидДанных = &Изображение | И ХранилищеДополнительнойИнформации.Объект = &Номенклатура"; Запрос.УстановитьПараметр("Изображение", Перечисления.ВидыДополнительнойИнформацииОбъектов.Изображение); Запрос.УстановитьПараметр("Номенклатура", Номенклатура); РезультатЗапроса = Запрос.Выполнить().Выбрать(); Префикс = 0; Пока РезультатЗапроса.Следующий() Цикл Префикс = Префикс + 1; Файл= РезультатЗапроса.Хранилище.Получить(); ИмяФайла=СокрЛП(ПутьКИзображениям)+СокрЛП(РезультатЗапроса.НоменклатураКод)+ "_" + Префикс + ".bmp"; Файл.Записать(ИмяФайла); КонецЦикла;
КонецПроцедуры
Процедура ОтправитьФайлНаСервер(КоличествоВыгруженныхТоваров) Экспорт // Имя файла которое будем передавать ИмяФайлаДанных = ДобавитьФайлыВАрхив(); // Определяем разделитель разделов — границу boundary в POST-запросе. Boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", ""); //Определяем имя файла ответа от веб-сервера ИмяФайлаОтвета = КаталогВременныхФайлов() + "answer.tmp"; //Закодируем содержимое файла по Base64, то есть преобразуем его к URL-неактивному виду. СодержимоеZIP = Base64Строка(Новый ДвоичныеДанные(ИмяФайлаДанных));
ФайлОтправки = Новый ЗаписьТекста(ИмяФайлаОтправки, КодировкаТекста.ANSI, Символы.ПС, ЛОЖЬ); //Определяем раздел двоичных данных ФайлОтправки.ЗаписатьСтроку("--" + Boundary); //Указываем имя файла для передачи ФайлОтправки.ЗаписатьСтроку("Content-Disposition: form-data; name=""data""; filename=""" + ИмяФайлаДанных + """"); //Указываем тип передаваемых данных. //С таким же успехом в Content-Type можно указать application/x-octet-stream ФайлОтправки.ЗаписатьСтроку("Content-Type: application/x-zip-compressed" + Символы.ПС + Символы.ПС); //Записываем кодированные двоичные данные ФайлОтправки.ЗаписатьСтроку(СодержимоеZIP); ФайлОтправки.ЗаписатьСтроку("--" + 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Соединение", УровеньЖурналаРегистрации.Ошибка, , , "Ответ сервера не получен."); #КонецЕсли КонецЕсли; Сообщить("Выгрузка успешно завершилась! Выгружено " + КоличествоВыгруженныхТоваров + " товаров"); УдалитьФайлы(Каталог);
КонецПроцедуры
Функция ДобавитьФайлыВАрхив() Экспорт ПутьКФайлам =Каталог; ПутьКФайлам = Новый Файл(ПутьКФайлам); Если Не ПутьКФайлам.Существует() Тогда СоздатьКаталог(ПутьКФайлам); КонецЕсли;
ТекстЗапроса = "ВЫБРАТЬ | Номенклатура.Ссылка КАК Номенклатура |ПОМЕСТИТЬ ВТНоменклатура |{ВЫБРАТЬ | Номенклатура.* КАК Номенклатура} |ИЗ | Справочник.Номенклатура КАК Номенклатура |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВТНоменклатура.Номенклатура.Код КАК Код, | ВТНоменклатура.Номенклатура.Наименование КАК Наименование, | ВТНоменклатура.Номенклатура.Артикул КАК Артикул, | ВТНоменклатура.Номенклатура.БазоваяЕдиницаИзмерения КАК ЕдиницаИзмерения, | ВТНоменклатура.Номенклатура.Комментарий КАК Комментарий, | ВТНоменклатура.Номенклатура.НаименованиеПолное КАК НаименованиеПолное, | ВТНоменклатура.Номенклатура.ДополнительноеОписаниеНоменклатуры КАК Описание, | ЦеныНоменклатурыСрезПоследних.Цена, | ВТНоменклатура.Номенклатура.Родитель КАК НоменклатураРодитель, | ВТНоменклатура.Номенклатура.ЭтоГруппа КАК ЭтоГруппа, | ТоварыНаСкладахОстатки.Склад, | ЦеныНоменклатурыСрезПоследних.ТипЦен, | ТоварыНаСкладахОстатки.КоличествоОстаток КАК Остаток, | ВТНоменклатура.Номенклатура.ОсновноеИзображение.Хранилище КАК Хранилище, | ВТНоменклатура.Номенклатура.ОсновноеИзображение.Объект.Код КАК КодИзображения, | ВТНоменклатура.Номенклатура.Ссылка КАК НоменклатураСсылка |{ВЫБРАТЬ | НоменклатураСсылка.* КАК Номенклатура, | ТипЦен.* КАК ТипЦен, | Склад.* КАК Склад} |ИЗ | ВТНоменклатура КАК ВТНоменклатура | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(, {(Номенклатура).* КАК Номенклатура, (Склад).* КАК Склад}) КАК ТоварыНаСкладахОстатки | ПО ВТНоменклатура.Номенклатура.Ссылка = ТоварыНаСкладахОстатки.Номенклатура | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, {(Номенклатура).* КАК Номенклатура, (ТипЦен).* КАК ТипЦен}) КАК ЦеныНоменклатурыСрезПоследних | ПО ВТНоменклатура.Номенклатура.Ссылка = ЦеныНоменклатурыСрезПоследних.Номенклатура |ГДЕ | ТоварыНаСкладахОстатки.Склад.ТипЦенРозничнойТорговли = ЦеныНоменклатурыСрезПоследних.ТипЦен |{ГДЕ | ВТНоменклатура.Номенклатура.Ссылка.* КАК Номенклатура, | ЦеныНоменклатурыСрезПоследних.ТипЦен.* КАК ТипЦен, | ТоварыНаСкладахОстатки.Склад.* КАК Склад} | |УПОРЯДОЧИТЬ ПО | НоменклатураСсылка |; | |//////////////////////////////////////////////////////////////////////////////// |УНИЧТОЖИТЬ ВТНоменклатура";
Для каждого НоваяПеременнаяЦикла из ВыборкаТоваров цикл ЗаписьХМL.ЗаписатьНачалоЭлемента("offer");
Если ЗначениеЗаполнено(НоваяПеременнаяЦикла.Код) Тогда КоличествоВыгруженныхТоваров = КоличествоВыгруженныхТоваров + 1;
ЗаписьХМL.ЗаписатьАтрибут("id",Прав(НоваяПеременнаяЦикла.Код,7 )); Если ВыборкаТоваров.Остаток > 0 И НЕ НоваяПеременнаяЦикла.НоменклатураСсылка.шЗаказная Тогда ЗаписьХМL.ЗаписатьАтрибут("available",Строка("в наличии")); ИначеЕсли НоваяПеременнаяЦикла.Остаток >= 0 И НоваяПеременнаяЦикла.НоменклатураСсылка.шЗаказная Тогда ЗаписьХМL.ЗаписатьАтрибут("available",Строка("под заказ")); Иначе ЗаписьХМL.ЗаписатьАтрибут("available",Строка("наличие уточняйте")); КонецЕсли;
Все равно данные не выгружает
salton @ Сегодня, 11:55
,
{ВнешняяОбработка.ВыгрузкаДанныхПоНоменклатуре.МодульОбъекта(102)}: Метод объекта не обнаружен (Выгрузить) ТЗКатегории = ВыборкаТоваров.Выгрузить();
sava1 @ Сегодня, 11:15
, У меня только внутри этой процедуры используется
Процедура СохранитьВКаталог(ВыборкаТоваров)
pablo @ Сегодня, 11:19
, Простите, но не понял что именно заменить в последующем коде...
//Пока ВыборкаТоваров.Следующий() Цикл Для каждого НоваяПеременнаяЦикла из ВыборкаТоваров цикл ЗаписьХМL.ЗаписатьНачалоЭлемента("offer");
Если ЗначениеЗаполнено(ВыборкаТоваров.Код) Тогда КоличествоВыгруженныхТоваров = КоличествоВыгруженныхТоваров + 1;
ЗаписьХМL.ЗаписатьАтрибут("id",Прав(ВыборкаТоваров.Код,7 )); Если ВыборкаТоваров.Остаток > 0 И НЕ ВыборкаТоваров.НоменклатураСсылка.шЗаказная Тогда ЗаписьХМL.ЗаписатьАтрибут("available",Строка("в наличии")); ИначеЕсли ВыборкаТоваров.Остаток >= 0 И ВыборкаТоваров.НоменклатураСсылка.шЗаказная Тогда ЗаписьХМL.ЗаписатьАтрибут("available",Строка("под заказ")); Иначе ЗаписьХМL.ЗаписатьАтрибут("available",Строка("наличие уточняйте")); КонецЕсли;
// Проверим существование папки для записи изображений Если ЛокальнаяВыгрузка = Ложь Тогда Каталог = "C:\1C"; КонецЕсли; ПутьКИзображениям =Каталог + "\Picture\"; КоличествоВыгруженныхТоваров = 0; ПапкаКатолога = Новый Файл(Каталог); Если Не ПапкаКатолога.Существует() Тогда СоздатьКаталог(ПутьКИзображениям); КонецЕсли; ПапкаХранилища = Новый Файл(ПутьКИзображениям); // Очищаем каталог перд загрзузкой новых файлов Если Не ПапкаХранилища.Существует() Тогда СоздатьКаталог(ПутьКИзображениям); Иначе Попытка УдалитьФайлы(ПутьКИзображениям,"*.*"); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; КонецЕсли;
ЗаписьХМL = Новый ЗаписьXML;
ЗаписьХМL.ОткрытьФайл(Каталог + "\" + Организация + ".xml");
ЗаписьХМ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.ЗаписатьНачалоЭлемента("price"); Если ЗначениеЗаполнено(ВыборкаТоваров.Цена) Тогда ЗаписьХМL.ЗаписатьТекст(СтрЗаменить(Строка(ВыборкаТоваров.Цена),",",".")); КонецЕсли; ЗаписьХМL.ЗаписатьКонецЭлемента();
КонецЕСли; ЗаписьХМL. ЗаписатьКонецЭлемента(); //Относится к "offer" КонецЦикла;
ЗаписьХМL.ЗаписатьКонецЭлемента(); //Относится к "offers" ЗаписьХМL.ЗаписатьКонецЭлемента(); //Относится к элементу "shop" ЗаписьХМL.ЗаписатьКонецЭлемента(); //Относится к элементу "yml_catalog" ЗаписьХМL.Закрыть();
Если ЛокальнаяВыгрузка = Ложь Тогда ОтправитьФайлНаСервер(КоличествоВыгруженныхТоваров); Иначе Сообщить("Выгрузка успешно завершилась. Выгружено " + КоличествоВыгруженныхТоваров + " товаров"); КонецЕсли;
ТекстЗапроса = "ВЫБРАТЬ | Номенклатура.Ссылка КАК Номенклатура |ПОМЕСТИТЬ ВТНоменклатура |{ВЫБРАТЬ | Номенклатура.* КАК Номенклатура} |ИЗ | Справочник.Номенклатура КАК Номенклатура |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВТНоменклатура.Номенклатура.Код КАК Код, | ВТНоменклатура.Номенклатура.Наименование КАК Наименование, | ВТНоменклатура.Номенклатура.Артикул КАК Артикул, | ВТНоменклатура.Номенклатура.БазоваяЕдиницаИзмерения КАК ЕдиницаИзмерения, | ВТНоменклатура.Номенклатура.Комментарий КАК Комментарий, | ВТНоменклатура.Номенклатура.НаименованиеПолное КАК НаименованиеПолное, | ВТНоменклатура.Номенклатура.ДополнительноеОписаниеНоменклатуры КАК Описание, | ЦеныНоменклатурыСрезПоследних.Цена, | ВТНоменклатура.Номенклатура.Родитель КАК НоменклатураРодитель, | ВТНоменклатура.Номенклатура.ЭтоГруппа КАК ЭтоГруппа, | ТоварыНаСкладахОстатки.Склад, | ЦеныНоменклатурыСрезПоследних.ТипЦен, | ТоварыНаСкладахОстатки.КоличествоОстаток КАК Остаток, | ВТНоменклатура.Номенклатура.ОсновноеИзображение.Хранилище КАК Хранилище, | ВТНоменклатура.Номенклатура.ОсновноеИзображение.Объект.Код КАК КодИзображения, | ВТНоменклатура.Номенклатура.Ссылка КАК НоменклатураСсылка |{ВЫБРАТЬ | НоменклатураСсылка.* КАК Номенклатура, | ТипЦен.* КАК ТипЦен, | Склад.* КАК Склад} |ИЗ | ВТНоменклатура КАК ВТНоменклатура | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(, {(Номенклатура).* КАК Номенклатура, (Склад).* КАК Склад}) КАК ТоварыНаСкладахОстатки | ПО ВТНоменклатура.Номенклатура.Ссылка = ТоварыНаСкладахОстатки.Номенклатура | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, {(Номенклатура).* КАК Номенклатура, (ТипЦен).* КАК ТипЦен}) КАК ЦеныНоменклатурыСрезПоследних | ПО ВТНоменклатура.Номенклатура.Ссылка = ЦеныНоменклатурыСрезПоследних.Номенклатура |ГДЕ | ТоварыНаСкладахОстатки.Склад.ТипЦенРозничнойТорговли = ЦеныНоменклатурыСрезПоследних.ТипЦен |{ГДЕ | ВТНоменклатура.Номенклатура.Ссылка.* КАК Номенклатура, | ЦеныНоменклатурыСрезПоследних.ТипЦен.* КАК ТипЦен, | ТоварыНаСкладахОстатки.Склад.* КАК Склад} | |УПОРЯДОЧИТЬ ПО | НоменклатураСсылка |; | |//////////////////////////////////////////////////////////////////////////////// |УНИЧТОЖИТЬ ВТНоменклатура";
{ВнешняяОбработка.ВыгрузкаДанныхПоНоменклатуре.МодульОбъекта(113)}: Метод объекта не обнаружен (Следующий) Пока ВыборкаТоваров.Следующий() Цикл
Сделал как вы сказали:
ЗаписьХМL.ЗаписатьНачалоЭлемента("categories"); Для каждого СтрокаПеребора Из ТЗКатегории Цикл ЗаписьХМL.ЗаписатьНачалоЭлемента("category"); ЗаписьХМL.ЗаписатьАтрибут("id",Прав(СтрокаПеребора.НоменклатураРодитель.Код,7 )); ЗаписьХМL.ЗаписатьТекст(Строка(СтрокаПеребора.НоменклатураРодитель.Наименование)); ЗаписьХМL.ЗаписатьКонецЭлемента(); КонецЦикла; ЗаписьХМL.ЗаписатьКонецЭлемента();
Ошибка в этой строке:
Пока ВыборкаТоваров.Следующий() Цикл ЗаписьХМL.ЗаписатьНачалоЭлемента("offer");
Доброго времени суток. Есть обработка, которая должна выводить данные в .yml, запрос выдает правильные данные, забил его в процедуру Но вот на этом этапе не видит почему-то "Строка"
ЗаписьХМL.ЗаписатьНачалоЭлемента("categories"); Для каждого Строка Из ТЗКатегории Цикл ЗаписьХМL.ЗаписатьНачалоЭлемента("category"); ЗаписьХМL.ЗаписатьАтрибут("id",Прав(Строка.НоменклатураРодитель.Код,7 )); ЗаписьХМL.ЗаписатьТекст(Строка(Строка.НоменклатураРодитель.Наименование)); ЗаписьХМL.ЗаписатьКонецЭлемента(); КонецЦикла; ЗаписьХМL.ЗаписатьКонецЭлемента();
ДА и во всей обработке не выводит данные, в чем может быть проблема? Я много не знаю и не понимаю, поэтому не один день убил на поиски ответа, поэтому прошу вашей помощи
salton @ Сегодня, 14:14
, 1. Она есть, но мне нужно в ней с запроса данные во вложенный запрос вставить только, да? 2. Тоже есть, и выгрузка есть 3. По сути, то в чем была изначально проблема.
ТекстЗапроса = "ВЫБРАТЬ | Номенклатура.Ссылка КАК Номенклатура |ПОМЕСТИТЬ ВТНоменклатура |{ВЫБРАТЬ | Номенклатура.* КАК Номенклатура} |ИЗ | Справочник.Номенклатура КАК Номенклатура |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВТНоменклатура.Номенклатура.Код КАК Код, | ВТНоменклатура.Номенклатура.Наименование КАК Наименование, | ВТНоменклатура.Номенклатура.Артикул КАК Артикул, | ВТНоменклатура.Номенклатура.БазоваяЕдиницаИзмерения КАК ЕдиницаИзмерения, | ВТНоменклатура.Номенклатура.Комментарий КАК Комментарий, | ВТНоменклатура.Номенклатура.НаименованиеПолное КАК НаименованиеПолное, | ВТНоменклатура.Номенклатура.ДополнительноеОписаниеНоменклатуры КАК Описание, | ЦеныНоменклатурыСрезПоследних.Цена, | ВТНоменклатура.Номенклатура.Родитель КАК НоменклатураРодитель, | ВТНоменклатура.Номенклатура.ЭтоГруппа КАК ЭтоГруппа, | ТоварыНаСкладахОстатки.Склад, | ЦеныНоменклатурыСрезПоследних.ТипЦен, | ТоварыНаСкладахОстатки.КоличествоОстаток КАК Остаток, | ВТНоменклатура.Номенклатура.ОсновноеИзображение.Хранилище КАК Хранилище, | ВТНоменклатура.Номенклатура.ОсновноеИзображение.Объект.Код КАК КодИзображения, | ВТНоменклатура.Номенклатура.Ссылка КАК НоменклатураСсылка |{ВЫБРАТЬ | НоменклатураСсылка.* КАК Номенклатура, | ТипЦен.* КАК ТипЦен, | Склад.* КАК Склад} |ИЗ | ВТНоменклатура КАК ВТНоменклатура | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(, {(Номенклатура).* КАК Номенклатура, (Склад).* КАК Склад}) КАК ТоварыНаСкладахОстатки | ПО ВТНоменклатура.Номенклатура.Ссылка = ТоварыНаСкладахОстатки.Номенклатура | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, {(Номенклатура).* КАК Номенклатура, (ТипЦен).* КАК ТипЦен}) КАК ЦеныНоменклатурыСрезПоследних | ПО ВТНоменклатура.Номенклатура.Ссылка = ЦеныНоменклатурыСрезПоследних.Номенклатура |ГДЕ | ТоварыНаСкладахОстатки.Склад.ТипЦенРозничнойТорговли = ЦеныНоменклатурыСрезПоследних.ТипЦен |{ГДЕ | ВТНоменклатура.Номенклатура.Ссылка.* КАК Номенклатура, | ЦеныНоменклатурыСрезПоследних.ТипЦен.* КАК ТипЦен, | ТоварыНаСкладахОстатки.Склад.* КАК Склад} | |УПОРЯДОЧИТЬ ПО | НоменклатураСсылка |ИТОГИ ПО | НоменклатураРодитель |; | |//////////////////////////////////////////////////////////////////////////////// |УНИЧТОЖИТЬ ВТНоменклатура";
salton @ Сегодня, 13:28
, приятного аппетита как таковой процедуры нету, выборка совершается в построителе отчета. Тупые вопросы и ошибки из-за нехватки опыта у меня, т.к. с 1С знаком всего 2мес. За это прошу простить меня
salton @ Сегодня, 9:18
, Да у меня ошибка какая-то выдает из-за циклов, я уже по всякому пробовал, но ничего не получается..поэтому думаю, мб тут помогут
salton @ Сегодня, 9:18
, Может вы как-то на глаз найдете в чем проблема, а то я уже день не могу найти ошибку
// Проверим существование папки для записи изображений Если ЛокальнаяВыгрузка = Ложь Тогда Каталог = "C:\1C"; КонецЕсли; ПутьКИзображениям =Каталог + "\Picture\"; КоличествоВыгруженныхТоваров = 0; ПапкаКатолога = Новый Файл(Каталог); Если Не ПапкаКатолога.Существует() Тогда СоздатьКаталог(ПутьКИзображениям); КонецЕсли; ПапкаХранилища = Новый Файл(ПутьКИзображениям); // Очищаем каталог перд загрзузкой новых файлов Если Не ПапкаХранилища.Существует() Тогда СоздатьКаталог(ПутьКИзображениям); Иначе Попытка УдалитьФайлы(ПутьКИзображениям,"*.*"); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; КонецЕсли;
ЗаписьХМL = Новый ЗаписьXML;
ЗаписьХМL.ОткрытьФайл(Каталог + "\" + Организация + ".xml");
ЗаписьХМL.ЗаписатьНачалоЭлемента("categories"); Пока ВыборкаНоменклатураРодитель.Следующий() Цикл ЗаписьХМL.ЗаписатьНачалоЭлемента("category"); ЗаписьХМL.ЗаписатьТекст(ВыборкаНоменклатура.Наименование); ЗаписьХМL.ЗаписатьАтрибут("id",Прав(ВыборкаНоменклатура.Код,7 )); ЗаписьХМL.ЗаписатьКонецЭлемента(); КонецЦикла; ЗаписьХМL.ЗаписатьКонецЭлемента();
ЗаписьХМL.ЗаписатьНачалоЭлемента("offers");
Пока ВыборкаНоменклатураРодитель.Следующий() Цикл ЗаписьХМL.ЗаписатьНачалоЭлемента("offer");
Если ЗначениеЗаполнено(ВыборкаНоменклатура.Код) Тогда КоличествоВыгруженныхТоваров = КоличествоВыгруженныхТоваров + 1;
ЗаписьХМL.ЗаписатьАтрибут("id",Прав(ВыборкаНоменклатура.Код,7 )); Если ВыборкаНоменклатура.Остаток > 0 И НЕ ВыборкаНоменклатура.НоменклатураСсылка.шЗаказная Тогда ЗаписьХМL.ЗаписатьАтрибут("available",Строка("в наличии")); ИначеЕсли ВыборкаНоменклатура.Остаток >= 0 И ВыборкаНоменклатура.НоменклатураСсылка.шЗаказная Тогда ЗаписьХМL.ЗаписатьАтрибут("available",Строка("под заказ")); Иначе ЗаписьХМL.ЗаписатьАтрибут("available",Строка("наличие уточняйте")); КонецЕсли;
ЗаписьХМL.ЗаписатьНачалоЭлемента("price"); Если ЗначениеЗаполнено(ВыборкаНоменклатура.Цена) Тогда ЗаписьХМL.ЗаписатьТекст(Строка(ВыборкаНоменклатура.Цена)); КонецЕсли; ЗаписьХМL.ЗаписатьКонецЭлемента();
КонецЦикла; ЗаписьХМL. ЗаписатьКонецЭлемента(); //Относится к "offer"
КонецЦикла;
ЗаписьХМL.ЗаписатьКонецЭлемента(); //Относится к "offers" ЗаписьХМL.ЗаписатьКонецЭлемента(); //Относится к элементу "shop" ЗаписьХМL.ЗаписатьКонецЭлемента(); //Относится к элементу "yml_catalog" ЗаписьХМL.Закрыть(); Если ЛокальнаяВыгрузка = Ложь Тогда ОтправитьФайлНаСервер(КоличествоВыгруженныхТоваров); Иначе Сообщить("Выгрузка успешно завершилась. Выгружено " + КоличествоВыгруженныхТоваров + " товаров"); КонецЕсли;
Доброго времени суток. Столкнулся с такой задачей: нужно сделать обработку для выгрузки каталога номенклатуры в формат yml. Нахожу только платные решения, может быть у кого то есть пример или какой-то аналог, который помог бы новичку? Буду очень благодарен
Доброго времени суток. Я новичек в 1С, пытаюсь сделать запрос: Который основывается на регистре сведений "РегистрацияУровнейБуферовЗапасовПриФормированииЗаказов" и с документа "Перемещение товаров". Группирует эти данные так(рис.1)
Не понимаю как так сгрупировать, буду очень благодарен за какую-то помощь
ВЫБРАТЬ ПеремещениеТоваров.СкладПолучатель, РегистрацияУровнейБуферовЗапасовПриФормированииЗаказов.Номенклатура, РегистрацияУровнейБуферовЗапасовПриФормированииЗаказов.Склад, РегистрацияУровнейБуферовЗапасовПриФормированииЗаказов.ЕдИзмерения, РегистрацияУровнейБуферовЗапасовПриФормированииЗаказов.ДокументЗаказ, РегистрацияУровнейБуферовЗапасовПриФормированииЗаказов.КоличествоПоЗаказу, РегистрацияУровнейБуферовЗапасовПриФормированииЗаказов.КоличествоПотребности, РегистрацияУровнейБуферовЗапасовПриФормированииЗаказов.Отклонение ИЗ РегистрСведений.РегистрацияУровнейБуферовЗапасовПриФормированииЗаказов КАК РегистрацияУровнейБуферовЗапасовПриФормированииЗаказов ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПеремещениеТоваров КАК ПеремещениеТоваров ПО РегистрацияУровнейБуферовЗапасовПриФормированииЗаказов.Склад = ПеремещениеТоваров.СкладПолучатель
Vidocq05 @ Сегодня, 12:19
, Обработка должна обрабатывать реквизиты указанных типов документов системы 1С: - Реализация товаров и услуг; - Возврат товаров от покупателей; ... Реквизиты документов доступны для изменения: - «ошибочный»; - «Отсутствует оригинал»; - «Проверено бухгалтерией»; - «Сдано в бухгалтерию»; - «Дата сдан в бухгалтерию»; - «Комментарий». Реквизит «Дата сдан в бухгалтерию» заполняется автоматически текущей датой и временем в момент смены реквизита «Сдано в бухгалтерию» по признаку «Истина». табличная часть обработки должна заполняться на основании комбинации отборов: по типу документа, календарном промежутке (дата документа от-по) или по списку документов. Блок отборов формируется на основании построителя отборов Основного запроса обработки.
Vidocq05 @ Сегодня, 8:55
, Ну она же мне не подходит. Мне нужно создать возможность группового изменения документа по обработке "Установить реквизиты" для отображения однотипного состояния документа Или я что то не правильно понимаю?
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!