Загрузка накладной из ТОРГ-12. БП 3.0




Принцип обмена данными из 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='\

33 Comments

  1. ritol

    в УТ11 работает?

    Reply
  2. pragromist

    (1) ritol, пока нет

    Reply
  3. Bylka

    Работает хорошо, единственное замечание: если в код номенклатуры «длинный» или содержит 2-3 строчки тогда обработка теряет количество/цену/сумму

    Reply
  4. pragromist

    (3) Bylka, ну да, если какой либо реквизит содержит перенос строки то беда, и ничего не поделаешь.

    Reply
  5. ph74

    У меня в бухгалтерии 3.0 на переносит товары в накладную, все распознает, добавляет, а как только делаю перенести выходит пустая накладная. Может я что-то не так делаю или в настройках дело?

    Reply
  6. byxgalter

    У меня то же самое в бухгалтерии 3.0 на переносит товары в накладную, все распознает, добавляет, а как только делаю перенести выходит пустая накладная. Что не так?

    Reply
  7. pragromist

    (5) ph74, (6) byxgalter,

    Да, действительно, в последней версии бухгалтерии, что то изменилось и табличная часть не переносится — будем разбираться.

    Извините за задержку — отчетный период.

    Reply
  8. byxgalter

    Хотела у вас узнать как скоро будут дополнена обработка, работы много. Данная обработка просто спасение для нас.

    Reply
  9. pragromist

    (8) byxgalter, между майскими постараюсь

    Reply
  10. pragromist

    (8) byxgalter, (5)

    Забирайте пока от сюда

    Открывать через файл открыть или подключить в доп.обработки в желаемые разделы.

    Документ-получатель указывать уже в самой обработке (рядом с кнопкой Перенести)

    Чтобы статью переоформить нужно часа полтора — потом как ни будь.

    Reply
  11. byxgalter

    (10)

    Спасибо огромное.

    С обработкой разобрались.

    Reply
  12. oligarhrich

    Здравствуйте! Скачал файлик, не работает. При попытке переноса закрывается окошко и ничего не переносит. Бухгалтерия предприятия, редакция 3.0 (3.0.40.27)

    Reply
  13. oligarhrich

    скачал вашу 2ю обработку, работает только через файл->открыть, но хотелось бы чтобы как в первой обработке интегрировалась в сам документ… Подшаманите?))

    Reply
  14. pragromist

    (13) oligarhrich,

    Обработка перестала работать после очередного обновления с типовой на типовую, разбираться в БСП не вижу смысла – она живет по своим, не понятным мне, законам и часто меняется, как видно, без поддержки предыдущего функционала.

    Публикацию я, конечно, обновлю, но механизм, скорее всего, будет работать как дополнительная обработка и интегрирован в документ не будет.(

    з.ы. или просто сниму с публикации.

    Reply
  15. oligarhrich

    (14) не, не, снимать не надо, пусть хоть так но работает, это очень жизнь многими облегчает.

    Reply
  16. roofless

    (2) заточить под УТ11 сложно будет?

    Reply
  17. pragromist

    (16) roofless, ну не очень

    Reply
  18. karloson

    (14) Обработка хорошая много раз выручала в жизни, но такой вопрос: будет рассмотрен вариант загрузки УПД в данной обработки??

    Спасибо за ответ если он будет)

    Reply
  19. Пользователь 1С

    по проблеме, озвученной в п.3. её можно избежать предварительно откорректировав исходный файл (растянув столбцы, убрав переносы)?

    Reply
  20. Пользователь 1С

    //для подписки к теме

    Reply
  21. medvedkiller

    Добрый день! Не работает на текущем релизе, при переносе в документ выдает ошибку

    {Форма.Форма.Форма(113)}: Значение не является значением объектного типа (ИмяФормы)

    ИмяФормыДокумента = Окно.ПолучитьСодержимое().ИмяФормы;

    Reply
  22. pragromist

    (21) medvedkiller, ИСПРАВЛЕНО

    Однако.

    В последних версиях бухгалтерии найти окно документа по представлению объекта невозможно, так как его заголовок формируется в зависимости от реквизитов, и никакого метода у объекта не предусмотрено.

    Поэтому поиск окна теперь осуществляется по номеру и дате объекта и, если, при выполнении обработки, у вас будет открыто несколько документов разных видов в одинаковыми номером и датой (дата,время), попытка загрузки произойдет в первый попавшийся!

    P.S. например, окно документа Поступление (акт, накладная) 00БП-000001 от 16.03.2016 10:15:57

    теперь называется Поступление товаров: Накладная 00БП-000001 от 16.03.2016 10:15:57

    Reply
  23. Bylka

    или скажите что подправить в обработке… а то у самого чет знаниев не хватает

    Reply
  24. medvedkiller

    Все норм, заработала

    Reply
  25. user595742_Irenkuznetsova

    Скачала обработку.

    А она на работает, таблицу распознает, а в документ не переносит. Пишет «Значение не является значением объектного тира (номер)»

    В чем может быть проблема?

    Reply
  26. 2021998

    Значение не является значением объектного типа (номер) — проявилось при нажатии на кнопку «перенести в документ» Что не так?

    Reply
  27. 2021998

    работает через дополнительные обработки! Ура!

    Reply
  28. dmitriy.finance

    Подскажите, обработка позволяет создавать номенклатуру и добавлять её в нужные группы? То есть у нас папка Материалы разбита на много групп. Или обработка будет кидать номенклатуру в корневой каталог папки Материалы?

    С УПД работает? Или только с Торг-12?

    Заранее спасибо, очень жду ответ.

    Reply
  29. titanium2008

    Бухгалтерия предприятия, редакция 3.0 (3.0.68.66)

    не работает. Верните деньги

    Reply
  30. pragromist

    (29) Номенклатуру будет добавлять не в Материалы, а вообще в корневую группу справочника. С УПД не работает, там колонки по другому расположены, но переделать не сложно.

    И, да — я здесь бываю не часто, сори)))

    Reply
  31. pragromist

    Обновлено под бухгалтерию с новым НДС, проверено на релизе 3.0.70.30

    Reply
  32. pragromist

    (30) тут вам не алиэкспресс — денег не берём и не возвращаем, кидайте почту в лс, пришлю исправленную версию

    Reply
  33. pdimas

    Отличная обработка, частенько бухгалтерия спрашивает, подобные вещи, надо будет взять на заметку. Было бы идеально если бы она была более универсальной, а именно работала сУПД и сч-фактурами, а так же с ут 11

    Reply

Leave a Comment

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