Новое в 2024 году по входящему НДС в ERP




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

12 Comments

  1. user633533_encantado

    Описанные проблемы касаются не только НДС.

    Большая часть проводок бух. учета в ERP строится по данным регистров оперативного учета. Поэтому любое введение таких документов как запись книги покупок или книги продаж или ручной операции скорее всего приведет к ошибке в регламентированном учете, так как программа такие операции попросту «не заметит». Другое дело, что ручные операции в программе требуется вводить крайне редко, практически любую операцию можно ввести специальным документом и корректными настройками отражения документов в рег. учете.

    Reply
  2. MuI_I_Ika

    (1)

    практически любую операцию можно ввести специальным документом

    каким документом можно корректно сделать сторно НДС?

    каким документом корректно можно включить в книгу покупок НДС по авансовому отчету?

    каким документом можно было до редакции 2.2 отнести входящий НДС на расходы?

    ну и так далее. Невозможно предусмотреть специальные документы для каждой операции, хотя некоторые и пытаются. Есть принципы на которых строится бухгалтерский учет, они прозрачны и понятны для всех. Существует бесчисленное количество хоз. операций, которые укладываются в эти принципы. И если уж городить какие-то надстройки, то они как минимум должны покрывать весь кусок учета а не какую-то его часть, хоть и большую. Если уж существует документ операция с возможностью сторно, то уж будьте добры включите в него движения по соответствующему регистру, как это сделано например с регистрами НДС покупки, НДС продажи. Если есть авансовый отчет, то уж будьте добры сделайте движения по соответствующему регистру, хоть и по дополнительной галочке. Если есть документ запись книги покупок/продаж и он делает движения по 19 счету, то не забудьте сделать движения по регистру.

    (1)

    ручные операции в программе требуется вводить крайне редко

    сразу от сердца отлегло. отлично, у меня на 100 000 обычных проводок, и 2 000 сделаны ручными операциями. С точки зрения статистики это крайне редко. А с точки зрения одномоментного исправления после обновления это ад.

    (1)

    введение таких документов как запись книги покупок или книги продаж или ручной операции скорее всего приведет к ошибке в регламентированном учете

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

    Reply
  3. user633533_encantado

    (2) каким документом можно корректно сделать сторно НДС

    Корректировка поступления, например.

    (2) 2 000 сделаны ручными операциями.

    Какие, например ? Я спрашиваю не о забалансовых счетах. Действительно есть часть операций, которые в ERP нужно вводить ручными операциями. Но обычно они достаточно редки.

    По поводу записи книги покупок, которую проигнорирует документ «Распределение НДС», если не откорректировать регистры у меня есть ответ от 1С:

    «Все-таки в настоящий момент документ позиционируется, как инструмент корректирующий (дополняющий) исключительно Книгу покупок (с отражением в Дт 68). »

    Действительно, часть операций с НДС в ERP 2.1 было сделать нельзя, но это не значит, что если нет специального документа, то поможет ручная операция, это не бухгалтерия, ручные проводки наплодят еще больше ошибок. Разбираться с «краснотой» на 19 счете в конце квартала это не нормальное ведение учета.

    Reply
  4. MuI_I_Ika

    (3)

    Корректировка поступления, например.

    И как там может изменить НДС не меняя саму накладную?

    (3)

    Какие, например ? Я спрашиваю не о забалансовых счетах.

    Мы обсуждаем исключительно 19 счет и входящий НДС. Он забалансовым не является.

    (3)

    Но обычно они достаточно редки.

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

    (3)

    что если нет специального документа, то поможет ручная операция…это не нормальное ведение учета.

    Вот это не понял. А что тогда поможет? А что в таком случае нормальное ведение учета? Какие подходы вы применяете в своей работе делитесь опытом. Как вносили остатки например

    Reply
  5. MuI_I_Ika

    (3)

    «Все-таки в настоящий момент документ позиционируется, как инструмент корректирующий (дополняющий) исключительно Книгу покупок (с отражением в Дт 68). «

    Не хотел отвечать на комментарий 1с Все таки не хорошо обсуждать людей, которых с нами нет. Так вот я так же регулярно получаю подобные отписки и это буквально дословно получил. Но мне если честно по барабану как они там что позиционируют. Меня как пользователя интересует удобный инструмент для ведения бизнеса. В данном случае он не удобен мягко говоря. И вот это я обсуждаю.

    Да так к сведению. Откорректировать исключительно 68 счет невозможно, по любому будет еще и корреспонденция. Это тому кто писал такой грамотный ответ.

    Reply
  6. belovo3000

    Красиво описаны проблемы, прям детектив

    Reply
  7. user633533_encantado

    (4) «Мы обсуждаем исключительно 19 счет и входящий НДС».

    Так и какие же операции связанные с 19 счетом вы ведете ручными операциями ? И как вы его потом закрываете ?

    (2) » у меня на 100 000 обычных проводок, и 2 000 сделаны ручными операциями»

    А у меня стоит запрет бухгалтерам вводить ручные операции по незабалансовым счетам. Если такая потребность возникает, то нужно разбираться — почему ? Обычно выясняется, что не надо. Просто в ERP бух. операция больше не является одним их основных документов для отражения регл. учета, как это было и есть в бухгалтерии 2.0 и 3.0, но многие это до сих пор не поняли.

    В общем, действительно, я зря заявил, что без операций можно обойтись. Но если такая потребность возникает, то нужно регистрировать ошибку или создавать пожелание на доработку, как делал я, а не ругать косяки программы. Например в 2.1 нет возможности придержать к распределению НДС, до окончания строительства ОС, в 2.2 она теперь есть, надеюсь в том числе и из-за моих писем.

    Reply
  8. MuI_I_Ika
    Reply
  9. MuI_I_Ika

    Вот вам пожалуйста свежий пример. В прошлом отчетном периоде сделали неправильно возврат товаров от клиента. Указали, что сума не включает НДС. Хотя сумма включает НДС, просто клиент на УСН. В результате программа накрутила сверху НДС и вернули товар на большую сумму, чем нужно. Соответственно необходимо увеличить дебиторскую задолженность клиента.

    В системе отсутствует документ Корректировка возврата товаров от клиента. А нам нужно откорректировать взаиморасчеты и НДС. Что будем делать?

    Reply
  10. MuI_I_Ika

    Еще один свежий пример. На импортное поступление (без НДС) есть оказание услуг с НДС, стоимость которого распределена на себестоимость товаров.

    При реализации товара программа по одной только ей известной причине НДС с услуг, который уже полностью закрыт включает на себестоимость реализуемого товара. Причем даже если допустить что это правильно не делается восстановление с 68 счета.

    Вот каким документами мне предлагается вносить корректировки по такой фигне?

    Reply
  11. user633533_encantado

    (10) Ну , например, в этом случае я бы в первую очередь задался вопросом, откуда программа увидела в оперативном учете НДС, если в регл. учете его нет ?

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

    «1С неправильность выбранного подхода, поскольку все регламентированные возможности для этого были исчерпаны»

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

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

    А статья ваша полезная, я планирую переход на 2.2 после сдачи отчетности за год, хорошо знать о подводных камнях.

    Reply
  12. MuI_I_Ika

    (11)

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

    Не могу не согласиться. Только одна ремарка.

    Для учета НДС в ERP использует 3 регистра накопления:

    НДС записи книги покупок

    НДС записи книги продаж

    НДС предъявленный.

    А в такой программе к которой вы все время апеллируете 1С:Бухгалтерия сколько бы вы думали? Как минимум 13

    Не утверждаю, что там ошибок меньше. Просто говорить что в одной программе есть трансляция из регистров, а в другой нет, не совсем корректно или совсем некорректно. Это скорее маркетинговая уловка 1С, нужная для более «гладкого» внедрения, но которую почему-то пытаются транслировать все специалисты.

    Разница лишь в том, что в бухгалтерии у вас проводки появляются сразу при проведении, а в ERP они формируются регламентным заданием. Но сути вопроса это не меняет. Такое решение как бухгалтерия предприятия уже давным давно использует оперативные регистры для вспомогательных расчетов.

    Сам по себе принцип трансляции данных из оперативного учета в бухгалтерский далеко не нов, а скорее наоборот. Первое такое решение на 1С появилось еще в версии 7.7 на Комплексной конфигурации.

    Reply

Leave a Comment

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