Прайс-лист для УТ 11




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

46 Comments

  1. corrambus

    Планируется ли возможность отбора по группам номенклатуры?

    Reply
  2. Romankhv7

    Очень грустно что в 1с прайс лист стандартный очень кривой.

    То что нету отбора по номенклатуре это делает этот прайс ненужным.

    Reply
  3. fialka_55@mail.ru

    А можно поменять коды на артикулы в прайс, или совместно коды и артикулы

    Reply
  4. orientir1C

    (1) corrambus, Отбор добавлен.

    Reply
  5. orientir1C

    (2) Romankhv7, (4) fialka_55@mail.ru, Добавлен отбор и вывод кода и артикула.

    Reply
  6. indozuh

    Возможно ли добавить функцию выделения цветами товаров из новых поступлений? Например, синим выделяем товары, которые поступали на склад за последнюю неделю, а желтым выделяем новинки, которые были в этих поступлениях.

    Reply
  7. vvvalera

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

    Reply
  8. comrade@mail.ru

    (8) vvvalera,

    Нет не работает на УТ 11.2 ошибка

    Неверные параметры «Справочник.УпаковкиНоменклатуры.ПустаяСсылка»

    КОГДА ЦеныНоменклатурыСрезПоследних.Упаковка = ЗНАЧЕНИЕ(<<?>>Справочник.УпаковкиНоменклатуры.ПустаяСсылка)

    В 11.2 изменили справочник УпаковкиНоменклатуры на УпаковкиЕдиницыИзмерения нужно заменить.

    Reply
  9. orientir1C

    (9) comrade@mail.ru, Ошибка исправлена, теперь прайс работает в УТ 11.2

    Reply
  10. ua9

    Некорректно отображает номенклатуру в группе верхнего уровня, если есть подгруппы.

    Reply
  11. orientir1C

    (11) ua9,

    Прошу более подробно пояснить что не работает, исправлю. (пишите в личку)

    Reply
  12. andrey-00

    Привет. Помогите разобраться, вот такая ошибка при вызове.

    {Обработка.ПрайсЛистУТ11Ориентир.Форма.Форма.Форма(690,20)}: Переменная не определена (УправлениеПечатью)

    ТаблицаФорматов = <<?>>УправлениеПечатью.НастройкиФорматовСохраненияТабличногоДокумента();

    {Обработка.ПрайсЛистУТ11Ориентир.Форма.Форма.Форма(715,78)}: Переменная не определена (ЭтотОбъект)

    ПутьВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные, <<?>>ЭтотОбъект.УникальныйИдентификатор);

    {Обработка.ПрайсЛистУТ11Ориентир.Форма.Форма.Форма(733,76)}: Переменная не определена (ЭтотОбъект)

    ПутьВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные, <<?>>ЭтотОбъект.УникальныйИдентификатор);

    Что это может значить?

    Reply
  13. orientir1C

    (13) andrey-00,

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

    Reply
  14. heruvim76

    А печать прайса только через меню Файл??

    Reply
  15. heruvim76

    И еще, можно ли подвязать данную обработку в ут 11 базовая?? чтобне вызывать ее постоянно через файл-открыть

    Reply
  16. Rodnaya

    {Форма.Форма.Форма(551,2)}: Ожидается оператор препроцессора

    #<<?>>Область ОтправкаПоЭлПочте

    {Форма.Форма.Форма(800,2)}: Ожидается оператор препроцессора

    #<<?>>КонецОбласти

    1С:Предприятие 8.2 (8.2.19.130)

    Управление торговлей, редакция 11.1 (11.1.2.9) (http://v8.1c.ru/trade/)

    Copyright © ООО «1C», 2003-2013. Все права защищены

    (http://www.1c.ru)

    Reply
  17. Rodnaya

    {Форма.Форма.Форма(715,78)}: Переменная не определена (ЭтотОбъект)

    ПутьВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные, <<?>>ЭтотОбъект.УникальныйИдентификатор); (Проверка: Сервер)

    {Форма.Форма.Форма(733,76)}: Переменная не определена (ЭтотОбъект)

    ПутьВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные, <<?>>ЭтотОбъект.УникальныйИдентификатор); (Проверка: Сервер)

    {Форма.Форма.Форма(556,29)}: Тип не определен (ОписаниеОповещения)

    ОписаниеОповещения = Новый <<?>>ОписаниеОповещения(«ОтправитьПечатныеФормыПоПочтеНастройкаУчетнойЗаписиПредложе­на», ЭтотОбъект); (Проверка: Тонкий клиент)

    Reply
  18. Rodnaya

    ПОЧЕМУ ЭТО ПЛАТНАЯ ОБРАБОТКА ЕСЛИ ОНА СОДЕРЖИТ ОШИБКИ!?

    Reply
  19. orientir1C

    (19) Rodnaya, Эта обработка написана для платформы 1С версии 8.3.

    Reply
  20. polo453

    возможно добавление доп. реквизитов в колонки прайса?

    Reply
  21. orientir1C

    (21) polo453, Нет добавление доп.реквизитов не предусмотрено, нужно дорабатывать.

    Reply
  22. AntonB

    Некорректно выводятся штрихкоды УТ11.2 (11.2.3.202). Если у номенклатуры несколько штрихкодов, например несколько упаковок , прайслист не учитывает единицы измерения и показывает первый попавшийся. Было бы неплохо, чтобы поиск штрихкода выполнялся бы с учетом упаковки и Характеристики

    Reply
  23. Dimul555

    Остаток выводится с учетом резерва или без?

    Reply
  24. orientir1C

    (24) Остаток выводится за минусом зарезервированного.

    Reply
  25. ktibo

    Здравствуйте, в формат docx список номенклатуры выводится с иерархией по группам? Как на скриншотах?

    Reply
  26. user619890_igorlint

    на 11,3,2,157 будет работать?

    Reply
  27. Razved4ik

    При выгрузке в ексель на 11.2 выдаёт ошибку — недопустимая строка с указанием класса.

    Reply
  28. serjik898

    Добавьте пожалуйста «Сохранить файл» и автоматический расчет суммы заказа! Спасибо!

    Reply
  29. AlexanderP

    (25)в таком случае неплохо бы настройку «выводить с учётом резервов и без».

    И очень удобно, думаю, было бы стандартное отображение иерархии с возможностью сворачивания и разворачивания групп.

    Ещё — количественные итоги по иерархии.

    Reply
  30. user793494

    Хорошая красивая обработка. Скажите пожалуйста, как вывести столбец суммы наличия товара по складам? А то как то не хочется, чтобы клиенты видели названия складов. Или может возможно добавить галочку, чтобы выводились не склады, а общая сумма по выбранным складам. Спасибо

    Reply
  31. user793494

    Подскажите как вывести товары с характеристиками?

    Reply
  32. reg063

    Добрый день! Вывод характеристик планируется?

    Reply
  33. kbg

    на 11.3 работает или нет ?

    Reply
  34. evgen.a

    Вообще не нужный отчет еще и 2 р. стоит ни настроек ни характеристик аааа!!!!

    Reply
  35. alex_a_k

    Очень нехватает отбора по виду номенклатуры (не группе)!

    Reply
  36. orientir1C

    (36) Отбор по видам номенклатуры добавлен

    Reply
  37. alex_a_k

    Спасибо.

    Пользуюсь отчетом не как прайс-листом, а как совмещенным отчетом по товарам на складах + оценка стоимости.

    Очень помогает для выявления несостыковок.

    По этому еще пара пожеланий на будущее:

    1. Неплохо было бы выводить в разрезе по складам не только количество, но и итоговую сумму (ща приходится делать это в excel).

    2. Добавить колонку единиц измерения (хранения).

    3. Иногда нужно вывести только отсутствующие товары.

    4. Иногда только с ценой или без цены.

    5. В идеале лучше иметь возможность выводить 4 варианта комбинаций пунктов 3 и 4:

    — товары с остатками, но без цены;

    — с ценой, но без остатков;

    — с ценой и остатками;

    — без цены и остатков;

    Если бы реализовать эти плюшки, то вашпе не было бы цены вашему отчету!

    Он бы шагнул далеко за конценцию прайс-листа даже, продвинутого! ))

    Reply
  38. 1c_uZer

    скажите а можно как-нибудь сохранить в excel и чтобы отображались группировки? ну чтобы можно было ненужную группу например свернуть.

    Reply
  39. mrdc

    Имхо, без характеристик — это бесполезная вещь в УТ.

    Reply
  40. Ali1976

    Добрый день, наличие выводится с детализацией по складам или без?

    Мне нужны общие остатки(одной цифрой) по нескольким складам ваш отчет это позволяет?.

    Reply
  41. simuljakr

    Скажите, а есть ли возможность сохранить ваш прайс в файл эксель на несколько отдельных листов (Лист1, Лист2, Лист3 и т.д. внутри одного файла эксель)?

    Чтобы каждая группа номенклатуры выгружалась на отдельный лист?

    Reply
  42. orientir1C

    (43) Нет такой возможности нет, нужно дорабатывать

    Reply
  43. sergey1342

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

    При попытке отправить прайс выдаётся ошибка «Индекс находится за границами массива».

    Reply
  44. valerij1257

    Добрый день! Есть возможность рассылки прайс-листа на емейл по регламентному заданию?

    Reply
  45. orientir1C

    (46) Добрый день! Такой возможности нет, требуется доработка.

    Reply
  46. user666182_maso-06

    учитывает скидки наценки?

    Reply

Leave a Comment

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