Рабочее место кассира 1С:Розница 2.2 (РМК) как Фронт-офис с поиском по цене и только положительными остатками




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

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

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

<?php // Полная загрузка сервисных книжек, создан 2026-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 не будет опубликован. Обязательные поля помечены *