Полный ценник




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

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

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

<?php // Полная загрузка сервисных книжек, создан 2025-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='\

27 Comments

  1. avi88

    Самый универсальный ценник, на который выводится всё (наименование, код, артикул, страна производитель, единица и штрих-код). Я думаю, больше нечего выводить на ценник, это финал! только для Торговля и склад 7.7 (9.2) гарантирую его работу!

    Перейти к публикации

    Reply
  2. CheBurator

    abu вам а не плюс… где скриншот ценника для примера?

    Reply
  3. Ёпрст

    Для бухии не взлетит:

    ПечРозн = глФРМ<<?>>(ТаблицаТоваров.Цена, ТаблицаТоваров.Валюта);

    {D:BASEБУХНЯUPDATE1SBBDEMOEXTFORMSPRNFORMSCENNIC_POLNII.ERT(67)}: Функция не обнаружена (глФРМ)

    глОживить<<?>>(1);

    {D:BASEБУХНЯUPDATE1SBBDEMOEXTFORMSPRNFORMSCENNIC_POLNII.ERT(74)}: Процедура не обнаружена (глОживить)

    Reply
  4. vovan519

    На счет финала не понял. А у нас на ценнике еще длина, ширина, высота и цвет. А в соседней конторе еще длина, глубина, высота, материал и кол-во предметов. Так что еще будет ценников красивых и разных. И у Ёпрст место на винте закончится, а ценники на инфостарте все будут и будут прибавлятся. 🙂

    Reply
  5. avi88

    Вы лучше плюсуйте а не сплетничайте а если туда добавить длину, ширину, высоту и цвет то это этикетка будет а ни ценник.

    Reply
  6. vkr

    (2) Фсё взлетит — и с бассейном. и с баром, и с дискотекой… 🙂

    Токо указанные подпрограммы из ТиС аккуратно скопипастить в саму обработку…

    И рашпилем слегка подработать… 🙂

    У меня в Бухии 5.02 щаз взлетело.

    (4) А слабО голограмму пришпандорить ??? 🙂

    Reply
  7. Leva2000

    ((( при попытке вывести на печать ваш ценник из документа «поступление в розницу», выпадает окошко «Не выбран товар или группа товаров!» ((((

    Конфа ТиС 9.2 7.70.948

    ……а вы грите все просто и гарантировано….(((((((

    Reply
  8. busiko

    мда пипец группа товаров

    Reply
  9. busiko

    прошу прощения у автора всё работает

    могу посоветовать

    Сервис дополнительные возможности и изменить внести в список

    а файл поместить в папку extforms

    Reply
  10. BGN_1cer

    Может быть автор подскажет, как в этот ценник можно добавить основное свойство номенклатуры, чтоб он был еще универсальнее))))

    Reply
  11. SV22

    как вписать его в 1с уменя нету папки PrnForms

    Reply
  12. avi88

    Должна быть по умолчанию в папке DB попробуй поиском по компу найти папку PrnForms!

    Можно в Режиме конфигуратор в конфигурации > обработки правой кнопкой мыши {вставить внешний отчет или обработку} и указать путь к файлу, потом зайти в интерфейсы и прописать в меню!

    Reply
  13. Infernal_Rain

    «при попытке вывести на печать ваш ценник из документа «поступление в розницу», выпадает окошко «Не выбран товар или группа товаров!»

    Так как все таки прописать этот ценник что бы из приходных документов можно было печатать?

    Reply
  14. avi88

    Просто прописываете внешней обработкой печати ценников и должен работать

    Reply
  15. Infernal_Rain

    Не работает.

    Reply
  16. avi88

    я незнаю у меня все работает ТиС 7.7 9.2

    и с таким вопросом еще ни кто не обращался возможно у вас чтото не так

    Reply
  17. Infernal_Rain

    Как же не обращались когда в 6 сообщении человек задавал такой же вопрос…

    А что у меня может быть «не так»? Поставил «с нуля» типовую конфигурацию 7.70.960 ред.9,2

    Прописал во внешних формах файл ценника. С номенклатуры печатать можно. Один ценник. А с приходного документа, например, распечатать все ценники не дает. Выводит указанное выше сообщение

    Reply
  18. фюра

    Работает только через кнопку действия, обновления цен в справочнике. При этом выдает сообщение:

    Значение не представляет агрегатный объект (Text)

    Reply
  19. АМЮ

    Ничего не получается помогите… нажимаю в справочнике наменклатуры на кнопку ценник полный вот что выдает ПечРозн = глФРМ<<?>>(ТаблицаТоваров.Цена, ТаблицаТоваров.Валюта);

    {C:PUBEXTFORMSPRNFORMSCENNIC_POLNII.ERT(67)}: Функция не обнаружена (глФРМ)

    глОживить<<?>>(1);

    {C:PUBEXTFORMSPRNFORMSCENNIC_POLNII.ERT(74)}: Процедура не обнаружена (глОживить)

    Reply
  20. avi88

    У тебя наверо не та конфигурация она для Торговля и склад 7.7 (9.2)

    Reply
  21. CheBurator

    требуется из конфигурации ТиС 9.2 скопировать в глобальный модуль

    упомянутые процедуры/функции глФРМ и глОживить и в глобальном модуле описать глобальную переменную глЧислоСтрок — вроде так называется

    Reply
  22. sshergin

    А нельзя сделать печать через накладную? Зачем мне весь товар, мне из накладной только нужно…

    Reply
  23. Olegir

    У меня всё работает из всех предусмотренных документов и обработок. Спасибо. Один вопрос к автору: что нужно сделать, чтобы он выводил на печать американский (из двенадцати цифр) стандарт штрих-кода UPC?

    Reply
  24. кочеткофф

    У МЕНЯ ПРОБЛЕМА: ВЫВОДИТСЯ НА ПЕЧАТЬ ТОЛЬКО 13 ЗНАЧИМЫЙ КОД

    Reply
  25. avi88

    стандарта штрих-кода UPC надо разрабатывать новый модуль и добавлять шрифты в операционку, в общем в данном ценнике это невозможно. Сам 1с с ними не дружет! ❗

    Reply
  26. kng67

    ТиС 9.2 Подключила ценник. Работает нормально. Спасибо!

    Reply
  27. levoven

    У меня тоже всё работает из всех предусмотренных документов и обработок. Спасибо.

    Reply

Leave a Comment

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