Расчет страховых взносов: итоги по разделу 3, дополнительный отчет-расшифровка




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

28 Comments

  1. RailMen

    Коллега, посмотрел ваш отчет.

    Несколько комментариев:

    1) Если отчеты были сформированы в 115-117 релизах, то они не видны в форме подбора рег отчета, приходится снимать отбор;

    2) Ваш отчет не на СКД, «покрутить» я так понимаю нельзя. Мой отчет на СКД, компоновать его можно, но сложно 😉

    3) Ваш отчет крайне медленно формируется если в организации более 1 тыс сотрудников. Я так и не дождался когда же он сформируется…

    Мой на порядок[и] быстрее 😉 для больших объемов данных.

    4) Несомненный плюс вашего отчета — это очень понятные и конкретные расшифровки ячеек разделов.

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

    Reply
  2. due

    (1)

    Итоги по 3-му разделу формируются достаточно быстро, пункт меню «Вывести итоги».

    Вывод персональных данных по 3-му разделу в общую таблицу формируется не очень быстро т.к. используется механизм из типового отчета, пункт меню «Все страницы».

    Reply
  3. leosoft

    Вот если бы такой же свод, но по данным самого файла xml!

    Reply
  4. due

    (3) [2017-04-26] Добавлена возможность формирования свода по выгруженному файлу xml

    Reply
  5. FKLDOZ

    Спасибо за отчет! Думаю расчетчику пригодится.

    Reply
  6. leosoft

    (4) Супер! Отчет будет работать в любой конфигурации или только в ЗУП 2.5? Интересует проверка файлов, выгруженных из сторонних программ.

    Reply
  7. due

    (6) [2017-04-26] Добавлена возможность запуска в конфигурациях без регламентированной отчетности, для формирования отчета по файлу xml

    Reply
  8. leosoft

    (7) Спасибо! Работает, правда в Бухгалтерии 3.0 не запустился.

    Для полноты картины желательно нумеровать сотрудников в расшифровках т.к. количество важно

    Если нет вредников — в раздел 3.2.2 загоняет просто список всех.

    Хотел найми макет СКД, но не понял — где он спрятан

    Reply
  9. leosoft

    (7) Макет нашел 🙂

    Reply
  10. due

    (8) [2017-04-27] Добавлена возможность запуска отчета в управляемом приложении, для формирования отчета по файлу xml. Добавлена возможность изменения макета итогового отчета.

    Reply
  11. leosoft

    Спасибо! Проверил на Бухгалтерии 3.0 — работает отлично!

    Reply
  12. leonsk2010

    Ошибки при запуске в зуп 2.5.118.1:

    {Форма.ФормаОтчета.Форма(70,9)}: Процедура или функция с указанным именем уже определена (ПечатьЗаПериод)

    Функция <<?>>ПечатьЗаПериод(ИмяМакета, ВнешниеНаборыДанных, Результат = Неопределено)

    {Форма.ФормаОтчета.Форма(269,9)}: Процедура или функция с указанным именем уже определена (ИмпортДанныхРегламентированнойОтчетностиИзКонтейнераXML)

    Функция <<?>>ИмпортДанныхРегламентированнойОтчетностиИзКонтейнераXML(ИмяФайла) Экспорт

    Reply
  13. due

    (12) проверьте, пожалуйста, на последней версии отчета. Я ее выложил в 19-00. Честно говоря, проверял сейчас специально на релизе 2.5.118 и 3.1.2.212 такой ошибки не возникает. Может у вас измененная конфигурация ЗУП и используется такое же имя функции? Переименую функции чуть позже, чтобы уже не возникало конфликтов с объявленными функциями конфигурации.

    Reply
  14. leosoft

    Аналогичная диагностика сегодняшней обработки.

    А вчерашняя 004 — нормально работает!

    Reply
  15. leosoft

    Попробовал в ЗУП 3.1

    Исходный отчет если выбирать через диалог — он не выбирается — при двойном клике выбирается сам отчет РСВ. Если вручную вводить «Расчет … » — тогда можно выбрать. Далее формируются два экземпляра!

    Reply
  16. due

    (12) Изменил названия функций. Проверьте, пожалуйста!

    Reply
  17. due

    (15) Изменил порядок компоновки, сейчас выводится один экземпляр. Проверьте, пожалуйста!

    Reply
  18. leonsk2010

    а чем отличаются 2 выложенных для скачивания отчета? (где последняя версия?)

    Reply
  19. leonsk2010

    (12)в обновленной версии 0006 — таких ошибок («..ф-я уже определена..») — уже нет. Спасибо.

    Reply
  20. leosoft

    (16) Все работает и в ЗУП 2.5 и в ЗУП 3.1. По-прежнему в ЗУП 3.1 не дает в диалоге выбрать отчет! Только если руками в поле выбора первые символы писать.

    Reply
  21. leosoft

    Сергей, а количество сотрудников в подчиненных группировках сложно сделать?

    Я попробовал добавить ресурс Количеств(…)Н, но что-то у меня не получилось.

    Reply
  22. leosoft

    (21) Вопрос снят — добавил системное поле НомерПоПорядкуВГруппировке

    Reply
  23. due

    (20) [2017-05-30] Добавлена форма выбора регламентированного документа в ЗУП 3.

    Reply
  24. smooth

    (0) Скажите, в отчете нет возможности сверить с данными регистров? т.е. не просто данные 1-го раздела с данными 3-го, а еще и с «реальными» данными в БД (например, отчета «Анализом налогов»)

    Если нет, то было бы шикарственно иметь такой функционал 😉

    Reply
  25. due

    (24) посмотрите здесь http://infostart.ru/public/612943/

    Автор пишет, что

    1. Иван Пантелеев (RailMen) 674 25.04.17 18:13

    Коллега, посмотрел ваш отчет.

    Несколько комментариев:

    1) Если отчеты были сформированы в 115-117 релизах, то они не видны в форме подбора рег отчета, приходится снимать отбор;

    2) Ваш отчет не на СКД, «покрутить» я так понимаю нельзя. Мой отчет на СКД, компоновать его можно, но сложно 😉

    3) Ваш отчет крайне медленно формируется если в организации более 1 тыс сотрудников. Я так и не дождался когда же он сформируется…

    Мой на порядок[и] быстрее 😉 для больших объемов данных.

    4) Несомненный плюс вашего отчета — это очень понятные и конкретные расшифровки ячеек разделов.

    5) В свою публикацию сделал ссылку на ваш отчет, т.к. считаю он может быть полезным для более полного раскрытия темы.
    Reply
  26. Alexander_86

    рабает на 119 или 120 релизах??

    Reply
  27. due

    (26) не знаю, как насчет рабает — работает, это да.

    Reply
  28. 127.0.0.0

    может кто подскажет как скопировать стандартный Расчет страховых взносов в exсel ? (видимо заблокировано на форме.) имеется виду общая таблица (ту что видно при открытии подраздела ) , а не что что уходит на печать.

    Reply

Leave a Comment

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