Расширенная таблица номенклатуры для Розницы 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='\

42 Comments

  1. asylum34ru

    Если достаточно хорошо владеть программой, то штатные возможности Розницы выглядят ни чуть не хуже Вашей обработки, за исключением правки реквизитов. За всё время работы с ЕГАИС изменял заблокированнные реквизиты 3 раза (14 магазинов). При этом пользовался штатной обработкой. Это которая лежит в «Администрирование»-«Поддержка и обслуживание»-«Корректировка данных» и называется «Групповое изменение реквизитов». Вполне удобненько на мой взгляд) А за труды Вам огромное спасибо! Думаю юзверы оценят Вашу программу по достоинству.

    Reply ↓
  2. myALKleon

    (1) asylum34ru, Спасибо за отзыв! В дальнейшем планируется ввести функцию переброса всех остатков со склада в торговый зал ЕГАИС одним документом.

    Reply ↓
  3. myALKleon

    (3) Aidar123, Спасибо за отзыв!

    Reply ↓
  4. sancho86

    Обработка очень долго открывается в файловой базе по сети. Хорошо бы было чтобы не выводилась вся номенклатура при открытии и чтобы можно было ставить какие-нибудь фильтры типа «в папке», «Алкогольная продукция», «Вид номенклатуры». Так будет гораздо быстрее.

    При нажатии «Сопоставить» на уже сопоставленной номенклатуре (для проверки) в окошке сопоставления слева не отображается сопоставленная АП…

    Ну а копирование незаполненных реквизитов из АП — выше всяких похвал! Спасибище!

    Reply ↓
  5. sancho86

    При заполнении из номенклатуры ЕГАИС почему-то иногда не подставляет Производителя.

    Не хватает фильтра и упорядочивания по колонкам.

    В таблицу нельзя вывести реквизиты Номенклатуры ЕГАИС

    Reply ↓
  6. myALKleon

    (6) sancho86,

    ВНИМАНИЕ: для корректной работы функции автозаполнения реквизитов из сопоставленной номенклатуры ЕГАИС, должны быть заранее созданы все необходимые контрагенты ЕГАИС: производители, импортёры продукции, заведённой в программе.

    (НСИ->Сопоставлений организаций ЕГАИС->Не связанные->Выделить всех->Создать контрагентов)

    Если это сделать, производитель будет попадать.

    Возможность вытаскивать реквизиты добавим, починим!

    Reply ↓
  7. user597811_loki111

    не открывается и завешивает всю розницу 2.2.5.21

    Reply ↓
  8. myALKleon

    (8) Василий, будет глобальная переписка обработки с сохранением функционала и очень мощным ускорением работы. Она открывается, просто долго, иногда очень долго, минут 5, если база сетевая и ПК медленный.

    Reply ↓
  9. user597811_loki111

    (9)ок спасибо за ответ, а когда планирется перреписка? Хотя бы примерно?

    Reply ↓
  10. myALKleon

    (10) Уже в процессе, пару дней.

    Reply ↓
  11. user597811_loki111

    (11) спасибо ждем

    Reply ↓
  12. user589818_goldysv

    Здравствуйте! Скачала 22.03.17 обработку 2.0, штука должна быть очень удобная, но работать с ней категорически не получается ((( Висит со страшной силой (номенклатура алкоголя большая), в окошке «Алкогольная продукция» не отображается сопоставленная номенклатура ЕГАИС (возможно не успевает). Каждая прокрутка подвисает мин на 5. Посоветуйте, может как-то можно ускорить или что. Пока работать невозможно.

    Reply ↓
  13. myALKleon

    (13) Сейчас посмотрю кое-что и напишу

    Reply ↓
  14. dir@zayakina.ru

    Добрый день!

    А в чем разница файлов? какой необходимо скачивать если у меня нет акцизов ?

    спасибо за ответ.

    Reply ↓
  15. myALKleon

    (15) Здравствуйте! Вторую версию, если ЕГАИСА нет — его не будет и в обработке.

    Reply ↓
  16. casperito

    Очень медленно работает…

    Reply ↓
  17. firml

    Здравствуйте! Скачала 2.1, 19.04.17, а 26.04.17 обработка обновилась до 2.2, подскажите пожалуйста, как обновиться?

    Reply ↓
  18. firml

    Спасибо за оперативный ответ ( Ответьте пожалуйста еще на один: Почему в отчете не везде заполняется таблица Поставщик?

    Reply ↓
  19. myALKleon

    (18) Здравствуйте! Необходимо скачать обновление.

    Reply ↓
  20. myALKleon

    (19) Зависит от настроек вашей программы. От этого поставщика должны быть поступления. Контрагент должен быть отмечен как поставщик в регистре.

    Reply ↓
  21. firml

    (21) Спасибо, Поступления есть, а как отметить что он поставщик в регистре?

    Reply ↓
  22. CrimeanWind

    (21) Отличная обработка! Подскажите, как бы увидеть привязанные алкокоды с нулевыми остатками, сейчас они скрываются. И (в идеале) общую сумму бутылок по привязанным алкокодам.

    Спасибо!

    Reply ↓
  23. firml

    Не обижайтесь… С виду да, красивая обработка, но нам не пригодилась для практической работы, на складе сказали эта обработка для них бесполезна, номенклатура итак автоматом создается, при загрузке, либо находит через инт-т, остаток по последнему поступлению алко так и не поняли, для чего его нужно видеть…

    Reply ↓
  24. CrimeanWind

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

    Часто встречается один алкокод может быть на разных номенклатурах. Это наборы, подарочная упаковка, сувенирные бутылки и пр. Добавляют один АК к разным номенклатурам через РегистрСведений.СоответствиеНоменклатурыЕГАИС добавляя идентификатор упаковки.

    Спасибо!

    Reply ↓
  25. CrimeanWind

    (4)Артём, большая просьба выпустить версию расширенной номенклатуры в.2.2 под розницу 2.2.6.*

    Сейчас при открытии на 2.2.6.* выдаёт: Поле объекта не обнаружено (ЗапросОстатковВТорговомЗале)

    Спасибо!

    Reply ↓
  26. myALKleon

    (27) Сделаю в ближайшее время

    Reply ↓
  27. dimmat

    Добрый день!

    С несколькими организациями обработка умеет работать?

    Reply ↓
  28. user593840_metall_14

    Открываю в Розница 2.2.7.32. Обработку версии 2.2 пишет ошибку скриншот с ошибкой.

    Reply ↓
  29. CrimeanWind

    (20)Добрый день. Необходима ваша обработка для розницы 2.2.7.* Та версия, которая на первом скриншоте. Используем постоянно, стал уже базовым инструментом для алкогольного магазина.

    Спасибо!

    Reply ↓
  30. -NetMan-

    Добрый день, та-же проблема, как и у (30) только Розница 2.2.7.42(

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

    Reply ↓
  31. sancho86

    в 2.2.7 у документов уже нет реквизита «Статус обработки», статус берется из протокола обмена

    Reply ↓
  32. user591404_volkoff.lesnoy

    Будет ли обработка обновлена до версии 2.2.8.29?

    Reply ↓
  33. CrimeanWind

    (34)эта подходит, если закомментировать в тексте обработки ту строку, на которую ругается 1с-ка

    Reply ↓
  34. user591404_volkoff.lesnoy

    если закомментировать в тексте обработки ту строку — я этого не понимаю.

    Я простой пользователь 1с Розница 2.2.8.29. Если я ее скачаю-работать будет?

    Reply ↓
  35. user591404_volkoff.lesnoy

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

    Reply ↓
  36. CrimeanWind

    (37)я не разработчик, но точно скажу, что не будет.

    можете войти в конфигуратор и закомментировать/удалить строки

    | И ОстаткиЕГАИС.СтатусОбработки = &СтатусОбработки

    а также

    Запрос.УстановитьПараметр(«СтатусОбработки», Перечисления.СтатусыОбработкиОстатковЕГАИС.ПолученыОстатки);

    Reply ↓
  37. user591404_volkoff.lesnoy

    (38)Денис, я понимаю, что Вы хотите мне помочь, но как я базовую розницу сниму с поддержки? Итак каждый релиз новый «останавливает» магазин. Хорошо , что я сам хозяин магазина и тестирую каждое обновление дома. А другие, где «программы» от 500руб/час ходят обновляют? То выгрузка на Фронтол-кассу умрет, то наоборот выгрузка в ТУ умирает.

    Тот кто хоть раз работал в 1с Розница для розничного продуктового магазина понимает, что эта обработка — то, что нужно. Максимум инфы в одном окне.

    Разраб откликнись.

    Reply ↓
  38. CrimeanWind

    (37)тю, видимо я некорректно выразился, эти строки нужно подправить в самой обработке через конфигуратор)

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

    вы потратие ну может пол часа на все)и узнаете чуть больше, может еще пригодится)тут ничего нет страшного)

    если что, напишите мне в личные сообщения

    Reply ↓
  39. user591404_volkoff.lesnoy

    (40)Спасибо за участие и помощь. В течении недели попробую и отпишусь. А то несколько дней осталось до 3 ЕГАИСа, Меркурия, онлайн-касс для ИП.

    Пару слов почему обработки не в полном объеме востребованы:

    1. 99.99% в магазинах используют 1с программы наемные работники-операторы ( как правило девчонки 20 лет, которые вообще боятся нажать клавишу, т.к. их уже наругали за «кривые руки».

    2.Директор, зав, зам.зав. тоже наемные работники, которым все на**ать.

    3. Хозяину тоже на все наплевать лишь бы была хорошая прибыль.

    Таких как я , когда магазин в «деревне» и приходится делать все самому единицы и понимают истинное значение этой обработки.

    Когда день начинается с обмена отчетов о проданной продукции со списания пива в ЕГАИС с пересортицей алкокодов, а тебе в спину дышат несколько представителей поставщиков алкоголя и пива, параллельно приход ТТН ЕГАИС, сопоставления, 2 регистр и т.д. поймет меня. А на пороге помарочный учет!

    Reply ↓
  40. AlexO

    (41) ну так все получилось?

    Reply ↓
  41. user967468

    подскажите для УТ 11 есть такая обработка

    Reply ↓
  42. Gtli

    Не нужна, по одной простой причине: нету цен и остатков по складам в самой таблице напротив карточки товара.

    Выделять и смотреть остаток очень не удобно.

    Reply ↓

Leave a Comment

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