gifts2017

‘ункции дл€ работы с транспортным модулем (”“ћ) ≈√ј»— + готова€ конфигураци€ дл€ ≈√ј»—

ќпубликовал Igor Berezhnov (igorberezhnov) в раздел ќбработки - ќбработка справочников

ѕредлагаю вашему вниманию функции дл€ использовани€ в цел€х обмена данными с универсальным транспортным модулем ≈√ј»—. ѕри доработке учетной системы с целью интеграции с транспортным модулем ≈√ј»—, € столкнулс€ с серьезной проблемой, св€занной с тем, что внешн€€ компонента V7Plus, предназначенна€ дл€ работы по протоколу HTTP, а также дл€ разбора XML-файлов, поддерживает только команду GET протокола HTTP, в то врем€ как дл€ работы с ”“ћ требуетс€ поддержка команд GET, POST и DELETE.
P.S. ќбновлены все функции и обработки дл€ поддержки XML-ответов больше 100 б (теперь длина неограничена). “акже добавлена обработка выгрузки расходной накладной. ƒобавлена загрузка приходной накладной, а также диапазона марок из справки ј.
¬нимание! добавлена полностью готова€ к работе конфигураци€ дл€ работы в ≈√ј»— оптовых поставщиков. –еализованы следующие функции: автоматическа€ загрузка накладных и доп. форм из ≈√ј»—, отправка актов подтверждени€/отклонени€/расхождени€, загрузка справок ј и Ѕ, загрузка сведений о поставщике/производителе, загрузка справочников номенклатуры по »ЌЌ производител€, постановка на баланс учтенного/не учтенного в ≈√ј»— товара, штрихкодирование поступлени€/инвентаризации/реализации/постановки на учет (DataMatrix и PDF417), формирование партий на складе а также электронна€ выгрузка деклараций по формам 5,6,7,11,12.
¬ дальнейшем могу оказывать сопровождение

»зучив вопрос поглубже, € вы€снил, что и верси€ 8.2 грешит неполной поддержкой протокола HTTP. ¬ св€зи с этим € решил разработать собственную реализацию функций обмена с транспортным модулем, с использованием исключительно системных функций Windows. ”казанные здесь примеры разработаны на €зыке программировани€ 1— версии 7.7, но совсем несложно переделать их дл€ версии 8.2 и выше. »так, сами функции:

1. ќтправка запроса по протоколу POST

function getrandomnumber() export
	m35=34359738368;
	m36=68719476736;
	m37=137438953472;
	somedigit = 5 * somedigit;
	if (somedigit >= m37) then somedigit = somedigit - m37 endif;
	if (somedigit >= m36) then somedigit = somedigit - m36 endif;
	if (somedigit >= m35) then somedigit = somedigit - m35 endif;
	return int(somedigit / m35 * 101);
endfunction

function randomnumber(limit) export
	return getrandomnumber()%(limit-1)+1;
endfunction

function getrandomstring(numchar) export
  charmap = "qwertzuiopasdfghjklyxcvbnmQWERTZUIOPASDFGHJKLYXCVBNM1234567890";
  maxchar = strlen(charmap) - 1;
  resstr = "";
  for i = 1 to numchar do
      resstr = resstr + mid(charmap, randomnumber(maxchar), 1);
  enddo;
  return resstr;
endfunction

function sendpostquery(objxml, querydata, address) export
	boundary = getrandomstring(30);
	objxml.open("POST", UTM_SERVER + address, 0);
	objxml.setrequestheader("Content-Type", "multipart/form-data; boundary=" + boundary);
	objxml.setrequestheader("Content-Length", string(strlen(querydata)));
	objxml.setrequestheader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
	objxml.setrequestheader("Pragma", "no-cache");
	objxml.setrequestheader("Cache-Control", "no-cache");
	objxml.setrequestheader("Accept-Charset", "utf-8");

	dataforsend = "--" + boundary + linebreak +
    		"Content-Disposition: form-data; name=""xml_file""; filename=""client.xml""" + linebreak +
    		"Content-Type: text/xml; charset=utf-8" + linebreak + linebreak + querydata +
    		linebreak + "--" + boundary + "--";
	try 
		objxml.send(dataforsend);
		resultstr = objxml.responsetext;
	except
		message("ќшибка отправки запроса POST: "+сокрлп(описаниеошибки()),"!");		
		resultstr = "";
	endtry;
	return resultstr;
endfunction

2. ќтправка запроса по протоколу GET

function sendgetquery(objxml, address) export
	objxml.open("GET", address, 0);
	objxml.setrequestheader("Content-Type", "text/xml");
	objxml.setrequestheader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
	objxml.setrequestheader("Pragma", "no-cache");
	objxml.setrequestheader("Cache-Control", "no-cache");
	objxml.Setrequestheader("Accept-Charset", "utf-8");
	try
		objxml.send();
		resultstr = objxml.responsetext;
	except
		message("ќшибка отправки запроса GET: "+сокрлп(описаниеошибки()),"!");
		resultstr = "";
	endtry;
	return resultstr;
endfunction

3. ќтправка запроса по протоколу DELETE

function senddeletequery(objxml, address) export
	objxml.open("DELETE", address, 0);
	try
		objxml.send();
		result = 0;
	except
		message("ќшибка отправки запроса DELETE: "+сокрлп(описаниеошибки()),"!");		
		result = -1;
	endtry;
	return result;
endfunction

4. ѕолучение URL документа  с указанным ID запроса

function getdocumenturl(objxml, queryid) export
	resulturl = "";
	docxml = sendgetquery(objxml, UTM_SERVER + "/opt/out?refresh=true");
	xmldoc = createobject("Msxml.DOMDocument");
	xmldoc.loadxml(docxml);
   	objnodea = xmldoc.selectsinglenode("A");
	for i = 0 to objnodea.childnodes.length - 1 do
		nodeans = objnodea.childnodes.item(i);
		if nodeans.nodename = "url" then
		    replyid = nodeans.getattribute("replyId");
			if replyid = queryid then
			    resulturl = nodeans.text;
				break;
			endif;
		endif;
	enddo;
	return resulturl;
endfunction

5. ѕолучение списка всех вход€щих документов

function getalldocuments(objxml, addrstr) export
	docslist = createobject("ValueTable");
	docslist.newcolumn("id","string");
	docslist.newcolumn("url","string");
	
	docxml = sendgetquery(objxml, UTM_SERVER + addrstr);
	xmldoc = createobject("Msxml.DOMDocument");
	xmldoc.loadxml(docxml);
   	objnodea = xmldoc.selectsinglenode("A");
	for i = 0 to objnodea.childnodes.length - 1 do
		nodeans = objnodea.childnodes.item(i);
		if nodeans.nodename = "url" then
			docslist.newline();
			docslist.id  = nodeans.getattribute("replyId");
			docslist.url = nodeans.text;
		endif;
	enddo;
	return docslist;
endfunction

» реализаци€ высокоуровневых функций. «апрос информации о производителе:

function sendclientinfoquery(inn) export
	queryclientstring = "<?xml version=""1.0"" encoding=""utf-8""?>
	|<ns:Documents Version=""1.0"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance""
	|xmlns:ns=""http://fsrar.ru/WEGAIS/WB_DOC_SINGLE_01""
	|xmlns:oref=""http://fsrar.ru/WEGAIS/ClientRef""
	|xmlns:qp=""http://fsrar.ru/WEGAIS/QueryParameters"">
	|<ns:Owner><ns:FSRAR_ID>[%FSRAR_ID%]</ns:FSRAR_ID></ns:Owner>
	|<ns:Document><ns:QueryClients><qp:Parameters><qp:Parameter><qp:Name>»ЌЌ</qp:Name>
	|<qp:Value>[%»ЌЌ%]</qp:Value></qp:Parameter></qp:Parameters></ns:QueryClients>
	|</ns:Document></ns:Documents>";

	objxml = createobject("Microsoft.XmlHttp");
	queryid = "";
	querystring = strreplace(queryclientstring, "[%FSRAR_ID%]", FSRAR_ID);
	querystring = strreplace(querystring, "[%»ЌЌ%]", INN);
	docxml = sendpostquery(objxml, querystring, "/opt/in/QueryPartner");

	if (strlen(docxml) > 0) then
		xmldoc = createobject("Msxml.DOMDocument");	
		xmldoc.loadxml(docxml);
		objnodea = xmldoc.selectsinglenode("A");
		if (emptyvalue(objnodea) = 0) then
			objnodeurl= objnodea.selectsinglenode("url");
			if (emptyvalue(objnodeurl) = 0) then
				queryid = objnodeurl.text;
			endif;
		endif;
	endif;
	return queryid;
endfunction

«апрос номенклатурного справочника производител€

function sendgoodsinfoquery(inn) export
	querygoodsstring = "<?xml version=""1.0"" encoding=""utf-8""?>
	|<ns:Documents Version=""1.0"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance""
	|xmlns:ns=""http://fsrar.ru/WEGAIS/WB_DOC_SINGLE_01""
	|xmlns:qp=""http://fsrar.ru/WEGAIS/QueryParameters"">
	|<ns:Owner><ns:FSRAR_ID>[%FSRAR_ID%]</ns:FSRAR_ID></ns:Owner>
	|<ns:Document><ns:QueryAP><qp:Parameters><qp:Parameter><qp:Name>»ЌЌ</qp:Name>
	|<qp:Value>[%»ЌЌ%]</qp:Value></qp:Parameter></qp:Parameters></ns:QueryAP>
	|</ns:Document></ns:Documents>";

	objxml = createobject("Microsoft.XmlHttp");
	queryid = "";
	querystring = strreplace(querygoodsstring, "[%FSRAR_ID%]", FSRAR_ID);
	querystring = strreplace(querystring, "[%»ЌЌ%]", INN);
	docxml = sendpostquery(objxml, querystring, "/opt/in/QueryAP");

	if (strlen(docxml) > 0) then
		xmldoc = createobject("Msxml.DOMDocument");	
		xmldoc.loadxml(docxml);
		objnodea = xmldoc.selectsinglenode("A");
		if (emptyvalue(objnodea) = 0) then
			objnodeurl= objnodea.selectsinglenode("url");
			if (emptyvalue(objnodeurl) = 0) then
				queryid = objnodeurl.text;
			endif;
		endif;
	endif;
	return queryid;
endfunction

–азбор результирующей строки в формате XML производитс€ следующим образом (пример):

функци€ –азобратьЌакладную(—трокаXML) экспорт
	xmldoc = createobject("Msxml.DOMDocument");	
	xmldoc.loadxml(—трокаXML);
    

	Node1 = xmlDoc.selectSingleNode("ns:Documents");
	Owner = Node1.selectSingleNode("ns:Owner");
	FsRarID = —окрЋѕ(Owner.selectSingleNode("ns:FSRAR_ID").text);
	Node2 = Node1.selectSingleNode("ns:Document");
	SprName  = Node2.childNodes(0).nodeName;
	
	if SprName = "ns:WayBill" then
		WayBill = Node2.selectSingleNode("ns:WayBill");
		Header  = WayBill.selectSingleNode("wb:Header");
		Ќомерƒок¬ход€щий = —окрЋѕ(Header.selectSingleNode("wb:NUMBER").text);
		ƒатаƒок  = preparedate(Header.selectSingleNode("wb:Date").text);

		ƒатаќтгр = preparedate(Header.selectSingleNode("wb:ShippingDate").text);
		ќтпр	 = Header.selectSingleNode("wb:Shipper");
		 ѕѕ		 = —окрЋѕ(ќтпр.selectSingleNode("oref:KPP").text);
		»ЌЌ		 = —окрЋѕ(ќтпр.selectSingleNode("oref:INN").text);
		ClientRegID = —окрЋѕ(ќтпр.selectSingleNode("oref:ClientRegId").text);

		Content = WayBill.selectSingleNode("wb:Content");
		for i = 0 to Content.childNodes.length - 1 do
			Position = Content.childNodes.item(i);
			Product = Position.selectSingleNode("wb:Product");
			Price   = „исло(Position.selectSingleNode("wb:Price").text);
			AlcCode = —окрЋѕ(Product.selectSingleNode("pref:AlcCode").text);
		enddo;
	endif;
	¬озврат "";
конецфункции

ѕреимущество данных функций перед другими, опубликованными на этом сайте:

1. Ќе используетс€ вызов внешних программ, не требуетс€ установка дополнительного ѕќ;

2. Ќе используютс€ временные файлы, вс€ работа происходит в оперативной пам€ти, это увеличивает скорость обработки, и позвол€ет организовать коллективную работу, не создава€ коллизий при обращении к одним и тем же файлам.

“акже доступны дл€ скачивани€ файлы следующих обработок:

  • ќбработка дл€ загрузки информации о производителе (торговых точек, зарегистрированных в ≈√ј»—) - при помощи данной обработки возможно отправить запрос на получение информации о производителе в ≈√ј»—, и получив ответ на него, обработать его и сформировать список зарегистрированных торговых точек производител€ с их реквизитами ( ѕѕ, регистрационный код ≈√ј»—);
  • ќбработка дл€ загрузки списка товаров выбранного производител€. ѕри помощи данной обработки можно установить коды ‘—–ј– существующим в справочнике номенклатурным позици€м, а также автоматически создать отсутствующие в справочнике позиции.

≈сли ¬ам требуетс€ помощь в доработке учетной системы (1— 7.7, 1— 8.2 или люба€ друга€ платформа) дл€ работы в системе ≈√ј»— ‘—–ј–, € готов возмездно помочь за соответствующее вознаграждение по договоренности.

√аранти€ возврата денег

√аранти€ возврата денег

ќќќ "»нфостарт" гарантирует ¬ам 100% возврат оплаты, если программа не соответствует за€вленному функционалу из описани€. ƒеньги можно вернуть в полном объеме, если вы за€вите об этом течение 14-ти дней со дн€ поступлени€ денег на наш счет.

ѕрограмма настолько проверена в работе, что мы с полной уверенностью можем дать такую гарантию. ћы хотим, чтобы все наши покупатели оставались довольны покупкой.

ƒл€ возврата оплаты просто св€житесь с нами.

—качать файлы

Ќаименование ‘айл ¬ерси€ –азмер
ќбработка выгрузки накладной в ≈√ј»— 10
.ert 35,50Kb
11.12.15
10
.ert 1.0 35,50Kb —качать
ќбработка загрузки информации о производителе (1— торговл€ 9.2) 52
.ert 33,50Kb
11.12.15
52
.ert 1.1 33,50Kb —качать
ќбработка загрузки списка номенклатуры производител€ 51
.ert 191,00Kb
11.12.15
51
.ert 1.1 191,00Kb —качать
ѕроцедуры и функции глобального модул€ 67
.zip 7,95Kb
11.12.15
67
.zip 1.1 7,95Kb —качать
¬ыгрузка расходной накладной в ≈√ј»— 45
.ert 33,50Kb
11.12.15
45
.ert 1.0 33,50Kb —качать
¬ыгрузка акта постановки в ≈√ј»— 14
.ert 35,50Kb
11.12.15
14
.ert 1.1 35,50Kb —качать
Ўтрих-кодирование прихода 7
.ert 191,00Kb
11.12.15
7
.ert 1.1 191,00Kb —качать
»нструкци€ по работе с конфигурацией ≈√ј»— 33
.pdf 3,45Mb
11.12.15
33
.pdf 1.1 3,45Mb Ѕесплатно
 онфигураци€ 1— “и— ≈√ј»—
23.12.2015
4000 руб.

ћоментальна€
доставка

—м. также

¬ознаграждение за ответ
—умма: 0 $m
ƒобавили:
volk13 (volk13) (0.10 $m)
ѕодписатьс€ ƒобавить вознаграждение

 омментарии

1. —ергей  рымов (—ергей ) 27.10.15 09:23
—пасибо за пример!
¬опрос однако, в функции
function sendclientinfoquery(inn) export
    ...<qp:Name>»ЌЌ</qp:Name>...

есть атрибут названный по русски "»ЌЌ". Ќе увидел преобразовани€ кодировки текста в UTF-8 ?
 ажетс€ что по умолчанию кодировка строковой переменной будет Windows...
2. volk13 (volk13) 27.10.15 09:59
3. Igor Berezhnov (igorberezhnov) 27.10.15 10:03
(1) —ергей , ¬се правильно, кодировка устанавливаетс€ здесь:

objxml.Setrequestheader("Accept-Charset", "utf-8");

» к сведению, все строки, которые передаютс€ в объекты OLE Automation, имеют кодировку Unicode, никак не ANSI.
4. »ван ƒемидов (ivanov_alex) 27.10.15 14:50
Ѕыл бы рабочий код дл€ отправки ““Ќ дл€ розницы, может и купил бы
5. Igor Berezhnov (igorberezhnov) 27.10.15 14:53
(4) ivanov_alex, не проблема, сейчас как раз работаю над отправкой ““Ќ, отправкой акта подтверждени€/отказа/расхождени€ поставщику, а также загрузкой справок формы A и B. ѕишите в личку, что ¬ам надо, договоримс€:)
6. Igor Berezhnov (igorberezhnov) 27.10.15 14:57
 стати, заметил, что в тексте публикации не все функции, которые используютс€ в обработках. ≈сли кто-то уже скачал, извин€юсь за свой промах. ¬ечером выложу здесь файл с текстом глобального модул€ в части, касающейс€ ≈√ј»—.
7. ёрий «айцев (Yury1001) 28.10.15 11:13
(6) igorberezhnov, а так же не описаны изменени€ в метаданных))
8. Igor Berezhnov (igorberezhnov) 28.10.15 13:01
(7) Yury1001, ƒобавлена строкова€ константа FSRAR_ID дл€ установки идентификатора торговой точки, добавлено перечисление QueryType со значени€ми:

ForManufacturerInfo
ForProductsInfo

и добавлен справочник дл€ хранени€ запросов queryegais следующей структуры:
 од - (нет)
Ќаименование - строка(42)
QueryType - ѕеречисление.QueryType
Status - „исло(1)
inn - строка(20)

¬от и все изменени€!
9. ƒмитрий Ќикс (aximo) 31.10.15 18:41
(5) а зачем мы хотите получать справки ј и Ѕ?
–азве в первичных документах WAYBILL и REGB... не достаточно информации?

ѕочему не используете  ”–Ћ? - это должно упростить разработку системы обмена....
10. Igor Berezhnov (igorberezhnov) 31.10.15 19:47
(9) aximo, 1. REGB - это и есть справка Ѕ
2. “ребуетс€ установка Curl, требуетс€ формирование файла на диске, неудобно и избыточно, дл€ работы моего кода не требуетс€ установка дополнительных компонентов.
11. rougudz rougudz (rougudz) 06.11.15 11:00
чегойто никак не хочет работать ваш вариант :(

–Ш–Э–Э это »ЌЌ в UTF кодировке
при objxml.send(dataforsend);
выдает ошибку: ќшибка отправки запроса POST: msxml3.dll: —интаксическа€ ошибка

привожу dataforsend
--qqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
Content-Disposition: form-data; name="xml_file"; filename="client.xml"
Content-Type: text/xml; charset=utf-8


<?xml version="1.0" encoding="UTF-8"?>
<ns:Documents Version="1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ns="http://fsrar.ru/WEGAIS/WB_DOC_SINGLE_01"
xmlns:oref="http://fsrar.ru/WEGAIS/ClientRef"
xmlns:qp="http://fsrar.ru/WEGAIS/QueryParameters">
<ns:Owner>
<ns:FSRAR_ID>030000050000</ns:FSRAR_ID>
</ns:Owner>
<ns:Document> (5.1)
<ns:QueryClients>
<qp:Parameters>
<qp:Parameter>
<qp:Name>–Ш–Э–Э</qp:Name>
<qp:Value>7729101200</qp:Value>
</qp:Parameter>
</qp:Parameters>
</ns:QueryClients>
</ns:Document>
</ns:Documents>
--qqqqqqqqqqqqqqqqqqqqqqqqqqqqqq--
...ѕоказать —крыть
12. Igor Berezhnov (igorberezhnov) 06.11.15 11:08
(11) rougudz, ≈ще раз говорю, ничего перекодировать не надо! ѕерекодировка производитс€ здесь:
objxml.Setrequestheader("Accept-Charset", "utf-8");

¬ dataforsend ƒолжно быть »ЌЌ, а не –Ш–Э–Э
13. rougudz rougudz (rougudz) 06.11.15 11:13
€ пробовал и так и так. ничего не мен€етс€ :(
ќшибка отправки запроса POST: msxml3.dll: —интаксическа€ ошибка
14. Igor Berezhnov (igorberezhnov) 06.11.15 11:19
(13) rougudz, ” ¬ас ошибка в XML-файле запроса, он у ¬ас неправильно сформирован. ¬озьмите мой вариант за основу, у мен€ все правильно сформировано. Ќапример, что это за строка:
<ns:Document> (5.1)
Ёто точно не мой код. » делимитер дл€ формы у мен€ формируетс€ из случайных символов. Ёто не € писал.
15. rougudz rougudz (rougudz) 06.11.15 11:26
сперва € пробовал ваш вариант, потом вариант из pdf ≈√ј»—опт, 5.1 это от туда случайно влезло после копипаста.

вот ваш вариант, таже песн€:
--qqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
Content-Disposition: form-data; name="xml_file"; filename="client.xml"
Content-Type: text/xml; charset=utf-8

<?xml version="1.0" encoding="utf-8"?>
<ns:Documents Version="1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ns="http://fsrar.ru/WEGAIS/WB_DOC_SINGLE_01"
xmlns:qp="http://fsrar.ru/WEGAIS/QueryParameters">
<ns:Owner><ns:FSRAR_ID>030000050400</ns:FSRAR_ID></ns:Owner>
<ns:Document><ns:QueryAP><qp:Parameters><qp:Parameter><qp:Name>»ЌЌ</qp:Name>
<qp:Value>7729101200</qp:Value></qp:Parameter></qp:Parameters></ns:QueryAP>
</ns:Document></ns:Documents>
--qqqqqqqqqqqqqqqqqqqqqqqqqqqqqq--
ќшибка отправки запроса POST: msxml3.dll: —интаксическа€ ошибка
...ѕоказать —крыть
16. Igor Berezhnov (igorberezhnov) 06.11.15 11:31
(15) rougudz, ну какой же мой? ј откуда --qqqqqqqqqqqqqqqqqqqqqqqqqqqqq ????
17. rougudz rougudz (rougudz) 06.11.15 11:33
(16) igorberezhnov,
на моей машине почету-то так отрабатывает getrandomstring
это € еще не разбиралс€.
своего € тут ничего не выдумывал, пробую ваше.
вот никак немогу пон€ть в чем ошибка в запросе :(
18. Igor Berezhnov (igorberezhnov) 06.11.15 11:35
(15) rougudz, √де у ¬ас в файле вот это: xmlns:oref="http://fsrar.ru/WEGAIS/ClientRef" ?
19. Igor Berezhnov (igorberezhnov) 06.11.15 11:37
(17) rougudz, ” мен€ почему то есть, а у ¬ас само-собой пропало? »спользуйте мой код, в нем все работает, если вносите свои изменени€, зачем ко мне претензии?
20. Igor Berezhnov (igorberezhnov) 06.11.15 11:43
(17) rougudz, ѕрошу прощени€, уже вижу, что запрос формировалс€ по продукции, не заметил сразу, этой строки и не должно быть в запросе. «начит еще где-то ошибка.
21. Igor Berezhnov (igorberezhnov) 06.11.15 11:46
ƒл€ какой платформы и конфигурации пытаетесь адаптировать?
22. Igor Berezhnov (igorberezhnov) 06.11.15 11:49
(17) rougudz, getrandomstring не отрабатывает, потому что в функцию "ѕриЌачале–аботы—истемы" надо добавить:
	somedigit = _getperformancecounter()*_getperformancecounter();
23. rougudz rougudz (rougudz) 06.11.15 11:49
(19) igorberezhnov, Ќ» ј »’ претензий! боже упаси, сорри если мои слова восприн€лись как претензии.
если посмотреть выше на список процедур («апрос номенклатурного справочника производител€) то там нет такой строки "xmlns:oref="http://fsrar.ru/WEGAIS/ClientRef""
вот потому у мен€ ее и нету :)
а использую € ваш код это однозначно, все правки которые € делал в начале € убрал.
единственно пришлось таки помен€ть адрес на /opt/in/QueryPartner
потому что он видимо изменилс€ со дн€ публикации...

добавил эту строку...
итоговый код запроса, а ошибка таже..
--PPPPKKKKKKKKKKKMMMMMMMMMM88888
Content-Disposition: form-data; name="xml_file"; filename="client.xml"
Content-Type: text/xml; charset=utf-8

<?xml version="1.0" encoding="utf-8"?>
<ns:Documents Version="1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ns="http://fsrar.ru/WEGAIS/WB_DOC_SINGLE_01"
xmlns:oref="http://fsrar.ru/WEGAIS/ClientRef"
xmlns:qp="http://fsrar.ru/WEGAIS/QueryParameters">
<ns:Owner><ns:FSRAR_ID>030000050400</ns:FSRAR_ID></ns:Owner>
<ns:Document><ns:QueryAP><qp:Parameters><qp:Parameter><qp:Name>»ЌЌ</qp:Name>
<qp:Value>7729101200</qp:Value></qp:Parameter></qp:Parameters></ns:QueryAP>
</ns:Document></ns:Documents>
--PPPPKKKKKKKKKKKMMMMMMMMMM88888--
ќшибка отправки запроса POST: msxml3.dll: —интаксическа€ ошибка
...ѕоказать —крыть

спасибо за ответы. у мен€ этот вариант не работает, буду пробовать чтото другое.
24. Igor Berezhnov (igorberezhnov) 06.11.15 11:53
(17) rougudz, ¬ ¬ашем варианте в HTTP-заголовке дл€ POST нет об€зательных полей:
Content-Length
Content-Type (об€зательно указывать поле boundary)

¬озьмите мой код целиком, и все заработает! —качайте функции глобального модул€, и вставьте в свой глобальный модуль, ничего не мен€€ в низкоуровневых функци€х.
25. rougudz rougudz (rougudz) 06.11.15 11:59
€ приводил пример того что передаетс€ в objxml.send(dataforsend); т.е. саму строку в dataforsend

все остальное передаетс€
objxml.setrequestheader("Content-Type", "multipart/form-data; boundary=" + boundary);
    objxml.setrequestheader("Content-Length", string(—трƒлина(querydata)));

и т.д.
ваша процедура, единственное помен€л команды на руские вариенты, мне так проще, привычнее, суть не помен€лась
‘ункци€ sendpostquery(objxml, querydata, address) export
    boundary = ѕолучить—тр—луч—имволов(30);
    objxml.open("POST", UTM_SERVER + address, 0);
    objxml.setrequestheader("Content-Type", "multipart/form-data; boundary=" + boundary);
    objxml.setrequestheader("Content-Length", string(—трƒлина(querydata)));
    objxml.setrequestheader("≈сли-Mod≈слиied-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
    objxml.setrequestheader("Pragma", "no-cache");
    objxml.setrequestheader("Cache-Control", "no-cache");
    objxml.setrequestheader("Accept-Charset", "utf-8");

    dataforsend = "--" + boundary + –азделитель—трок +
            "Content-Disposition: form-data; name=""xml_file""; filename=""client.xml""" + –азделитель—трок +
            "Content-Type: text/xml; charset=utf-8" + –азделитель—трок + –азделитель—трок + querydata +
            –азделитель—трок + "--" + boundary + "--";
    
	
	
	ѕопытка 
        objxml.send(dataforsend);
        resultstr = objxml.responsetext;
	»сключение
		—ообщить(dataforsend);		
        message("ќшибка отправки запроса POST: "+сокрлп(описаниеошибки()),"!");        
        resultstr = "";
     онецѕопытки;
    ¬озврат resultstr;
 онец‘ункции
...ѕоказать —крыть


€ приводил текст dataforsend
26. rougudz rougudz (rougudz) 06.11.15 12:02
спасибо. попробую когда разбогатею :)
у мен€ 0,98 на счете :)
и € собственно юзал процедуры из публикации а не вложенных файлов.
27. Igor Berezhnov (igorberezhnov) 06.11.15 12:04
(25) rougudz, „ет вообще ничего непон€тно, какой-то мусор в ¬ашем коде
28. Igor Berezhnov (igorberezhnov) 06.11.15 12:05
(26) rougudz, давайте ¬ашу почту в личке, € скину
29. ƒмитрий Ўкекин (dm1860) 11.11.15 17:06
ѕрикрутил функции... работают.
Ќо по некоторым производител€м при попытке забрать ответ на запрос с их продукцией, 1—-ина вылетает и при этом сохран€етс€ пустой файл *.qry в папке  аталог»Ѕ\queries\ Ќе знаете из-за чего это может быть?
30. Igor Berezhnov (igorberezhnov) 11.11.15 17:38
(29) dm1860, увы, уже знаю. 1— вылетает при попытке передать/считать строку в COM-объект больше приблизительно 100  б, а также при работе со строками неограниченной длины в базе больше 100 б. ¬ылетает в крэш. ѕришлось поправить функции, сделать все таки загрузку из файлов, разрезать строку на кусочки по 80 б при сохранении, использовать другой COM-объект дл€ записи/считывани€ данных в кодировке UTF. »справленные функции и модули сейчас выложу.
31. Victor Nespyatin (victuan) 20.11.15 07:56
(30) ”вы, дл€ большего объема данных подойдет только Curl. ¬от цитата из соседней разработки:
ѕри скачивании файлов >570  б используетс€ cUrl (в настройках можно форсировать использование cUrl на посто€нной основе)
http://infostart.ru/public/409028/
32. Igor Berezhnov (igorberezhnov) 20.11.15 09:23
(31) victuan, ничего подобного, € без проблем загружаю файлы 11-12 ћб (справочники продукции) - без вс€кого CURL. ѕросто нужны пр€мые руки:) —качайте глобальный модуль - и убедитесь.
33. влади мир (ya.vladi.mir) 24.11.15 11:37
»горь, можно вопрос по поводу подтверждение акта разногласи€
- мне через ”“ћ пришло два уведомлени€: первое что акт прин€т и второе что накладна€ проведена
а где же подтверждение от поставщика, что он согласен на уменьшение количества согласно акта?
как у вас реализовано?????
спасибо
34. Igor Berezhnov (igorberezhnov) 24.11.15 21:13
(33) ya.vladi.mir, ѕо поводу подтверждени€ сам еще не в курсе, нигде не нашел такой информации. 2..12.2015 будет семинар в москве по ≈√ј»—, там надеюсь получить ответ на этот вопрос. ѕока решили просто отклон€ть полностью накладную, и получать переделанную от поставщика.
35. влади мир (ya.vladi.mir) 25.11.15 11:37
(34) igorberezhnov, да - полностью согласен, решение в данном случае самое верное,
однако хотелось бы правды ))) узнать
36. јндрей ‘ролов (јндрей77RX) 25.11.15 23:16
 то занимаетс€ автоматизацией магазинов, подскажите, устанавливали ли ј“ќЋ ”“ћ HUB-19, как он в работе ? http://pos-tech.ru/egais/utm-atol/utm-atol-hub
37. влади мир (ya.vladi.mir) 26.11.15 08:04
(34) igorberezhnov, »горь, брось свои координаты мне на ya.vladi.mir@yandex.ru
38. ≈вгений »ванов (sf002) 26.11.15 13:36
igorberezhnov, скажите при выгрузке накладной, где выгружаетс€ PDF417 считанный с бутылки или € что-то напутал?
39. Igor Berezhnov (igorberezhnov) 26.11.15 14:00
(38) sf002, Ќигде, максимум что ¬ы можете получить - это диапазоны серийных номеров марок, которыми маркирована продукци€ (это маленькие коды DataMatrix) дл€ всей выпущенной партии производител€. —огласно официальной схеме, они должны быть включены в справку ј ≈√ј»—, но по факту ни в одной полученной справке € их не видел. Ќо это код марок, а не штрихкод PDF-417. “ак что придетс€ штрихкодировать каждую бутылку как при получении, так и при отгрузке.
40. ≈вгений »ванов (sf002) 28.11.15 10:48
(39) igorberezhnov, штриховать придетс€ рознице или опту? € так пон€л что оптовик отправл€ет только то что получил в приходной накладной. и идентифицировать бутылку никак нельз€. в табличной части там только рег.номер справки ј + рег.номер справки Ѕ + код ≈√ј»— бутылки + код ≈√ј»— производител€.
это значит штрихкодированием будет заниматьс€ только розница? ведь только они должны печатать спец.чек и отпускать товар по 2-м кодам EAN(свой) и PDF417(с акц.марки). то есть оптовке не нужно ничего штрихкодировать? в справке ј есть диапазоны марок и оптовик по приходу провер€ет на соответствие каждой бутылки - этой справке ј. и также при отгрузке указывает конкретную справку ј и справку Ѕ.
41. ≈вгений »ванов (sf002) 28.11.15 11:06
сам отвечу.
получаетс€ оптовик отправл€ет данные в розницу лишь диапазоном марок (указанный в справке ј) - все как раньше на бумажках
розница отпускает продукцию считанную по PDF417 (наименование, код ≈√ј»—, крепость, емкость, производитель, дата розлива) с точностью до конкретного номера марки считанного с DataMatrix.
зачем тогда об€зательна€ маркировка EAN? или бывают повторени€ в комбинации PDF417+DataMatrix?
42. Igor Berezhnov (igorberezhnov) 28.11.15 14:27
(40) sf002, как в оптовой торговле без кодировани€, как партии товаров различать, которые поступили от производител€/поставщика? »ли держать их на разных полках? ѕредположим, мы от фонар€ отгрузили в розницу бутылку водки из другой партии, при продаже информаци€ о бутылке поступит в ≈√ј»—, а там сведени€, что эта бутылка продана »ѕ ѕупкину. «начит в этом магазине торгуют контрафактом!
43. Igor Berezhnov (igorberezhnov) 28.11.15 14:32
(41) sf002,
> зачем тогда об€зательна€ маркировка EAN? или бывают повторени€ в комбинации PDF417+DataMatrix?
“ак в розничных учетных системах нет возможности идентификации товара по алкогольному штрихкоду. ¬о первых, в существующих учетных системах нет информации о коде ≈√ј»— номенклатуры конкретного товара. ¬о вторых, не так то просто извлечь код товара из штрихкода, он там зашифрован в 36-разр€дной системе. ¬ третьих, один и тот же товар разных производителей имеет разный штрих-код, а это неудобно при назначении дисконта или наценки на конкретный товар.
44. ≈вгений »ванов (sf002) 28.11.15 15:24
(42) igorberezhnov,
как в оптовой торговле без кодировани€, как партии товаров различать, которые поступили от производител€/поставщика?

можно обклеить €щики текстовой информацией о партии: (номер партии, диапазон марок), затем при отгрузке в розницу - подбирать по этим 2-м параметрам. а номера регистрации справок ј и Ѕ брать из номера партии. конечно если обклеить €щики/бутылки штрихкодами - то все будет быстрее. мен€ просто интересует алгоритм. € верно прикинул?
45. ≈вгений »ванов (sf002) 28.11.15 15:25
да про розницу пон€л, спасибо за разъ€снени€. там без штрихкодировани€ необойтись.
46. »горь ћаловичко (ital) 30.11.15 09:26
—качал все ваши обработки,заточил под себ€ все отлично, а вот с обработкой "¬ыгрузка расходной накладной в ≈√ј»—", затык, отладил все ошибки в наших данных, и теперь зашел в тупик при отправке выдает одну и ту же "обезличенную" ошибку.

<A><error>org.xml.sax.SAXParseException; cvc-pattern-valid: Value '' is not facet-valid with respect to pattern '\S+(.*\S+)*' for type 'NoEmptyString50'.</error><ver>2</ver></A>

ј какое именно поле пустое не могу пон€ть уже все пол€ в готовом файлике xml запроса проверил на 10 р€дов + добавил транспортный раздел. “ак же по схеме попыталс€ найти какие пол€ типа "NoEmptyString50" там суд€ по схеме их всего 3 шт это "NUMBER" (номер ““Ќ), "Pack_ID" (упаковка), "Party" (парти€), все эти пол€ еще раз перепроверил, все заполнены. ѕодскажите пожалуйста в каком направлении копать.
47. Igor Berezhnov (igorberezhnov) 30.11.15 11:03
(46) ital, Ёто пол€ адреса производител€/поставщика. ≈сли адрес не соответствует требовани€м ћЌ—, в файле выгрузки по€вл€ютс€ пустые пол€ (город, код страны, улица и т.д.), которые должны содержать как минимум один символ, как максимум 50. я дл€ себ€ решил эту проблему тем, что завел в карточке контрагента все дополнительные пол€, как они есть в схеме ≈√ј»— (все части адреса отдельно, плюс поле description, плюс полное и краткое наименование ≈√ј»—).
48. јлександр Ќовиков (Novicad) 10.12.15 13:54
ћожешь перезалить свежие варики обработок, и может что то еще наработал тоже выкладывай!? спасибо
49. Igor Berezhnov (igorberezhnov) 11.12.15 11:05
(48) Novicad, ƒобавил обработку выгрузки акта постановки на баланс, и обработку штрихкодировани€ прихода по накладной. ¬ыложил готовую и протестированную конфигурацию дл€ платформы 1— 7.7.
50. ѕавел ћеркулов (Palmer1976) 18.12.15 17:17
‘ункци€ loadxml() объекта Msxml.DOMDocument крэшитс€ при попытке загрузить из строки очень большой длины (к примеру ответ на запрос справочника алкогольной продукции производител€ по его »ЌЌ).  ак вы обошли эту проблему?
51. Igor Berezhnov (igorberezhnov) 18.12.15 22:01
(50) Palmer1976, считываю порци€ми по 80 б:
function loadreply(queryid) export
	fso = createobject("Scripting.FileSystemObject");
	reply = "";
	path =  аталог»Ѕ()+"\queries\"+сокрлп(queryid)+".qry";
	if (fso.fileexists(path) <> 0) then
	    txtfile = fso.opentextfile(path, 1);
		пока txtfile.AtEndOfStream=0 цикл
	    	reply = reply + txtfile.read(80000);
		конеццикла;
	    txtfile.close();
	endif;
	return reply;
endfunction
...ѕоказать —крыть


function loadreply(queryid) export
fso = createobject("Scripting.FileSystemObject");
reply = "";
path =  аталог»Ѕ()+"\queries\"+сокрлп(queryid)+".qry";
if (fso.fileexists(path) <> 0) then
txtfile = fso.opentextfile(path, 1);
пока txtfile.AtEndOfStream=0 цикл
reply = reply + txtfile.read(80000);
конеццикла;
txtfile.close();
endif;
return reply;
endfunction
52. ѕавел ћеркулов (Palmer1976) 19.12.15 23:05
(51) igorberezhnov, сами создаете себе трудности, чтобы потом их успешно преодолевать? даю наводку ;) раз уж используете MSXML, то вовсе нет нужды гон€ть данные через текстовую строку туда-сюда responsetext -> loadxml()
когда есть ResponseXML
53. Igor Berezhnov (igorberezhnov) 20.12.15 10:21
(52) Palmer1976, я вообще то в курсе, как работает MSXML, учить мен€ не надо. ¬ы спросили, как решить проблему обмена длинными строками в 1— - € вам объ€снил. »ли чего хотели?
54. Igor Berezhnov (igorberezhnov) 20.12.15 10:34
(52) Palmer1976, ” мен€ все файлы ответов хран€тс€ на диске, чтобы всегда можно было посмотреть ответ/список ответов в карточке запроса, дл€ последующей обработки. „тобы с диска файлы считывать тоже ResponseXML предлагаете?
55. —танислав ѕруцков (Stan) 21.12.15 12:09
≈сть вопросы по конфигурации. Ќаписал в личку.
56. Ќиколай (beard1) 14.01.16 22:05
ƒоброго времени суток, в конфигурацию вход€т все функции? сканер как подключаем?
сопоставление контрагентов и номенклатуры реализовано?
57. Igor Berezhnov (igorberezhnov) 15.01.16 08:30
(56) beard1,
в конфигурацию вход€т все функции?

¬се, описанные в технических требовани€х по опту, за исключением акта списани€, в ближайшее врем€ собираюсь доработать.
сканер как подключаем?

—канер подключаем к COM-порту, или через USB - с эмул€цией COM-порта, главное - чтобы поддерживалось внешнее событие 1—
сопоставление контрагентов и номенклатуры реализовано?

„то имеетс€ ввиду? »дентификаци€ номенклатуры и контрагента производитс€ по уникальному идентификатору ≈√ј»—.
58. Ќиколай (beard1) 15.01.16 22:28
(57) igorberezhnov,

„то имеетс€ ввиду? »дентификаци€ номенклатуры и контрагента производитс€ по уникальному идентификатору ≈√ј»—


€ спрашивал про первичное сопоставление, например, получили номенклатуру поставщика из ≈√ј»—, естественно надо сопоставить со своей, вот эта функци€ реализована?
59. Igor Berezhnov (igorberezhnov) 17.01.16 11:47
(58) beard1,  онечно, в обработке загрузки номенклатуры можно сопоставить загруженную номенклатуру со своей вручную, если элемент не найден в справочнике либо по коду ≈√ј»—, либо по наименованию.
60. ƒмитрий Ўкекин (dm1860) 20.01.16 11:39
≈ще один момент... акт постановки на баланс, (в который сканируютс€ марки) создает xml более 600 kb (около 8 тыс€ч марок в одном документе) и при попытке отправки в ≈√ј»— вашими функци€ми завершает работу 1—... :( с такой проблемой не боролись?
61. Igor Berezhnov (igorberezhnov) 20.01.16 16:05
(60) dm1860, ¬ теме уже отвечал (51) - если передавать во внешний COM-объект очень длинные строки - 1— вылетает по ошибке. —охран€йте строку в файл и из неЄ загружайте.
62. јнгам јхметз€нов (Askaneli) 02.02.16 16:26
»де€ просто великолепна.
— некоторыми модификаци€ми использовал дл€ реализации всего что касаетс€ ≈√ј»—.
—пасибо огромное.
ƒл€ написани€ сообщени€ необходимо авторизоватьс€
ѕрикрепить файл
ƒополнительные параметры ответа