Модифицированные обработки: — Форма 1-НДФЛ 2009 и Подготовка сведений для ПФР 2010 + исправление — Форма СЗВ 2010.ert, — в помощь бухгалтеру ОСНУСН




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

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

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

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

    Друже, что такое «ЗАМЕНИТЕ в своей конфигурации — Обработку ФормаСЗВ2010 — на ВНЕШНИЙ отчёт ФормаСЗВ2010.ert», я умею только в Сервисе-Доп возможности- выбирать и управлять доп отчетами, предварительно их поместив в папку Экстформс. Моя проблема в УСН177- человек уволился 30,06,10, страховые взносы за него уплачены в июле(естественно), а она, зараза, пишет ему стаж с 01,09,10 по 30,09,10(?????), другой чел уволился 10,03,10,, за него уплата взносов непонятно почему проходит во втором полугодии(хотя особых долгов по уплате взносов по предприятию не было), а стаж ему указывается с 01,12,10-по 31,12,10(????). При проверке выдаются предупреждения, что стаж есть, а начисления взносов нет. Вот такая фигня…. Поможет ли Ваша обработка решению этой проблемы?

    Если «ДА», то напишите, пожалуйста, подробнее, пошагово, как воспользоваться практически Вашей обработкой (типа:Конфигуратор-конфигурация-обработки- есть там формаСЗВ2010, а как ее заменить?

    Спасибо

    Reply
  2. ondul

    🙂 Понимаю…

    Заходим в режиме Конфигуратор нужной базы.

    Жмём пиктограмку редактировать конфигурацию (левее пиктограмки с биноклем — поиск во всех текстах).

    В поле поиск, вводим ФормаСЗВ2010, находим обработку ФормаСЗВ2010, она подсвечивается, правой кнопкой в выпадающем меню выбрать: «Заменить на внешний отчет(обработку)…» — указываем на файл ФормаСЗВ2010.ert из папки УСН распакованного архива — соответствующей вашей конфигурации УСН177, соглашаемся, сохраняем конфигурацию — обработка из внешнего файла интегрировалась в вашу конфигурацию.

    — После этого и получаете возможность работать с обновлённой формой ФормаСЗВ2010!

    🙂

    Reply
  3. ondul

    :-)Понимаю…

    Заходим в режиме Конфигуратор нужной базы.

    Жмём пиктограмку редактировать конфигурацию (левее пиктограмки с биноклем — поиск во всех текстах).

    В поле поиск, вводим ФормаСЗВ2010, находим обработку ФормаСЗВ2010, она подсвечивается, правой кнопкой в выпадающем меню выбрать: «Заменить на внешний отчет(обработку)…» — указываем на файл ФормаСЗВ2010.ert из папки УСН распакованного архива — соответствующей вашей конфигурации УСН177, соглашаемся, сохраняем конфигурацию — обработка из внешнего файла интегрировалась в вашу конфигурацию.

    — После этого и получаете возможность работать с обновлённой формой ФормаСЗВ2010!

    🙂

    Reply
  4. Креатив

    Доброго времени суток. В отчёте ПодготовкаСведенийДляПФР2010.ert есть непонятные моменты. Скажем, сотрудник уволился. Соответственно, по нему нужно, чтобы начисленная сумма совпала с выплаченной, а если он уволился в 1-м полугодии, то чтобы остаток не уплаченной суммы появился в отчёте за 2-е полугодие. Я понимаю, что это сделать непросто. Но проблема ещё и в том, что если удалить этих сотрудников из пачки, то к великому разочарованию сумма к распределению тоже уменьшается.

    Отсюда вопрос. Откуда берётся сумма выплаченных взносов и как она распределяется?

    Reply
  5. ufo58

    отличная работа

    спасибо

    только, обрати внимание на это:

    http://infostart.ru/public/80216/

    (для УСН это строка 12011)

    Reply
  6. Креатив

    Спасибо за ответ. Соответственно пожелание. Хорошо бы описание всех косяков иметь в одном месте. Файл прочти — очень удачное место для этого.

    Reply
  7. ondul

    — (6) — Креатив > — Невозможно быть во всех местах сразу…. — У меня тоже есть работа на выезде и желание отдохнуть, потому, как только возникает проблема, берусь анализировать…

    Вообще-то, судя по анализу в отчете ПодготовкаСведенийДляПФР20

    Reply
  8. еленав

    Здравствуйте,мучаюсь с отчетом в пфр,умные люди подсказали ваш сайт.Я когда захожу в конфигуратор окно-пиктограмма редактировать конфигурацию -не активно.У нас 1с 7.7. усн 177 релиз.Прошу помощи.Спасибо

    Reply
  9. ondul

    (8) — еленав > — У вас базовая версия (не редактируемая конфигурация). Если вы договоритесь с кем-то, кто работает с типовыми конфигурациями, взять копию вашей базы для преобразования в типовую — не базовую — для последующего редактирования, тогда сможете воспользоваться предлагаемыми здесь настройками для сдачи отчетности, не трогая свою базовую до очередного обновления, когда, возможно, часть проблем будет снята, но уповать на дядю не стоит — так как вообще не известно, сколько ждать исправления проблем от фирмы 1С.

    — если сбросите zip-архив базы на п/я, попробую помочь.

    — отправил. 🙂

    Reply
  10. KokAN

    Обработка классная! Помогла 🙂

    Reply
  11. Konstantin_sgt

    Отдуши, масть)

    Reply
  12. Konstantin_sgt

    никто не делал обработку для эспорта из xml в pf?

    Reply

Leave a Comment

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