Расчетная ведомость 0504402 с разбивкой по начислениям для ЗКГУ 3




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

72 Comments

  1. alfa_1969

    в форму попадают удержания?

    Reply
  2. NetKat

    Да , попадают.

    Reply
  3. user826680

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

    Reply
  4. NetKat

    (3) Спасибо за замечание, не было баз, где несколько учреждений. Файл перезалила. Напишите почту-кину исправленный вариант

    Reply
  5. alfa_1969

    Не работает отбор по подразделению (alfairus@mail.ru)

    Reply
  6. alfa_1969

    Извиняюсь, все работает:)

    Reply
  7. Zolotova78

    Итог по колонкам считает?

    Reply
  8. NetKat

    (7) да

    Reply
  9. irina_ph

    Замечательная обработка автору СПАСИБО!!!!

    Reply
  10. Shomak

    Здравствуйте, отличная обработка, но на последнем релизе Зарплата и кадры государственного учреждения, редакция 3.1 (3.1.4.171) выдает ошибку:

    {ВнешнийОтчет.РасчетнаяВедомость.Форма.Форма.Форма(152)}: Ошибка при вызове метода контекста (Выполнить)

    РезультатЗапроса = Запрос.Выполнить();

    по причине:

    Ошибка выполнения запроса

    по причине:

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

    объект: ‘Документ.ОтгулСписком’, поле: ‘Дата’; право: ‘Чтение’

    {(130, 15)}: Поле не найдено «Т.ФизическоеЛицо»

    ЕСТЬNULL(Т.<<?>>ФизическоеЛицо, НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО

    по причине:

    {(130, 15)}: Поле не найдено «Т.ФизическоеЛицо»

    ЕСТЬNULL(Т.<<?>>ФизическоеЛицо, НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО

    Reply
  11. NetKat

    (10) У меня ошибка не воспроизвелась. На старом релизе отчет формировался ? Вы ее под полными правами формируете ?

    Reply
  12. Shomak

    Нашел в чем ошибка.

    Дело в том, что 1с накосячила с правами RLS в последнем релизе. на документе отгул списком.

    Reply
  13. Kapitan911

    В 3.1.5 из регистра КадровыеДанныеСотрудников убрали поле ВидЗанятости. Корректно ли работает отчет при наличии внутренних совместителей в 3.1.5 ?

    Reply
  14. NetKat

    (13) пока не работает на 3.1.5, на днях выложу исправленный вариант

    Reply
  15. alexkrv

    Когда выложите исправление?

    Reply
  16. user672936_7852795

    Когда планируете выложить исправление?

    Reply
  17. NetKat

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

    Reply
  18. alnazarov

    Убедительная просьба к автору !

    Надо решить вопрос с «подработчиками». Нужно сделать как в типовом отчете (см.скрины). Я веду речь о версии для 3.1.5.

    Reply
  19. NetKat

    (18) Замечание принято. На базах где тестировалось не было подработок , посмотрю обязательно

    Reply
  20. громозека

    А для ЗУП 3.1 что-нибудь подобное есть? Или может этот отчет срабатывает?

    Reply
  21. NetKat

    (20) отчет на зуп работает, проверяла на 3.1.5.129

    Reply
  22. bogdan_m

    (21) Делаем выплату аванса, выплата попадает в графу «Заработная плата», хотя она выплачена в межрасчетный период. Как это поправить?

    Reply
  23. NetKat

    (23) в типовой 0504402 аванс тоже попадает как з/п. Потому что наверное, аванс -это з/п за первую половину месяца. Поправить можете в модуле основной формы . Найдите по поиску перечисление.ВидыВзаиморасчетовССотрудниками.ВыплатаАванса и пропишите какие выплаты куда относить

    Reply
  24. AlexGS

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

    Reply
  25. AlexGS

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

    Reply
  26. NetKat

    (26) та, которая с сальдо, она и есть для 3.1.5-забыла уточнение добавить в название файла , напишите адрес, вышлю

    Reply
  27. AlexGS

    (27) Отписал в личку

    Reply
  28. kross11

    А подскажите, на 3.1.6.37 работает?

    Reply
  29. kross11

    Ап. Жду ответа на вчерашний вопрос — не тестировали еще?

    Reply
  30. NetKat

    (30) работает

    Reply
  31. bogdan_m

    (24) спасибо

    Reply
  32. women1972

    не работает на 3.1.6. ругается на вид занятости-этот реквизит с какого то релиза убрали-он не используется.даже стандартные отчеты по нему не работают.

    Reply
  33. women1972

    3.1.6.37 релиз.пишет»Поле не найдено»КадроваяИсторияСотрудниковСрезПоследнихВид Занятости» и еще там что то в этом же духе.А нам нужна разбивка на основных и внутренних совместителей.

    Reply
  34. NetKat

    (34) У Вас скорее всего старая версия отчета , которая до 3.1.5 была -напишите адрес вышлю рабочий вариант . Отчет для 3.1.5 работает на 3.1.6

    Reply
  35. women1972

    спасибо.напишу.

    Reply
  36. NVKom

    На 3.1.6.54 не работает такая же ошибка «Поле не найдено»КадроваяИсторияСотрудниковСрезПоследнихВид Занятости», можете выслать рабочий вариант на почту nvkom@.bk.ru.Заранее, спасибо.

    Reply
  37. NVKom

    nvkom@bk.ru — вот на это адрес, в предыдущем сообщении немного неправильно написано

    Reply
  38. NetKat

    (38) отправила

    Reply
  39. NVKom

    Спасибо, я уже сделала сама

    Reply
  40. alfa_1969

    отправьте плз исправленный вариант alfairus@mail.ru (прежде всего необходимо корректное отображение НДФЛ к возврату

    Reply
  41. kross11

    Здравствуйте. При формировании отчета пишет «Неверное имя колонки», куда копать? Имена начислений посмотрел — вроде ничего особенного. Релиз 3.1.7.61. Формирует февраль нормально, март не хочет, список начислений на скриншотах в приложении.

    Reply
  42. NetKat

    (42)Имена начислений даже если особенными будут , на отчет не поваляют…. Проанализируйте какое начисление (удержание) появилось в марте, которого не было в феврале или отладчиком воспользуйтесь или базу вышлите — по картинкам я Вам не помогу

    Reply
  43. alnazarov

    (42)в марте у Вас появился Совм. Обработка путается между Совм. И Совмещение(субв). Измените наименование какой-то из них, но только а начале наименования.

    Reply
  44. kross11

    (44)

    в марте у Вас появился Совм. Обработка путается между Совм. И Совмещение(субв). Измените наименование какой-то из них, но только а начале наименования.

    Я менял, не помогло. Именно его.

    Reply
  45. kross11

    (43)

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

    Reply
  46. alnazarov

    (45)Странно. У меня именно в этой ситуации сработало.

    Reply
  47. Akronikl

    Здравствуйте! Вы еще не тестировали в ЗиКГУ 3.1.7? Есть ли такой же отчет для первой половины месяца?

    Reply
  48. ccserg

    три файла , и какой качать непонятно

    зачем на один отчет выкладывать три файла

    Reply
  49. NetKat

    (49) разные версии были. Оставила один

    Reply
  50. happyz03

    Здравствуйте. При наличии нескольких сотрудников по одному физ.лицу (внутреннее совмещение, напр.) неправильно считается НДФЛ по каждому, и соответственно, нет арифметики Начислено — Удержано — Выплачено = Сумма к выдаче.

    В таком виде нет смысла в отчете.

    Reply
  51. happyz03

    Здравствуйте. При наличии нескольких сотрудников по одному физ.лицу (внутреннее совмещение, напр.) неправильно считается НДФЛ по каждому, и соответственно, нет арифметики Начислено — Удержано — Выплачено = Сумма к выдаче.

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

    Reply
  52. NetKat

    (52) приложите скрин шот по этиму же сотруднику типовой ведомости 0504402. Там все нормально ?

    Reply
  53. happyz03

    (53) Да, позже уже проверил на типовой 0504402 и 0504401 — такая же проблема. Написал в 1С. Может это не сложно исправить, чтобы их не ждать?

    Reply
  54. NetKat

    (54) Это не ошибка в отчете , это данные в программе. Надо смотреть по регистрам, анализировать и исправлять . Может руками ндфл правили . НДФЛ это же вообще большая беда в ЗП 3….

    Reply
  55. user706916_elmag37

    Добрый вечер! Подскажите, пожалуйста, будет обработка работать на ЗИКГУ 3.1.8?

    Reply
  56. NetKat

    (56) да , проверила на 3.1.8.246

    Reply
  57. Kuryshev

    На ЗУП 3.1.8.246 будет работать отчет?

    Reply
  58. shandan

    А можно добавить колонки — отработано дней и часов?

    Reply
  59. heellga

    На 3.1.9 с большим количеством сотрудников работает?(перенос на несколько листов)

    Reply
  60. NetKat

    (60) напишите адрес, скину-проверите и отпишитесь . 3.1.9 не ставила пока

    Reply
  61. heellga
  62. user1079951

    Здравствуйте. Можно ли добавить в параметры отбора, отбор по документу. Что бы можно было выбрать начисление по определенным документам.

    Reply
  63. user1079951

    Жду ответа вопрос!!!!

    Reply
  64. NetKat

    (63) отбор по документу пока не планируется

    Reply
  65. as7bs

    (61) Так все-таки на 3.1.9 работает?

    Reply
  66. NetKat

    (66) да

    Reply
  67. Mortalus

    Здравствуйте. Напишите на leos_78@mail.ru по трудностям в отчете, не могу разобраться.

    Reply
  68. Mortalus

    (65)

    Вообще лички нет, напиши на почту по отчету есть предложение.

    Reply
  69. Kraft1c

    Здравствуйте. работает в конфигурации ЗКГУ, редакция 3.1 (3.1.10.78) ?

    Reply
  70. IgorYan

    (70) Да эта обработка работает на 3.1.10.78

    Reply
  71. Zlaya-Ferio

    а нет ничего подобного в виде печатной формы документа Ведомость в банк (кассу)?

    Reply
  72. Angelok

    Расчетчики требуют, чтобы вид начисления «Оплата по окладу» в начале был, а не середине отчета, ссылаются на правила оформления данной ведомости. И еще «Дней/часов» с учетом только табеля, а туда и б/л включаются, в т.ч. переходящие некорректная картина получается. Если возможно, выслать на почту Angelok82@inbox.ru. Спасибо

    Reply

Leave a Comment

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