Контроль правильности учета входного НДС




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

20 Comments

  1. bb1962

    Аналогичные проверки входят в пакет «Экспресс-проверка ведения учета» для Бухгалтерии 7.7:

    http://infostart.ru/projects/4669/

    В бесплатной версии — 30 проверок, в платной -54.

    Reply
  2. Арчибальд

    Плюс за обе работы. Раньше не попадались

    Reply
  3. arni19802

    интереснее проверка НДС исходящего…

    Reply
  4. bb1962
  5. bb1962

    (3) Первый комментарий читали?

    Reply
  6. анфиска

    Странно, что обработка не видит внесение в книгу покупок при автоматическом ее формировании в конце месяца. ❗

    Reply
  7. bb1962

    (6) О каком конкретно правиле идет речь?

    Если о правиле проверки «Полнота получения счетов-фактур по документам поступления», то описание алгоритма здесь:

    http://www.profiufa.ru/express/decrypt9.shtml

    Можете связаться с разработчиком по support@profiufa.ru.

    Reply
  8. анфиска

    (7) та ссылка, по которой я перешла, и правило о котором там говориться действительно действовало в 2007 году. А теперь все (надеюсь, все бухгалтера, которые берегут свое время) пользуются автоматическим формированием книг покупок и продаж. В представленной обработке автоматическое формирование книг не попадает и соответственно не учитывается и пропадает вообще смысл обработки.

    Reply
  9. bb1962

    Для того, чтобы правильно (автоматически!!!) формировалась книга покупок, необходимо, чтобы:

    1. либо был заполнен реквизит «ДатаНомерСчетаФактуры» у приходного документа

    2. либо существовал подчиненный приходному документу документ «СчетФактураПолученный». Иначе — ощибка.

    В первом случае ПриходныйДокумент формирует проводку вида

    Дт 19.х субконто2 = ПриходныйДокумент Кт * +Сумма

    Документ «СчетФактураПолученный» не нужен.

    Во втором случае ПриходныйДокумент формирует проводку вида

    Дт 19.х субконто2 = ПустоеЗначение Кт * +Сумма

    Подчиненный ему документ СчетФактураПолученный формирует проводки вида

    Дт 19.х субконто2 = ПустоеЗначение Кт * -Сумма

    Дт 19.х субконто2 = СчетФактураПолученный Кт * +Сумма

    Если не заполнен реквизит «ДатаНомерСчетаФактуры» у приходного документа,

    то в документ «Формирование записей книги покупок» и соответственно в книгу покупок ничего не попадает.

    Если при этом существует не подчиненный приходному документу документ «СчетФактураПолученный», то запись в документе «Формирование записей книги покупок» и в книге покупок появится, но ошибка в учете тем не менее будет, проводки будут неверными, а именно

    Дт 19.х субконто2 = ПустоеЗначение Кт * +Сумма

    от ПриходныйДокумент

    Дт 19.х субконто2 = СчетФактураПолученный Кт * +Сумма

    от СчетФактураПолученный

    Сторно нет.

    Если Вы слабо разбираетесь в «1С: Бухгалтерии 7.7» не вводите в заблуждение других, если уж самой разобраться лень.

    Reply
  10. bb1962

    (8) Прошу прощения сообщение 9 это Вам ответ

    Reply
  11. bb1962

    (8) Опять что-то не ладно.Сообщение 9 это Вам ответ

    Reply
  12. Арчибальд

    (11) Надо (8_)

    Reply
  13. анфиска

    (10) Ну конечно, по вашему мнению все уважающие бухгалтера заводят СчетФактураПолученный?????? Этим давно уже ни кто не пользуется, пустая трата времени. А реквизит «ДатаНомерСчетаФактуры» у приходного документа к Вашему сведению нельзя не заполнять, иначе в печатной форме книги покупок этот реквизит будет пустой и у ИФНС будут при проверки вопросы. Похоже это Вы слабо разбираетесь в «1С: Бухгалтерии 7.7» и вообще в бухучете. все нормальные бухгалтера пытаются облегчить себе работу, а Вы предлагаете «прошлый век» ручное формирование книг 8)

    Reply
  14. анфиска

    (10) И вообще глупый спор, а идея обработки хорошая. Важно проверять все ли попало в книгу. Иногда сформируешь «Формирование записей книги покупок», а после кто-нибудь еще приход заведет, да еще заведет как-нибудь криво. И вот начинается поиск. На этом этапе предлагаемая обработка и пригодилась бы……….

    Reply
  15. bb1962

    (13) Вы читать умеете?

    Где это я предлагал «ручное формирование книг»?

    > реквизит «ДатаНомерСчетаФактуры» у приходного документа к Вашему сведению нельзя не заполнять

    Заполненность реквизита «ДатаНомерСчетаФактуры» у приходного документа как раз и проверяется отчетом, иначе в книгу покупок ничего не попадет, вообще не попадет. Я именно это и написал.

    > СчетФактураПолученный?????? Этим давно уже ни кто не пользуется, пустая трата времени

    Вам знакомо такое понятие «неотфактурованная поставка»? Это когда ТМЦ нужно оприходовать, а счет-фактуры еще нет и НДС к вычету поставить нельзя. Вот в таком случае и применяется связка ПриходныйДокумент с пустым «ДатаНомерСчетаФактуры» и СчетФактураПолученный на основании ПриходныйДокумент уже тогда, когда появится счет-фактура, возможно уже в следующем налоговом периоде. Учите матчасть. Для Вашей же пользы учите.

    Reply
  16. bb1962

    (14) Вам бы надо было СНАЧАЛА задуматься, а уж потом заявление делать о бессмысленности, а у Вас все наоборот.

    Reply
  17. анфиска

    (16) Ну тогда скажите, почему обработка не работает, А???? У меня поподает в таблицу только то, что сформировано «ручками», т.е. уточнения по книгам.

    Reply
  18. анфиска

    (16) Услуги сторонних организаций 00000231 (07.07.2009) 1200,00 ТрансЛогист Нет записи книги покупок на накладную. Что сие значит???

    Reply
  19. bb1962

    (17) «уточнения по книгам» — это видимо документы «ЗаписьКнигиПокупок».

    Видимо установлен флажок «Контролировать записи книги покупок», снимите его.

    Вот эта опция как раз рассчитана на тех, кто формирует отдельные документы «ЗаписьКнигиПокупок». Такое бывает, когда учет очень запущен, на счетах «ЗПК» черт знает что и автоматически сформировать книгу невозможно, сальдо «ЗПК» мешает. Тогда обработкой формируют док-ты «ЗаписьКнигиПокупок», благо сейчас контролировать оплату не надо и сделать это легко.

    А вообще надо использовать http://www.infostart.ru/public/20684/

    Reply
  20. анфиска

    (19) Так работает и ошибок нет. А по-поводу «когда появится счет-фактура, возможно уже в следующем налоговом периоде. Учите матчасть.» мой директор мне голову снимет, если не будет счет-фактуры в том периоде в котором был приход. Цифирки-то НДСа у всех разные, по этому на свой страх и риск принимаем к вычету, даже если нет оригинала С-Ф. А о таких возможностях программы я в курсе, только на практике применит не дадут. «Неотфактурованная поставка» в моей организации существует только в теории бухучета. Да и еще на тему «следующего налогового периода» как ни крути, а уточненки подавать приходится за тот период в котором поступили материалы, а не в том, в котором получена С-Ф. С ИФНС лучше не спорить, нервы съэкономишь. 🙂

    Reply

Leave a Comment

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