Анализ начисленных налогов и взносов по подразделениям (правильная развертка подразделений по периодам) ЗУП




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

49 Comments

  1. cleaner_it

    Что-то популярной стала тема:) И все-же решить ее так, как я описал в http://infostart.ru/public/81524/ , думаю, правильнее:)

    Reply
  2. Muhin555

    Вместо того чтобы спрашивать, лучше сразу добавил бы «На скриншоте изображена удобная настройка для показа сразу всех налогов по организации» 😀

    Reply
  3. androidT1C

    Внимание! Отчет в большинстве случаев будет выдавать неверные цифры! Пользоваться осторожно!

    В запросе используется таблица: Сотрудник, ФизЛицо, Подразделение.

    Потом она соединяется с основной таблицей по ФизЛицу. Получается «размножение строк» отчета и увеличение сумм.

    В ЗУПе нет учета сумм начисленных взносов в разрезе подразделений. Чтобы отчет выдавал правильные цифры, надо брать какое-то одно подразделение по физ.лицу, а не в разрезе сотрудников.

    Reply
  4. DinaFrickle
    Если нужно, могу добавить/сделать обработку для автовключения такой настройки в пользовательскую базу.

    Было бы просто замечательно, если бы Вы такое сделали))

    Reply
  5. Stety
    androidT1C пишет:

    В ЗУПе нет учета сумм начисленных взносов в разрезе подразделений. Чтобы отчет выдавал правильные цифры, надо брать какое-то одно подразделение по физ.лицу, а не в разрезе сотрудников.

    Если речь именно об обычном ЗУП-е, не КОРП и не ЗБУ, то для распределения начисленной зарплаты и страховых взносов по подразделениям вполне можно настроить банальное отражение в бухучете, привязав их к подразделениям, задать для видов расчетов отражение в бухучете «по состоянию на дату события» и после начисления страховых взносов формировать доки отражения в учете.

    Но на какие только ухищрения люди не идут, чтобы не заниматься настройкой типовых механизмов учета! 😀 😀 😀 😀 😀 😀

    Reply
  6. sks

    Отчет не работает. В типовом ЗУП-е без добавления группировки по физлицу подразделения вообще не кажет!!! А при выводе группировки и по физику, отображает только половину подразделений. Что автор перемудрил, слишком заморочился, что сам не смог разобраться.

    Reply
  7. snic

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

    Автор, не мог бы подправить отчет.

    Reply
  8. truba

    могу предложить идею как выкрутиться.

    Reply
  9. Ish_2

    Слушай , запустил твой отчет в релизе ЗУП 2.5.33.4 о получил отличия в отчете по сранению с штатным отчетом.

    Ты проверял на 2.5.33.4?

    Reply
  10. logdog

    на ЗУП 2.5.37.1 1С:Предприятие 8.2 (8.2.14.524) ошибка

    Ошибка при выполнении файловой операции ‘E:AnalizNachislennyhNalogovIVznosov_Artur_82.erf’

    по причине:

    Неверный формат хранилища данных ‘file://E:/AnalizNachislennyhNalogovIVznosov_Artur_82.erf’

    Reply
  11. gamy

    Как подключать все налоги не показывает

    Reply
  12. Art77

    Нет варианта Отчета Все налоги — как на скриншоте,может я что то не так делаю. По отдельным налогам все работники в одном подразделении

    Reply
  13. kate_mik

    Именно по подразделениям отчет барахлил. Неправильно выводились данные с точки зрения иерархии подразделений. Впрочем, это было в начале года, может с тех пор что-то автор подправил?

    Reply
  14. anet_one

    Для 8.1 тоже не работает, релиз 2.5.34.2, части реквизитов физлица нет в конфе, отбор по подразделению не работает…

    Reply
  15. Len75

    Отчет ни работает в 1 с 8.2 ,,,в типовой версии ЗУП 8.2 тоже…очень жаль…..

    Reply
  16. artbear

    (14) Внес последнюю форму отчета — работает минимум на 2.5.41.3 для 8.2

    Мои бухи пользуются каждый месяц.

    Настройку «Все налоги» сделать совсем несложно.

    Могу сам сделать/выложить инструкцию, а можете по сайту поискать — пару месяцев назад кто-то выкладывал подобную.

    Reply
  17. artbear

    (14) Троллим 🙁 — хватает только на тупой копипаст из (6) ?

    Reply
  18. artbear

    (15) (16)

    Отчет работает, на всякий случай выложил последний вариант для 8.2 в (17)

    Если и этот вариант не работает, прошу более подробно описать неверную ситуацию!

    Reply
  19. anet_one

    Для 8.1 не учитываются кадровые перемещения, если сотрудник был перемещен между подразделениями, то в отчете он выводится в пустом подразделении. Для сотрудников без перемещений по подразделениями, вроде работает.

    Reply
  20. nadyalex

    работает!

    Reply
  21. Dvorson

    Пока не закачала этот отчет, но ОЧЕНЬ хочется, чтобы это было то, что надо. Чтобы люди в нем не двоились и не троились.

    Reply
  22. Dvorson

    Увы. Сотрудница работает в коммерческом отделе оператором, а в административном — уборщиком. В отчет выводится два раза — в том и другом отделе. Видимо эта проблема нерешаема. Жаль.

    Reply
  23. Serg_F1

    Кто нибудь настроил по уму этот отчет? В моей базе сотрудник работает в одной организации но в разных подразделениях, отчет и выдает мне оба подразделения только сумма стоит одинаковая в каждом (налоги по первому подразделен + налоги по второму) может уже решили вопрос с совместителями?

    Reply
  24. Serg_F1

    Автор больше не желает заходить на страницу своего продукта чтобы дать консультацию?

    Reply
  25. mary_F

    (19) в ЗиУП 2.5.43.3 Ошибка в схеме компоновки данных по причине:

    Ошибка получения информации набора данных по причине: Ошибка в запросе набора данных

    по причине:{(191, 20)}: Поле не найдено «ГражданствоФизЛиц.НеИмеетПравоНаМедицинскоеСтрахование»

    ГражданствоФизЛиц.<<?>>НеИмеетПравоНаМедицинскоеСтрахование,

    Reply
  26. powerpc

    Тоже буду признателен за исправление. Ждём.

    Reply
  27. profych1

    Есть ошибки, но поправимо

    Reply
  28. powerpc

    Не дождался автора, видимо в релизе ЗУП 2.5.43.3 убрали поле НеИмеетПравоНаМедицинскоеСтрахование.

    Кто разбирается подскажите, достаточно ли в данном отчете заменить:

    ..

    ГражданствоФизЛиц.НеИмеетПравоНаМедицинскоеСтрахование,

    ..

    НА

    ВЫБОР

    КОГДА ГражданствоФизЛиц.ВидЗастрахованногоЛица = ЗНАЧЕНИЕ

    (Перечисление.ВидыЗастрахованныхЛицОбязательногоСтрахования.ГражданеРФ)

    ТОГДА ЛОЖЬ

    ИНАЧЕ ИСТИНА

    КОНЕЦ КАК НеИмеетПравоНаМедицинскоеСтрахование,

    Вроде как заработало

    Reply
  29. Dvorson

    (24) В нашей Russia человеку приходится работать не нескольких должностях одновременно. Днем — квалифицированный специалист, вечером — уборщик помещений. В отчет он попадает дважды и в обеих строках общие суммы по двум исполнениям.

    Но проблема решилась, когда сама расчетчица решила порыть тырнет и нашла формочку, идеально ей подходящую, там простая табличка, в которой идет группировка по подразделениям, а внутри строки по сотрудникам. Удивительно, почему я, программист, не могла ее найти. До сих пор не пойму.

    Reply
  30. Serg_F1

    Большая просьба, може скинете ссылку в личку на эту формочку, мне бы она очень пригодилась, У меня большая проблема с тем что надо разделить все таки этот отчет по подразделениям, и чтоб у людей не двоились суммы,

    К Автору: может все таки решиться вопрос с этим моментом (совместителями)

    Reply
  31. Serg_F1

    Эта тема совсем затихла или может кто ответит на мой вопрос?

    Reply
  32. kis

    Зарплата и кадры бюджетного учреждения, редакция 1.0 (1.0.36.1) выдает ошибку

    Ошибка в схеме компоновки данных

    по причине:

    Ошибка получения информации набора данных

    по причине:

    Ошибка в запросе набора данных

    по причине:

    {(191, 20)}: Поле не найдено «ГражданствоФизЛиц.НеИмеетПравоНаМедицинскоеСтрахование»

    ГражданствоФизЛиц.<<?>>НеИмеетПравоНаМедицинскоеСтрахование,

    Подскажите , пожалуйста , как поправить.

    Reply
  33. harisov_r

    Да, в последних редакциях ЗУПа этот отчет не работает. Сделал свой отчет по подразделениям, более «честный»: http://infostart.ru/public/120874/

    Reply
  34. VragHorosh

    У меня не заработала(((

    Reply
  35. Kanareika13

    Очень полезная штука, в документе «Отражение зарплаты в регл учете» как раз страховые взносы по подразделениям формируются. Респект автору.

    Reply
  36. chernaya

    Спасибо! моим бухгалтерам очень даже понравилась!

    Reply
  37. Sunhare

    ЗУП 2.5.50.1

    Спасибо. После исправления строчки с НеИмеетПравоНаМедицинскоеСТрахование отчет работает правильно в отличии от http://infostart.ru/public/120874/

    Reply
  38. harisov_r

    (41) Sunhare, а как Вы исправили строчку «НеИмеетПравоНаМедицинскоеСтрахование» ? Как у powerpc в п.31?

    Reply
  39. artbear

    (41) (31) Да, выложу обновленную версию отчета.

    Все забываю это сделать. для своих организаций давно это сделал 🙂

    Reply
  40. Sunhare

    (42) harisov_r, Исправил — Ложь как НеИмеетПравоНаМедицинскоеСтрахование, а вот с «работает правильно» — я поторопился — вылезла ошибка с «Доход превышающий предельную базу обложения ПФР» (то ли он по всем организациям считает, то ли еще как-то, но тянет лишних людей.) Придется видно самому разбираться, а так лениво 🙂

    Reply
  41. Lyns_owner

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

    (44) Sunhare, Так же исправил эту ошибку. Это просто отчет старый, там предельной величины просто нет.

    Посмотрите мой отчет http://infostart.ru/public/124931/ , он умеет выводить данные в разрезе подразделений, сотрудников, их должностей, видов расчета. Учитывает переходы сотрудника по подразделениям.

    Reply
  42. Shomak

    Ошибка вылазит:

    {Справочник.ВнешниеОбработки.Форма.ФормаЭлемента(170)}: Ошибка при вызове метода контекста (Создать): Ошибка в схеме компоновки данных: Ошибка получения информации набора данных: Ошибка в запросе набора данных: {(191, 20)}: Поле не найдено «ГражданствоФизЛиц.НеИмеетПравоНаМедицинскоеСтрахование»

    ГражданствоФизЛиц.<<?>>НеИмеетПравоНаМедицинскоеСтрахование,

    Зарплата и кадры бюджетного учреждения, редакция 1.0 (1.0.39.1)

    Reply
  43. Ignat_n

    ЗУП 2.5.51.1 На закладка «ФСС и ФОМС» данные не выводятся.

    Reply
  44. juli*

    Подскажите как исправить ситуацию:

    Ошибка в схеме компоновки данных

    по причине:

    Ошибка получения информации набора данных

    по причине:

    Ошибка в запросе набора данных

    по причине:

    {(191, 20)}: Поле не найдено «ГражданствоФизЛиц.НеИмеетПравоНаМедицинскоеСтрахование»

    ГражданствоФизЛиц.<<?>>НеИмеетПравоНаМедицинскоеСтрахование,

    Reply
  45. elenko1

    Спасибо за полезнятину!

    А чем отличается АнализНачисленныхНалоговИВзносов.erf (версия для 8.2) от АнализНачисленныхНалоговИВзносов_Артур.erf

    Reply
  46. elenko1

    Спасибо за полезнятину! Пошла исправлять ошибку и тестировать :)))

    Reply
  47. quares

    Не работает группировка. Она возвращает пустое значение и всё схлопывается по нему.

    ЗКБУ 63.2

    Reply
  48. Siba

    Программа актуализирована на текущую версию ЗУП 2.5.110.1?

    Reply
  49. Roman1976

    Ошибка в запросе набора данных

    по причине:

    {(191, 20)}: Поле не найдено «ГражданствоФизЛиц.НеИмеетПравоНаМедицинскоеСтрахование»

    ГражданствоФизЛиц.<<?>>НеИмеетПравоНаМедицинскоеСтрахование,

    Досих пор актуальна, может кто подскажет, как поправить?

    Reply

Leave a Comment

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