Отчет по страховым взносам 2010




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

50 Comments

  1. KrakoZyabl

    Привет! Собирая базу страховых взносов, и исчисленные налоги вручную(запросами к журналу) конечно работает всё быстрее, но сразу вследствие этого вылезла ошибка: у нас у одного сотрудника материальная помощь в размере 6910 руб. а у налогооблагаемой базы у этого вида расчета предел 4000, т.е. 4000 руб не попадают в базу а всё остальное попадает. Обработка мне выдала сообщение проверить у этого сотра расчет. Как следствие база получилась на 4000руб больше..а налоги на самом деле правильные получились, т.к. 1 С их расчитывала 🙂 ..В этом случае наверно нада еще учитывать справочник «Скидки к доходам страховых взносов». Вручную конечно быстрее , но всех ньюансов не учтешь, на мой взгляд лучше «глСобратьДанныеДляСтраховыхВзносов». Но большой плюс что ты написал сам-значит всё с пониманием ❗ 😉 . Да еще маленькие пожелания: если в твоей обработке будет несколько выявленных расчетных ошибок, то она выведет только первую попавшуюся(цикл ИначеЕсли…) и хотелося бы еще чтобы при выборе критерия отбора Подразделение учитывались подразделения входящие в группу если выбрана группа, а то вот у нас, к примеру, Подразделения разбиты на четыре группы 🙁 ..ну штоб по отдельности если что выбирать, и ставки можно брать из справочника при проверке). А так плюсую 🙂 Видно — сделано с пониманием и осмыслением..видно по коду. 😉 🙂

    Reply
  2. su326

    Спасибо за ценные подсказки. Отчет подправил.

    Reply
  3. vt213

    Не показывает Облагаемую базу и соответственно выдает предупреждения . Хотя в журнале расчетов все цифры есть. И месяц январь закрыт.

    Reply
  4. klimat_oksana

    спасибо, работает, но ФСС НС у вас нет…. 🙁

    Reply
  5. KrakoZyabl

    (3) А ты рассчитал и начислил Страховые взносы ли? или по старому Начисление налогов с ФОТ и Расчет авансовый платежей ЕСН. ❗ Видимо ЕСН начислял 🙂

    Reply
  6. vt213

    (5) Нет в журнале .Только один документ «Начисление страховых взносов»

    Reply
  7. su326

    Всем спасибо.

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

    Теперь ставки берутся из справочника, правильно учитывается мат.помощь.

    ФСС_НС пока отсутствует.

    Правильный учет инвалидов еще не делал.

    Reply
  8. su326

    Почти релиз. 🙂

    Сделан ФСС_НС.

    Учтен статус сотрудника по начислению страховых взносов.

    Reply
  9. su326

    Еще доработки.

    Добавлена таблица по льготникам.

    Reply
  10. S_MIXA

    пишу неделю подобный, благодаря Вашему сэкономил время. Спасибо

    Внес два изменения:

    за комментировал

    //Сообщить(«Формирование отчета прервано Табл.к. есть не рассчитанные записи в журнале СВ. Пересчитайте страховые взносы.»);

    //Возврат;

    и добавил выбор по одному сотруднику 😀

    Reply
  11. su326

    жаль, скачиваний под 150, а плюсов всего 15 🙁

    Reply
  12. Kleva

    Всем привет.

    У меня не выводит облагаемую суммы за месяц и за год, хотя период закрыт (январь) взносы показывает а базы нет 🙁 . релиз 293 может я че не так делаю.

    В январе начислил з/п, страховые взносы (не налоги с ФОТ).

    Reply
  13. su326

    to Kleva

    непонятно

    А какой у вас основной вид расчета для начислений?

    Reply
  14. su326

    to Kleva

    и какая система налогобложения (общая, УСН или ЕНВД)?

    Reply
  15. Kleva

    Пишет внизу следующее:

    Проверьте расчет СВ у сотр.№ …… разница по ФСС: -870 / по ФОМС: -330 / по ТОМС: -600 / по ПФ: -6000

    и так по всем сотрудникам

    Начисление основное: Оплата по окладу

    Хотя есть и по табелю (почасовая), и разные доплаты

    Reply
  16. Kleva

    Общая система

    Reply
  17. su326

    Скорее всего причина в том, что у вас используется встроенный состав объекта налогообложения по страховым взносам, то есть база не редактировалась вручную. В отчете это не было учтено.

    Отчет исправил, скачайте снова и посмотрите.

    Reply
  18. Kleva

    Все заработало, теперь только на внутренних совместителях ругается но это не проблема их всего 3, там все по комментам проверить мона. Спасибо большое. 😀

    База у нас самая типовая.

    Reply
  19. su326

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

    Reply
  20. Kleva

    Сотрудник работает по внутреннему совместительству, когда принимаешь на работу такого сотрудника 1С создает в справочнике нового сотрудника (не полноценного так сказать) но с пометкой «Внутренне совместительство с…». Насколько я понимаю все данные для расчета ЗиК берет с «основного», суммы з/п он начисляет на «внутр.совмест», а налоги начисляет на «основного». Вроде как-то так. У меня это не большая проблема их таких всего 3.

    Reply
  21. su326

    Понятно.

    Отключил в отчете проверку начислений для внутр. совместителей

    Reply
  22. su326

    Сделал правильный учет внутр. совместителей

    Reply
  23. Kleva

    У мну предложение, можно-ли реализовать в твоей обработке выбор периода примерно как на скриншоте, т.е. выбор периода любого самому. (например с фев. по май или что-то вроде этого). Если это долго или не хочется то не стоит. Просто нам иногда надо за конкретный период, а не за весь год целиком.

    Проверил работает с внутр. совмест. Зато стал писть следующее: Проверьте расчет СВ у сотр.№ 0000000115 ….. разница по ФСС: 174 / по ФОМС: 0 / по ТОМС: 0 / по ПФ: 0

    До этого было все хорошо, проверил расчет все нормально, у нее самый простой расчет (т.е. только оклад), но она является внешним совместителем. Только по этой записи.

    Reply
  24. su326

    Исправил ошибку и доработал отчет.

    Теперь учитывается инвалидность (справка МСЭК).

    to kleva

    Спасибо за поддержку.

    Пока выбор вилки периода не хочется делать 🙂

    Я исправил одну глупую ошибку, проверьте снова, что покажет.

    Reply
  25. Kleva

    Все работает, супер, спасибо 😉

    Reply
  26. su326

    Добавлен итог по необлагаемым суммам

    Reply
  27. ramzess

    по внутренним совместителям ошибка а именно ошибка в самом алгоритме

    (строка 366)

    Если ВнутрСовм = 0 Тогда

    ……действия…..

    Иначе

    НомСтр = 0;

    Если Т1.НайтиЗначение(СокрЛП(Сотр.ОсновнойЭлемент.Код), НомСтр, «ТабНом») = 1 Тогда

    …..дейстия…

    КонецЕсли;

    КонецЕсли;

    Ошибка в том если в начале выборки по сотрудникам нам сначала попадает совместитель, то искать основного сотрудника в таблице нет смысла его там НЕТ,нужно просто учесть етот момент когда Т1.НайтиЗначение(СокрЛП(Сотр.ОсновнойЭлемент.Код), НомСтр, «ТабНом») = 0 и добавить соответствующую строку.

    Ну и соответственно не просто добавлять строку когда ВнутрСовм=0 а сначала попытаться найти в таблице дабы не задвоить;

    Reply
  28. su326

    Хорошее замечание, но у меня выборка сотрудников делается по возрастанию таб.номера «Сотр.ПорядокКодов();» А в большинстве случаев внутренний совместитель имеет больший табельный номер, чем основной элемент. Поэтому проблемы обычно нет. Но в некоторых случаях, конечно может быть ошибка. Вобщем надо исправить.

    Reply
  29. su326

    Исправил.

    Но вобще, похоже 1С всегда правильно делает выборку сотрудников (сначала основной элемент, а потом внутр. совместитель), когда ставишь Сотр.ПорядокНаименований()

    Reply
  30. ramzess

    А вообще я обычно при переборе сотров запрос использую с группировкой по основному элементу(если говорить про спр. сотрудники) а потом по тек.элементу.имхо так удобней

    Reply
  31. LUNA09.RU

    Пол дня рылась искала по кому машина не считает страховые взносы, скачала обработку СУПЕР сразу выдал фамилии договорник и два чел уволиных…. Безусловно огромный вам + респект и уважуха)))) :{}

    Reply
  32. su326

    Спасибо 😀

    Для того отчет и делался, чтобы удобно было искать простые ошибки.

    Reply
  33. Бедуин

    Спасибо огромное!!! Всё наглядно! Давно искала такую форму отчета. Всех благ автору!

    Reply
  34. Buhta

    Интересный отчет. Только не показывает налогооблагаемую базу и нет расшифровок. Но под напильник пригодится:) Спасибо!

    Reply
  35. Key-Zed

    Ошибочка там, если внутренний совместитель инвалид, считает не правильно и выдает ошибку

    Reply
  36. Оболтус

    Господа, а не подскажите проблему:

    База — 1841369.86

    В ФСС — 53399.71

    Но если 1841369,86*2,9 = 53399,72594 разница в 2 копейки. Бухгалтерия говорит, что за это не принимают отчетность. Кто как решает эту проблему?

    Reply
  37. su326

    2 копейки исправляем ручками в XML-файле 🙂

    Reply
  38. chev

    (2) 2 копейки результат округления. (36) дал совет для XML-файла, ну а в реглам. отчетности и так можешь подрулить. Главное не забудь сохранить. Очень пригодится при отправке по электронке. 🙂

    Reply
  39. aimerlive

    Что то для комплексной его надо вообще переделывать.Жалко. Но все равно видно что отчет хороший.

    Reply
  40. Shum23str

    Отлично! Очень нужная вещь!

    Reply
  41. jain

    у меня не открывается в 1С:Зарплата и кадры 7.7, пишет ТаблицаПачки.Руководитель = СписокДокументов.ПолучитьЗначение(Счетчик, «Руководитель»);

    {E:ДОКУМЕНТЫПРОГРАММЫ 1СПФР2010АВС.ERT(1789)}: Неверный идентификатор колонки! помогите пожалуйста!

    Reply
  42. scorp_nv

    Хмм, сейчас столкнулся…

    Если сотрудник принят в середине месяца, он льготник и не облагается ФСС и ПФ, а документ сведений о том, что он не облагается, сделан в день приёма — то отчёт его за льготника не считает, так как льготы проверяет с первого дня месяца… В итоге выбивает разницу…

    Reply
  43. karbofos

    Отчет нужный. Супруге пригодился, автору респект.

    Reply
  44. serezhka87

    Пригодился отчёт. Долго копались со страховыми взносами раньше. Теперь же можем увидеть с разбивкой по сотрудникам страховые взносы.

    Ещё раз спасибо.

    Reply
  45. rom-x

    Буду модифицировать под свои нужды. Пока есть предложение:

    Убрать

    Сотр1 = СоздатьОбъект(«Справочник.Сотрудники»);

    и заменить

    Предел = 415000;

    на

    Предел = Константа.ПредельнаяВеличинаБазыСтраховыхВзносов.Получить(ДатаАктуальности);

    т.к. предел каждый год меняется и если делать отчет в 2011 году, то он уже не актуален.

    Reply
  46. serpent

    в 321 релизе ЗиК-а не открывается

    Если Сотр.НеВзиматьВзносыФОМС.Получить(Дата(ДатаГод(ДатаАктуальности),н,01)) = 1 Тогда

    {F:OTCHETPOSV.ERT(245)}: Поле агрегатного объекта не обнаружено (НеВзиматьВзносыФОМС)

    Reply
  47. rom-x

    (46) serpent, потому что с 319 или 320 релиза удален реквизит в справочнике сотрудники НеВзиматьВзносыФОМС.

    Reply
  48. serpent

    (47) rom-x,

    придеться переписывать 🙁

    Reply
  49. serpent

    закомментировал

    стр. 245

    отчет строится но по многим сотрудникам выкидывает ошибки

    Проверьте расчет СВ у сотр.№ 0000000074 Б*** Денис Юрьевич разница по ФСС: 333.33 / по ФОМС: 0 / по ТОМС: 0 / по ПФ: 0

    подскажите чем это вызвано.

    в отчете по данному сотруднику выводит

    1 0000000074 Б*** Денис Юрьевич 1980 11494.00 11494.00 1839.04 1839.04 689.64 689.64 0.00 0.00 586.19 586.19 0.00 0.00 0.00

    Reply
  50. dummy

    После 343 обновления в колонке «с начала года» по нулям 🙁

    Reply

Leave a Comment

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