<?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='\
особенно круто, когда пошол на рынок. Оплатил стоянку. Голый НАЛ!!!
Автор, вы копаете не в ту сторону, сейчас почти на всех чеках есть QR-код, сканируешь приложением ФНС чек и используя спец. обработку грузишь чек в программу (вариантов обработок в сети уйма)
Ну если есть банк.карта должна быть и выгрузка платежей в 1с из личного кабинета. Видимо не у всех)
(2) Я знаю, что есть ФНС и можно отсканировать все чеки. Но во первых нужно собирать все чеки и сканировать их. Во вторых не на все операции есть чеки, например когда оплату производишь через онлайн-банки. А СМС-ки приходят автоматически и разбираются автоматически, причем все, кроме наличных.
Я рассматриваю на данный момент ФНС, как способ уточнения содержимого операции по статьям, если мне не будет хватать такой разбивки. На данный момент в большинстве случаев 1 чек — это одна статья.
Задача была избавиться от ручного труда, связанного с загрузкой информации в 1С. Любые загрузки/выгрузки из банк-клиентов — это вероятнее всего зайти, сформировать, отправить на почту. Во многих случаях это «не плоский» Excel или PDF. Сложно для разбора — не структурировано.
Плюс у каждого банка свой формат выгрузки.
И действительно выгрузки могут быть не у всех.
(1) Нал действительно к сожалению не отследить. Даже государство это сделать не может.
(4) Пользуюсь загрузкой из ФНС уже полгода, купил, чек отсканил на телефон и сразу в мусорку. Операций 5-10 в месяц руками забиваю (то, что в инете оплачиваешь — зачастую тоже уже имеет чек, например МТС кидает электронные чеки), оч. удобно все
«около 3 лет» — слабак 🙂 я 7 лет уже веду.
Вопрос по теме — некоторые банки шлют push-уведомления. Их реально обработать?
(8) У меня был продвинутый режим: я каждую строку чека разбирал. =))
Про push-уведомления не ставил себе задачу.
Если поискать такую возможность, то изменится Этап 1: получение сообщения.
А Этап 2 при этом останется тем же: разобрать текстовую строку.
(9) у меня тоже есть такой режим. раз в год завожу чек из ашана, чтобы посмотреть реальную инфляцию.
Как мне кажется, для получения Push-сообщения нужно прикинуться оригинальным получателем. Я в мобильной разработке полный ноль, не знаю насколько это реально. Да и в целом просто из любопытства спросил.
(7)
А какой именно можете поделиться?
Посмотрел, мне кажется это слишком трудоемко и не нужно особо…
Учитываю свой опыт ведения домашней бухгалтерии (с 1 января 2011 года).
1. Занести чеки по статьям затрат — достаточно просто, это все делается за 5-10 минут в день. Наличные и банк. Но, по моему мнению, не информативно. Ничего толком не видишь, видишь, что купил продукты, а какие, по сколько? Я детализирую до товарных позиций. Да, это более трудоемко, но, зато вижу данные по конкретным позициям, а не в общем. И могу действительно посчитать правильную инфляцию.
2. 1100 сообщений за 5 месяцев, итого 220 в месяц, около 7-8 в день. Смысл городить огород ради этого?
3. 150 магазинов… По контрагентам вообще вести опционально, но, для меня чисто это лишняя информация. Толку от нее ближе к нулю, зато нужно вести дополнительный справочник клиентов/контрагентов/магазинов.
Веду учет с 2010, на смартфоне, сначала был смарт на WM, с 2013 андроид, детализация по товарным позициям (только продукты, коммуналка, транспорт). Счета: нал, карты, депозиты, р/сч. Когда начинал, первоначально планировал вести учет на ПК, но на смартфоне удобней, т.к. он всегда под рукой, и данные можно ввести в любое время
(13) 1. Я долго заносил вручную чеки по каждой позиции, но в итоге ушел от этого. Для себя не вижу в такой детализации полезной информации. Список своих актуальных статей прикладываю в файле ниже. Я так понимаю, что Вы вносите нет только сумму каждой позиции, но и цену и количество. Именно по цене можно посчитать инфляцию.
2. Вот именно, я сделал это для уменьшения трудоемкости процесса ведения учета. Один раз настроил и раз в неделю заглядываю в программу.
3. По магазинам я и не веду учет. «Магазин» (именно в кавычках) используется для определения статьи затрат. Ограниченный список «магазинов» был на последнем скриншоте в статье.
(14) Ставил мобильное приложение, но раз в неделю на компьютере вечерком с чашечкой чая в удобном кресле посмотреть на результат автоматического разнесения операций для меня удобнее.
(15)
1. Да, цену и количество. И детализации больше. Сейчас у меня почти 800 позиций в справочнике Операций (статей расходов / доходов). И интересует меня больше детализация по номенклатурным позициям, чем общее. Например, в вашем случае, детализация чисто по продуктам мне не нужна. Мне нужно смотреть, сколько я на что потратил.
2. Это не уменьшение трудоемкости, а просто перенос с больной головы на здоровую. Кстати, а если вы в одном магазине покупаете товары с разными статьями расходов (для выходных закупок в большом гипермаркете ситуация достаточно типична), то как программа разнесет это по статьям? Например, продукты, хозяйственные товары в одном чеке.
3. Смысл раз в неделю заглядывать и сверять, если остатки денежных средств на счетах нужно видеть часто? У моей программы первоначальная цель и была — видеть актуальные остатки ДС. А отчеты по продажам и т.д. прикрутил уже потом.
(17) 1. Я ушел от излишней детализации.
2. Это ограничение, с этим мое решение не поможет и я с этим мирюсь.
3. У меня нет цели в такой оперативности.
А 1С Мобильное переложение нельзя научить работать напрямую в смс?
(19) Мобильное приложение не рассматривал. Полагаю этот вопрос только к разработчикам 1С Деньги можно направить.
Видел у товарища телеграм бота для такого. Серьёзное дело. Отправил мессагу по форме — ввелась операция.