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




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

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

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

<?php // Полная загрузка сервисных книжек, создан 2026-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 не будет опубликован. Обязательные поля помечены *