Расширение для Розница 2.2. Штрихкод, закупочная и розничная цена в списке номенклатуры




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

33 Comments

  1. coolseo

    При прокрутке списка, сильно тормозит?

    Reply
  2. hermit6

    (1) coolseo,

    Скорость прокрутки списка номенклатуры, после установки расширения, не изменяется

    Reply
  3. Kontakt

    Остатки по организации/магазина/склада тоже вывели?

    Reply
  4. romanco

    Розница, редакция 2.2 (2.2.4.17)

    «Ошибка подключения расширения: СписокНоменклатуры (1) — Ошибка свойства РежимСовместимости у объекта»

    Reply
  5. maxon82

    такая же ошибка

    Reply
  6. maxon82

    Кто нибудь объяснит почему не работает Расширение? Исправление ошибки будет?

    Reply
  7. hermit6

    (4) romanco, (5) maxon82,

    актуализировано до релиза 2.2.4.25

    чтобы 1 версия работала на платформе 8.3.8, необходимо в конфигураторе установить режим совместимости расширения на «Не использовать»

    Reply
  8. programer1c

    Остатки и поставщиков видно, по ценам розничная и закупочная столбики появились, но они пустые

    Reply
  9. hermit6

    (8) Проверьте названия типов цен, должны быть «Розничная» и «Закупочная»

    Reply
  10. programer1c

    Да так и называются

    Reply
  11. Protman

    Более универсальное решение не планируете? Чтобы расширение само выбрало из справочника какое «название типов цен» используется при поступлении и соответственно при продаже.

    Проблемы с актуальной версией Розницы 2.2.5.27* существуют?

    Reply
  12. xeephon

    Обновление на 2.2.6+ планируется?

    Reply
  13. hermit6

    (12) Принципиальных изменений в объектах конфигурации, которые затрагивает расширение, не было, поэтому прекрасно работает на последних релизах.

    Reply
  14. ivanmotyan

    (13) Александр, подскажите, а как выбрать конкретный вид цены? Как я понял, то через интерфейс никак, а какое поле в обработке редактировать, чтобы написать свое значение, вместо «Розничная цена»?

    Reply
  15. hermit6

    (14) В Форме справочника номенклатуры можно изменить названия типов цен.

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

    Reply
  16. ivanmotyan

    (15) менял, но что-то не получилось у меня, как будто не там это делал, хотя на всю обработку это единственное место, где вообще есть слово «розничная».

    Спасибо. Ждём)

    Reply
  17. user635667

    (15) ждем выхода. чет я не понял где поменять. у меня все работало на 2.2.5.27. а потом скачал новую для 2.2.6.33 и теперь цену Розничную не показывает. вообще сделайте какое-нибудь настроечное поле, где можно выбрать магазин и вид цен. а то вот у меня два магазина и два вида цен. что в итоге будет показано в справочнике?

    п.с. в той же Рознице 1.0 вроде было такое, выцставлялась организация, магазин и цены и потом там все показывалось. сейчас я так понимаю расширение показывает общий остаток на всех складах и только цену которая называется «Розничная цена»?

    Reply
  18. ivanmotyan

    (17) будут показаны виды с названиями «Розничная» и «Закупочная»

    Reply
  19. hermit6

    (17) Учтено в новой версии. Остатки и цены выводятся по текущему магазину

    Reply
  20. Newdjeen

    (19) Расширение не работает в 2,2,7 кто виноват и что делать? 🙁

    Reply
  21. hermit6

    (20) Изменений не много, нужно открыть расширение в конфигураторе и удалить лишние объекты, которые укажет программа.

    В ближайшее время выложу исправленную версию

    Reply
  22. hermit6

    (20) Проверил на 2.2.7.32. Все работает.

    Reply
  23. Newdjeen

    (22) в конфигураторе снял режим совместимости и все заработало

    Reply
  24. omenfarsh

    Работает отлично. Спасибо. Единственное что… Не показывает остатки, если ведется учет по 2 юр.лицам. Было бы отлично, если можно было выбирать склад в данной форме. Или при открытии списка номенклатура, чтобы выводилось окно с выбором склада, так даже проще для реализации)))

    Reply
  25. ivanmotyan

    Здравствуйте!

    Каким образом можно получить обновление?

    Reply
  26. hermit6

    (25) Здравствуйте, скачать последнюю версию можно в заголовке этой публикации

    Reply
  27. ivanmotyan

    (26) Это в течении месяца, а дальше снова за SM. Некоторые делают рассылку на e-mail с обновлениями, вот подумал, что и у вас такое возможно

    Reply
  28. ivanmotyan

    С Розницей 2.2,9,20 работает нормально? Прошлые версии работали, но в итоге выяснилось, что периодические ошибки были из-за обработки (после отключения сразу пропали)

    Reply
  29. hermit6

    (28) Расширение работает у 10ка клиентов, под разными версиями Розницы 2, ни где проблем замечено не было

    Reply
  30. ivanmotyan

    (29) ну, как. В одной из версий розницы использовал обработку конкретно под эту версию и все было хорошо. Со временем сделал пару обновлений вместе с обработкой. Обработка функционировала, но стали появляться некритичные для работы ошибки в местах, например в егаисе (что странно) и прочих. Я все грешил на обновление.

    Пришло время установить обработку во второй магазин с такой же новой версией 1С как и в прошлом, на что обработка сказала, что работать не хочет. В первом магазине обработку выпилил так же, после чего, к моему удивлению, ранние ошибки пропали. Вот потому и спрашиваю на всякий случай. К сожалению, никакой конкретики по поводу версий и мест ошибок не предоставлю, т.к. версии стары, забыты, да и обработка устарела на текущий момент.

    Напишите, пожалуйста, на почту. У меня вопрос по поводу обработки есть. мойник/собака/mail.ru

    Reply
  31. hermit6

    (30) Расширение актуально, там нет привязок к конкретной версии 1С:Розницы, версии под разные платформы(при изменении требований к совместимости расширений в самой платформе) я публикую. Расширение которое меняет запрос в форме списка номенклатуры не может влиять на работу Егаис(тут все же причину нужно искать на вашей стороне). По поводу отказа расширения работать, проверьте что скачали верную версию, если ошибка сохраняется пришлите скриншот ошибки.

    Если будут конкретные замечания по работе расширения пишите в ЛС, с указанием релиза Розницы, номером платформы и сценарием при котором происходит ошибка желательно со скриншотами, исправлю и выложу новую версию.

    Reply
  32. ivanmotyan

    Здравствуйте. Вариант для 2.2.11 стоит ждать?

    Reply
  33. hermit6

    (32) Здравствуйте. Выложил обновление для версии 2.2.11(протестировал на 2.2.11.16)

    Reply

Leave a Comment

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