Форма статистической отчетности 57-т (2013 + 2024 + отбор по подразделениям)




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

60 Comments

  1. M@sha

    на конфигурации ЗиКБУ не пробовали?

    Reply
  2. Jokstr

    Отчет писался и тестировался в конфигурации «Зарплата и Управление Персоналом», редакция 2.5 (2.5.73.1) на обычных (не управляемых) формах. В других конфигурациях запускать не пробовал.

    Reply
  3. margo_m09

    Спасибо автору за отчет, очень пригодился, когда бухгалтерия поставила перед фактом, что им нужна эта форма, руками заполнять долго, а срок у них два дня

    Reply
  4. margo_m09

    (2) начислено сумм зп не сходить с п4(

    Reply
  5. Jokstr

    С отчетом по форме П-4 не сравнивал, делал по указаниям по заполнению 57-т. Попробую сегодня посмотреть в чем отличие.

    Reply
  6. Jokstr

    При разработке отчета основной упор делался на заполнение 2-й таблицы раздела 1 и на второй раздел. 1-я таблица доделывалась в условиях ограниченного времени, когда оказалось, что расчетный не может получить данные о начислениях в разрезе по полу с помощью стандартных отчетов 1с. В принципе в 4-ю колонку 1-й таблицы должны попадать все суммы, начисленные за отчетный период работникам, исключая тех вид занятости которых внесен в список 3 на форме, и исключая виды начислений, внесенные в список 2 на форме.

    Reply
  7. ustemen85

    Огромное спасибо. 1с 8.2 упп редакция 1.3 полет нормальный единственное не встает код профессии, и начисления берет не все, но думаю это решаемо.

    Reply
  8. Mag_LI

    Спасибо! Пригодилось очень вовремя. Немножко только пришлось доработать,но это мелочи. Наши экономисты сегодня очень рады.

    Reply
  9. Mag_LI

    А где плюсовать-то?

    Reply
  10. trans63

    Уважаемый автор! Как обстоят дела в этом отчете с обособленными подразделениями7 А то назрела необходимость в этом отчете, но не уверен, что обособленные подразделения НЕ попадают в него. Уточните пожалуйста этот момент! А то 20го уже сдаваться…

    Reply
  11. SunShinne

    дьякую

    Reply
  12. Jokstr

    К сожалению давно не смотрел этот отчет, так как он сдается нашей организацией раз в несколько лет. Но постараюсь 19 числа посмотреть, вспомнить, что и как там считается и ответить на ваш вопрос.(11) trans63,

    Reply
  13. Jokstr

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

    Reply
  14. Roman_Go

    дорабатывать под новую форму не планируете, от 2017 года?

    Reply
  15. Jokstr

    (15) Сейчас я работаю на предприятии, где не требуется предоставлять этот отчет. Но помню сколько труда вложил в него, поэтому, чтобы усилия не пропали даром решил доработать… и доработал. Правила заполнения не менял — если что-то изменилось в заполнении — напишите, поменял только макеты, и добавил макет «Вкладыш», ну и еще по мелочи (совершенству нет предела).

    Reply
  16. belyy

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

    Reply
  17. Dim4ik

    На бюджетной зарплате будет работать?

    Reply
  18. VsevolodDragunsky

    Есть проблема! Если должностей более 16, то выводятся не все должности, а только 16 строк. При нажатии на кнопку Сформировать табличная часть РазделII отчета перезаполняется данными по должностям, не вошедшим в отчет. Так же есть проблема с выводом сумм «тарифного заработка» и «выплаты по район- ному регулиро- ванию», по одной и тойже должности они показываются в разных строках.

    Буду благодарен за оперативную корректировку отчета!

    Reply
  19. flyDrag

    Добрый день,

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

    Reply
  20. Jedi_u2

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

    Reply
  21. Jokstr

    (20):

    Да уж муетодолологи из статистики постарались придумать алгоритм. пришлось лезть в код и смотреть…

    В принципе так как написано и составляется, правда если у должности работника не проставлена категория статистического учета — то такой работник попадает в самый верх списка.

    Reply
  22. Jokstr

    (21):

    Вы предоставляете его по каждому подразделению отдельно? Или вы имеете в виду обособленные подразделения?

    Reply
  23. Jokstr

    (19):

    Если должностей более 16, то выводятся не все должности, а только 16 строк

    16 строк выводятся если численность работников списочного состава полностью отработавших октябрь от 100 до 249 человек, у меня например численность больше 400 (судя по таблице 2 раздела 1) и выводятся 20 строк.

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

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

    Так же есть проблема с выводом сумм «тарифного заработка» и «выплаты по район- ному регулиро- ванию», по одной и тойже должности они показываются в разных строках.

    Если можно напишите подробней — что за проблемы.

    Reply
  24. Jokstr

    (20)

    (22): Поправил, теперь сотрудники с не заполненной категорией статистического учета имеют код = 3 (другие служащие)

    Reply
  25. flyDrag

    (25) можно скачивать и пользоваться отчет 2017?, пугает надпись, что обновление публикации было 09.11.17 17:23, а Вы подправили только сегодня.

    Reply
  26. Jokstr

    (23) Добавил возможность отбора по подразделениям — в отчете будут выводится данные всех сотрудников работающих в иерархии выбранных подразделений. Если надо сформировать отчет по всем сотрудникам — список подразделений следует очистить.

    Reply
  27. Jokstr

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

    Reply
  28. yandukov

    Обработка только для 8.2 работает?

    Есть ли где-то для 8.3?

    Reply
  29. mvm.mgp

    нет кнопки сохранить отчёт и выгрузить тоже. у меня зуп корп 2.5

    Reply
  30. bnk72

    Добрый день! Все замечательно, проголосовала, хотела скачать, да смутил комментарий выше. Владимир, подскажите пжл, есть ли возможность выгрузки в xml ?

    Reply
  31. Jokstr

    (31): нет выгрузки в xml нет, отчет писался в 2013 г., сейчас переделал его по новой форме (заменил макеты).

    Reply
  32. Gerts

    Добрый день. В описании не увидел на какой конфигурации работает. Комментарии пролистал — тоже не увидел.

    У меня ЗуП 3.1.3 (стандартная, на УФ, платформа 8.3) — не работает. Пишет: «Не установлена схема компоновки данных»

    Reply
  33. mvm.mgp

    (32)а функция сохранения? у меня просто 140 подразделений, хотелось бы что бы они хотябы сохранялись, если вдруг поправите, пришлите пожалуйста на почту mvm.mgp@mail.ru

    Reply
  34. Jokstr

    (33) Отчет писался для конфигурации ЗУП 2.5 и тестировался на ней же. На управляемых формах работать не будет. В настройках отчета поддерживаемая конфигурация указана, добавил в описание.

    Reply
  35. m0zg153

    Прикрутил отбор по подразделениям и выгрузку в xml

    Reply
  36. Jokstr

    (38):

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

    Что касается отбора по подразделениям — несколько не согласен, что надо отбирать по списку сотрудников на конец месяца — в случае, если сотрудник перевелся в обособленное подразделение в конце октября, то подтянутся все его начисления как по обособленному, так и по другим подразделениям.

    PS: А чей это телефон — 260-09-21?

    Reply
  37. m0zg153

    «Могу я вставить код по выгрузке из вашего отчета в свой?» — ДА, конечно. Отбор по подразделеениям ещё тестируется моей бухгалтерией, там возможно надо доводить до ума. И ещё по начислениям тоже будут проблемы(по-моему надо переделывать на период регистрации). Телефон — это «ой» забил жестко телефон нашей организации и забыл об этом.

    Reply
  38. VsevolodDragunsky

    Коллеги, помогите разобраться, не могу понять. Почему то начисления районного коэффициента показываются без основного начисления отдельной строкой. Что не так? Районный коэффициент начисляется стандартным зависимым типовым начислением.

    Reply
  39. bnk72

    (41) У нас так же: есть или тарифный заработок, или РК

    Reply
  40. bnk72

    (это по II разделу). А выполняю запрос в Консоли запросов — на самом деле 2 строки по каждому сотруднику (различия в данных только по столбцам Районные выплаты и Другие выплаты). Поэтому и данные в табл. 2 раздела I задвоены.

    Для отбора по подразделениям изменила условие с «ПодразделениеОрганизации В (&СписокПодразделений)» на «ПодразделениеОрганизации В ИЕРАРХИИ (&СписокПодразделений)».

    Некоторые не понимают зачем этот отбор, поясню: у нас есть обособленные подразделения без выделенного баланса. Их вносим не в справочнике Организации, а в справочнике подразделений. У нас это выглядит следующим образом: обособленное подразделение (ОП) с галкой «подразделение зарегистрировано в ИФНС как обособленное … » и указанием кодов ОКАТО,ОКТМО, КПП, а в подчинении список отделов, относящихся к этому ОП (опять же с указанием кодов ОП).

    Reply
  41. bnk72

    Извиняюсь что сама с собой… Получилось от задвоенности исходных данных при районном коэф-те избавиться: в конструкторе запроса Запрос пакета 3 на вкладке Группировка надо перетащить последнее поле (РК) из списка Групповых полей в список Суммируемых полей. Вот теперь отчет вроде корректно отрабатывает!

    Осталось заполнить верно коды ОКПДТР (учила-учила кадры правильно заполнять справочник должностей «подбором из справочника», сами то они не догадывались для чего эта кнопка на форме). А при тестовой выгрузке — загрузке 57-т оказалось, что справочник ОКПДТР в ЗУП2.5 у меня устаревший (коды 6-ти значные, а с 12 года они 5-ти значные). Помнится качала его с ИТС, наверное там же обновление стоит поискать… Пишу для тех, кто пока занимается отладкой-проверкой отчета, параллельно дали бы задание соответствующим службам уточнить актуальность кодов ОКПДТР в вашей базе.

    Reply
  42. Jokstr

    (43): Текст запросов с 2013 г. не менялся, сейчас посмотрел, да, в первом запросе неверно сделано соединение, надо переписать. Насчет районного коэффициента — не тестировал, у меня он не используется. Завтра постараюсь выделить время на доработку отчета.

    Для отбора по подразделениям изменила условие с «ПодразделениеОрганизации В (&СписокПодразделений)» на «ПодразделениеОрганизации В ИЕРАРХИИ (&СписокПодразделений)».

    Странно, вроде бы когда делал отбор по подразделениям, везде условие ставил В ИЕРАРХИИ,

    Reply
  43. user860098

    (38) Спасибо огромное! Все работает ) к тому же скачал бесплатно )

    Reply
  44. Dim4ik

    Выявилась ошибка при выводе количества сотрудников в первом разделе. Вместо 820 сотрудников выводилось 269. В коде количество занимаемых ставок берется из справочника сотрудники. Почему оттуда? Лучше из регистра кадровых данных. Так правильнее.

    Из-за перехода из другой программы у старых сотрудников не стояли занимаемые ставки и они не попадали в отчет, а попадали только новенькие сотрудники, соответственно и в разделе 2 меньше было строк.

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

    Reply
  45. user_2010

    На какой версии ЗУП работает отчет?

    Reply
  46. Barney06

    (48) 2.5

    Reply
  47. user_2010

    (49) понятно! Спасибо!

    Reply
  48. Jokstr

    (47)

    Лучше из регистра кадровых данных. Так правильнее.

    Да, так правильнее, запрос в отчете поправил.

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

    Не стоит, если других доработок нет. Поправить ставки в запросе — минутное дело.

    Reply
  49. Drizer2000

    Неверно подставляется коды по образованию. Прикрепил скрин кодов. С чего вы решили,если код в 1с равен 7,то это код 4 (среднее общее), хотя это высшее и должна быть цифра 1.

    Reply
  50. bnk72

    (51) Не берусь утверждать (так как у меня старая версия отчета), но проверьте еще в запросе КодПоОКПДТР (у нас вставал код первоначальной должности сотрудника в Организации при приеме, а не код ОКПДТР текущей должности, надо РаботникиОрганизацийСрезПоследних.Должность.КодПоОКПДТР КАК КодПоОКПДТР).

    И образование (графа 6 раздел II) кодировка противоположная в 2017 году: 1- высшее (06,07,08), …, 6 — не имеет основное общее образование (01,02).

    А так вроде все. Большое спасибо! Очень помогло…

    Reply
  51. bnk72

    Ну вот, ни одни мы заметили…

    (52). Страничку не обновляла, поэтому увидела ваше сообщение только после того как свое отправила…

    Reply
  52. Drizer2000

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

    МИНИМУМ(ВЫБОР
    |     КОГДА ВидыОбразованияФизЛиц.Код В («»18 «», «»1 «», «»2 «»)
    |      ТОГДА 1
    |     ИНАЧЕ ВЫБОР
    |       КОГДА ВидыОбразованияФизЛиц.Код = «»11 «»
    |        ТОГДА 2
    |       ИНАЧЕ ВЫБОР
    |         КОГДА ВидыОбразованияФизЛиц.Код = «»10 «»
    |          ТОГДА 3
    |         ИНАЧЕ ВЫБОР
    |           КОГДА ВидыОбразованияФизЛиц.Код = «»07 «»
    |            ТОГДА 4
    |           ИНАЧЕ ВЫБОР
    |             КОГДА ВидыОбразованияФизЛиц.Код = «»03 «»
    |              ТОГДА 5
    |             ИНАЧЕ NULL
    |            КОНЕЦ
    |          КОНЕЦ
    |        КОНЕЦ
    |      КОНЕЦ
    |    КОНЕЦ) КАК Образование
    

    Показать

    В типовой 2.5 таких кодов то нет, которые здесь анализируются

    Reply
  53. Drizer2000

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

    Reply
  54. Drizer2000

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

    Reply
  55. Jokstr

    (55):

    Отчет писался в 2013 г. для базы определенного предприятия (как и многие выложенные здесь за стартмани). Соответственно специалитета и магистратуры, как я подозреваю в 2013 году в справочнике «Виды образования физических лиц» не было. Код на тот момент не откуда не вытягивал «неглядя», а писал сам на основании данных вышеупомянутого справочника. К сожалению не имею времени, чтобы выявлять все подобные баги, но раз вы его заметили — исправлю.

    Reply
  56. Jokstr

    (56):

    Проще всего, чтобы не менять стандартную форму, будет добавить расшифровку раздела 2 по сотруднику.

    Reply
  57. Jokstr

    (57):

    Код по выгрузке xml скопирован (не то чтобы «неглядя», но с некоторыми доработками) из отчета Андрея Бочкарева. Откуда информация о количестве знаков после запятой в xml?

    Reply
  58. Jokstr

    (53) Исправил.

    Reply
  59. Drizer2000

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

    Reply
  60. Jokstr

    (62) :

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

    Reply

Leave a Comment

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