HTTP POST запрос к УТМ системы ЕГАИС




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2024-01-05 12:44:55

global $wpdb2;
global $failure;
global $file_hist;

/////  echo '<H2><b>Старт загрузки</b></H2><br>';

$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
/////   echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}

$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
/////   echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}

/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
/////   echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
/////    echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist);   ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7];    ////получаем размер файла
$m_mtime_file=$masiv_data_file[9];   ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file

/////   echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
/////   echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
/////   echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);

if ($results)
{   foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));

////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
/////   echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
/////   echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}

////загружаем данные
$table='vin_history';         // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация     // (путь от корня web-сервера)
$delim=';';          // Разделитель полей в CSV файле
$enclosed='"';      // Кавычки для содержимого полей
$escaped='\

61 Comments

  1. SergVD

    УТС возвращает код ошибки 500

    Reply
  2. flyer

    может в виде обработки выложите или конфы?

    Reply
  3. Corvax46

    СерверПриемник = «localhost»; //Без протокола http://. Если УТМ установлени на удаленном компьютере, указываем свой адрес.

    Reply
  4. desarz

    (1) SergVD, обновил статью, тело запроса составляется через объединение текстовых файлов, 100% работает )

    Добавил разбор файл ответа.

    Reply
  5. Uncore

    А на 8.2 не пробовали сделать через HTTPСоединение? Там HTTPЗапрос нет. Вроде все то же, но не выполняется запрос, чего-то видимо все-таки не хватает.

    Reply
  6. 31ric

    (5) Uncore, Обновите платформу. Начиная с 8.2.18 HTTPЗапрос есть

    Reply
  7. Uncore

    (6) 31ric, мне как раз для 8.2 нужно было для старых версий без обновления платформы. Уже разобрался, заработало и без HTTPЗапрос.

    Reply
  8. Diman_Kr

    А для 7.7 есть что нибудь?

    Reply
  9. Teodor_kr

    -<head> <met a content=»text/html; charset=ISO-8859-1″ http-equiv=»Content-Type»/>

    <title>Error 500 Server Error</title>

    </head>

    -<body><h2>HTTP ERROR 500</h2>

    -<p>P

    Reply
  10. desarz

    (9) Teodor_kr,

    1. Проверить запущена ли служба УТМ «Transport».

    2. Работает и видится ли ключ JaCarta.

    3. Проверить в браузере доступ к — http://localhost:8080/opt/out

    4. Отключить брандмауэр и антивирус если УТМ находится не на локальной машине.

    Reply
  11. agorohov

    (10) А служба УТМ «Transport» не запустится, если JaCarta не работает

    Reply
  12. desarz

    (11) agorohov, Да, если ключ не вставлен, на нем нет сертификата, и т.д. УТМ не запускается.

    Reply
  13. Teodor_kr

    (10) Машина локальная. Доступ к http://localhost:8080/opt/out?refresh=true есть.Транспорт запущен (ключ JaCarta вставлен и читается)

    Пробовал HTTPPOSTЗапросКУТМСистемыЕГАИС.epf из (3)

    в ответ приходит вот такое, но ошибки не дает:

    <A>

    <error>null</error>

    <ver>2</ver>

    </A>

    Reply
  14. desarz

    (13) Teodor_kr, то что вы пробовали, старая версия (она работала не везде).

    В статье обновленный пример, если код из статьи перенесете в обработку, подставите свои значения FSRARID, все заработает.

    Reply
  15. demon_infernal

    (14) у меня такой же ответ, как у (13)

    пробовал и обработкой HTTPPOSTЗапросКУТМСистемыЕГАИС.epf, и копипастил код из статьи. в чем может быть дело?

    Reply
  16. mma928

    (15) demon_infernal, такая же проблема.. вчера загрузил справочник организаций, ттн, а сегодня «Error 500 Server Error», хотя ТТН все же загружаются.

    Reply
  17. ifal

    Для тех у кого вылезает ошибка <A> <error>null</error> <ver>2</ver> </A>

    Правильное формирование запроса (Тут главное последовательность перевода строки правильно расставить и Boundary):

    ТелоЗапроса = Новый ТекстовыйДокумент();
    ТелоЗапроса.ДобавитьСтроку(Символы.ПС);
    ТелоЗапроса.ДобавитьСтроку(«—» + Boundary);
    ТелоЗапроса.ДобавитьСтроку(«Content-Disposition: form-data; name=»»xml_file»»»);
    ТелоЗапроса.ДобавитьСтроку(«Content-Type: application/octet-stream»);
    ТелоЗапроса.ДобавитьСтроку(Символы.ПС);
    ТелоЗапроса.ДобавитьСтроку(Текст);
    ТелоЗапроса.ДобавитьСтроку(«—» + Boundary);
    ТелоЗапроса.ДобавитьСтроку(«—» + Boundary+ «—«);
    
    Текст = ТелоЗапроса.ПолучитьТекст();
    
    Запрос = Новый HTTPЗапрос(«/opt/in/QueryPartner»);
    Запрос.Заголовки.Вставить(«Content-Type», «multipart/form-data; boundary=» + Boundary);
    Запрос.УстановитьТелоИзСтроки(Текст, КодировкаТекста.UTF8);
    Ответ = Соединение.ОтправитьДляОбработки(Запрос);
    

    Показать

    тут Текст — ваш сформированный xml — запрос, Boundary — тоже, что и в основной статье.

    Reply
  18. desarz

    Обработка была тестированием УТМ с целью разобраться и посмотреть как работает УТМ и т.д.

    Если собираетесь внедрять, то советую код и принцип работы с УТМ взять из последней редакции 1С 8 Розница 2.1.

    Обмен построен на XDTO объектах, очень удобно и красиво )

    Reply
  19. ifal

    (18) с оттуда и взял, и он не заработал! Пришлось немного поразбираться, почитав стандарт передачи данных в POST. Возможно все дело в настройках веб-сервера (Jetty), но факт — из коробки не работает.

    Reply
  20. bds22

    xsd файлы не пробовали импортировать в 1С? у меня проблема в 1С возникает, когда тип не описан отдельно, а идет как «описание типов», указанное непосредственно у значения. в этом случае выходит сообщение вроде нельзя присвоить значение типу «» (пустая строка). после того как отдельно описываю этот тип и указываю его, 1С начинает воспринимать эти данные

    я вообще сначала попробовал отправить через curl -F свой запрос и получил ответ

    <A><error>??????????? ???? ?? ???????. ?????????? ????????? ? ?????? «ns:FSRAR_ID»:0</error><ver>2</ver></A>

    потом средствами 1С (спасибо за Ваш код), и получил те же самые знаки вопроса, что-то с кодировкой

    Reply
  21. bds22

    в общем причина у меня была в том, что с пустым namespace загрузка не происходит. если кто-то будет использовать фабрику XDTO (загружая файлы xsd), то рабочий код такой

    ТипDocuments=ФабрикаXDTO_ЕГАИС.Тип(«http://fsrar.ru/WEGAIS/WB_DOC_SINGLE_01», «Documents»);
    ЗначениеDocuments=ФабрикаXDTO_ЕГАИС.Создать(ТипDocuments);
    
    ТипSenderInfo=ФабрикаXDTO_ЕГАИС.Тип(«http://fsrar.ru/WEGAIS/WB_DOC_SINGLE_01», «SenderInfo»);
    ЗначениеSenderInfo=ФабрикаXDTO_ЕГАИС.Создать(ТипSenderInfo);
    ЗначениеSenderInfo.FSRAR_ID=FSRAR_ID;
    
    ЗначениеDocuments.Owner=ЗначениеSenderInfo;
    
    ТипDocument=ТипDocuments.Свойства.Получить(«Document»).Тип;
    ЗначениеDocument=ФабрикаXDTO_ЕГАИС.Создать(ТипDocument);
    
    ТипQueryParameters=ФабрикаXDTO_ЕГАИС.Тип(«http://fsrar.ru/WEGAIS/QueryParameters», «QueryParameters»);
    ЗначениеQueryParameters=ФабрикаXDTO_ЕГАИС.Создать(ТипQueryParameters);
    
    ТипParameters=ТипQueryParameters.Свойства.Получить(«Parameters»).Тип;
    ТипParameter=ТипParameters.Свойства.Получить(«Parameter»).Тип;
    ЗначениеParameter=ФабрикаXDTO_ЕГАИС.Создать(ТипParameter);
    
    ЗначениеQueryParameters.Parameters=ФабрикаXDTO_ЕГАИС.Создать(ТипParameters);
    
    ЗначениеParameter.Name=»ИНН»;
    ЗначениеParameter.Value=INN;
    ЗначениеQueryParameters.Parameters.Parameter.Добавить(ЗначениеParameter);
    
    ЗначениеDocument.QueryClients=ЗначениеQueryParameters;
    
    ЗначениеDocuments.Document=ЗначениеDocument;
    
    //ФабрикаXDTO_ЕГАИС.ЗаписатьXML(ЗаписьXML, ЗначениеDocuments);
    
    ЗаписьXML.ЗаписатьНачалоЭлемента(«ns:Documents»);
    ЗаписьXML.ЗаписатьАтрибут(«Version», «1.0»);
    
    ЗаписьXML.ЗаписатьСоответствиеПространстваИмен(«ns», «http://fsrar.ru/WEGAIS/WB_DOC_SINGLE_01»);
    ЗаписьXML.ЗаписатьСоответствиеПространстваИмен(«xsi», «http://www.w3.org/2001/XMLSchema-instance»);
    ЗаписьXML.ЗаписатьСоответствиеПространстваИмен(«ns», «http://fsrar.ru/WEGAIS/WB_DOC_SINGLE_01»);
    ЗаписьXML.ЗаписатьСоответствиеПространстваИмен(«oref», «http://fsrar.ru/WEGAIS/ClientRef»);
    ЗаписьXML.ЗаписатьСоответствиеПространстваИмен(«qp», «http://fsrar.ru/WEGAIS/QueryParameters»);
    
    ФабрикаXDTO_ЕГАИС.ЗаписатьXML(ЗаписьXML, ЗначениеDocuments.Owner, «Owner»);
    ФабрикаXDTO_ЕГАИС.ЗаписатьXML(ЗаписьXML, ЗначениеDocuments.Document);
    
    ЗаписьXML.ЗаписатьКонецЭлемента();
    
    ЗаписьXML.ЗаписатьТекст(Символы.ПС);
    СтрокаОбъект = ЗаписьXML.Закрыть();

    Показать

    Reply
  22. Fuego

    Я не мучился со средствами 1С. Сделал на более интуитивных инструментах.

    Function PostXMLFile(URL, XML)
    
    Boundary = String(New UUID());
    
    XMLHTTPRequest = CreateXMLHTTPRequest();
    
    XMLHTTPRequest.open(«POST», URL, False);
    
    XMLHTTPRequest.setRequestHeader(«Content-Type», «multipart/form-data; boundary=» + Boundary);
    
    FormData =
    «—» + Boundary + CrLf()
    + «Content-Disposition: form-data; name=»»xml_file»»; filename=»»file.xml»»» + CrLf()
    + «Content-Type: text/xml; charset=utf-8» + CrLf()
    + «Content-Transfer-Encoding: binary» + CrLf()
    + CrLf()
    + XML + CrLf()
    + «—» + Boundary + «—» + CrLf();
    
    XMLHTTPRequest.send(FormData);
    
    If XMLHTTPRequest.status = 200 Then
    
    XMLDocument = XMLHTTPRequest.responseXML;
    If IsBlankString(XMLDocument.xml) Then
    XMLDocument.load(XMLHTTPRequest.responseStream);
    EndIf;
    XMLDocument.setProperty(«SelectionLanguage», «XPath»);
    
    Return XMLDocument.selectSingleNode(«.//url»).text;
    
    Else
    
    HandleError(XMLHTTPRequest, URL);
    
    EndIf;
    
    
    Return «»;
    
    EndFunction
    
    Function CrLf()
    Return Chars.CR + Chars.LF;
    EndFunction
    
    Function CreateXMLHTTPRequest()
    Return New COMObject(«Msxml2.XMLHTTP.6.0»);
    EndFunction
    
    Procedure SendQueryForOrgData()
    XML =
    «<?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>543751347</ns:FSRAR_ID>
    |</ns:Owner>
    |<ns:Document>
    |<ns:QueryClients>
    |<qp:Parameters>
    |<qp:Parameter>
    |<qp:Name>ИНН</qp:Name>
    |<qp:Value>652348658</qp:Value>
    |</qp:Parameter>
    |</qp:Parameters>
    |</ns:QueryClients>
    |</ns:Document>
    |</ns:Documents>
    |»;
    URL = «http://my_egais_srv:8080/opt/in/QueryPartner»;
    
    ReplyID= PostXMLFile(URL, XML);
    // Do something
    EndProcedure
    
    

    Показать

    Reply
  23. Геннадьевич

    Из браузера такой запрос может прокатить? Например на PHP если написать? Никто не пробовал?

    У меня в ответ на запрос выдаёт:

    HTTP ERROR: 404

    Problem accessing opt/in/QueryPartner. Reason:

    Not Found

    Reply
  24. maljaev

    Скажите пожалуйста, а можно ли передать на сервер ЕГАИС коды товаров PDF417 и получить обратно информацию об этих товарах (карточки товаров)?

    Reply
  25. krv2k

    (24) maljaev, можно передать в запросе AlcCode, и получить информацию только об этом конкретном товаре (в отличие от запроса по ИНН, в котором возвращаются все товары).

    Reply
  26. aziat71

    (25) krv2k, запрос AlcCode — применимо для проверки акцизной марки??? Интересует как раз получение информации (проверка акцизной марки) по штрих-коду PDF417 !!!

    Reply
  27. Uncore

    (26) aziat71, в штрихкоде есть алккод, его можно оттуда вытащить

    Reply
  28. ifal

    Там по идее строка зашифрована, как же его оттуда вытащить?

    Reply
  29. Uncore

    (28) ifal, расшифровать 🙂 есть код для 1С на просторах инета, тут приводить не буду, т.к. используется в коммерческом решении.

    Reply
  30. ifal

    (29) Uncore, Спасибо, помогли (навели на мысли), в общем-то код мне не нужен, а вот информация была бы кстати. В общем-то мне нужен только алкокод из марки, так как используя только марки быстрей и точней можно подготовки акты постановки на баланс. Собственно вот:»…для получения AlcСode из QR-кода надо символы с 8 по 19 (12 символов) перевести из тридцатишестеричной

    системы счисления в десятичную систему счисления, добавить впереди недостающие ведущие нули,

    и получим 19 -ти разрядное число, состоящее только из цифр». Получившаяся функция:

    Функция ПолучитьАлкоКод(Марка)
    
    СтрокаАнализа = Сред(НРег(Марка), 8, 12);
    Длина = СтрДлина(СтрокаАнализа);
    Сообщить(СтрокаАнализа);
    
    // Переводим 36-ричное число в 10-ое
    Результат = 0;
    Для ин = 1 По СтрДлина(СтрокаАнализа) Цикл
    
    СимволСтроки = Сред(СтрокаАнализа,ин,1);
    
    ч = 0;
    Если КодСимвола(СимволСтроки)>=97 И КодСимвола(СимволСтроки)<=122 Тогда
    ч = КодСимвола(СимволСтроки) — 87;
    Иначе
    ч = Число(СимволСтроки);
    КонецЕсли;
    
    Результат = Результат + Pow(36, (Длина — ин))*ч;
    
    КонецЦикла;
    
    // Длина алкокода = 19 символов дополняем нулями спереди
    Результат = Формат(Результат, «ЧГ=»);
    Для ин = 1 По 19 — СтрДлина(Результат) Цикл
    Результат = «0» + Результат;
    КонецЦикла;
    
    Возврат Результат;
    
    КонецФункции
    

    Показать

    Reply
  31. maljaev

    (25) krv2k, А где есть информация о том как сформировать запрос к серверу по AlcСode?

    Reply
  32. Uncore

    (31) maljaev, вместо ИНН производителя нужно передавать параметр КОД:

    ТекстЗапроса.ЗаписатьНачалоЭлемента(«qp:Name»);
    ТекстЗапроса.ЗаписатьТекст(«КОД»);
    ТекстЗапроса.ЗаписатьКонецЭлемента(); //name
    Reply
  33. Uncore

    +(32) для запроса контрагента/производителя по регномеру, тоже поправить нужно в одном месте:

    ТекстЗапроса.ЗаписатьНачалоЭлемента(«qp:Name»);
    Если ЭтоРегНомер Тогда
    ТекстЗапроса.ЗаписатьТекст(«СИО»);
    
    Reply
  34. aziat71

    (30) ifal, И всетаки, чтобы получить AlcCode, какой код нужно сканировать, тот что поменьше на марке (формата DATA-MATRIX) или тот что побольше (формата PDF417) ???

    Reply
  35. beard1

    (27) Uncore, AlcCode достали, проверили, результат положительный, но разве этот факт === подлинная акцизная марка?

    Reply
  36. ifal

    (34) aziat71, Я думаю вы уже разобрались, но на всякий — PDF417

    Reply
  37. beard1

    доброго времени суток,

    а можно ли и как

      запросить всю продукцию

      запросить всех производителей

      запросить FSRAR_ID из УТМ

    в документации по УТМ вроде не нашел параметров

    Reply
  38. aziat71

    (35) beard1, нет, думаю не равен, проверить подлинность все равно прийдется в личном кабинете ФСРАР либо через терминал сбора данных с поддержкой CheckMark, либо при помощи детектора Госзнак. В данном случае цель получения AlcoCode — правильная/точная постановка на учет при проведении инвентаризации.

    Reply
  39. aziat71

    (36) ifal, да, огромное спасибо — то что нужно!!!

    Reply
  40. makus

    (30) ifal, огромное спасибо!

    Не подскажете, Ваша функция для распознавания кода PDF417, если её адаптировать, будет работать в 1С 7.7?

    Дело в том, что я ровным счётом ничего не понимаю в кодировках, но насколько я понял, функция КодСимв() в 7.7 может дать совсем не тот результат, что КодСимвола() в 8-ке. Я прав? И если это так, есть способ обойти проблему?

    Reply
  41. Palmer1976

    (31) maljaev, пример запроса продукции по коду есть там Недокументированные возможности УТМ ЕГАИС

    Reply
  42. Palmer1976
  43. makus

    Вот тут, вроде, в сообщении №84, для 7-ки хороший человек написал обработку, чтобы AlcCode из QR-кода доставать: http://infostart.ru/public/405305/#comm

    Reply
  44. ifal

    (40) makus, вообще надо проверять, по идее должна работать, только конечно надо адаптировать, например, в 7-ке нет оператора возведения в степень — надо функцию писать и т.д.

    Reply
  45. makus

    (44) ifal, спасибо!

    В действительности, с возведением в степень, как раз, проблем нет, потому что в сети есть готовые функции, которые можно вставить в глобальный модуль и есть 1C++, где реализована функция возведения в степень, аналогичная восьмёрочной. Я больше беспокоюсь о соответствии кодов символов, которые будет возвращать 7-ка кодам, возвращаемым 8-кой, т.к. 7-ка не понимает юникод.

    Как бы там ни было, я обнаружил буквально вчера функцию для 7.7, которая делает то же самое. Я её уже адаптировал, она работает.

    Большое спасибо Вам за начальную информацию о содержании кода в PDF417 и за саму идею.

    Reply
  46. JetBrain

    (30) ifal, Если в платформе нет функций КодСимвола() и Pow(), вот нашел еще такой пример:

    Функция ПолучитьАлкоКод(Значение) Экспорт
    Значение = Сред(Значение,8,12);
    Нотация=36;
    Результат=0;
    Длина=СтрДлина(Значение);
    Для Х=1 По Длина Цикл
    М=1;
    Для У=1 По Длина-Х Цикл М=М*Нотация КонецЦикла;
    Результат=Результат+(Найти(«0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ»,Сред(Значение,Х,1))-1)*М;
    КонецЦикла;
    Возврат Строка(Результат);
    КонецФункции
    
    

    Показать

    Reply
  47. dima_home

    (17) ifal, В конце XML обязательно должен быть перевод строки. По умолчанию — ЗаписьXML() не заканчивает файл XML переносом строки.

    не забудьте… как в примере закончить :

    ОбъектXML.ЗаписатьТекст(Символы.ПС);
    ОбъектXML.Закрыть();
    
    Reply
  48. ifal

    (47) dima_home, а где у меня ЗаписьXML используется?

    Reply
  49. aximo

    а можно дополнить статью, что в итоге должно «нарисоваться» после выполнения п.3 ? спасибо

    Reply
  50. Shadow308

    А можно запрос на удаление документов???

    Reply
  51. art010

    С чем может быть связана ошибка, вылетающая при попытке отправить запрос в УТМ:

    Ошибка при вызове конструктора (HTTPСоединение)

    НТТР = Новый HTTPСоединение(СерверПриемник, Порт);

    по причине:

    Несоответствие типов (параметр номер ‘2’)

    Ошибка вылетает на 1с8 Розница 2.2.4.12

    Платформа 8.3

    СерверПриемник = «localhost» (и IP подставлял, и локально, и по сети)

    Порт=»8080″

    Reply
  52. desarz

    тип порта — число, попробуй Порт=8080;

    Reply
  53. desarz

    А так, универсальное решение… обнови платформу, обнови конфигурацию.

    Reply
  54. SerSinelnik

    Уже все перепробовал

    Все последние релизы и платформа и конфигурация. Сейчас перепроверю, может еще что-то вышло

    Reply
  55. SerSinelnik

    уже голову сломал, что ему не нравится.

    Бухгалтерия Предприятия 3,0 работает нормально

    в некоторых Розницах — нормально.

    У одного товарища эта ошибка выскакивает и хоть убейся

    Reply
  56. desarz

    Платформа какая?

    Reply
  57. SerSinelnik

    1С:Предприятие 8.3 (8.3.8.1675) (Кстати БП на такой платформе норм отрабатывает)

    и на этой проверял и на следующей. сейчас уточню какая именно.

    Reply
  58. desarz

    1С:Предприятие 8 не ниже 8.3.8.1784 нужна, думаю в этом дело.

    Reply
  59. SerSinelnik

    а как же это

    1С:Предприятие 8.3 (8.3.8.1675) (Кстати БП на такой платформе норм отрабатывает)

    У этого товарища 1С:Предприятие 8.3 (8.3.8.1784)

    Reply
  60. desarz

    Возможно в Рознице изменили код соединения с УТМ и требуется новая платформа, в обновление Розницы, 1С пишет что нужна платформа «1С:Предприятие 8 не ниже 8.3.8.1784″…

    Как то так, других мыслей нет.

    Reply
  61. SerSinelnik

    Спасибо за помощь

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *