НДС по приобретенным ценностям. Переход на раздельный учет НДС




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

    Оборотка берет только партии «Поступление товаров», остальные входящие партии (например, Оприходование, Ввод начальных остатков) во внимание не берутся

    Reply
  2. forsagforsag

    (1)Ну да, если внимательно почитать описание публикации, там в п. 2 об этом явно написано.

    Reply
  3. Arguleon

    Код обработки открытый?

    Reply
  4. forsagforsag

    (3)конечно открытый

    Reply
  5. Порт

    с 10сч . будет работать?

    Reply
  6. forsagforsag

    (5) Будет, но выбор счета сделан в тексте запроса — нужно изменить в некоторых местах название счета «ТоварыНаСкладах» на название 10 счета.

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

    Reply
  7. Tadoss

    Почему обработка не заполняет Склад?

    Reply
  8. Tadoss

    Здравствуйте! Мне срочно нужно ввести раздельный учет по НДС,. Учет ведется по разным складам. В Вашей обработке есть поле склад в таблице. но это поле не заполняется. Как быть?

    Reply
  9. forsagforsag

    (8)Здравствуйте. Да, по складам здесь не разбивает.

    Могу переделать с отбором по складам, тогда для каждого склада отдельный документ ввода остатков сделаете. Если делать чтобы в 1 документе сразу по всем складам остатки вносились, то пока некогда. Только за доплату какую нибудь.

    Reply
  10. Tadoss

    (9)Спасибо за ответ. Меня устроит и разными документами. Складов не много. Заранее спасибо.

    Reply
  11. forsagforsag

    (10)Сделал новую версию — можно вносить остатки по складам. Если на складах ведется суммовой и количественный учет.

    Reply
  12. Tadoss

    (11) Спасибо. А как скачать новую версию. Снова за плату на той же странице?

    Reply
  13. Gotcha

    Здравствуйте, обработка работает при включенном партионном учете?

    Reply
  14. forsagforsag

    (13)День добрый.

    Наверное сработает, но партии подбираются не из субконто Партии а из регистратора прихода на 41 Сч.

    Reply
  15. вик

    Добрый день!

    Скачал. Заменил наименование счета на Материалы.

    Все равно ничего не выбирает для заполнения.

    Может еще чего нужно подкрутить?

    Проблема именно со списанием материалов (продукты питания в детский сад, запчасти на автомобили…)

    Грехи прошлых лет по регистру НДС по приобретенным ценностям

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

    Может подскажите, что еще подправить?

    Кстати, склад один, поэтому разбивка по складам не принципиальна

    Reply
  16. forsagforsag

    (15) 1. Материалы — это группа счетов, обработка смотрит остатки по конкретному счету.

    2. В обработке 2 запроса -может не везде счет заменили?

    В новой версии выбор счета сделан в самой обработке.

    Reply
  17. вик

    Огромное спасибо!

    Скачал последнюю версию. Чуть-чуть придется конечно подкрутить — В операцию несмотря на выбранный счет пишется 41.01 и ВидЦенности Товары (хотя на 10-х это материалы), но это легко поправляется.

    СПАСИБО!!!

    Reply
  18. forsagforsag

    (17)Спасибо и Вам.

    Исправил счет и вид ценностей.

    Reply
  19. вик

    🙂

    Reply

Leave a Comment

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