Печать прайс-листа с картинками для УТ 10.3




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2026-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 не будет опубликован. Обязательные поля помечены *