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

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 не будет опубликован. Обязательные поля помечены *