Рабочее место кассира 1С:Розница 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='\

79 Comments

  1. zeusius

    поддержка будет какая нибудь?????

    Reply
  2. Vlx

    (1) Загрузку в формате атол выложу, но позже.

    Могу на электронку кинуть.

    Reply
  3. Vlx

    (1) Выгрузка в формате атол лежит сдесь:

    http://infostart.ru/public/646123/

    Что бы заработала в РМК, необходимо обработку выгрузки подключить в Дополнительных отчетах и обработках.

    Reply
  4. Vlx

    В РМК еще используется обработка по свертке данных. Сделана на основе стандартной свертки. Запускается ежедневно при первом запуске. Ее тоже выложу позже.

    Reply
  5. letta

    Загрузка справочника товаров из внешней системы и выгрузка отчета о продажах есть?

    Reply
  6. Vlx

    (5) Именно загрузки справочника товаров нет. Есть обмен в формате атол. Ссылка на выгрузку в (3)

    РМК это обработка к Рознице, поэтому ничто не мешает использовать любые обмены с внешней системой.

    Reply
  7. borodatii
    1) Только положительные остатки

    Зачем на фронте вообще думать об остатках? Если кладовщик не успеет внести накладную или создаст пересортицу, то кассир не сможет продать товар, который по факту есть в наличии.

    Reply
  8. Vlx

    (7) Ситуации могут быть разные. Например:

    Аптека. Приходит бабушка и спрашивает: а такие-то таблетки есть? Фармацевт бежит к шкафу смотрит — есть такие. Бежит обратно кричит бабушке: есть. Бабушка в ответ: а цена какая? Фармацевт опять бежит и смотрит. Бежит обратно. Затем бабушка захочет подешевле, не одну а две упаковки. И т.д.

    Что бы не бегать нужны реальные остатки.

    Reply
  9. Vlx

    (7) Использую так же связку БГУ+Розница. В БГУ нет полноценного учета розничных продаж. Поэтому в Рознице эта галка очень помогает..

    Reply
  10. borodatii

    (8) Я и не говорил, что остатки не нужно показывать (хотя когда кассиры же проводят инвентаризацию, то остатки им не показывают, чтобы они результат под программу не подгоняли). Я просто в только положительных остатках смысла не увидел: кассир ведь не вручную список товаров прокручивать будет, что ему товары без остатка будут мешать?

    Reply
  11. Vlx

    (10) Если на данном скрине еще добавятся товары с нулевым остатком, то мне кажется будут мешать.

    Reply
  12. borodatii

    (11) Главное, чтобы продавец знал, что в случае чего — стоит и без галочки «Только положительные остатки» поискать.

    Reply
  13. user627833_denic.blinov

    (4)Юрий выложите пожалуйста обработку для свертки данных.

    Reply
  14. Vlx

    (14)выложил

    Reply
  15. Sokolovsl

    Юрий, добрый день. Ваша обработка будет работать в Рознице 2.2.6.30-33?

    Reply
  16. Vlx

    (16) Не проверял.

    Reply
  17. wake

    Скачал Вашу обработку, идея понравилась, но:

    1. Почему в нижней таблице не выводится характеристика? У нас аптеки, характеристика содержит цену, серию и срок годности и продавцу важно их видеть.

    2. Если у товара несколько характеристик, а на остатке есть только с одной то в подбор попадают все см. скриншоты.

    3. Не существенно, но все же. Обработка регистрируется, но не работает (моргает окно формы и все). Работает только через файл-открыть. Платформа 8.3.10.2466, конфигурация 2.2.6.33

    Reply
  18. Vlx

    (18) Затрудняюсь ответить.

    Характеристики общие или индивидуальные?

    РегистрСведений.ЦеныНоменклатуры по данной номенклатуре можно выложить?

    Или может базу выложите и ссылку дадите?

    Reply
  19. Vlx

    (18) К сожалению не могу сказать почему у вас так характеристики выводятся. Нужна база. Прикрепил свои скрины.

    Reply
  20. user620079_alko-pskov

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

    Reply
  21. Vlx

    Какой именно выбор?

    Reply
  22. user620079_alko-pskov

    Извините не внятно выразился, возможно ли изменить РМК , при внесении в поле цифр это был бы заранее известен программе что поиск происходит по артикулу, кассир набрал 4 вводит Enter, товар с заданным артикулом сразу добавляется. Далее сразу вводит следующий артикул, после подтверждения товар снова добавлен, поиск по наименованию, цене, ШК остается так же через горячие клавиши. У нас столовая и в обеденное время немалый людской поток, кассир знает артикулы товара и ему необходимо как можно меньше движений при выборе товара

    Reply
  23. Vlx

    (23) А чем не устраивает ввести артикул и нажать F6?

    Кассиру надо нажать то же самое количество клавиш, что и с вариантом «Enter».

    Reply
  24. user620079_alko-pskov

    Хотелось бы ускорить ввод артикула, ввести в поле артикул, нажать допустим Enter (или любую клавишу на цифровой клавиатуре) и товар сразу попадает в чек, без дополнительного открытия окна поиска ..т.е. кассир вводит — цифровой код артикула — Enter — цифровой код артикула — Enter, тем самым увеличивая скорость введения товаров в чек, что очень актуально при потоке людей в обеденное время

    Reply
  25. Vlx

    (25) Вам нужно добавлять товар без ввода количества и открытия формы подбора товаров.

    В моей обработке этого нет.

    Reply
  26. user620079_alko-pskov

    Все равно хорошо сделано, спасибо,

    Reply
  27. belyavsky

    поддерживаю, не отображаются характеристики, в настройках характеристики индивидуальные для номенклатуры. РС Цены номенклатуры прикладываю

    Reply
  28. Vlx

    (28) В предыдущий раз была проблема:

    «нижняя таблица неправильно отображается если у магазина заполнен реквизит «Вид минимальных цен продажи».

    Reply
  29. belyavsky

    (29) все в порядке с минимальным видом цен продажи

    Reply
  30. belyavsky

    и еще очень не хватает редатирования текущей строки с изменением упаковки

    Reply
  31. Vlx

    (28) «не отображаются характеристики» — имеете ввиду не выводится наименование характеристики?

    Reply
  32. belyavsky

    (32) да наименование, ну и срок годности.

    Reply
  33. Vlx

    (33) наименование характеристики не выводится и выводится не будет.

    Срок годности, изготовитель, сертификат, серия и т.д. можно сделать через допреквизиты.

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

    Reply
  34. Myxa

    Добрый день! Подскажите пожалуйста, а в данной обработке в итоге реализован механизм внесения денег в ККМ без создания РКО?

    Спасибо!

    Reply
  35. Vlx

    (35) Да, внесение сделано без РКО.

    Reply
  36. chingis.quiz

    Добрый день! Скачал доработку, версия розницы 2.2.6.33. не могу удалить подобранный товар (

    Reply
  37. Vlx

    (37) Выделить строку и нажать Delete.

    Reply
  38. CrimeanWind

    Добрый день.

    Может подскажете как в РМК Розницы добавить «Позиций» и Итого количество, как у вас в РМК?

    С полями и реквизитами понятно, а с кодом беда, знаний не хватает)

    Спасибо

    Reply
  39. wZzzp

    Добрый день, Сие чудо работает с ЕГАИС?

    Reply
  40. wZzzp

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

    Reply
  41. Vlx

    За основу взят стандартный РМК из Розницы 2.2.5.

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

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

    Что касается ЕГАИС, работы с оборудованием, то эта часть меня не особо интересовала и осталась так как есть.

    Reply
  42. Vlx

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

    Я предложил использовать Розницу в качестве Front-office. И формат обмена будет Атол, но другой.

    Reply
  43. ppdron

    (33) Для добавления характеристик в нижней табличной части достаточно включить видимость для элемента «ТаблицаОстаткиЦеныТоварыРасширениеХарактеристика» в табличной части «ТаблицаОстаткиЦеныТоварыРасширение» формы «ФормаПодборТовары» и все ок

    Reply
  44. ppdron

    Подскажите как отменить поиск в окне подбора. ввожу фрагмент ШК нажимаю «Штрихкод (фрагмент) Ctrl+F9», товар отбирается, а назад сбросить отбор не могу. Как это сделать?

    Кнопка «Очистить поиск» не работает

    Reply
  45. Vlx

    Можно нажать Esc, окно подбора закроется и повторить поиск.

    Или в окне подбора ввести новое значение для поиска и нажать горячую клавишу (Ctrl+F9 или другую в зависимости от того что ищите).

    Reply
  46. Gtli

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

    Reply
  47. ppdron

    (46) если ошибочно был введен не тот шк. То после очистки при вводе правильного шк (или при использовании любого другого поиска) поиск осуществляется в отобранном ранее (неправильном списке). Т.е. фильтр не очищается. При аналогичных операциях с другими вариантами поиска фильтр очищается. Это реальный баг обработки. неудобно открывать и закрывать окно подбора

    Reply
  48. egor32as

    такой вопрос возник

    я правильно понимаю, что он показывает остатки по организации, а не по магазину, по которому выбран в кассе ккм?

    Reply
  49. Vlx

    (49) Да.

    Reply
  50. ppdron

    В обработке не работает поиск дисконтной карты по ФИО. Это будет исправлено?

    Reply
  51. Vlx

    (51) Я работу с дисконтными картами не изменял. Должно все работать штатно.

    Reply
  52. ppdron

    скопировал форму поиска дисконтной карты из обработки РМК типовой конфигурации и заменил в Вашей обработке, все заработало.

    Я пробовал на Рознице 2.2.7. Возможно проблема в этом. Проблема решена.

    Reply
  53. Vlx

    (53) Скорее всего из-за этого. Т.к. отчет на основе 2.2.5.

    Может еще что-нибудь в 2.2.7 не работает?

    Reply
  54. Sokolovsl

    Добрый день. Установил обработку на Розницу 2.2.7.42 — не работает поиск по цене. Может я что то не так делаю? а уже вышел релиз 2.2.8.24, может с ним заработает ? 🙂

    Reply
  55. Vlx

    (55) Я на 2.2.7 и на 2.2.8 не проверял.

    Но скорее всего поиск не работает по другой причине. Можете попробовать на 2.2.6 или 2.2.5?

    Reply
  56. Sokolovsl

    Понял, Юрий. Благодарю. Буду пробовать.

    Reply
  57. user916056

    Не планируете обновлять обработку под свежие релизы? Ведь все равно придется — скоро маркировка лекарственных препаратов придет. Или с аптеками больше не работаете?

    Reply
  58. Vlx

    С маркировкой еще ничего не ясно.

    Reply
  59. Vlx

    Обновлять по плану в июле.

    Reply
  60. Vlx

    Но в аптеках использовать не буду.

    Reply
  61. user610906_ivanov-smol

    Простите, выкладывать 1500 р за описание обработки? Я понятия не имею, будет ли она у меня работать, будет ли соответствовать моим нуждам на самом деле, а не по «фоточкам», которые тут выложены. Ребята, вы наглеете. Понимаю, что нормальный продукт не может быть бесплатным. Дайте хоть триал-доступ к обработке, а не предлагайте кота в мешке.

    Reply
  62. user610906_ivanov-smol

    (62) вопрос о приобретении снялся сам собой. Поддержки нет и не будет, «…Я на 2.2.7 и на 2.2.8 не проверял. «

    Reply
  63. user620079_alko-pskov

    На 2.2.7.40 работает

    Reply
  64. Vlx

    Обработка обновлена для Розницы 2.2.9

    Reply
  65. Vlx

    Обновлена также свертка данных.

    Что-бы работала старая в 2.2.9 замените код:

    //ЦентральныйУзелРИБ = ПланыОбмена.ПоМагазину.ЭтотУзел();
    //ОбъектВводаОстатков = Документы.ВводНачальныхОстатковУзла.СоздатьДокумент();
    //ОбъектВводаОстатков.Дата            = ЭтотОбъект.Объект.ДатаСвертки-1;
    //ОбъектВводаОстатков.КодУзлаОбмена   = ЦентральныйУзелРИБ.Код;
    //ОбъектВводаОстатков.Узел            = ЦентральныйУзелРИБ;
    //ОбъектВводаОстатков.Комментарий     = «Сформирован обработкой свертки базы»;
    //ОбъектВводаОстатков.ПометкаУдаления = Ложь;
    //ОбъектВводаОстатков.ЗаполнитьОстатки(Магазин);
    
    ЦентральныйУзелРИБ = ПланыОбмена.ПоМагазину.ЭтотУзел();
    ДанныеДляЗаполненияВводаОстатков = Новый Структура;
    ДанныеДляЗаполненияВводаОстатков.Вставить(«Дата», ЭтотОбъект.Объект.ДатаСвертки-1);
    ДанныеДляЗаполненияВводаОстатков.Вставить(«КодУзлаОбмена», ЦентральныйУзелРИБ.Код);
    ДанныеДляЗаполненияВводаОстатков.Вставить(«Узел», ЦентральныйУзелРИБ);
    ДанныеДляЗаполненияВводаОстатков.Вставить(«Комментарий», «Сформирован обработкой свертки базы»);
    ДанныеДляЗаполненияВводаОстатков.Вставить(«ПометкаУдаления», Ложь);
    Отказ = Ложь;
    ОбменДаннымиПереопределяемый.ЗаполнитьОстатки(Магазин, ДанныеДляЗаполненияВводаОстатков,, Отказ);

    Показать

    Reply
  66. serg1983

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

    Reply
  67. Vlx

    (67) должно работать штатно.

    Reply
  68. DiasA

    РМК для 1С77 .

    Reply
  69. marat1kzn

    а характеристики при подборе отображаются только с положительным остатком?

    Reply
  70. Vlx

    (70) если стоит галка «только положительные остатки».

    Если не стоит, то тогда все.

    Reply
  71. user1142247

    Будет работать с базовыми версиями?

    Reply
  72. user1142247

    И, ребят, есть возможность приобрести расширение напрямую у разработчика?

    Reply
  73. Vlx

    (72) Это внешняя обработка. Подключается через Дополнительные отчеты и обработки, в том числе и в базовой версии.

    Reply
  74. RadistkaAn

    Битый архив РМК_2.2.9, перезалейте

    Reply
  75. Vlx

    Какой архиватор?

    Reply
  76. Valek-guards

    Оплата бонусами работает в вашем РМК?

    Reply
  77. Vlx

    (77) За основу взят стандартный РМК из Розницы 2.2.

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

    Все остальное должно работать штатно.

    Reply
  78. Valek-guards

    Меня интересует, возможно включить в вашей обработке при подборе товара столбец характеристики? У нас магазин одежды, а характеристики это размеры и при подборе товара нужно видеть какой размер выбираешь!

    Reply
  79. Vlx

    (79) нет. нельзя.

    Reply

Leave a Comment

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