Печать прайс-листа с картинками для УТ 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='\

38 Comments

  1. Pashkaa

    Малехо кривовато отображает картинки, т.к. не соблюдаются пропорции исходного изображения, а так все отлично работает 🙂

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

    Reply
  2. slavabv

    Да, соблюсти бы пропорции — было бы супер.

    Reply
  3. Vitaslon

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

    Reply
  4. vvsokolov

    (3) поправил

    Reply
  5. Vitaslon

    (4)

    там ещё есть косячок

    картинка к концу прайса сьезжает пикселей на 7

    вначале это незаметно но чем дальше тем больше сьезжает

    Reply
  6. Waldorf

    Прикольно)Спасибо за доработку! 🙂

    Reply
  7. Stifler86

    Спасибо за обработку. Что нужно сделать, чтобы картинка вставлялась только для каждого наименование товара, а не для каждого наименования и для каждой характеристики этого наименования, а то просто жесть получается. И еще там где нет картинки, обработчик вставляет рамочку под картинку, при этом прайс получается объемным, да и вообще выглядит не эстетично. Я подозреваю что это простые вопросы, но так как я не бум-бум в этом деле, поэтому спрашиваю)))

    Reply
  8. Artur0588

    Спасибо за полезную программку. Не аодскажете как сделать, чтобы ячейка где нет картинки была меньшего размера. Очень надо. Когда формирую EXEL документ, то он получается огромного размера(в мегабайтах).

    Reply
  9. бухгалтер28

    Скажите а как загрузить это приложение у мея не получается. 😳

    Reply
  10. бухгалтер28

    Здравствуйте помогите пожалуйста. Очень долго пользовались данной программкой, но вот на прошлой неделе нам поменяли релиз в «УПРАВЛЕНИИ ТОРГОВЛЕЙ» и теперь у нас «Управление торговлей»8.2 , редакция 10.3 (10.3.13.2) и это приложение не работает. Что делать?????? у меня истерика начинается и надо это срочно срочно срочно… ПОМОГИТЕЕЕ.

    Reply
  11. бухгалтер28

    Программа выдает ответ: Ошибка загрузки документа. Внешняя обработка не может быть прочитана текущей версией программы.

    Reply
  12. Поручик

    (11) Не решили проблему? На самом деле проблема не стОит истерик и выеденного за завтраком яйца.

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

    Reply
  13. Arhh

    (9) бухгалтер28, можно просто перетащить файл обработки на открытую 1с-ку или в 1с выбрать Файл — Открыть и найти данную обработку.

    P.S.:

    Спасибо автору за обработку!:)

    Reply
  14. cafeit

    То что нужно. У кого не работает — открываем через конфигуратор, обновляем и сохраняем

    Reply
  15. cafeit

    Только не пойму, как поменять сам шаблон прайса. И можно ли вообще?

    Reply
  16. vvsokolov

    (15) cafeit,

    В конфигураторе — закладка «Макеты», там макет, его можно менять

    Reply
  17. cafeit

    (16) altair1, спасибо

    Reply
  18. EugeneR1c

    Благодарю!

    Reply
  19. ratter

    Под свои задачи немного доработать пришлось. Разработка понравилась. Спасибо.

    Reply
  20. M-joy85

    Последнее время очень востребованная обработка для торгашей! Мне очень помогла, поднастроил ее под конфиг. «1С:Управление торговлей 8 для Украины» (платформа 8.2). Плюс.

    Reply
  21. sergson1

    Давно искал большое спасибо автору

    Reply
  22. vas5780

    Спасибо автору, активно пользуюсь.

    Reply
  23. nav1971

    Спасибо! Помогло очень!

    Reply
  24. McKeane

    Хорошая обработка, но я ее не могу сачать… 🙁

    Reply
  25. extremehelp

    Давно искал большое спасибо автору, активно используем в работе. Под торговлю алкоголем и другие задачи немного пришлось доработать. Отличная обработка. Спасибо. Плюсанул.

    Reply
  26. xalker

    Плюсанул. Спасибо 🙂

    Reply
  27. CrazyTetra

    а под какой конфигурацией тестировалась крайний раз?

    Reply
  28. edeez

    А под комплексную автоматизацию адаптировать возможно?

    Reply
  29. agulaev

    Спасибо! Плюсанул.

    Reply
  30. Andre_ultra

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

    Reply
  31. vlanik

    Хорошая и полезная обработка, все просто и наглядно. Спасибо автору.

    Reply
  32. utoys

    Обработка хорошая, с небольшим допилом пользуемся. Однако актуален вопрос уменьшения размера файла прайса при сохранении в Excel. Может есть идеи как уменьшить размер картинок при формировании прайса?

    Reply
  33. letchik2000

    Есть ошибка.

    При выборе «Использовать свойства и категории» и отбору по категориям выпадает ошибка: {ВнешняяОбработка.ПечатьПрайсЛиста.МодульОбъекта(66)}: Ошибка при получении значения атрибута контекста (Результат)

    РезультатЗапроса = ПостроительОтчета.Результат;

    по причине:

    {(242, 2)}: В запросе с предложением РАЗЛИЧНЫЕ все поля, по которым происходит упорядочивание, должны присутствовать в списке выборки

    <<?>>ЗапросПрайс.ЦеноваяГруппа.Порядок,

    Reply
  34. up_server

    Есть ли возможность редактировать размер изображения?

    1 редактировать размер в мегабайтах?

    2 редактировать размер ячейки в прайсе

    и у номенклатур, у которых нет картинки получается высокая строка?

    Reply
  35. olia.moo

    Написано, что бесплатно, а при попытке скачать деньги просит 🙁

    Reply
  36. user844451

    Как скачать эту обработку, не совсем разобрался на Вашем сайте, вроде же написано что БЕСПЛАТНО!?

    При нажатии на кнопку, выдает заявку на установку, вообще таки сам могу установить, как скачать!???

    Reply
  37. Colonel74

    Неплохо, только вот бух жалуется, что не может группу выбрать для отбора. Только конкретный товар можно выбрать. Пробует выбрать товар и задать параметр «В группе» и все равно формируется прайс из одного этого конкретного товара. Может она что-то не так делает? Как можно в отбор группу товаров выбрать?

    Reply
  38. deutsch2008

    Вадим, приветствую! подскажите, пожалуйста, а что это за пустое поле? Как его убрать? См. вложение…

    Заранее благодарен за ответ!

    Reply

Leave a Comment

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