МАГАЗЬКА (NR)* — конфигурация для розничного магазина (вариант дизайна)




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

    Новая версия понравилась.

    Порекомендую подруге опробовать на маленьком галантерейном магазинчике.

    Reply
  2. Шёпот теней

    ах … ох … ах, какОй рОзОвый крОлик … прямО душка … вотмилашка …

    Reply
  3. larisab

    Ну тогда вот этого можно

    Reply
  4. Шёпот теней

    … тигр хоть и красив и грозен … но он одинок …

    … розовыйКролик — не только «розовый» но ещЁ и узнаваемый и так хочется взять в «руки» … к тому же он тАкОй «дурасель»-евый …

    … и даже лучше чем военизированная амазонка — всех агрессирующая …

    … отличный рекламный ход … не притязательный но настойчиво безЛичный … брАво … можно поставить в ровень с рекламой «кассирочки» …

    … ПодлецТалантливОрганизованЭнергичен … вОООт …

    … ОДНОЗНАЧНО — одна из лучших рекламных компаний …

    … ПодлецДалекоПойдЁт … ВоооТ …

    Reply
  5. Шёпот теней

    п.с. 1.:

    надеюсь, в рекламных целях, ты будешь постоянно продлевать :

    » Это полнофункциональная демонстрационная версия — ограничение до только по времени до 10.01.10 г.» …

    … дверь всегДА должна быть приОткрытой … вот …

    п.с. 2.:

    у ЧЕ есть несколько обалденных товарных продуктов … но он слишком занят своей работой … зато у него есть чему поучиться и в рекламной компании то же — как продлевать и как привлекать…

    п.с. 3.: великие люди — великие дела …

    п.с. 4.: может пора на ИС сделать «Антологию» или «Онтологию» «Выдающихся Творений»

    … виноватOFFтоп и ЗАпотокСОзнания …

    Reply
  6. GreyK

    То, что штуку берут за програмку ладно, но к этой програмке нужна платформа! Платформу автор оплачивает сам? В качестве фронтов должны работать дешёвые програмки, 1С такое не нужно (все базовые сделаны для печати бланков и ни какого торгового оборудования), т.ч. я лучше заплачу за драйверы для торгового оборудования и програмку которая их поддерживает легально.

    Reply
  7. Арчибальд

    (6) Платформой здесь не торгуют. Предполагается, что у здешних посетителей она есть — иначе, на кой черт их сюда, на одноэсный сайт занесло?

    Приятный, полноценный продукт. «Антикризисное» предложение. Чего еще надо?

    Reply
  8. larisab

    (7) Поддерживаю. Не первая конфигурация выставляется на сайте, вопрос не возникал, в таком случае, резонный вопрос к автору коммента — а для его нетленок кроме платформы еще и конфигурации нужны или их «автор оплачивает сам?» (6) — ниАчем.

    Reply
  9. Дуб

    Блин.. Что-то интерфейс решения подозрительно похож на одну мою программульку…

    Но проверять не стану, ибо даже если и так (что не факт), то не жалко 🙂

    Reply
  10. Happyjack

    При попытке распечатать товарный чек вижу:

    {Документ.Чек.Форма.Модуль(507)}: Неверное имя Чек

    Reply
  11. Дуб

    (10) ну тогда я спокоен — точно не моё :)))

    Reply
  12. Tatitutu

    (9) Окно конфигуратора почти у всех одинаковое. Оно ни мое ни твое — оно Наше

    (10)

    Выполните настройки печати:

    Обработки — Настройка торгового учета — Принтер чеков — Выберите один из трех вариантов ФОРМЫ печти Товарного чека.

    (исправлю, нет проверки на дефолтное значение — один раз поставишь и уже не снимешь) Спасибо.

    Исправил.Проверил.Обновил.

    Reply
  13. Дуб

    (12) я не про окно конфигуратора 😉

    Reply
  14. Fishbond

    Давно ищу простую и удобную конфигурацию для небольшого розничного магазина с большим к-вом товаров. Ента для нас, думаю, как раз. Хорошо продумана с тз розницы.

    Есть вопросы

    — что за отчет «Реестр цен» появляется при нажатие на «прайс-лист». Да и в самом отчете вместо «арт» пишется «наимен.товара». Надо бы поправить.

    -Теперь по ДК. Магазин получает из офиса пачку ДК. Как производиться их учет, каким документоми и как офис получает инфу о движение ДК.?

    Reply
  15. gekz

    Автор, програмка интересная. А есть правила обмена с ТиС?

    Reply
  16. Tatitutu
    -Теперь по ДК. Магазин получает из офиса пачку ДК. Как производиться их учет, каким документоми и как офис получает инфу о движение ДК.?

    в приходной накладной поступают ДК

    при пробитии ЧЕКА (согласно Вашим настройкам программы — просто дисконтая карта или влючена накопительная система скидок) сканируете ДК — запись появляется в чеке (заполняете данные клиента) история сохраняется. При следующей покупке ДК при сканирование — покажет скидку.

    Обмен с офисом настравается по разному (это отдельная тема)

    — при наличии компоненты УРИБ — МАГАЗЬКА (NR) совершенно легко и просто настраивается на автообмен

    (15) Вам отвечу на почту

    — выгрузка загрузка через XML (однотипные базы)

    — выгузка загрузка с ТИС

    Reply
  17. rudev

    то, что я прочел о ней, мне понравилось!!! Осталось только её установить…

    Reply
  18. Tatitutu

    (18) Спасибо. Все проще, чем Вы думаете

    http://www.magazka.narod.ru/ustanovka.htm

    Reply
  19. Fishbond

    (16) Спасибо, за подробный ответ,.

    В говорите, что ДК учитываются в приходной накладной, Согласен, можно и новый справочник можно не заводить — пусть идет как товар, Далее при выдаче сканируется ДК, продавец улыбается, карточка переходит в теплые руки покупателя,, И не ясно каким образом в вашей программе списываются ДК из товарной базы при выдаче их покупателю? А ведь это нужна для контроля 😮

    Ну и со всем обойден момент с Подарочными Сертификатами, А жаль, это бы еще больше увеличило ценность продукта

    Reply
  20. Tatitutu

    Приходная накладная:

    товар : Дисконтные карты с … по ….. шт. кол-во 200 шт.

    далее при выдаче сканируется ДК, продавец улыбается, карточка переходит в теплые руки покупателя,, И не ясно каким образом в вашей программе списываются ДК из товарной базы при выдаче их покупателю?

    Документ «Чек»

    товар : Куртка ….. 1 шт. цена 5200 руб.

    //положена ДК сумма покупки больше 5000 (настраивается Вами порог выдачи)

    товар: Дисконтаная карта №…… 1 шт. цена…..

    документ проводится

    в справочник «Дисконтные карты» попадает новый элемент

    № карта, дата выдачи , сумма покупки и все данные клиента.

    Всегда можно посмотреть историю ДК и покупок.

    Подарочные сертификаты, товар откладывается под залог, учет товара проданного в кредит — будет в 2.0.021 (ориентировочно выход релиза 20.12.09)

    Reply
  21. sasok

    какие модели фр, сканера, тсд поддерживает конфигурация?

    Reply
  22. Tatitutu

    см.http://www.atol.ru/support/programs/

    практически все мне известные. если нужно то парктически любой добавлю

    Reply
  23. Fishbond

    (20) Спасибо, я понимаю что «чек» это расходная накладная, Но надо ведь и в другой магазин сети офис должен передать, что карточка выдана. И покупатель может и там получит скидку.

    Опаа., только сейчас обнаружил, что в этом варианте конфигурации нет обмена с офисом, Или Вы об этом забыли сообщить?

    МАГАЗЬКА (NR) отличается от МАГАЗЬКА (с)

    — отсутствуют учет в разрезе размерного ряда (у товара нет размера)

    — изменен главный интерфейс программы (по желанию предложу Вам 1-3 варианта дизайна на Вашу тему (для зарегистрированных пользователей))

    Нам это, к сожелению, не подходит. 🙂 Хорошо бы вернуть этот обмен.

    Сейчас большенство ИП имеют нескоько точек,а без обмена вы сузили себе рынок.

    Reply
  24. Tatitutu

    (23) Вы лучше спросите, как это настроить ))) чем громогласно так заявлять. все настраивается в программе штатным способом и многие работают с более 3 точек продажи. Автообмен работает на ура…и никто не убирал в этой версии ничего. К чему Вы цитату привели ?

    Только облегчил вариант, а функциональность не пострадала. А рынок только расширяется. Удачи Вам !Это Ваш выбор.

    Reply
  25. bazilisa

    Подарок к Новому году ! Бесплатная регистрация для МАГАЗЬКА

    Скачать тут

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

    Скачайте и насладитесь свободой. Пусть и у Вас будет праздник

    Reply
  26. Д_К

    Обмен с ТиС как-то реализован?

    Reply
  27. Tatitutu

    (26) Да реализован и выгрузка и загрузка

    Reply
  28. Д_К

    подскажите где в демо версии можно попробовать обмен с тис, не найду что-то

    Reply
  29. Tatitutu

    (28) В демо нет этой обработки. Пиши в личку обсудим

    Reply
  30. Fishbond

    (24)Спасибо, и сорри за дотошность. Мне нравиться в программе проработка интерфейса , оригинальность «чека» и настроек, средства анализа продаж и продавцов очень ну и забавны «мастера».

    (16)А вот распределенная база, усложнит использование и администрирование системы. Поэтому обьясните мне,- я не большой специалист по 1с ,- чем лучше УРИБ вместо универсальной выгрузки-загрузки. Или я что-то не понимаю? Но покупать отдельно УРИБ с ключом -это точно не для маленьких магазинов. Да, и дешевый проводной интернет не является надежной средой для передачи файлов, но это уже частности

    С уважением и благодарностью за ваш труд.

    Reply
  31. Tatitutu

    (30) Давайте так, опишите свою задачу (Вы ее знаете я нет)

    сколько магазинов, удаленность,ассортимент, и.т.д и пришлите мне (magazka@narod.ru)

    а я Вам приведу ЗА и ПРОТИВ и подскажу как правильно настроить программу и получать от работы удовольствие. Договорились ?

    Reply
  32. Tatitutu

    Новое в релизе 2.0.025

    Главное событие релиза:

    МАГАЗЬКА(NR) — теперь может использоваться в магазинах, где обязательно нужен размерный ряд (одежда, обувь, аксессуары),

    а также в магазинах без размерного ряда (канцтовары, запчасти, книги, хоз.товара — т.е одноразмерный товар)

    настраивается одним кликом в обработки — Обработка «Настройка торгового учета» — вкладка «По умолчанию»

    Если поставить галочку «Размер — не нужен», то графа «Размер» пропадет во всех объектах конфигурации.

    В документах «Приходная накладная» и «Ввод остатков» — при сканирование НОВОГО товара, а также в формах списка

    Номенклатуры — появилась дополнительная возможность — БЫСТРОГО и самое ГЛАВНОЕ настраиваемого под себя —

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

    таблицу «Последние добавленные элементы» — очень удобно видеть 10-100 позиция недавно добавленного товара.

    Добавилась интеллектуальная проверка размерного ряда у товара (при его выборе или изменении в документах)

    При выборе «Размера» — форма открывается только для просмотра (защита от неправильно добавляемых позиций)

    В справочнике «Номенклатура» на форме списка , добавилась дополнительная информация (настраиваемая)

    Изменены печатные формы у документа «Отчет комиссионера»

    При проведении документа «Возврат товара» и «Возврат брака» — будет автоматически (настраивается) предложен

    заполненный на основании РКО (расходно-кассовый ордер)

    В обработке «Печать этикеток» — появилась опция сохранения настроек пользователя

    Возможность установки не нормированной рабочей смены (несколько смен в сутки) . На главном окне программы

    на вкладке информация — добавлены позиции : период смены, кол-во чеков за смену, средний чек.

    Ввод пароля на главном окне — срабатывает по одному нажатию клавиши «Еnter»

    Reply
  33. trioka

    а программа обновляется как магазька(с)

    Reply

Leave a Comment

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