Проверка расчета и начисления страховых взносов, ЗиК 7.7




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

35 Comments

  1. Свой

    а почему ДБФ ? ведь в коде не используются прямые запросы

    Reply
  2. lookindenis

    Имелось ввиду 1С:Предприятие 7.7 файлового варианта DBF/CDX поставки, т.е. все локальные, базовые, сетевые версии программы 1С (кроме SQL-версии)

    Reply
  3. victuan

    А почему на SQL не будет работать?

    Reply
  4. lookindenis

    не пробовал, нет возможности=)

    поэтому и написал так,

    будьте любезны, попробуйте, если работает

    я поправлю в шапке.

    Reply
  5. Lord2011

    материальную помощь при рождении не учел, вышла в ошибки

    Reply
  6. aimerlive

    поясните пожалуйста что же такое «ЖСС» . И механизм подсчета ошибок.

    Переделывала этот отчет под комплексную конфигурацию и получила что у меня все расчеты не правильные.

    Поясните пожалуйста.

    Reply
  7. lookindenis

    2 Lord2011, спс

    у нас этот вид оплаты не используют, и он стоит в составе необлагаемой части видов оплаты, посмотрю, постараюсь исправить.

    Reply
  8. lookindenis

    2 aimerlive, спс за вопрос =)

    «ЖСС» — Журнал расчета страховых взносов.

    в конфигурации — ЖурналРасчетов.СтраховыеВзносы

    механизм

    — собрал облагаемые начисления, насчитал взносы (за год, за период до последнего месяца)

    — собрал начисленные в ЖСС взносы (за год, за период до последнего месяца и за последний месяц)

    — из суммы за год вычел сумму а период до последнего месяца

    — сравнил с начисленными 1С’ом

    — в колонку вывел ошибки

    как-то так.

    пришлите таблицу с ошибками, постараюсь разобраться.

    Reply
  9. vostdnn

    у меня упрощенка.

    обработка посчитала возможным начисление ТФОМС, ФФОМС и страховые — 20%

    Reply
  10. lookindenis

    2 vostdnn, спс за сигнал.

    написано не для упрощенки.

    внес уточнение в шапку.

    Reply
  11. vostdnn

    пособие по уходу за ребенком до 3-ех лет облагается страховыми?

    Reply
  12. lookindenis

    2 vostdnn, спс за вопрос.

    с точки зрения налогов — ПособиеПоУходуЗаРебенкомФЗП- это компенсация, а если вы платите свыше 50руб (кол. договор) — обычная выплата,

    и да, она облагается.

    Reply
  13. vostdnn

    12. lookindenis

    платим ровно 50 рублей и в графе «месяц табличный» на эту сумму начислены страховые взносы.

    Reply
  14. lookindenis

    (13) 2 vostdnn

    Функция глВходитВБазу(ВидРасчета1,ВидРасчета2);

    стандартная.

    Пос. по ух. за реб. до 1,5 л., Пос. по ух. за реб. до 3 л. — в стандартной базе 1С не входят в состав облагаемой базы страховых взносов.

    Обработка использует эти данные.

    возможно у Вас что-то не так стоит?

    Reply
  15. lookindenis

    Исправления:

    — переназвал в табличке «ЖСС» — Журнал расчета страховых взносов.

    — учел материальную помощь при рождении.

    — SQL-версии должно работать (причем быстрее)

    — изменил на корректное обращение к видам оплаты (стояло по коду, которого в стандартной нет)

    — изменил на корректную проверку договорников (было по табельному номеру)

    — поправил запрос, должен работать в 1,7 раза быстрей

    — ну и так, по мелочам =)

    В планах:

    — добавить возможность выбора запрос/прямое обращение к журналу зарплаты (запрос у некоторых работает медленней)

    — заменить цифры 415000, 50000, 4000 и % налогов на переменные и добавить возможность устанавливать их самостоятельно (упрощенка будет работать)

    Reply
  16. lookindenis

    приношу извинения, в загрузке стоял нерабочий файл,

    сейчас заменю

    Заменил на рабочий.

    Огромное спс за сигнал user1C

    предыдущий файл был началом переделки под прямое обращение к Журналу зарплаты, он не работал, но если его доковырять =) можно использовать (удобно для работы прямо на сервере)

    Будет время доведу до ума его сам и вывешу.

    Еще раз спасибо user1C’у.

    Reply
  17. Bonis

    Если штатный сотр получил ещё и по договору, то он попадает в договорники, все его начисления кроме договора становятся почему-то нестандартной оплатой и ФСС краснеет… Разве штатный сотрудник не имеет права заключить ещё и «Договор гражданско-правового характера» с предприятием?

    Reply
  18. lookindenis

    (17)

    2 boninfostart

    Нет, не имеет (по закону).

    В Вашем случае его придется уволить, создать новую стр. в справ. Сотр.,

    со статусом договорник, потом принять обратно на работу =)

    Reply
  19. Bonis

    Так как имею такой договор с организацией, в которой работаю, вопрос у меня посерьёзнел после вашего ответа (18) В инете нарыл кое-что, вот цитата:

    Российское законодательство не запрещает работодателям заключать со штатными работниками договоры гражданско-правового характера. К таким выводам приходят судьи в своих решениях (см., например, постановления ФАС Поволжского округа от 07.06.2008 № А55-14265/2007, от 18.03.2008 № А55-11216/07, ФАС Московского округа от 25.06.2008 № КА-А40/5506-08). При этом судьи ФАС Поволжского округа в постановлении от 18.03.2008 № А55-11216/07 обращают внимание на положения ст. 421 ГК РФ, согласно которой граждане и юридические лица свободны в заключении договоров.

    отсюда и практически мой случай отсюда. Возможно, тут не всё так категорично. По какому закону не миеет, не подскажете? Может уже всё изменилось?

    Reply
  20. lookindenis

    (19)

    2 boninfostart

    Возможно, тут не всё так категорично.

    Да, возможно.

    Для меня закон = бух+1С…

    =)

    для буха закон = требования органов…

    можно оспаривать некоторые из них, но это,

    как правило, себе дороже.

    Охота Вам возится с судами и массой проверок ради пары К рублей?

    з.ы. попозжей посмотрю «закон», по которому низя.

    Сейчас некогда, сорь.

    Reply
  21. RonKa

    Плюсую пока что 🙂 На работе проверю как раз… Если что не так отпишусь.

    Reply
  22. lookindenis

    (21)

    2 RonKa

    Спс =)

    Reply
  23. RonKa

    (22) Отписываюсь 🙂 Вещь полезная, но мне не пригодилась в этот раз

    1. При использовании ЕСХН ставки другие, пришлось лезть в модуль и править

    2. Не сильно логично сначала нажимать выполнить а потом печать ) какой смысл?

    3. При ручной корректировке данных в карточке учета по данному отчету не поймешь откуда ноги растут при неверном заполнении РСВ, так что хорошо бы еще колоночку туда добавить.. если уж проверяем взносы

    4. При добавленных видах расчета (произвольных) выходит трогательная надпись неизвесный вид расчета.. это баг или фича? 😉

    Дальше не анализировала уже, проверили РСВ по старинке с помощью долота и какой-то матери )

    Reply
  24. lookindenis

    2 RonKa (23)

    «1. …» позже добавлю возможность, сейчас нет времени (писал уже об этом вродь =) )

    «2. …» согласен, остатки отладки, спс, исправлю.

    «3. …» не разумею, какую колонку? (сплю на ходу)

    «4. …» хм, не писал такого… у нас полно своих видов расчетов, и таких надписей не вылезало =)

    Вероятно, это что то в глобальном модуле у Вас висит, что выдаёт предупреждение.

    Еще раз спс за замечания, как смогу — исправлю =)

    Reply
  25. RonKa

    (24)

    к пункту 3 — данные по ручному редактированию карточки учета страховых взносов.. а то бывает цифра в РСВ есть, а в журнале расчета взносов пусто

    к пункту 4 — Предупреждение выдавала точно обработка, строка 354

    Сообщить(«Нестандартная оплата Договорнику «+Строка(оСотрудник)+» Код= «+сКодВО+» Месяц — «+оПериодЖурн+» Сумма — «+чСумма);

    Ну по памяти не совсем правильно воспроизвела ситуацию.. 😳

    А за замечания так всегда пожалуйста 🙂 Обращайтесь

    Reply
  26. lookindenis

    (25)

    «данные по ручному редактированию» гляну, вот с закрытием месяца отстанут от меня =) и посмотрю

    «Нестандартная оплата Договорнику » — хм… проверял на ВидРасчета ОплатаПоДоговору

    чужие, нестандартные предусмотреть не смог о_О

    Посоветуете? =)

    И снова спс за коменты.

    Reply
  27. RonKa

    (26)

    Посоветуете? =)

    Да ну его по большому счету 🙂 Сдались и то хлеб

    Reply
  28. lookindenis

    Исправления №2:

    — добавил слой с настройками ставок взносов, даты рождения молодой/старый и предельные, налогооблагаемые сумм (по умолчанию при первом открытии встают % для категорий налогоплательщиков — общий режим)

    — Кнопка «Сформировать» печатает сразу =)

    В планах:

    — дать возможность платить Договорникам по произвольным Видам Оплаты без ругани со стороны программы

    — добавить возможность выбора запрос/прямое обращение к журналу зарплаты (оставил на сладкое)

    Reply
  29. Темп

    «Не учитывает иносранцев, подбитых летчиков, северных медведей =) У нас их нет.» Простите, не поняла какую категорию работников вы назаваете «подбитые летчики»?

    Reply
  30. lookindenis

    (29)

    Ув Темп

    В стандартной конфигурации 1С ЗиК есть много обращений

    и проверок реквизита «НачисленоЛетчику» и подобным,

    такие проверки этот отчет не делает.

    Reply
  31. lookindenis

    Появилась свободная минутка и выяснилось, что расчетчики прошляпили где-то…

    вернулся к этой проверке, поправил.

    Исправление №3:

    — Настроил под 310 релиз

    — взносы в ФСС_НС собираются с Журнала Страховых Взносов

    — взносы в ФСС_НС появились в таблице отчета

    — для удобства намного раскрасил отчет и закрепил область шапки

    — строки с ошибкой округления меньше 2 копеек не показываются при печати «Только Ошибки»

    осталось:

    — ФСС и ФСС_НС не берётся с договорников при расчете, если начисляли, будет светить красным

    и в подвале напишет кому, когда, сколько, вид расчета дали

    — не выделил облагаемую баз ФСС отдельной колонкой

    это позже =)

    Reply
  32. vannav78

    Нет, не имеет (по закону).

    В Вашем случае его придется уволить, создать новую стр. в справ. Сотр.,

    со статусом договорник, потом принять обратно на работу =)

    Reply
  33. Arin

    Спасибо!!!

    Reply
  34. ric-77

    Спасибо за работу

    Reply
  35. post279

    Сейчас заценю

    Reply

Leave a Comment

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