<?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='\
Забавно))) еще и за деньги…
а куда закрываете, если не секрет, конечно?
(1) Приведете хоть один довод почему бы и нет? Или сказали просто дабы было?
не секрет конечно. Данная обработка необходима для тех у кого бардак в учете товаров. Списывает именно «красноту» по количеству. Документом «Операция» на счет 90.
(2)
и получите автоматизированный бардак. А почему нельзя бухгалтера заставить найти причину «минусов» и поправить?
(3) Например когда в 1 УПП ведется 4 организации и при оформлению заказ покупателя товар еще не пришел. Но по факту заказ сделан на одну организацию, а приходовали на другую. Дальше додумай сам. Это я привел один из примеров когда эта обработка может пригодиться. Очень много бухов устраивает «такой» тип работы. Да он не правильный, но менять они его не под каким дулом пистолета не будут. Поэтому и родилась эта обработка. Не было бы заказа на данную обработку, она бы здесь не появилась. Думаю ответил на ваши вопросы.
(4) Могу предложить для таких бухов ПКМ. Или КПВ. Или Шилку…
Ну, или как крайний случай — чистый лист бумаги А4… И ладно, ручку одолжу…
(4) лично к Вам, как к разработчику вопросов нет. Хотя, внутрь обработки ещё не смотрел… А куда минуса списываются?
+ увидел на 90… А на доходы или на расходы? И, если проверка будет, как бухгалтер движения обоснует?
(2)
какая-то странная диковинка.. а излишки по количеству (те, которые собственно и привели к минусам) вы игнорируете?
(7) может и странная, но она была востребовальна и я Ее реализовал. На 90 счёте не ведётся количественный учёт.
(5) предложите. Я тут причём? Я предоставил такое решение. Они вроде довольны 😊
(8)
я имел ввиду лишнее на 10
и в Итоге у вас по одной аналитике минус, а по другой лишний плюс.. Минус Вы закрываете, а с плюсом что? Висит до инвентаризации?
(9) Я предлагал одним, когда у них возникла такая идея. почему-то они резко отказались от идеи и за месяц разобрались с причинами…
Я даже не понял, почему они так быстро сработали…
(11) плюса то и нет. По 90 счёту нет количественного учёта.
(13) я про 10 счет спрашивал) Как у Вас получаются ситуации, когда появляется только количественные минуса, а сумма списывается в ноль?
Я в бухгалтерии не силен, но в общих чертах:
Вы положили на 10 счет «товар1, партия1, склад1», а списали «товар1, партия2, склад1». Появился минус по «товар1, партия2, склад1». Вы его списали на 90 счет… а что с излишком «товар1, партия1,склад1» который продолжает висеть на 10 счете?
(0) вопрос даже не в том, что некомпетентные бухи закрывают свои дыры в учете с вашей помощью…
вопрос в том-КАК вы додумались ЭТО считать обработкой, пригодной для выкладывания за мани???
придут новички, не сведующие в учете, накачают ваших обработок и понаворотят в программе…
(18) А что это если не обработка? Отчет? и почему продукт я должен выкладывать бесплатно? Новички должны в любом случае разобраться, как это работает и как ведется учет перед использованием.
(19) закроем тему, раз вам так сильно нужны мани))
но вопрос этики выкладывания за мани непутевых обработок останется открытым)
(15) Я как бухгалтер по образованию присоединяюсь к данному вопросу. Имеем развёрнутое сальдо по одной и той же номенклатуре, +10 и -10. -10 кинули на доходы, +10 остались. Прошла инвентаризация, все хлопают глазами, особенно бухгалтера, кладовщики матеряться какого х.. у нас такая большая недостача, приходит камеральная проверка и даёт леща бухгалтерам и требует объяснение сего бреда.
Бухгалтера заставляют писать разработчика данного решения объяснения перед налоговой.
Всё это не придуманная история, а реальная ситуация на предприятии где я работал, и франч пошёл на поводу у бухгалтеров.
PS красные остатки по 10 или 41 должны приходоваться на 91 счёт, это вам налоговая тоже расскажет во время проверки, когда увидит что там накорреткировали
(19) Это очень далеко не продукт…
Смотря на то, каким образом вы решаете проблему отрицательных остатков, да еще и выкладываете это в открытый доступ, Вам тоже не помешает подучиться..