Сведения о распределении численности работников по размерам заработной платы за 2025 год, Форма №1 (1С:ЗУП 2.5)




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2025-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='\

65 Comments

  1. SergVB

    Попробовал на ЗКБУ 1.0.109.2, вроде всё корректно работает. Жаль, нельзя сразу отправить из программы

    Reply
  2. user734789
    Reply
  3. salbey

    (2) Спасибо, дружище, за конструктивные предложения… внес изменения в текст запроса.

    Reply
  4. Сирёга

    Проблема: если человек когда-либо работал в организации внешним совместителем, то в отчет он не попадает.

    Reply
  5. salbey

    (4) Добрый день, так и должно быть (см. п.5.8)

    5. В графах 3 и 4 показываются данные о работниках списочного состава, принятых на постоянную, временную, сезонную работу (включая работников, работавших неполное рабочее время в соответствии с трудовым договором), которым была начислена заработная плата за апрель, за исключением следующих групп работников:

    5.1. принятых на работу после 1 апреля или уволенных до 1 мая;

    5.2. имевших в апреле листки временной нетрудоспособности;

    5.3. находившихся в отпуске по беременности и родам или в отпуске по уходу за ребенком;

    5.4. работавших на условиях неполного рабочего времени (в соответствии с трудовым договором), если оно составляло менее половины нормальной продолжительности рабочего времени;

    5.5. находившихся в отпуске без сохранения заработной платы по письменному заявлению работника более 5 рабочих дней апреля;

    5.6. не работавших по причине простоя по вине работодателя или по причинам, не зависящим от работодателя и работника (оплата которых осуществляется в соответствии со статьей 157 Трудового кодекса Российской Федерации), более 5 рабочих дней апреля;

    5.7. работавших в режиме неполного рабочего времени по инициативе работодателя, если неотработанное время составило в апреле более 40 часов;

    5.8. работавших на условиях внешнего совместительства;

    5.9. выполнявших работы по договорам гражданско-правового характера.
    Reply
  6. Сирёга

    Человек работал в 2008 году совместителем, затем уволился и принялся на основное место с 2009 года, т.е. в справочнике сотрудники 2 записи с одной организацией. В отчет за апрель 2017 не попадает, а в п.5.8 идет речь о работавших совместителями в апреле 2017г.

    // Исключаем сотрудников не имеющих в организации основного места работы.
    | ВЫБРАТЬ
    |  СотрудникиОрганизаций.Ссылка.ФизЛицо КАК Сотрудник
    | ИЗ
    |  Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций
    | ГДЕ
    |  СотрудникиОрганизаций.ВидЗанятости <> ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы)
    |  И СотрудникиОрганизаций.ВидЗанятости <> ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ВнутреннееСовместительство)
    |        И СотрудникиОрганизаций.Организация = &Организация
    

    Показать

    Вот тут должен быть еще анализ на работу в периоде отчета.

    Reply
  7. salbey

    (6) Привет, дружище…. исправлено.

    Reply
  8. sveto4ek_uu

    выражаю благодарность за отчет! СПАСИБО!

    Reply
  9. mumik_nr

    Скажите а для бюджетных организаций у вас нет такого отчета с отбором по подразделениям для конфигурации ЗКБУ 1.0???

    Reply
  10. salbey

    (9) По отзыву в первом сообщении отчет работает на ЗКБУ 1.0.109.2. Сам, к сожалению, не тестировал.

    Reply
  11. Сирёга
    п.6.2. при премировании по результатам работы за месяц включаются суммы, предусмотренные в апрельской расчетно-платежной ведомости, за работу в апреле или за работу в марте (если начисление премий производилось в апреле);

    Апрельская премия за март не попадает.

    Reply
  12. mumik_nr

    (10)Спасибо не обратила внимания а в данном отчете есть отбор по обособленным подразделениям??

    Reply
  13. Сирёга

    (12) Есть. На последней закладке заполняете отбор сотрудников нужного подразделения.

    Reply
  14. mumik_nr

    (13)Спасибо огромное буду пробовать тогда))))

    Reply
  15. sveto4ek_u2

    (11) кстати, да у меня тоже не попадает премия

    Reply
  16. sveto4ek_u2

    премия у нас в апреле выплачивается за март, то есть базовый период 01.03.17 — 31.03.17

    Reply
  17. sveto4ek_u2

    посмотрите. пожалуйста, про премию

    Reply
  18. Сирёга

    (15) Если кроме премии нет других начислений рассчитывающихся по предыдущему месяцу, то можно залатать заменив код

    |      КОГДА ДополнительныеНачисленияРаботниковОрганизаций.БазовыйПериодНачало <= &НачДата
    |        И ДополнительныеНачисленияРаботниковОрганизаций.БазовыйПериодКонец >= &КонДата
    

    на

     |      КОГДА (ДополнительныеНачисленияРаботниковОрганизаций.БазовыйПериодНачало <= &НачДата
    |        И ДополнительныеНачисленияРаботниковОрганизаций.БазовыйПериодКонец >= &КонДата)
    |        ИЛИ (ДополнительныеНачисленияРаботниковОрганизаций.БазовыйПериодНачало <= ДОБАВИТЬКДАТЕ(&НачДата,МЕСЯЦ,-1)
    |        И ДополнительныеНачисленияРаботниковОрганизаций.БазовыйПериодКонец >= ДОБАВИТЬКДАТЕ(&КонДата,МЕСЯЦ,-1))
    
    Reply
  19. sveto4ek_u2

    (18) как раз таки у нас есть такие начисления: надбавка за выслугу и единовременные выплаты по кол.договору, соответсьвенно заменив код, добавил эти начисления в отчет

    Reply
  20. LimonkaRu

    Скажите, пожалуйста, а для ЗУП 3.1 ни у кого нет точно такого же отчета?

    Reply
  21. Сирёга

    (19) Условие добавьте

    И ДополнительныеНачисленияРаботниковОрганизаций.ВидРасчета.ВидПремии = ЗНАЧЕНИЕ(Перечисление.ВидыПремии.Премия)
    Reply
  22. Amras
    Reply
  23. Amras

    (21)

    (19) Условие добавьте

    И ДополнительныеНачисленияРаботниковОрганизаций.ВидРасчета.ВидПремии = ЗНАЧЕНИЕ(Перечисление.ВидыПремии.Премия)

    Премии бывают не только ежемесячные.

    Reply
  24. Amras

    Если уж в отчете расшифровка делаем сортировку по полю «Сотрудник» то надо понимать что работать она не будет как положено.

    |УПОРЯДОЧИТЬ ПО
    | Графа2,
    | Сотрудник
    |ИТОГИ
    | СУММА(Результат),
    | СУММА(Счетчик)
    |ПО
    | ОБЩИЕ,
    | Графа1
    //*** Стоит добавить для полей типа ссылка
    |АВТОУПОРЯДОЧИВАНИЕ
    //—
    

    Показать

    Reply
  25. Amras

    (18)

    ИЛИ (ДополнительныеНачисленияРаботниковОрганизаций.БазовыйПериодНачало = ДОБАВИТЬКДАТЕ(&КонДата,МЕСЯЦ,-1))

    Предположим, что в апреле сотруднику платят сверхурочные за февраль, это выходит надо -2 месяца делать… Уж проще равняться на период регистрации документа, он хотя бы показывает месяц в котором произведены расчеты. Но у него тоже есть минусы, некоторые виды расчета не должны на него равняться (например: отпуска будущих периодов).

    Reply
  26. salbey

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

    Важно! Кто уже скачал отчет до исправления ошибок, напишите мне в личку адрес своей электронной почты. Вышлю последнюю версию.

    Reply
  27. Сирёга

    (25)

    Предположим, что в апреле сотруднику платят сверхурочные за февраль, это выходит надо -2 месяца делать…

    Правила заполнения смотрите, только премия марта и 1/3 квартальной никаких февралей быть не должно.

    Reply
  28. Amras

    (27) Я знаю что не должно, просто пример привел.

    Пуункт 6.2 Формы № 1

    Хотя стоит признать, что в данном случае попасть в март через «-1 месяц» рационально.

    Reply
  29. Amras

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

    Выдержка из инструкции Формы № 1

    Пункт 6.5 к примеру разрешает нам учитывать некоторые премии (например: «Запуск ТЭЦ» в январе-феврале), но начисленную в апреле (за месяца которые были ранее).

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

    Reply
  30. LimonkaRu

    (26) Алексей, сделайте, пожалуйста, отчет под ЗУП 3.1! Я думаю, что вам будут благодарны многие.

    Reply
  31. Amras

    (30) Если верить поиску, то он есть на форуме «Форма № 1 для «Зарплата и управление персоналом КОРП, редакция 3.1 (3.1.2.213)» http://infostart.ru/public/619035/

    Reply
  32. sveto4ek_uu

    Подскажите, пожалуйста, сотрудник весь апрель отсутствовал по невыясненной причине, следовательно начисленная зп за апрель 0, должен ли этот сотрудник попадать в отчет в графу до 7500,00?

    Reply
  33. mmv_82

    Добрый день! Если сотрудник принят по основному месту работы,а также у него есть договор ГПХ, то сумма по основному месту работы не попадает в отчет. Неважно,было начисление по договору в апреле или не было. Может оперативно подскажете как исправить?

    Reply
  34. user752374

    (32) «5. В графах 3 и 4 показываются данные о работниках списочного состава, принятых на постоянную, временную, … которым была начислена заработная плата за апрель». В данном случае работнику не начислена зп за апрель, соответственно, данные о нем не надо отображать.

    Reply
  35. Jokstr

    (6)

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

    решил пока поменяв код

    | ВЫБРАТЬ
    |  СотрудникиОрганизаций.Ссылка.Физлицо КАК Сотрудник
    | ИЗ
    |  Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций
    | ГДЕ
    |  СотрудникиОрганизаций.ВидЗанятости <> ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы)
    |  И СотрудникиОрганизаций.ВидЗанятости <> ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ВнутреннееСовместительство)
    |        И СотрудникиОрганизаций.Организация = &Организация
    |   И СотрудникиОрганизаций.ДатаПриемаНаРаботу < &НачДата
    |   И (СотрудникиОрганизаций.ДатаУвольнения > &КонДата
    |     ИЛИ СотрудникиОрганизаций.ДатаУвольнения = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)) 

    Показать

    на

    | ВЫБРАТЬ
    |  СотрудникиОрганизаций.Ссылка.Физлицо КАК Сотрудник
    | ИЗ
    |  Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций
    |   ЛЕВОЕ СОЕДИНЕНИЕ Документ.ДоговорНаВыполнениеРаботСФизЛицом КАК ДоговорНаВыполнениеРаботСФизЛицом
    |   ПО (ДоговорНаВыполнениеРаботСФизЛицом.Сотрудник = СотрудникиОрганизаций.Ссылка)
    |    И (ДоговорНаВыполнениеРаботСФизЛицом.ВидДоговора = СотрудникиОрганизаций.ВидДоговора)
    | ГДЕ
    |  СотрудникиОрганизаций.ВидЗанятости <> ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы)
    |  И СотрудникиОрганизаций.ВидЗанятости <> ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ВнутреннееСовместительство)
    |  И СотрудникиОрганизаций.Организация = &Организация
    |  И СотрудникиОрганизаций.ДатаПриемаНаРаботу < &НачДата
    |  И (СотрудникиОрганизаций.ДатаУвольнения > &КонДата
    |    ИЛИ СотрудникиОрганизаций.ДатаУвольнения = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0))
    |  И ДоговорНаВыполнениеРаботСФизЛицом.ДатаНачала < &КонДата
    |  И ДоговорНаВыполнениеРаботСФизЛицом.ДатаОкончания > &НачДата
    

    Показать

    Reply
  36. Brawler

    Благодарствую!

    В очередной раз инфостарт экономит мое время))

    Reply
  37. sshattl

    Добрый день. У меня в отчет почему то не попадаете сотрудник по основному месту работу, на которого был оформлен прием на работу по внутреннему совместительству с 01.04.2017 года. Понятно что по внутреннему он и не должен попадать, но по основному месту работу он же был принят до 01.04.2017. А в отчете его(как основного работника) выкидывает.

    Reply
  38. george_tag

    Спасибо за отчет. Проверяем на ЗКБУ, ищем ошибки. Точно не работает кусок

     |ВЫБРАТЬ
    | СотрудникиСНеявками.Сотрудник
    |ИЗ
    | (ВЫБРАТЬ
    |  РабочееВремяРаботниковОрганизаций.Сотрудник.Физлицо КАК Сотрудник,
    |  СУММА(РабочееВремяРаботниковОрганизаций.Дней) КАК Дней
    | ИЗ
    |  РегистрНакопления.РабочееВремяРаботниковОрганизаций КАК РабочееВремяРаботниковОрганизаций

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

    Reply
  39. salbey

    (38) Необходимо вручную удалить этого сотрудника на закладке «Исключаемые».

    Reply
  40. george_tag

    (40) А если нет такой закладки?

    Reply
  41. salbey

    (41) Напишите мне в личку адрес электронной почты и я скину последнюю версию отчета.

    Reply
  42. sveto4ek_u2

    (36) да, действительно, у нас тоже есть такие сотрудники. Спасибо Вам, поменяла код, сейчас попадают такие работники.

    Алексей Комиссаров (salbey), обновление обработки будет по данной проблеме?

    Reply
  43. salbey

    (43) Светлана, список исключаемых из отчета сотрудников доступен для редактирования вручную в последней версии отчета. Для решения вашей проблемы достаточно удалить их на закладке «Исключаемые».

    Reply
  44. slavik27

    Подскажите пожалуйста, а на 2.5.117.1 — будет работать этот отчет?

    Reply
  45. sveto4ek_u2

    (44) во вчерашнем отчете, который вы отправили на почту, у меня нет такой закладки

    Reply
  46. mmv_82

    (36) После такой правки стали попадать внешние совместители. В итоге вернули на изначальный код,а убрали с закладки «Исключаемые» сотрудников,по которым оформлен плюсом договор ГПХ

    Reply
  47. mmv_82

    (35) Алексей,просто низкий поклон за этот отчет, за оперативные правки ошибок, за отклик!!!!

    Reply
  48. salbey

    (45) Будет.

    Reply
  49. salbey

    (46) Отправил на почту последнюю версию с закладкой «Исключаемые».

    Reply
  50. sveto4ek_u2

    (50) получила, большое человеческое спасибо!

    Reply
  51. hillsnake

    Спасибо!!!

    и от нашей расчетчицы отдельное Спасибо!

    Reply
  52. pma

    Есть ли ли выгрузка в XML? Если нет планируется ее делать?

    Reply
  53. salbey

    (53) Добрый день, не планируется.

    Reply
  54. yandukov

    Здравствуйте! Для ЗУП 3.1 есть такой отчет?

    Reply
  55. salbey

    (55) Добрый день, есть http://infostart.ru/public/619035/

    Reply
  56. yandukov

    (56) уже скачала )

    Reply
  57. Mkonst

    А где же выгрузка в XML , без выгрузки отчет ни комильфо..

    Reply
  58. development

    Согласен с Константином, было бы удобно реализовать выгрузку в XML. Хотя по-большому счету на то, чтобы заколотить 20 строчек в Контур (мы отправляем отчетность через него) ушло 5 минут. А так отчет сэкономил кучу времени!!! На нашем предприятии очень сложный учет зарплаты, есть и сделка и повременка и договорники, большая текучка, вообщем чего только нет. Пришлось немного скорректировать список видов расчета, но это мелочи. Проверил на вскидку из отчета человек 15, все попали с правильными зарплатами, те кого не должно быть — не попали. Большое спасибо Алексей!!!

    Reply
  59. ProkopyukIN

    Добрый день. Подскажите как быть с квартальными премиями? У нас есть кварталка, готовим отчет за апрель. Статистика сказала, так как она у нас положена — то берем кварталку за первый квартал, делим на 3 и ставим в апрель.

    Reply
  60. salbey

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

    Reply
  61. ProkopyukIN

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

    Reply
  62. salbey

    (62) Если период регистрации премии за первый квартал попадает в март или апрель, то треть суммы премии попадет в отчет.

    Reply
  63. ProkopyukIN

    (63) проверил. период регистрации премии за первый квартал приходится на март. в отчет за март 1/3 попадает. а в отчет за апрель не попадает.

    Reply
  64. salbey

    (64) Чтобы попала мартовская премия вне зависимости от периода регистрации, необходимо закомментировать в запросе все строки, где встречается условие

    И (ДополнительныеНачисленияРаботниковОрганизаций.ПериодРегистрации МЕЖДУ &НачДата И &КонДата)

    Reply
  65. ProkopyukIN

    (65) спасибо за ответ. но решение не идеальное. в январе почему то попала и квартальная за 4 кв 16 года. и за 1 кв 2017. в апреле вроде все лучше, но! на премию идет серверка и районка. а отчет ее не увидит ((((. утром попробую поиграться с запросом. может что получится

    Reply

Leave a Comment

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