22.12.2012 16:57
Vlad_German
 
Не может ли никто из уважаемого сообщества посмотреть на два файла один принимается почтовиком, другой нет. Один сделан из VB другой из 1С. Вываливается ошибка: The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or a non-white space character among the padding characters.
Вложения
Тип файла: rar Файлы.rar (5.8 Кб, 134 просмотров)
22.12.2012 17:10
OlegON
 
Писал бы поподробнее, что, откуда, для чего... Начать хотя бы с того, что у них даже кодировка разная. И тот, что не принимается, вообще не XML, а мусор какой-то.
22.12.2012 18:34
Vlad_German
 
А как ты определяешь что у них разная кодировка? Первые байты и там и там EF BB BF Второй файл перекодирован Notepad++ Я просто не знаю как в 1С7 сказать что бы она выгружала текст в UTF-8 а не win-1251
22.12.2012 19:13
OlegON
 
Определяю просто - у меня Linux и виндовая кодировка идет зябликами :) А там есть русские буквы в начале. Если я не ошибаюсь, XML содержит в себе и признак кодировки, но более чем уверен, что почтовик на него плюет. Вот при чем тут байты, я совсем не понял... Еще обрати внимание на разметку. В том, который не читается, она через одно место - читать вообще не реально.
22.12.2012 20:53
Vlad_German
 
А про разметку можно поподробнее. ХМЛ как раз и должен по первым байтам определять что в нем. Не будет ли достопочтенный ДЖИНН запустить Iconv и переконвертировать файл как надо
22.12.2012 20:58
OlegON
 
Пока немного не до файликов, но рекомендую...
это про первые два байта:
это потом:
22.12.2012 21:27
Vlad_German
 
ОК завтра с утра посмотрим
23.12.2012 01:47
mighty
 
Попробуй все таки в UTF-8 из 1С выкинуть файл и тогда уже будет что сравнивать, перекодировка в прицепе.
Вложения
Тип файла: zip b_utf8_3_0.zip (67.0 Кб, 115 просмотров)
23.12.2012 08:29
Vlad_German
 
Спасибо будем пробовать
25.12.2012 12:08
CrazyWolf
 
Еще есть предложение выкинуть тег
Код:
<BORNIN>
6r0Pyw96QEuSMjyuR=RKPTiS
</BORNIN>
т.к. рискну предположить что The input is not a valid Base-64 string as it contains ругается именно на него. На всякий случай вот рабочий код выгрузки с 1с 8.1.

Код:
Функция ВыгрузитьАкт(ДокЗаказМагазина)
	
	// пытаемся создать выход из производства
	Файл = Новый Файл (КаталогВременныхФайлов() + "PO" + СокрЛП(ДокЗаказМагазина.Номер) + ".xml");
	// получаем следующий номер документа
	НомерДокумента 				= ЗапросыКСуперМаг.ПолучитьНомерДокумента("DB", "PO", 55);
	Если НомерДокумента = Неопределено тогда
		Сообщить("Невозможно получить номер документа с системы СМ+.", СтатусСообщения.Важное);
		Возврат Неопределено;
	КонецЕсли;
	ИтогоВыполненоСумма = ДокЗаказМагазина.Заказ.Итог("Сумма");
	
	// генерим случайное число для заголовка пакета
	СлЧисло   = Новый ГенераторСлучайныхЧисел();
	ИмяПакета = Формат(ДокЗаказМагазина.Дата,"ДФ=yyMMddhhmmss") + "_" + Строка(СлЧисло.СлучайноеЧисло(0, 9999999) ) + "_1";
	// начинаем запись XML
	ОбъектXML = Новый ЗаписьXML;
	ОбъектXML.ОткрытьФайл(Файл.ПолноеИмя);
	// заголовок
	ОбъектXML.ЗаписатьНачалоЭлемента("PACKAGE");
	ОбъектXML.ЗаписатьАтрибут("name", ИмяПакета);
	ОбъектXML.ЗаписатьНачалоЭлемента("POSTOBJECT");
	ОбъектXML.ЗаписатьАтрибут("description", "Выход из производства");
	ОбъектXML.ЗаписатьАтрибут("action", "normal");
	ОбъектXML.ЗаписатьНачалоЭлемента("Id");
	ОбъектXML.ЗаписатьТекст("PO" + НомерДокумента);
	ОбъектXML.ЗаписатьКонецЭлемента();
	// основной докукмет
	ОбъектXML.ЗаписатьНачалоЭлемента("PO");
	ОбъектXML.ЗаписатьНачалоЭлемента("SMDOCUMENTS");
	ОбъектXML.ЗаписатьНачалоЭлемента("ID");
	ОбъектXML.ЗаписатьТекст(НомерДокумента);
	ОбъектXML.ЗаписатьКонецЭлемента();
	ОбъектXML.ЗаписатьНачалоЭлемента("DOCTYPE");
	ОбъектXML.ЗаписатьТекст("PO");
	ОбъектXML.ЗаписатьКонецЭлемента();
	ОбъектXML.ЗаписатьНачалоЭлемента("CREATEDAT");
	ОбъектXML.ЗаписатьТекст(Формат(ДокЗаказМагазина.ДатаПоставки,"ДФ=yyyy-MM-dd") + "T09:00:00+06:00");
	ОбъектXML.ЗаписатьКонецЭлемента();
	ОбъектXML.ЗаписатьНачалоЭлемента("CURRENCYMULTORDER");
	ОбъектXML.ЗаписатьТекст("0");
	ОбъектXML.ЗаписатьКонецЭлемента();
	ОбъектXML.ЗаписатьНачалоЭлемента("CURRENCYRATE");
	ОбъектXML.ЗаписатьТекст("1");
	ОбъектXML.ЗаписатьКонецЭлемента();
	ОбъектXML.ЗаписатьНачалоЭлемента("CURRENCYTYPE");
	ОбъектXML.ЗаписатьТекст("1");
	ОбъектXML.ЗаписатьКонецЭлемента();
	ОбъектXML.ЗаписатьНачалоЭлемента("DOCSTATE");
	ОбъектXML.ЗаписатьТекст("1");
	ОбъектXML.ЗаписатьКонецЭлемента();
	ОбъектXML.ЗаписатьНачалоЭлемента("ISROUBLES");
	ОбъектXML.ЗаписатьТекст("1");
	ОбъектXML.ЗаписатьКонецЭлемента();
	ОбъектXML.ЗаписатьНачалоЭлемента("LOCATIONTO");
	ОбъектXML.ЗаписатьТекст("55");
	ОбъектXML.ЗаписатьКонецЭлемента();
	ОбъектXML.ЗаписатьНачалоЭлемента("OPCODE");
	ОбъектXML.ЗаписатьТекст("13");
	ОбъектXML.ЗаписатьКонецЭлемента();
	ОбъектXML.ЗаписатьНачалоЭлемента("PRICEROUNDMODE");
	ОбъектXML.ЗаписатьТекст("2");
	ОбъектXML.ЗаписатьКонецЭлемента();
	ОбъектXML.ЗаписатьНачалоЭлемента("TOTALSUM");
	ОбъектXML.ЗаписатьТекст(Формат(ИтогоВыполненоСумма,"ЧРД=.; ЧН=0; ЧГ=0") );
	ОбъектXML.ЗаписатьКонецЭлемента();
	ОбъектXML.ЗаписатьНачалоЭлемента("TOTALSUMCUR");
	ОбъектXML.ЗаписатьТекст(Формат(ИтогоВыполненоСумма,"ЧРД=.; ЧН=0; ЧГ=0") );
	ОбъектXML.ЗаписатьКонецЭлемента();
	ОбъектXML.ЗаписатьКонецЭлемента();
	// вывод табличной части
	ВыведеннаяСтрока = 1;
	Для каждого строка из ДокЗаказМагазина.Заказ Цикл
		Если НЕ строка.КоличествоПроизведенное = 0 тогда
			ОбъектXML.ЗаписатьНачалоЭлемента("SMSPEC");
			ОбъектXML.ЗаписатьНачалоЭлемента("DOCID");
			ОбъектXML.ЗаписатьТекст(НомерДокумента);
			ОбъектXML.ЗаписатьКонецЭлемента();
			ОбъектXML.ЗаписатьНачалоЭлемента("DOCTYPE");
			ОбъектXML.ЗаписатьТекст("PO");
			ОбъектXML.ЗаписатьКонецЭлемента();
			ОбъектXML.ЗаписатьНачалоЭлемента("SPECITEM");
			ОбъектXML.ЗаписатьТекст(Строка(строка.НомерСтроки) );
			ОбъектXML.ЗаписатьКонецЭлемента();
			ОбъектXML.ЗаписатьНачалоЭлемента("ARTICLE");
			ОбъектXML.ЗаписатьТекст(СокрЛП(строка.Номенклатура.Код) );
			ОбъектXML.ЗаписатьКонецЭлемента();
			ОбъектXML.ЗаписатьНачалоЭлемента("DISPLAYITEM");
			ОбъектXML.ЗаписатьТекст(Строка(строка.НомерСтроки) );
			ОбъектXML.ЗаписатьКонецЭлемента();
			ОбъектXML.ЗаписатьНачалоЭлемента("ITEMPRICE");
			ОбъектXML.ЗаписатьТекст(Формат(строка.Цена,"ЧРД=.; ЧН=0; ЧГ=0") );
			ОбъектXML.ЗаписатьКонецЭлемента();
			ОбъектXML.ЗаписатьНачалоЭлемента("ITEMPRICECUR");
			ОбъектXML.ЗаписатьТекст(Формат(строка.Цена,"ЧРД=.; ЧН=0; ЧГ=0") );
			ОбъектXML.ЗаписатьКонецЭлемента();
			ОбъектXML.ЗаписатьНачалоЭлемента("ITEMPRICENOTAX");
			ОбъектXML.ЗаписатьТекст(Формат(строка.Цена,"ЧРД=.; ЧН=0; ЧГ=0") );
			ОбъектXML.ЗаписатьКонецЭлемента();
			ОбъектXML.ЗаписатьНачалоЭлемента("QUANTITY");
			ОбъектXML.ЗаписатьТекст(Формат(строка.КоличествоПроизведенное,"ЧРД=.; ЧН=0; ЧГ=0") );
			ОбъектXML.ЗаписатьКонецЭлемента();
			ОбъектXML.ЗаписатьНачалоЭлемента("TOTALPRICE");
			ОбъектXML.ЗаписатьТекст(Формат(строка.Сумма, "ЧРД=.; ЧН=0; ЧГ=0"));
			ОбъектXML.ЗаписатьКонецЭлемента();
			ОбъектXML.ЗаписатьНачалоЭлемента("TOTALPRICECUR");
			ОбъектXML.ЗаписатьТекст(Формат(строка.Сумма, "ЧРД=.; ЧН=0; ЧГ=0"));
			ОбъектXML.ЗаписатьКонецЭлемента();
			ОбъектXML.ЗаписатьНачалоЭлемента("TOTALPRICENOTAX");
			ОбъектXML.ЗаписатьТекст(Формат(строка.Сумма, "ЧРД=.; ЧН=0; ЧГ=0"));
			ОбъектXML.ЗаписатьКонецЭлемента();
			ОбъектXML.ЗаписатьКонецЭлемента();
			ВыведеннаяСтрока = ВыведеннаяСтрока + 1;
		КонецЕсли;
	КонецЦикла;
	ОбъектXML.ЗаписатьНачалоЭлемента("SMDOCPRODOUT");
	ОбъектXML.ЗаписатьНачалоЭлемента("ID");
	ОбъектXML.ЗаписатьТекст(НомерДокумента);
	ОбъектXML.ЗаписатьКонецЭлемента();
	ОбъектXML.ЗаписатьНачалоЭлемента("DOCTYPE");
	ОбъектXML.ЗаписатьТекст("PO");
	ОбъектXML.ЗаписатьКонецЭлемента();
	ОбъектXML.ЗаписатьНачалоЭлемента("STORELOC");
	ОбъектXML.ЗаписатьТекст("55");
	ОбъектXML.ЗаписатьКонецЭлемента();
	ОбъектXML.ЗаписатьНачалоЭлемента("ZONEID");
	ОбъектXML.ЗаписатьТекст("1");
	ОбъектXML.ЗаписатьКонецЭлемента();
	ОбъектXML.ЗаписатьКонецЭлемента();
	// закрывающие теги
	ОбъектXML.ЗаписатьКонецЭлемента();
	ОбъектXML.ЗаписатьКонецЭлемента();
	ОбъектXML.ЗаписатьКонецЭлемента(); 
	ОбъектXML.Закрыть();
	// отправляем по почте и ждем ответа
	Сообщения = "";
	флУспех = ЗапросыКСуперМаг.ВыгрузитьДокументВПочтуСМ(Файл, "\\SERVER\mail\xml\", Сообщения);
	// если выгрузка успешна сообщаем номер документа
	Если флУспех тогда
		Сообщить("Для заказа " + ДокЗаказМагазина.Номер + " выгружен акт с номером " + НомерДокумента);
		возврат НомерДокумента;
	Иначе
		Сообщить("При выгрузке произошли следующие ошибки");
		Сообщить(Сообщения);
		возврат Неопределено;
	КонецЕсли;
	УдалитьФайлы(Файл.ПолноеИмя);
	
КонецФункции
Часовой пояс GMT +3, время: 03:26.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.