Расчетная ведомость для ЗУП 3.1 (зарплата, авансы, налоги)




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

51 Comments

  1. Atrika-96

    Добрый день! Скажите, а доп.взносы выводятся?

    Reply
  2. Rashid80

    (1) Добрый день. Вы про вредное производство?

    Reply
  3. Atrika-96

    Да, для вредных и тяжелых профессий

    Reply
  4. Rashid80

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

    У меня ожидается переход на зуп 3.1 в одной производственной компании, но это будет через пару месяцев

    Reply
  5. Atrika-96

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

    Очень полезный отчет, здорово нам помог. Спасибо))

    Reply
  6. Atrika-96

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

    Reply
  7. Rashid80

    (6) с каким именно комментарием? В итоге что-то нужно переделать?

    Reply
  8. Atrika-96

    Я не скачивала эту разработку, Извините

    Reply
  9. igorby

    Если у сотрудника было кадровое перемещение в середине месяца, то отчет задваивает начисление

    Reply
  10. Rashid80

    (9) Спасибо, проверю.

    Странно что наши расчетчики не жаловались.

    Я правильно понимаю что в течении месяца поменялось подразделение?

    Reply
  11. igorby

    Да, поменялось подразделение. Это то что касается начислений. Здесь быстро удалось побороть…

    А по налогам еще больше проблем. Так как они идут в разрезе ФизЛиц, а начисления в разрезе Сотрудников.

    Например если ФизЛицо, одновременно работают на основном месте работы и по внутреннему совместительству

    или если ФизЛицо было уволено как один сотрудник и принята как другой в одном периоде, в таком случае налоги задваиваются

    Reply
  12. Rashid80

    Исправил обработку — устранил ошибку задвоения начислений.

    Reply
  13. Aftee

    Отчет неправильные суммы выводит в взносах, если сравнивать с типовым отчетом «Анализ взносов в фонды»

    Reply
  14. Aftee

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

    Reply
  15. Rashid80

    (14) К сожалению у меня нет данных для отладки данной проблемы. Как именно можно повторить ваш случай?

    Reply
  16. Aftee

    (15) проблема с сальдо. Если существует сальдо по сотруднику по физ лицу, то оно выводится дополнительной строкой и в разделе взносов заполняется значениями из «реальных» взносов, т.е. дублируется

    Reply
  17. yan12345

    Уточните, отчет работает по месяцу начисления или по фактически выбранным датам?

    (2 вариант — как в ЗУП 2.5 гораздо предпочтительней)

    Reply
  18. Rashid80

    (17) По фактически выбранным датам.

    Reply
  19. nastrip

    Здравствуйте, а чем не устраивает «Анализ зарплаты по сотрудникам»?

    По моему это та самая расчетная «привычная» ведомость.

    Reply
  20. Rashid80

    (19) нет данных по авансам (как минимум). Этот отчет не появился бы, если б анализ зарплаты был полноценной заменой.

    Reply
  21. Kate_13

    Добрый день! Подскажите, в чем отличие одного файла от другого?

    Reply
  22. Rashid80

    (21) В описании есть что добавлено.

    Reply
  23. GarantRegion

    Добрый день.

    В отчете есть ошибка: не выводятся взносы по уволенным сотрудникам. Например: сотрудник уволился в конце апреля. Мы формируем отчет за апрель и видим, что зарплату по сотруднику заполняет, а взносы нет. Тоже самое, если сформировать отчеты за предыдущие месяца.

    Тестирование выполнялось на релизе 3.1.5.171.

    Рашид, сможете исправить?

    Reply
  24. Rashid80

    (23)

    Могу, но хотелось бы образец такого неправильного заполнения, со слов не очень понятно. Можно сделать скриншот и скрыть фамилии.

    Reply
  25. Ирка

    (24) |ПОМЕСТИТЬ ВТСтраховыеВзносы

    |ИЗ

    | РегистрНакопления.ИсчисленныеСтраховыеВзносы.Обороты(&НачалоПериода, &КонецПериода, , Организация = &Организация) КАК СтраховыеВзносы

    | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ТекущиеКадровыеДанныеСотрудников КАК ТекущиеКадровыеДанныеСотрудников

    | ПО СтраховыеВзносы.ФизическоеЛицо = ТекущиеКадровыеДанныеСотрудников.ФизическоеЛицо

    | И СтраховыеВзносы.Организация = ТекущиеКадровыеДанныеСотрудников.ТекущаяОрганизация

    Если я не ошибаюсь, у уволенных в регистре сведений «Текущие кадровые данные сотрудников» ТекущаяОрганизация имеет пустое значение, поэтому уволенные не попадают. Про эту ситуацию и писали в (23).

    Просьба проверить и внешних совместителей, которые не попадают по той же причине.

    На моих данных задваиваются страховые взносы у сотрудника, который в организации занимает две должности.

    Эти ситуации можно смоделировать. Еще раз большая просьба проверить.

    Reply
  26. Ирка

    *

    Reply
  27. VoToV

    Добрый день. Скажите, пожалуйста, не вносили ли вы исправления в работу отчета для версий с ЗИК 3.1.7.128?

    Reply
  28. Rashid80

    (27) Добрый день. Лично я нет, а есть какие-то проблемы?

    Reply
  29. VoToV

    Добрый день. Перестала работать. Поменяли что-то в справочниках.

    (28)

    Reply
  30. Rashid80

    (29) Обновил обработку, проверьте — должно работать.

    Reply
  31. VoToV

    Оу, извиняюсь за беспокойство, тут оказывается стоимость тарифа выросла до от 1500 до 4500, мне как бухгалтеру не потянуть(

    Reply
  32. Rashid80

    (31) я перезалил обработку вместо старой — возможно ее можно скачать повторно (бесплатно)?

    Reply
  33. VoToV

    Добрый день. к сожалению нельзя. не могу и в сообщения вам написать. можно ли альтернативно её оплатить?

    (32)

    Reply
  34. kng67

    Добрый день. Хотим скачать Ваш отчет. Будет ли он формироваться на ЗУП 3.1.9.106?

    Reply
  35. Rashid80

    (34)обновлю ЗУП и проверю. У меня пока 3.1.8

    Reply
  36. kng67

    Спасибо за ответ. Ждем от Вас результат проверки.

    Reply
  37. kng67

    Здравствуйте! Скачала Вашу обработку. ЗУП 3.1.9.106. Спасибо, очень вовремя.

    Под Админом отчет открывается и формируется. Под пользователем, имеющим Профиль групп доступа Старший кадровик-расчетчик, открывается, но при нажатии на кнопку Сформировать выдает ошибку «Недостаточно прав для работы с таблицей «Документ.Перенос данных» (см. прикрепленный файл).

    Какие права мне добавить пользователю, чтобы отчет формировался? Или только Администратор подойдет?

    Reply
  38. Rashid80

    (37)

    Добрый день.

    Я просмотрел отчет — ни в одном месте нет упоминания этого документа. Возможно к нему идет косвенное обращение через какие-то общие модули. Т.е. тут я ничем помочь не могу.

    Я посмотрел права на этот документ через Роли — Все роли. Для доступа к этому документу нужны ПолныеПрава. Для других ролей прав нет, даже на чтение.

    Reply
  39. user1052392

    Подскажите а отчет показывает районные и дальневосточные надбавки?

    Reply
  40. Rashid80

    (39) К сожалению у нас нет РК и Серверных надбавок, мне не на чем проверить. Если это отдельное начисление — то показывать будет

    Reply
  41. inko

    Добрый день. Хотим скачать Ваш отчет. Будет ли он формироваться на ЗУП 3.1.10.50? Кто раньше скачал отпишитесь.

    Reply
  42. Rashid80

    (41) Исправил отчет и проверил на 3.1.10.50 — формируется.

    Reply
  43. VoToV

    Кто может помочь с покупкой данной формы за стартмани, напишите пожалуйста в личные сообщения. Спасибо.

    Reply
  44. user613985_otklik.rd

    Не работает Ошибка Метод объекта не обнаружен (ИменаПолейКоллекцииПечатныхФорм) ЗИК ГУ 3.1.9.229

    Reply
  45. user613985_otklik.rd

    Может исправите. Зря потратился…………………….

    Reply
  46. Rashid80

    (45) Я как раз специально исправил на ЗУП 3.1.10. Вы не планируете обновляться?

    Reply
  47. BEZRAB

    Ошибка Метод объекта не обнаружен (ИменаПолейКоллекцииПечатныхФорм) ЗИК ГУ 3.1.9.229

    Reply
  48. Rashid80

    (47)вернусь из отпуска и исправлю

    Reply
  49. sonGodv

    (38) Права не нужны. Необходимо во всех запросах выбирать разрешенные

    Reply
  50. Деко-Лит

    Проверил на ЗУП 3.1.10.111 работает. Спасибо.

    Reply
  51. dodonov

    Здравствуйте! Скачал отчет, не отображаются взносы в фонды при поставленной галке.

    Reply

Leave a Comment

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