Отчет по начисленным отпускным и налогам




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

19 Comments

  1. Seregalink

    Только почему то файл от 1С 8, а где же файл от 7.7 заявлена в публикации обработка под 7.7 и картинки тоже от 7.7?

    Reply
  2. Seregalink

    При скачке, скачивается файл Otpuskasnalogamizaperiod.epf, где расширение от 8, переименовал на *.ert, и открыл в конфигураторе все открылось!!! Проверил отчет, почему то не выводятся Отпуск очередной и Отпуск дополнительный, выводятся только Отпуск учебный и Компенсация отпуска при увольнении, может еще что-то надо настроить?

    Reply
  3. gutentag

    ….помнится, что для зарплаты(или для 7 или для 8) на сайте был отчетик проверяющий закрытие 97-счета

    Reply
  4. TrinitronOTV
    Seregalink пишет:

    При скачке, скачивается файл Otpuskasnalogamizaperiod.epf, где расширение от 8, переименовал на *.ert, и открыл в конфигураторе все открылось!!! Проверил отчет, почему то не выводятся Отпуск очередной и Отпуск дополнительный, выводятся только Отпуск учебный и Компенсация отпуска при увольнении, может еще что-то надо настроить?

    автор ответит на данные вопросы? жду

    Reply
  5. RealRet

    Извиняюсь, почта не получалась, вопросов не видел.

    1.Видимо при загрузке так переименовалось, я грузил файл «Отпуска с налогами за период.ert». Просто поменяйте расширение

    2. Сейчас проверю в чем дело

    Reply
  6. RealRet

    Файл перезалил. Была ошибка в поиске сотрудников для расчета проводок. Теперь должны все попадать.

    Главное, чтобы документ «Начисление отпуска» был расчитан, а также начислены все налоги за период, иначе в отчет не попадет, т.к. используется глПроводкиЗаПериод.

    Reply
  7. Seregalink

    (2) Seregalink, посмотрел модуль отчета там не учитывается резерв отпусков 96 счет, у меня проводка на отпусках (очередной и дополнительный стоит проводка Дт 96 Кт 70). Если запрос делаешь через документы, есть вариант потерять какие-то документы, у меня не подбирался сотрудник у которого было исправление отпуска, переделал запрос по журналу расчетов зарплаты все сотрудники сразу появились. Сейчас делаю отчет, чтобы отпуска ложились на 96 счет, а потом подвязывалась текущая проводка сотрудника, например Дт 20 Кт 70, для учета куда же должны были пойти затраты по старому без резерва.

    Reply
  8. RealRet

    У нас резерв в бух вручную делается, отчет как раз для снятия с резерва отгулянного.

    Переделал поиск сотрудников на запрос по ж/р и добавил учет 96-го счета.

    Reply
  9. vkr

    (0) А будет ли учитываться разделение 96 счета на 2 (или более) субсчета, как указано в моей публикации

    «Методика расчета резервов отпусков (счет 96) в 1С Зарплата и Кадры 7.7 с 2011 года (вариант)» ?

    Reply
  10. RealRet

    9: В настоящей версии, субсчета не учитываются, но если кому-то нужно, там легко переделать — просто убрать обрезку субсчета, при записи счета в таблицу: в 139-й строке счетДТ заменить на ТаблицаКорреспонденций.СчетДебета

    Reply
  11. RealRet

    Добавил версию с делением на субсчета

    Reply
  12. RealRet

    Добавил разворот по субсчетам Кт (файл Отпуска с налогами за период субсчета.ert)

    Reply
  13. Aleks_PV

    спасибо, пригодилась!!!

    Reply
  14. flash82

    спасибо очень пригодилось!!!

    Reply
  15. olegpochekutov

    Спасибо очень помогло

    Reply
  16. Vida

    Подскажите, может кто-нибудь видел подобное по 8.2?

    Reply
  17. makas

    (18) Vida,

    Подскажите, может кто-нибудь видел подобное по 8.2?

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

    http://infostart.ru/public/147681/

    Reply
  18. safia-med

    не пойму — только для ЗИК?

    Reply
  19. RealRet

    20. Тестировалось только на ЗиК, причем довольно древней. Сейчас клиент этот на 8.2, поэтому давно не используется. Наверняка будет работать на комплексной, но не проверял. Сейчас вообще мало кто на 77 остался

    Reply

Leave a Comment

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