Закрытие минусов на счете 10.01




Принцип обмена данными из 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='\

19 Comments

  1. Vladisa

    Забавно))) еще и за деньги…

    а куда закрываете, если не секрет, конечно?

    Reply
  2. l1nn1kk1nn1l

    (1) Приведете хоть один довод почему бы и нет? Или сказали просто дабы было?

    не секрет конечно. Данная обработка необходима для тех у кого бардак в учете товаров. Списывает именно «красноту» по количеству. Документом «Операция» на счет 90.

    Reply
  3. Denis_CFO

    (2)

    необходима для тех у кого бардак в учете товаров

    и получите автоматизированный бардак. А почему нельзя бухгалтера заставить найти причину «минусов» и поправить?

    Reply
  4. l1nn1kk1nn1l

    (3) Например когда в 1 УПП ведется 4 организации и при оформлению заказ покупателя товар еще не пришел. Но по факту заказ сделан на одну организацию, а приходовали на другую. Дальше додумай сам. Это я привел один из примеров когда эта обработка может пригодиться. Очень много бухов устраивает «такой» тип работы. Да он не правильный, но менять они его не под каким дулом пистолета не будут. Поэтому и родилась эта обработка. Не было бы заказа на данную обработку, она бы здесь не появилась. Думаю ответил на ваши вопросы.

    Reply
  5. DenisCh

    (4) Могу предложить для таких бухов ПКМ. Или КПВ. Или Шилку…

    Ну, или как крайний случай — чистый лист бумаги А4… И ладно, ручку одолжу…

    Reply
  6. Denis_CFO

    (4) лично к Вам, как к разработчику вопросов нет. Хотя, внутрь обработки ещё не смотрел… А куда минуса списываются?

    + увидел на 90… А на доходы или на расходы? И, если проверка будет, как бухгалтер движения обоснует?

    Reply
  7. ice-net

    (2)

    какая-то странная диковинка.. а излишки по количеству (те, которые собственно и привели к минусам) вы игнорируете?

    Reply
  8. l1nn1kk1nn1l

    (7) может и странная, но она была востребовальна и я Ее реализовал. На 90 счёте не ведётся количественный учёт.

    Reply
  9. l1nn1kk1nn1l

    (5) предложите. Я тут причём? Я предоставил такое решение. Они вроде довольны 😊

    Reply
  10. ice-net

    (8)

    я имел ввиду лишнее на 10

    Reply
  11. ice-net
    Например когда в 1 УПП ведется 4 организации и при оформлению заказ покупателя товар еще не пришел. Но по факту заказ сделан на одну организацию, а приходовали на другую. Дальше додумай сам.

    и в Итоге у вас по одной аналитике минус, а по другой лишний плюс.. Минус Вы закрываете, а с плюсом что? Висит до инвентаризации?

    Reply
  12. DenisCh

    (9) Я предлагал одним, когда у них возникла такая идея. почему-то они резко отказались от идеи и за месяц разобрались с причинами…

    Я даже не понял, почему они так быстро сработали…

    Reply
  13. l1nn1kk1nn1l

    (11) плюса то и нет. По 90 счёту нет количественного учёта.

    Reply
  14. ice-net

    (13) я про 10 счет спрашивал) Как у Вас получаются ситуации, когда появляется только количественные минуса, а сумма списывается в ноль?

    Я в бухгалтерии не силен, но в общих чертах:

    Вы положили на 10 счет «товар1, партия1, склад1», а списали «товар1, партия2, склад1». Появился минус по «товар1, партия2, склад1». Вы его списали на 90 счет… а что с излишком «товар1, партия1,склад1» который продолжает висеть на 10 счете?

    Reply
  15. Vladisa

    (0) вопрос даже не в том, что некомпетентные бухи закрывают свои дыры в учете с вашей помощью…

    вопрос в том-КАК вы додумались ЭТО считать обработкой, пригодной для выкладывания за мани???

    придут новички, не сведующие в учете, накачают ваших обработок и понаворотят в программе…

    Reply
  16. l1nn1kk1nn1l

    (18) А что это если не обработка? Отчет? и почему продукт я должен выкладывать бесплатно? Новички должны в любом случае разобраться, как это работает и как ведется учет перед использованием.

    Reply
  17. Vladisa

    (19) закроем тему, раз вам так сильно нужны мани))

    но вопрос этики выкладывания за мани непутевых обработок останется открытым)

    Reply
  18. akim2040

    (15) Я как бухгалтер по образованию присоединяюсь к данному вопросу. Имеем развёрнутое сальдо по одной и той же номенклатуре, +10 и -10. -10 кинули на доходы, +10 остались. Прошла инвентаризация, все хлопают глазами, особенно бухгалтера, кладовщики матеряться какого х.. у нас такая большая недостача, приходит камеральная проверка и даёт леща бухгалтерам и требует объяснение сего бреда.

    Бухгалтера заставляют писать разработчика данного решения объяснения перед налоговой.

    Всё это не придуманная история, а реальная ситуация на предприятии где я работал, и франч пошёл на поводу у бухгалтеров.



    PS красные остатки по 10 или 41 должны приходоваться на 91 счёт, это вам налоговая тоже расскажет во время проверки, когда увидит что там накорреткировали

    Reply
  19. ice-net

    (19) Это очень далеко не продукт…

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

    Смотря на то, каким образом вы решаете проблему отрицательных остатков, да еще и выкладываете это в открытый доступ, Вам тоже не помешает подучиться..

    Reply

Leave a Comment

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