<?php // Полная загрузка сервисных книжек, создан 2025-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='\
Странное расширение, да и сама идея. Розница по своей сути не должна контролировать остатки по продуктам и алкоголю(в онлайн продаже). Для корректной работы с алкоголем нужно знать подтверждена ТТН или нет(да и это не важно до конца 2018года, потом v3ЕГАИС), а не наличие остатков на складе. Если покупатель пришел с бутылкой водки на кассу, то товар в любом случае есть на складе(торговом зале).
(1)
На практике часто бывает пересорт по производителям в 1С. Так же при внутренней инвентаризации часто забывают посчитать некоторые позиции АП и списывают их из ЕГАИС , а вскоре находят. Поставить их на баланс , а потом отчитываться перед РАР откуда лишний алкоголь? Или без контроля остатков продать в минус по ЕГАИС и опять вернуться к постановке на баланс лишней АП?
Далеко не все товароведы идеальны. И далеко не все умеют вести правильный учёт. Расширения делал по просьбе реальных клиентов, у которых большой объём продаж алкоголя каждый день, и которые продают не только через 1С:Розница , но и через Офлайн-кассы Штрих и АТОЛ, где продажа происходит именно по штрихкоду , а не по морке как это сделали в 2.2.9.
Винить клиента в криворукости можно бесконечно, но это не решает его проблемы.
1) Клиент, у которого периодически на большом складе при пересчете АП пропускают минимум несколько бутылок, пользуется контролем остатков при пробитии чеков, но через 1С у него проходят продукты питания, снеки и т.д., остатки которых вести ему не надо и он тратит бешенное количество времени на внесение приходных накладных по этим продуктам, чтобы те пробивались по кассе. Для этого клиента сделал расширение для РМК.
2) Клиент работает через офлайн кассу Штрих, которая умеет продавать только по штрихкодам. Часто товаровед не успевает обклеить этикетками бутылки другого завода, после чего некорректно формируется Отчёт о розничных продажах и на основании него списывается не то пиво Актом списания ЕГАИС. Для этого тоже включили контроль остатков на складе в правах пользователя, но уперлись в то, что теперь каждый лишний грамм колбасы или неучтенный чупа-чупс не даёт провести Отчёт о розничных продажах. Для данного клиента сделал расширение, которое при проведении документа проверяет остатки только по алкоголю. Остальные продукты будут выравнивать при ревизии.
(2) Я всегда уважаю чужой труд и Ваш тоже. Сам пишу много под реальных клиентов и если смотреть со стороны покупателя, то с Ваших слов магазин большой, то я взяв водку отстояв очередь и мне потом говорят, что нет остатка на ККМ(а я водку в руке держу), я в этот магазин в следующий раз пошел бы в последнюю очередь(извините если обидел Вас, не в обработке дело я уверен, что она выполняет заявленный функционал). К сожалению на людей(персонал магазина) как на 1С обновления не выходят.
(3)
Да обид никаких нет)
Клиенты просто боятся РАР больше чем расстроить покупателей, тем более хороший продавец всегда сможет предложить покупателю альтернативу.
Да и просто выдалась возможность в комментарии более подробно описать ситуацию почему, зачем
и для кого делалось.
Добрый день.Можете скинь обработку «Запрет продажи в минус алкоголя в РМК».Просто из за одной обработки не очень хочется покупать стартмани).Почта koop-kruf96@mail.ru .Буду очень признателен