Обработка печати Доверенности для УТ 11 (тонкий, толстый клиент) ver 1.01




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

17 Comments

  1. kirlog

    Обработка некорректно работает в тонком клиенте. При нажатии кнопки «печать» табличный документ не появляется. Видимо, из за того, что вывод табличного документа происходит «на сервере».

    В толстом клиенте документ выводится.

    Reply
  2. rer

    kirlog,

    Есть такое, спасибо, поправлю и выложу свежую версию.

    Reply
  3. mob

    Огромное спасибо!

    Очень существенный был недостаток в УТ11.

    А нельзя ли добавить сохранение выписанных доверенностей в журнале? С соответствующим присвоением последовательных номеров.

    Reply
  4. rer

    mob,

    Боюсь что без изменения самой конфигурации к сожалению никак.

    Reply
  5. mob
    rer пишет:

    Боюсь что без изменения самой конфигурации к сожалению никак.

    Понятно…

    Ещё раз спасибо!

    Reply
  6. sbm

    В Управление торговлей, редакция 11.0 (11.0.6.7)

    Дает выбирать контрагентов, только клиентов, а не поставщиков.

    И еще, было бы неплохо, еслибы номер доверенности проставлялся в соответствии с номером заказа поставщику.

    Спасибо.

    Reply
  7. rer
    sbm пишет:

    И еще, было бы неплохо, еслибы номер доверенности проставлялся в соответствии с номером заказа поставщику.

    ну если вам надо могу доточить, но вроде бы Доверенность появилась в конфигурации?

    Reply
  8. Bazy

    Пригодилось спасибо!

    Reply
  9. vas5780

    Пригодилась на работе, от себя большое спасиб, сэкономилось масса времени.

    Reply
  10. n949eo

    Как нет в конфе?

    Reply
  11. n949eo

    точно нет. Почему 1с-ники не выкладывают обновления 11.0.7? обещали еще в начале октября. Где доверенность?

    Reply
  12. Jetoo

    Пригодилась после небольшой доработки. Пришлось добавить поле характеристик. А реквизит «ЕдЕницы измерения» — это сильно! 🙂

    Reply
  13. Kontakt

    Управление торговлей 8.2 11.0.7.13 где довереность, есть ли она вообще? Подскажите как найти доверенность. Где она печатается?

    Reply
  14. mihas1001

    Да, доверенность для УТ 11 не лишнее!

    Reply
  15. aikosyapr

    Заходим в меню администрирование/настройка параметров учета/запасы и закупки/использовать доверенности на получение товаров, и вуаля: доверенность появляется. Функциональные опции такие функциональные

    Reply
  16. rer

    (15) aikosyapr,

    А как давно оно там появилось? На момент написания обработки, доверенности не было в конфигурации.

    Reply
  17. aikosyapr

    (16)

    С версии 11.0.6.7 от 18.03.2011

    Reply

Leave a Comment

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