Выгрузка данных из Бухгалтерии предприятия 2.0 в Управление торговлей 10.3 (БП 2.0 — УТ 10.3)




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

29 Comments

  1. GStiv

    Не совсем понял

    УТ 10.3.13.2 Сервис — Обмен с БУХ 2.0

    в бухгалтерии тоже стандартный обмен информация из правил Бух 2.0.14 в УТ 10.3.12

    для чего тогда данные правила, давайте я вам из Бух анализ счета продам

    Reply
  2. bobaG
    Для загрузки данных в конфигурации «Управления торговлей»необходимо воспользоваться универсальной загрузкой данных (Сервис — Прочие обмены данными — Универсальный обмен данными в формате XML).

    Для выгрузки также можно использовать «Универсальный обмен данными в формате XML» и стандартные правила обмена.

    Reply
  3. New Look
    Не совсем понял

    УТ 10.3.13.2 Сервис — Обмен с БУХ 2.0

    в бухгалтерии тоже стандартный обмен информация из правил Бух 2.0.14 в УТ 10.3.12

    для чего тогда данные правила, давайте я вам из Бух анализ счета продам

    То, про что Вы говорите — это постоянный обмен. Он не позволяет задать период выгрузки. Мне был нужен именно НЕ ПОСТОЯННЫЙ обмен. Найти его нигде не смог, пришлось править правила постоянного обмена. Может быть у кого то будет такая же проблема, данная обработка позволит сэкономить время.

    Reply
  4. New Look
    Для выгрузки также можно использовать «Универсальный обмен данными в формате XML» и стандартные правила обмена.

    Сможете это продемонстрировать? Т.е. выгрузить из БП 2.0 в УТ 10.3 информацию по тем правилам, которые заданы в правилах постоянного обмена с помощью стандартной выгрузки?

    Reply
  5. nahinalka

    Ваша обработка работает для выгрузки данных из Бухгалтерии предприятия 2.0 в Управление торговлей 11.0 (8.2)

    Reply
  6. New Look
    nahinalka пишет:

    Ваша обработка работает для выгрузки данных из Бухгалтерии предприятия 2.0 в Управление торговлей 11.0 (8.2)

    Нет. Только из БП 2.0 в УТ 10.3.

    Reply
  7. jobtrg

    Документы инвентаризацию товаров включая списание и оприходование переносит корректно?

    Reply
  8. New Look
    jobtrg пишет:

    Документ инвентаризацию товаров включая списание и оприходование переносит корректно?

    Все документы и все возможные варианты выгрузок не тестировались. За основу взят план постоянного обмена между БП и УТ. Если будут выявлены ошибки, то они будут исправляться.

    Reply
  9. jobtrg

    Давайте я вам потестирую на этих документах, пишите на admin@ursteel.ru 🙂

    Reply
  10. New Look
    jobtrg пишет:

    Давайте я вам потестирую на этих документах, пишите на admin@ursteel.ru

    Как мне дадут с сайта разрешение на отгрузку — отправлю Вам обработку в тот же день.

    Reply
  11. Поручик

    Для БП 2.0.26 заточена? Там есть изменения в метаданных Номенклатуры.

    Reply
  12. New Look

    (11) Не проверял, т.к. пока не было надо. При необходимости доработаю.

    Reply
  13. vertij

    А есть аналог выгрузки из Управление торговлей 10.3 в Бухгалтерии предприятия 2.0 как было в редакции 1.6?

    Reply
  14. New Look
  15. vertij

    Так в описании написано что это БП в УТ. А мне нужно чтоб из УТ в БП. Или она работает в оба направления?

    Reply
  16. New Look

    (15) В описании чего? Этой обработки или обработки по ссылке из (14)?

    Reply
  17. Shining ninja

    Несколько вопросов (замечаний):

    1) Выгрузил платежки из БП, загружаю в УТ и вот, что выдается:

    (Загружаю через универсальный обмен в формате XML)

    Ошибка в обработчике события ПослеЗагрузкиОбъекта
    ИмяПКО                 =  РасходныйКассовыйОрдер
    ТипОбъекта             =  Расходный кассовый ордер
    Объект                 =  Расходный кассовый ордер С0000000106 от 02.04.2012 17:55:56
    Обработчик             =  ПослеЗагрузкиОбъекта
    ОписаниеОшибки         =  Ошибка компиляции при вычислении выражения или выполнении фрагмента кода: {(1,15)}: Переменная не определена (УзелОбменаЗагрузкаДанных)
    ПозицияМодуля          =  (8)
    КодСообщения           =  21
    
    Ошибка при загрузке данных: {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(1541)}: Ошибка в обработчике события ПослеЗагрузкиОбъекта
    ИмяПКО                 =  РасходныйКассовыйОрдер
    ТипОбъекта             =  Расходный кассовый ордер
    Объект                 =  Расходный кассовый ордер С0000000106 от 02.04.2012 17:55:56
    Обработчик             =  ПослеЗагрузкиОбъекта
    ОписаниеОшибки         =  Ошибка компиляции при вычислении выражения или выполнении фрагмента кода: {(1,15)}: Переменная не определена (УзелОбменаЗагрузкаДанных)
    ПозицияМодуля          =  (8)

    Показать

    Что делать, как исправить ошибку?

    Если поставить галочку — Режим отладки, то все загрузится.

    2)При загрузки Приходных/Расходных кассовых ордеров не проставляется касса, почему? Как исправить?

    3)Если мне нужны только платежки, а не связанные с ними реализации/поступления, как их убрать из обмена?

    Reply
  18. jump0

    Она работает, кто-нибудь пробовал? Мне только банковские документы и контрагентов, если нет в торговле переносить.

    Reply
  19. Pures

    (18) jump0, Работает и очень хорошо, Автору респект

    Reply
  20. smir

    попробуем

    Reply
  21. redgoll

    Спасибо, возможно мне это поможет. Нужно перегрузить контрагентов. Почему то в стандартных правилах в регистрации изменений у них запретить стоит и не получается выгрузить. Возможно я что-то не так делаю. Не знаете, как включить выгрузку контрагентов из БП в УТ при постоянном обмене?

    Reply
  22. yapures

    И что это работает?

    Код
    Ошибка в обработчике события ПослеЗагрузкиОбъекта
    ИмяПКО                 =  РасходныйКассовыйОрдер
    ТипОбъекта             =  Расходный кассовый ордер
    Объект                 =  Расходный кассовый ордер С0000000106 от 02.04.2012 17:55:56
    Обработчик             =  ПослеЗагрузкиОбъекта
    ОписаниеОшибки         =  Ошибка компиляции при вычислении выражения или выполнении фрагмента кода: {(1,15)}: Переменная не определена (УзелОбменаЗагрузкаДанных)
    ПозицияМодуля          =  (8)
    КодСообщения           =  21
    
    Ошибка при загрузке данных: {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(1541)}: Ошибка в обработчике события ПослеЗагрузкиОбъекта
    ИмяПКО                 =  РасходныйКассовыйОрдер
    ТипОбъекта             =  Расходный кассовый ордер
    Объект                 =  Расходный кассовый ордер С0000000106 от 02.04.2012 17:55:56
    Обработчик             =  ПослеЗагрузкиОбъекта
    ОписаниеОшибки         =  Ошибка компиляции при вычислении выражения или выполнении фрагмента кода: {(1,15)}: Переменная не определена (УзелОбменаЗагрузкаДанных)
    ПозицияМодуля          =  (8)

    Показать

    Reply
  23. New Look

    (22) Внимательно читаем описание обработки.

    «Актуальность правил не поддерживается.»

    Reply
  24. c00lwork

    на каких релизах работаетто ?

    Reply
  25. New Look

    (24) На старых. На новых не тестировалось.

    Reply
  26. geffest

    вопрос к автору,а данная обработка «Выгрузка данных из Бухгалтерии предприятия 2.0 в Управление торговлей 10.3 за период» на каком релизе УТ и БП реально работает??

    Reply
  27. New Look

    (26) На том, которые были актуальны на 13.04.2012.

    13.04.2012.

    Снять коммерческий статус. Актуальность правил не поддерживается.

    Reply
  28. vovafr1

    Нужно данные выгрузить из бп 2.0 в ут 11

    Reply
  29. New Look

    (28) Выгружайте, ничего не имею против.

    Reply

Leave a Comment

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