Печать контактной информации Контрагентов для конфигурации Бухгалтерия предприятия 1.6 и Управление торговлей 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='\

28 Comments

  1. gutentag

    Судя по скриншоту реквизиты из «Контактных лиц» не выводит, а жаль 😥

    Reply
  2. koliaff

    (gutentag) Прикручу скоро, раз так необходимо….)

    Reply
  3. larisab

    Не нашел? А это: http://infostart.ru/public/19387/?

    просто поиском: http://infostart.ru/search/?q=%CF%E5%F7%E0%F2%FC+%EA%EE%ED%F2%E0%EA%F2%ED%EE%E9+%E8%ED%F­4%EE%F0%EC%E0%F6%E8%E8+%EA%EE%ED%F2%F0%E0%E3%E5%ED%F2%EE%E2&­s=%CD%E0%E9%F2%E8

    и все находится.

    Reply
  4. uvetal

    Мда.

    Какая популярная идея, однако …

    Reply
  5. koliaff

    (larisab) Читай внимательно !

    «Искал стандартную печать справочника Контрагенты»

    т.е. в стандартной конфигурации, а не на инфостарте.

    В предложенной тобой обработке данные не группируются по контраенту, а выводятся в несколько строк — не удобно !!! В твоей обработке нет фильтров по незаполненному юр. и физ. адресу, смысл моей именно офильтровать не правильно заполненных контрагентов и разбираться почему какой-то конкретный реквизит не заполнен в базе. А так обработка хорошая, плюс тебе.

    Reply
  6. larisab

    koliaff — я и не говорила, что она лучше, я говорила, что она есть. То что ее надо улучшить — знаю, (все как то не до нее). Речь о том, что до тебя кто-то сделал, то есть увидел эту проблему первый. На Инфостарте много чего плодится в геометрической прогресии, приходят новые авторы и пытаются заявить о себе. Вот при этом заявлении желательно перед выкладыванием «нетленки», провести некое небольшое «патентное исследование» и сослаться на аналоги. Так делают в научном обществе. Одинэсники чаще всего далеки от этого, но это не значит, что стремиться к этому не надо.

    Не хотелось бы, чтобы Инфостарт превращался в банальный файлообменник.

    А твоя обработка мне понравилась — я поставила тебе плюс.

    Reply
  7. koliaff

    (larisab) Я проблему не искал, мне заказчик её нашёл. ) На счет сравнения — ты права. Будем проводить 😉

    На счёт поиска на инфострарте я его тоже делал перед тем, как написать обработку, но не нашёл твоей обработки. Попробуй задать вот такие слова для поиска : «Печать справочника контрагентов». В этом запросе твоей обработки не будет. Тебе надо добавить слово «Справочник» в ОПИСАНИЕ чтобы такие же поисковые запросы находили твою обработку. Удачи.

    Reply
  8. larisab

    (7) Для поиска я взяла название твоей обработки «Печать контактной информации Контрагентов» и он мне выдал 2 наши обработки 😀 😀 😀

    Так что не надо отмазываться 😉

    Reply
  9. koliaff

    (8) Название своей обработки я уже придумывал, когда её написал и выложил. Сама понимаешь, что когда посидел над обработкой, повникал в проблему, уже другие слова подбираешь для названия (поиска), не те, которые бы использовал в самом начале… 😀

    Reply
  10. larisab

    То есть ссылок не будет?

    Тогда замени название на настоящее:

    «Печать справочника Контрагенты для конфигурации Бухгалтерия предприятия 1.6. С наложенными фильтрами.» 😀 Тем более, что из контактной информации взят только адрес.

    Reply
  11. koliaff

    (larisab) Ссылок на твою обработку ? Добавил в описание своей.

    На счет контактной информации — добавлю контактных лиц и телефоны, как обещал gutentag во втором посту.

    Reply
  12. larisab

    (11) Вот и молодец! Теперь будем улучшать каждый свою :). Удачи!

    Reply
  13. koliaff

    (larisab) Я добавил телефоны организации, контактных лиц и их телефоны, твой ход 😉

    Reply
  14. larisab

    А если меня интересуют только телефоны? Мне обзвонить всех надо?

    Reply
  15. koliaff

    Тогда это всё надо к универсальному отчету прилаживать, чтобы выбирать реквизиты которые надо выводить, или воспользоваться твоим отчетом 😉

    Reply
  16. larisab

    (15) Не так все просто в этом соединении справочника и регистра «Контактная информация» и простым отчетом оно не решается 😉

    Reply
  17. koliaff

    (larisab) Согласен, информации много и хранится она в разных местах. Как минимум надо обработать два справочника и регистр сведений…

    Посмотрел запустится ли отчёт в конфигурации УТ 10.3 — не запустился. Там немного другая структура конфигурации. Поэтому пришлось для УТ отдельный отчет написать, выложил отдельным файлом здесь же….

    Reply
  18. voler

    Что то ваш отчет не сильно отличается от штатного УТ. Если уж делать так более развернутый. Добавить в отдельную колонку email, ген.дир.

    Reply
  19. koliaff

    (voler) Отчет изначально предназначался для конфигурации БП, потому что в этой конфигурации воообше нет штатного отчета для печати списка контрагентов с контактной информацией. Я его просто попробовал запустить и в УТ — он не запустился, переделал не много и выложил. Ваше пожелание видеть всё в отдельных колонках реализуется за две минуты. Если действительно надо — сделаю, а если просто для того чтобы отличался от штатного чем-нибудь, то не вижу смысла, т.к. отчет сам писал, внешняя схожесть с типовым — случайность. ) Я типовой в УТ даже не видел 😉

    Reply
  20. Ish_2

    Так держать, Коля !

    Reply
  21. ivan_luzinov

    недавно аналогичную выкладывал 😉

    Reply
  22. koliaff

    (ivan_luzinov) Посмотрел, понравился, плюс поставил 😉 А возможно в твоём отчете сгруппировать по контрагенту так, чтобы все реквизиты его в одну строчку выводились ? А то бумагу жалко 😀

    Reply
  23. pricec

    отличная обработка. Целый час разбирался самостоятельно, потом плюнул и нашел на инфостарте. 😉

    Reply
  24. ivan_luzinov

    (22) не задавался вопросом… думаю СКД позволяет и не такое.. попробуйте поиграться настройками оформления

    Reply
  25. ivan_luzinov

    ввава

    Reply
  26. Osuul

    спс) чуток переделал, совсем хорошо стало

    Reply
  27. Mala2011

    хороший отчетик, нам пригодился, когда понадобилось всех контрагентов распечатать с реквизитами для дальнейшего изъятия задолженности

    Reply
  28. Tallis

    Спасибо, отчет полезный.

    Не понятен принцип сортировки списка.

    Не хватает контактной информации контактных лиц…

    А еще бы подбор списка контрагентов…

    В общем, нам сколько не дай — все мало!))) Совершенства хочется!

    Reply

Leave a Comment

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