<?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='\
УТС возвращает код ошибки 500
может в виде обработки выложите или конфы?
СерверПриемник = «localhost»; //Без протоколаhttp:// . Если УТМ установлени на удаленном компьютере, указываем свой адрес.
(1) SergVD, обновил статью, тело запроса составляется через объединение текстовых файлов, 100% работает )
Добавил разбор файл ответа.
А на 8.2 не пробовали сделать через HTTPСоединение? Там HTTPЗапрос нет. Вроде все то же, но не выполняется запрос, чего-то видимо все-таки не хватает.
(5) Uncore, Обновите платформу. Начиная с 8.2.18 HTTPЗапрос есть
(6) 31ric, мне как раз для 8.2 нужно было для старых версий без обновления платформы. Уже разобрался, заработало и без HTTPЗапрос.
А для 7.7 есть что нибудь?
-<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
(9) Teodor_kr,
http://localhost:8080/opt/out
1. Проверить запущена ли служба УТМ «Transport».
2. Работает и видится ли ключ JaCarta.
3. Проверить в браузере доступ к —
4. Отключить брандмауэр и антивирус если УТМ находится не на локальной машине.
(10) А служба УТМ «Transport» не запустится, если JaCarta не работает
(11) agorohov, Да, если ключ не вставлен, на нем нет сертификата, и т.д. УТМ не запускается.
(10) Машина локальная. Доступ кhttp://localhost:8080/opt/out?refresh=true есть.Транспорт запущен (ключ JaCarta вставлен и читается)
Пробовал HTTPPOSTЗапросКУТМСистемыЕГАИС.epf из (3)
в ответ приходит вот такое, но ошибки не дает:
<A>
<error>null</error>
<ver>2</ver>
</A>
(13) Teodor_kr, то что вы пробовали, старая версия (она работала не везде).
В статье обновленный пример, если код из статьи перенесете в обработку, подставите свои значения FSRARID, все заработает.
(14) у меня такой же ответ, как у (13)
пробовал и обработкой HTTPPOSTЗапросКУТМСистемыЕГАИС.epf, и копипастил код из статьи. в чем может быть дело?
(15) demon_infernal, такая же проблема.. вчера загрузил справочник организаций, ттн, а сегодня «Error 500 Server Error», хотя ТТН все же загружаются.
Для тех у кого вылезает ошибка <A> <error>null</error> <ver>2</ver> </A>
Правильное формирование запроса (Тут главное последовательность перевода строки правильно расставить и Boundary):
Показать
тут Текст — ваш сформированный xml — запрос, Boundary — тоже, что и в основной статье.
Обработка была тестированием УТМ с целью разобраться и посмотреть как работает УТМ и т.д.
Если собираетесь внедрять, то советую код и принцип работы с УТМ взять из последней редакции 1С 8 Розница 2.1.
Обмен построен на XDTO объектах, очень удобно и красиво )
(18) с оттуда и взял, и он не заработал! Пришлось немного поразбираться, почитав стандарт передачи данных в POST. Возможно все дело в настройках веб-сервера (Jetty), но факт — из коробки не работает.
xsd файлы не пробовали импортировать в 1С? у меня проблема в 1С возникает, когда тип не описан отдельно, а идет как «описание типов», указанное непосредственно у значения. в этом случае выходит сообщение вроде нельзя присвоить значение типу «» (пустая строка). после того как отдельно описываю этот тип и указываю его, 1С начинает воспринимать эти данные
я вообще сначала попробовал отправить через curl -F свой запрос и получил ответ
<A><error>??????????? ???? ?? ???????. ?????????? ????????? ? ?????? «ns:FSRAR_ID»:0</error><ver>2</ver></A>
потом средствами 1С (спасибо за Ваш код), и получил те же самые знаки вопроса, что-то с кодировкой
в общем причина у меня была в том, что с пустым namespace загрузка не происходит. если кто-то будет использовать фабрику XDTO (загружая файлы xsd), то рабочий код такой
Показать
Я не мучился со средствами 1С. Сделал на более интуитивных инструментах.
Показать
Из браузера такой запрос может прокатить? Например на PHP если написать? Никто не пробовал?
У меня в ответ на запрос выдаёт:
HTTP ERROR: 404
Problem accessing opt/in/QueryPartner. Reason:
Not Found
Скажите пожалуйста, а можно ли передать на сервер ЕГАИС коды товаров PDF417 и получить обратно информацию об этих товарах (карточки товаров)?
(24) maljaev, можно передать в запросе AlcCode, и получить информацию только об этом конкретном товаре (в отличие от запроса по ИНН, в котором возвращаются все товары).
(25) krv2k, запрос AlcCode — применимо для проверки акцизной марки??? Интересует как раз получение информации (проверка акцизной марки) по штрих-коду PDF417 !!!
(26) aziat71, в штрихкоде есть алккод, его можно оттуда вытащить
Там по идее строка зашифрована, как же его оттуда вытащить?
(28) ifal, расшифровать 🙂 есть код для 1С на просторах инета, тут приводить не буду, т.к. используется в коммерческом решении.
(29) Uncore, Спасибо, помогли (навели на мысли), в общем-то код мне не нужен, а вот информация была бы кстати. В общем-то мне нужен только алкокод из марки, так как используя только марки быстрей и точней можно подготовки акты постановки на баланс. Собственно вот:»…для получения AlcСode из QR-кода надо символы с 8 по 19 (12 символов) перевести из тридцатишестеричной
системы счисления в десятичную систему счисления, добавить впереди недостающие ведущие нули,
и получим 19 -ти разрядное число, состоящее только из цифр». Получившаяся функция:
Показать
(25) krv2k, А где есть информация о том как сформировать запрос к серверу по AlcСode?
(31) maljaev, вместо ИНН производителя нужно передавать параметр КОД:
+(32) для запроса контрагента/производителя по регномеру, тоже поправить нужно в одном месте:
(30) ifal, И всетаки, чтобы получить AlcCode, какой код нужно сканировать, тот что поменьше на марке (формата DATA-MATRIX) или тот что побольше (формата PDF417) ???
(27) Uncore, AlcCode достали, проверили, результат положительный, но разве этот факт === подлинная акцизная марка?
(34) aziat71, Я думаю вы уже разобрались, но на всякий — PDF417
доброго времени суток,
а можно ли и как
запросить всю продукцию
запросить всех производителей
запросить FSRAR_ID из УТМ
в документации по УТМ вроде не нашел параметров
(35) beard1, нет, думаю не равен, проверить подлинность все равно прийдется в личном кабинете ФСРАР либо через терминал сбора данных с поддержкой CheckMark, либо при помощи детектора Госзнак. В данном случае цель получения AlcoCode — правильная/точная постановка на учет при проведении инвентаризации.
(36) ifal, да, огромное спасибо — то что нужно!!!
(30) ifal, огромное спасибо!
Не подскажете, Ваша функция для распознавания кода PDF417, если её адаптировать, будет работать в 1С 7.7?
Дело в том, что я ровным счётом ничего не понимаю в кодировках, но насколько я понял, функция КодСимв() в 7.7 может дать совсем не тот результат, что КодСимвола() в 8-ке. Я прав? И если это так, есть способ обойти проблему?
(31) maljaev, пример запроса продукции по коду есть тамНедокументированные возможности УТМ ЕГАИС
(8) Diman_Kr, и для 7.7 естьПример HTTP запроса к УТМ ЕГАИС на платформе 1С: 7.7
Вот тут, вроде, в сообщении №84, для 7-ки хороший человек написал обработку, чтобы AlcCode из QR-кода доставать:http://infostart.ru/public/405305/#comm
(40) makus, вообще надо проверять, по идее должна работать, только конечно надо адаптировать, например, в 7-ке нет оператора возведения в степень — надо функцию писать и т.д.
(44) ifal, спасибо!
В действительности, с возведением в степень, как раз, проблем нет, потому что в сети есть готовые функции, которые можно вставить в глобальный модуль и есть 1C++, где реализована функция возведения в степень, аналогичная восьмёрочной. Я больше беспокоюсь о соответствии кодов символов, которые будет возвращать 7-ка кодам, возвращаемым 8-кой, т.к. 7-ка не понимает юникод.
Как бы там ни было, я обнаружил буквально вчера функцию для 7.7, которая делает то же самое. Я её уже адаптировал, она работает.
Большое спасибо Вам за начальную информацию о содержании кода в PDF417 и за саму идею.
(30) ifal, Если в платформе нет функций КодСимвола() и Pow(), вот нашел еще такой пример:
Показать
(17) ifal, В конце XML обязательно должен быть перевод строки. По умолчанию — ЗаписьXML() не заканчивает файл XML переносом строки.
не забудьте… как в примере закончить :
(47) dima_home, а где у меня ЗаписьXML используется?
а можно дополнить статью, что в итоге должно «нарисоваться» после выполнения п.3 ? спасибо
А можно запрос на удаление документов???
С чем может быть связана ошибка, вылетающая при попытке отправить запрос в УТМ:
Ошибка при вызове конструктора (HTTPСоединение)
НТТР = Новый HTTPСоединение(СерверПриемник, Порт);
по причине:
Несоответствие типов (параметр номер ‘2’)
Ошибка вылетает на 1с8 Розница 2.2.4.12
Платформа 8.3
СерверПриемник = «localhost» (и IP подставлял, и локально, и по сети)
Порт=»8080″
тип порта — число, попробуй Порт=8080;
А так, универсальное решение… обнови платформу, обнови конфигурацию.
Уже все перепробовал
Все последние релизы и платформа и конфигурация. Сейчас перепроверю, может еще что-то вышло
уже голову сломал, что ему не нравится.
Бухгалтерия Предприятия 3,0 работает нормально
в некоторых Розницах — нормально.
У одного товарища эта ошибка выскакивает и хоть убейся
Платформа какая?
1С:Предприятие 8.3 (8.3.8.1675) (Кстати БП на такой платформе норм отрабатывает)
и на этой проверял и на следующей. сейчас уточню какая именно.
1С:Предприятие 8 не ниже 8.3.8.1784 нужна, думаю в этом дело.
а как же это
1С:Предприятие 8.3 (8.3.8.1675) (Кстати БП на такой платформе норм отрабатывает)
У этого товарища 1С:Предприятие 8.3 (8.3.8.1784)
Возможно в Рознице изменили код соединения с УТМ и требуется новая платформа, в обновление Розницы, 1С пишет что нужна платформа «1С:Предприятие 8 не ниже 8.3.8.1784″…
Как то так, других мыслей нет.
Спасибо за помощь