Состав облагаемых баз начислений + налоги




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2026-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='\

18 Comments

  1. dovgal_yuriy

    хочешь коментариев, а не даешь скачивать…

    Reply
  2. husky

    присоединяюсь ко всем, нет возможности скачать, сбрось плиз zudov@onego.ru

    Reply
  3. soft25

    всегда пожалуйста…….голосуйте если пргодилось….а то абыдно слюшай.да-а…..

    Reply
  4. irisha

    А почему суммы налогов и по бюджету и по внебюджету одинаковы? Какой тогда смысл указывать источники финансирования?

    Reply
  5. soft25

    Ириша, прошу прощения. бюджетом не занимаюсь….не делал…

    Reply
  6. Assembler

    Отчет полезный, но попытался получить его по большой конторе (около 1500 сотр), дождался «вывод печатной формы» и она ушла в себя. После часа выключил. Может надо было больше ждать ? Памяти 1 гб, частота 2100.

    Reply
  7. soft25

    Assembler, не знаю в чем дело…такой базы у меня нет, тестил на базе в 500 чел., памяти 1гб, 2.8 двухядерный, крутил..всего 2 мин…..

    Reply
  8. Assembler

    Юрий ! Может быть пригодится. Процесс замедляется с увеличением периода отчета. Это естественно. При этом процесс сбора данных по времени возрастает гораздо медленнее вывода печатной формы. Взял 1 месяц. 5 минут сбор, 8 минут печать. Полгода — 20 минут и 2 часа 20 минут соответственно. А по году ?

    Reply
  9. soft25

    Assembler, я думаю….подтормаживать может еще из-за обработки таблиц расшифровки, по большому счету их можно убрать….будет немного быстрее.

    Reply
  10. Assembler

    Юрий, я извиняюсь, вот с места «их можно убрать» чуть подробнее нельзя ?

    Reply
  11. soft25

    Сергей, залезть в модуль, и удалить лишнее которое напрямую не связано с обработкой результата, а отвечает лишь за формирование при расшифровке ячеек, потом если ндфл не сильно нужен его тоже можно убрать, из-за него сильно подтормаживает, поиграйтесь с модулем, но сильно не спасет….имхо.. все зависит от того что вы хотите иметь, пути достижения разные, если не нужны налогооблагаемые базы будет еще проще, я думаю быстрее всего будет если юзать только запросами, хотя могу и ошибаться…

    Reply
  12. irinka-m2005@yandex.ru

    можно и мне глянуть, плиз

    Reply
  13. nitroimx

    Судя по всему делалось на основе инд. карточки по ЕСН отсюда и тормоза некоторые.

    Состав облагаемых баз можно было взять из свода по заработаной плате — выйдет быстрее, хотя и не совсем по данным учёта, например НДФЛ можно получить так:

    Код
     НДФЛ = глЧислоВФорматеПользователя(Запрос.СуммаНачисления*Расчет.ВходитВГруппу(ГруппаРасчетов.ОблагаетсяНДФЛ));

    Показать полностью

    При желании можно получить отчёт помесячно или с начала года.

    Со второй частью сложнее, наверное воспользуюсь вашей разработкой 🙂

    Reply
  14. nksk

    Вопрос, а можно ли добавить аналитику по сводным проводкам??

    Было-бы круто!

    Reply
  15. LL57101

    Отчет понравился, пригодилось

    Reply
  16. марокко

    Спасибо огромное, именно то что я искала ))))))))

    Reply
  17. koliaff

    Супер !!! Спасибо, то что нужно !!

    Reply
  18. koliaff

    В отчет, в столбец «ПФР страх. и накопит.» не попадает налог начисленный на ВР «Компенсация отпуска при увольнении» (актуально в 2010 году). Если не трудно, исправь пожалуйста !

    Reply

Leave a Comment

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