Помощник проверки книги учёта доходов и расходов УСН




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

40 Comments

  1. boogie

    Пардон, прикрепил файл.

    Reply
  2. 3Женя3

    Хорошая обработка!!!! 🙂

    Reply
  3. BlackLeon

    не учитывается изменение статусов оплаты, следовательно результаты задваиваются:(

    Reply
  4. boogie

    (2) Спасибо! Стараемся.

    (3) Пожалуйста поясните на примере.

    Reply
  5. kam_gkh1@mail.ru

    Скачал файл с расширением .ert, но что-то он не определяется как обработка и не видится через открытие в 1С… 😮 😮 😮

    Reply
  6. boogie

    (5) Платформа 1С какой версии?

    Reply
  7. BlackLeon

    Пример: Сумма документа поступления 100, при проведение происходит зачет аванса. Движения по расходам УСН:

    приход 100 — не списано, не оплачено

    расход 100 — не списано, не оплачено

    приход 100 — не списано

    итого по отчету: сумма регистратора: 100, принимаемые 200.

    Reply
  8. boogie

    (7) спасибо! Постараюсь учесть

    Reply
  9. boogie

    Учёл в отчёте НДС, может не по всем операциям, но по большей части

    Reply
  10. MarisaLavita

    а на 7ку нет такой обработки?? очень нужно 🙁 🙁 🙁

    Reply
  11. boogie

    (10) Мы уже с семёрки перешли давно, может кто-то ещё сможет сделать?

    Reply
  12. valya977

    Бухгалтерия предприятия, редакция 2.0 (2.0.21.1)

    Выдает ошибку

    {Форма.ФормаОтчета.Форма(37)}: Ошибка при вызове метода контекста (СкомпоноватьРезультат)

    СкомпоноватьРезультат(ЭтаФорма.ЭлементыФормы.Результат);

    по причине:

    по причине:

    Ошибка исполнения отчета

    по причине:

    Ошибка получения данных

    по причине:

    Ошибка создания набора данных «НаборДанных1»

    по причине:

    Ошибка при исполнении запроса набора данных

    по причине:

    {(26, 21)}: Ошибка обработки представления «РегистрБухгалтерии.Хозрасчетный.Обороты:Использование итогов выключено»

    ПОЛНОЕ СОЕДИНЕНИЕ <<?>>РегистрБухгалтерии.Хозрасчетный.Обороты(&П, &П2, Регистратор, , , , , ) КАК ХозрасчетныйОбороты

    Что я делаю не так?

    Reply
  13. michmich

    расширение erf к файлу добавь.

    Reply
  14. mashayakovec

    очень классная обработка, СПАСИБО!!!

    Reply
  15. lady_lace@mail.ru

    Спасибо за полезную обработку, в работе пригодилась!

    Reply
  16. Arin

    Спасибо!!!

    Reply
  17. olgadogi

    Очень удобная обработка, все что требовалось выдает

    Reply
  18. Nataniel

    Много информации нужной информации выдает данная таблица

    Reply
  19. winsloow

    Очень удобная обработка помогает разобратся с бардаком в некоторых базах.

    Все достаточно наглядно информативно выдает.

    Автору респект

    Reply
  20. Gulak

    (10) MarisaLavita, ОЧЕНЬ ПОДДЕРЖИВАЮ!!! на 7-ку охота такую!

    Reply
  21. TOsya

    У меня обработка не обращает внимания на выбранный период :-((

    Reply
  22. Coollerok

    Пригодилось, спасибо! Бухи были очень довольны

    Reply
  23. JuliettT

    У нас 1С:Предприятие 8.2 (8.2.15.294) — пишет «ошибка в схеме компоновки данныых-посмотрите что это?

    И еще вопрос — а можно ли для Комплексной автоматизации использовать?

    Reply
  24. JuliettT

    Ошибка в схеме компоновки данных

    по причине:

    Ошибка получения информации набора данных

    по причине:

    Ошибка в запросе набора данных

    по причине:

    {(8, 64)}: Неверные параметры «Перечисление.ВидыОперацийСписаниеДенежныхСредств.ПустаяСсылка»

    И ЕСТЬNULL(РасходыПриУСН.Регистратор.ВидОперации, ЗНАЧЕНИЕ(<<?>>Перечисление.ВидыОперацийСписаниеДенежныхСредств.ПустаяСсылка)) = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийСписаниеДенежныхСредств.ПеречислениеНалога

    Reply
  25. boogie

    А версия конфигурации какая?

    Reply
  26. Alister
    Пригодилось, спасибо! Бухи были очень довольны

    А штатный анализ состояния налогового учета по УСН не устраивает ? Там тоже все расходы показываются.

    Reply
  27. TODD22

    (27)

    +1. В чём профит в отличие от стандартного анализа?

    Reply
  28. boogie

    Он другой, что позволяет найти ошибки в вводе данных.

    Reply
  29. JuliettT

    Бухгалтерия предприятия (базовая), редакция 1.6 (1.6.31.1) (http://v8.1c.ru/buhv8/)

    Copyright (С) ООО «1C», 2009 — 2011. Все права защищены

    (http://www.1c.ru)

    Reply
  30. JuliettT

    ругается вот на что Ошибка в схеме компоновки данных

    по причине:

    Ошибка получения информации набора данных

    по причине:

    Ошибка в запросе набора данных

    по причине:

    {(8, 64)}: Неверные параметры «Перечисление.ВидыОперацийСписаниеДенежныхСредств.ПустаяСсылка»

    И ЕСТЬNULL(РасходыПриУСН.Регистратор.ВидОперации, ЗНАЧЕНИЕ(<<?>>Перечисление.ВидыОперацийСписаниеДенежныхСредств.ПустаяСсылка)) = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийСписаниеДенежныхСредств.ПеречислениеНалога)

    Reply
  31. boogie

    1.6 уже 2 года как устарела.

    Reply
  32. JuliettT

    ок спасибо) жалко не получилось, наверное хорошая обработка)

    Reply
  33. anna140331

    не понятный отчет

    Reply
  34. JuliettT

    Неужели никто так и не создал подобный рабочий отчет для проверки УСН… неужели всем хватает стандартных проверок УСН??… может кто научит ими пользоваться и быть уверенным на 100%, что все попало куда надо?…

    Reply
  35. akim2040

    Можно переделать данные отчеты под ИП на ОСН?

    Reply
  36. bikbulatov.artur

    А есть описание алгоритма работы отчета?

    Reply
  37. boogie

    Коллеги, обработка для БП 3.0 не работает.

    Reply
  38. Uejova

    А можно такую на 8.3, пожалуйста?

    Reply
  39. user1075841

    Добрый день.

    Под конфигурацию БП КОРП 3.0.64 есть такая же обработка?

    Reply
  40. Vyacheslav56

    Обработка для БП 3.0 не работает.

    Reply

Leave a Comment

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