<?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='\
А выгрузка есть? Если есть — как ее подсоединить?
(1) chmv, выгрузки пока нет
А почему он за квартал или за месяц ? Когда будет за год ?
(3) b-dm, с 2013 года данная форма сдается поквартально
А почему ф макетах только форма за 1 кв.2013 года ? В том смысле что с этого времени форма не менялась ?)
После регистрации в ЗУП он у меня почему то перечеркнутый в Регл.отчетах. Его оттуда вообще надо вызывать ?:
И еще вопросец — пожелание: можно сделать разделение по подразделениям ?:
(5) b-dm,
1) А почему ф макетах только форма за 1 кв.2013 года ? В том смысле что с этого времени форма не менялась ?) — с 1 января 2013 года форма отчета не менялась (одинаковая для всех кварталов)
2) После регистрации в ЗУП он у меня почему то перечеркнутый в Регл.отчетах. Его оттуда вообще надо вызывать ?:
Для того, чтобы подключить НОВЫЙ внешний отчет необходимо:
1) открыть форму списка справочника «Регламентированные отчеты»
(меню «Операции — Справочник — Регламентированые отчеты»);
2) в папке «Отчетность прочая» добавить новый элемент.
3) в форме элемента необходимо установить переключатель
«Использовать:» в положение «Файл», в качестве файла выбрать
соответствующий внешний отчет;
4) нажать кнопку «ОК».
3) Вы имеете ввиду обособленные подразделения, стоящие на отдельном балансе?
Никак не пойму, есть выгрузка или её нет?
(9) KotorVB, выгрузки нет
(8) да , именно по обособленным подразделениям ? Если сделаете, будет прекрасный и удобный отчет на все случаи жизни, очень выручите)
А так в принцип отчет неплохой, но ОП сдают его каждый своё.
(8)
Форма N П-4 (НЗ) утрачивает силу с отчета за I квартал 2014 года в связи с изданием Приказа Росстата от 29.08.2013 N 349, которым с этого же срока вводится новая форма N П-4 (НЗ).
http://www.consultant.ru/document/cons_doc_LAW_157157/
© КонсультантПлюс, 1992-2014
Вы планируете вносить изменения в отчет в связи с вводом новой формы?
хотя там изменения чисто косметические, номер приказа да номер приложения поменялся, плюс форматирование.
Да хотелось бы новый макет получить. Заранее спасибо
Заранее спасибо
(13) mikhailovaew, спасибо за оперативное отслеживание законодательства. Постараюсь в ближайшее время подготовить новый отчет
(16) chmv, подготавливаю новый отчет
(14) mikhailovaew, не только косметические. В строках 16 и 17 теперь указываются соответственно «Численность женщин, находящихся в отпуске по уходу за ребенком до достижения им возраста 1,5 лет» и «Численность женщин, находящихся в отпуске по уходу за ребенком в возрасте от 1,5 до 3 лет».
А «Численность работников, выполнявших временные и сезонные работы, работы временного характера и общественные работы 1» (в предыдущей редакции строка 16) убрали совсем
Отчет обновлен:
1. Изменен номер приказа
2. Строках 16 — «Численность женщин, находящихся в отпуске по уходу за ребенком до достижения им возраста 1,5 лет» — заполняется количеством женщин, находящимся в отпуске по уходу за ребенком (возраст ребенка не учитывается — в ЗУПе пока нет разделения состояний сотрудников в зависимости от возраста ребенка)
3. Строках 17 — «Численность женщин, находящихся в отпуске по уходу за ребенком в возрасте от 1,5 до 3 лет» — автоматическое заполнение не предусмотрено
Готовлю редакцию отчета с выделением обособленных подразделений
А выгрузка поменялась?
(21) chmv, да, выгрузка тоже стала нового формата. Надо будет поработать над ее созданием в ЗУПе.
(21) chmv, добавлена выгрузка отчета. Чтобы отчет выгрузился, не забывайте указывать ФИО и должность ответственного лица
(23) а по обособленным подразделениям теперь можно заполнять/выгружать ?)
(24) b-dm, пока нет. Напишу, когда будет готово.
(25) ок, буду признателен 🙂 ориентировочные сроки есть ?)
и еще вопрос не по теме: не собираетесь, не писали форму П-; ?) Они обычно парой ходят, как раз ищу подобный рабочий вариант, был бы признателен за наводку. Т.к. те что есть на ИС либо устарели, либо не работает заполнение 🙂
(26) b-dm, П-; — это П-4?
(27) да,именно она. П-4 🙂
(28) b-dm, понятно. Надо будет посмотреть эту форму. 🙂 По поводу П4-НЗ постараюсь сделать сегодня
(29) — ок, с нетерпением жду 🙂 вечером посмотрю, может быть уже выложите 🙂
Скачал. пробую запустить, пишет ошибку :){ВнешнийОтчет.РегламентированныйОтчетСтатистикаФормаП4НЗ.МодульОбъекта(417)}: Ошибка при вызове метода контекста (Область)
мФормаОтчета.Область(КлючЗначение.Ключ).Значение = КлючЗначение.Значение;
по причине:
Область не найдена: П0001000101
понял, эта ошибка возникает если выбрать 2013 год
я так понял по подразделениям пока что не пашет 🙂
(32) b-dm, ошибка исправлена для формирования отчета за 2014.
Также в отчет добавлена возможность выбора обособленного подразделения
(34) — спасибо огромное 🙂
Выгрузка есть?
(36) chmv, посмотрите ответ 23, выгрузка есть за 2014 год нового формата
Добавлено автоматическое заполнение строк 16 и 17 — «Численность женщин, находящихся в отпуске по уходу за ребенком до достижения им возраста 1,5 лет» и «Численность женщин, находящихся в отпуске по уходу за ребенком в возрасте от 1,5 до 3 лет».
(38) -не знаю как вы этого добились по отпускам по уходу но спасибо большое 🙂
Спасибо. Отчет полезный
Прежде всего хочу поблагодарить автора за полезный отчет и за его сопровождение.
Есть замечания по расчету строки 15:
во-первых, в запросе нужно вынести проверку соответствия подразделению из условий виртуальной таблицы в секцию ГДЕ, иначе завышает численность (приплюсовывает всех сотрудников, когда-либо работавших в подразделении)
во-вторых, отбор по виду занятости должен включать внутренних совместителей (у Вас вместо них — внешние).
Эти замечания справедливы и для расчета всех прочих «численностей» (строки 01-12): условие на подразделение должно быть в секции ГДЕ, а в саму численность включаются сотрудники по основному месту работы и внутренние совместители.
Вообще отбор по подразделению следует серьезно переработать.
Например, в функции ПолучитьКоличествоСотрудниковИмевшихОтпускаБезСохраненияЗП условие вида «Сотрудник.ПодразделениеОрганизации В ИЕРАРХИИ (&ОбособленноеПодразделение)» некорректно, поскольку здесь проверяется соответствие отбору подразделения из трудового договора вместо актуального подразделения сотрудника.
Еще неправильно формируется численность в строке 05: неправомерно попадают сотрудники, у которых отпуск закончился датой, предшествующей отчетному периоду. Дело в том, что ПериодЗавершения в регистре СостояниеРаботников на день больше, чем «Дата по» в документе, это нужно учесть в запросе.
(43) mikhailovaew, может сами и подправите? и выложите здесь ?)))
Не работает выгрузка (ЗУП 2.5.80.1), выдает ошибку:
{Документ.ВыгрузкаРегламентированныхОтчетов.Форма.ФормаДокумента.Форма(3002)}: Значение не является значением объектного типа (КодИМНС)
КодИМНС = ПервыйДок.КодИМНС;
UPD: вопрос по выгрузке снимается, просто нельзя выгружать из внешнего отчета, можно только из зарегистрированного в базе и записанного.
(44) правлю много, плюс собираюсь добавить отбор по КПП. Насчет выкладывать — подумаю. Если руки дойдут, оформлю как отдельную публикацию. У меня еще П-4 есть доработанная (тоже с отбором по КПП, плюс среднесписочная берется из встроенного отчета).
(46) mikhailovaew, спасибо большое за такой тест отчета. В нашей организации нет обособленных подразделений, поэтому очень важно знать как отчет отрабатывается у других. Сегодня постараюсь исправить все недоработки
(45) mikhailovaew, у меня выгружается отчет без ошибок: Для организации «ООО» сохранены настройки выгрузки стат. отчетности в формате ПО «Заполнение форм статистической отчетности», версии 2.4.4!Для изменения формата выгрузки перейдите в форму настроек журнала «Регламентированная и финансовая отчетность».
Какая у Вас стоит версия выгрузки?
(48) да это просто отчет был запущен как внешний) возможно, было бы правильно скрывать кнопку «Выгрузка», если отчет не сохранен.
Еще подвал не соответствует новой форме (нет e-mail), соответственно, выгрузка тоже.
В выгрузку не попадает строка 17 (потому что формат выгрузки устаревший).
(50) mikhailovaew, выгрузка формата 1.3, но почему то использовалась схема 2013, а не 2014 года. Исправлено. Строка 17 теперь попадает.
(51) Спасибо за оперативность! Вижу, и по обособленным подразделениям есть изменения)
А e-mail должен попадать в выгрузку? а то он на форме есть, в выгрузке нет…
(52) mikhailovaew, по схеме 2014 года нет электронной почты. Есть только
Руководитель организации (ФИО) — &ОргДиректор
Должностное лицо, ответственное за составление формы (должность) — &ОргДолжностьИсп
Должностное лицо, ответственное за составление формы (ФИО)- &ОргИсполнитель
Контактный телефон — &ОргТелефонИсп
Кстати, по обособленным… Все-таки не идеально считает.
У Вас для определения численности в строках 05 и 16-17 подразделение сотрудника определяется по реквизиту ТекущееПодразделениеОрганизации. Это не совсем корректно: нужно делать соединение с регистром РаботникиОрганизаций (при расчете отпусков за свой счет — на дату каждого отпуска) и брать актуальное подразделение, т.к. в противном случае не учитываются перемещения.
(56) mikhailovaew, ТекущееПодразделениеОрганизации — это и есть актуальное подразделение. Распишите подробный пример для теста
Еще результаты тестов:
1. В принятые не попадают внутренние совместители.
2. В уволенные попадают те, кто был когда-то принят в указанное подразделение, а уволен уже из другого (используется Сотрудник.ПодразделениеОрганизации).
3. В расшифровке не совпадает количество по неполному времени строка 02 (меньше, чем в отчете) и по женщинам строки 16-17 (больше, чем в отчете).
(57)
Не совсем так.
Допустим, сотрудник в первом квартале работал в подразделении Основное, а в апреле был переведен во Вспомогательное (и ТекущееПодразделениеОрганизации приняло значение Вспомогательное). Но в отчет за первый квартал его отпуска за свой счет должны попадать по подразделению Основное, то есть «актуальность» подразделения должна определяться не на дату самого последнего перемещения, а на дату отпуска. Это не совсем элементарная задача, тут требуется запрос с определением состояния на каждую дату события (яркий пример подобных запросов — определения актуальной цены на дату продажи).
(58) mikhailovaew,
1. Согласно указаниям в строке 06 указывается численность принятых работников СПИСОЧНОГО состава. Согласно чему туда должны попадать внешние?
2. Согласна
(60) комментарий уже исправлен: ну конечно же, ВНУТРЕННИЕ ) а у Вас только основное место работы, внутренних не включили )
еще раз спасибо за поддержку отчета и за оперативность изменений.
Пойду домой, пока солнышко светит )
(63) mikhailovaew, тестируйте пока без проверки актуальности подразделений (если отчет формируется за 1 квартал, а во 2 квартале подразделение изменилось, то берется пока новое)
Спасибо за отчет. Очень нужен
а когда можно ожидать новую версию?
(66) otrazhenie, после моего отпуска! Всем хороших солнечных дней! 🙂
Хорошо Вам отдохнуть!
а после отпуска можно будет увидеть форму 407?
Хочу обратить внимание, что в строке 02 подразделение тоже выбирается не совсем корректно.
Берется реквизит ПодразделениеОрганизации из среза регистра. Но в регистре есть ещё реквизит ПодразделениеОрганизацииЗавершения, и если заполнен реквизит ПериодЗавершения, и он меньше, чем дата среза регистра, то брать нужно именно ПодразделениеОрганизацииЗавершения, а не ПодразделениеОрганизации.
Кроме этого, в инструкции по заполнению написано:
При заполнении строк 01 — 05 следует учитывать следующее. Если работник в течение отчетного квартала работал, например, неполное рабочее время сначала по инициативе работодателя, затем по соглашению между работником и работодателем, а в конце квартала находился в отпуске без сохранения заработной платы, то он показывается один раз по строке 01 или 02 или 05, исходя из причины его работы неполное рабочее время или нахождения в отпуске без сохранения заработной платы большую часть времени в квартале.
В 1С конечно нет всех этих данных, можно получить только строки 02 и 05, но даже при этом нужно сделать хотя бы так, чтобы один и тот же человек не попал в обе строки отчета. Например сделать выборку для строки 02 по людям, а по строке 05 уже проверять, не входит ли сотрудник в строку 02. Если входит, то не включать в строку отпусков.
Ещё один момент:
принятые и уволенные сотрудники считаются по документам приема и увольнения.
Но если вести учет по обособленным подразделениям, то наверное нужно считать кадровые перемещения, если подразделения имеют разный ОКПО.
При подсчете женщин, находящихся в отпуске по уходу, есть ошибка:
в отчете нужно выдать численность на конец квартала, а у Вас выбираются все, кто был в квартале в состоянии ухода за ребенком.
Строка 13 — численность на конец квартала. В инструкции к заполнению формы написано:
«В строку 13 не включаются работники, для которых последним днем работы в организации являлось последнее число отчетного квартала. Эти работники учитываются в строке 08.»
У Вас в обработке такие попадают в строку 13, т.к. на последний день месяца они в регистре ещё работающие. Тут нужно проверить, нет ли врегистре записи от 1-го числа с признаком «увольнение». Если есть, то таких не включать
Кстати отбор по КПП не очень интересен, интереснее по ОКМТО
Если можно пришлите пожалуйста на chmv20005@mail.ru Еще раз.
Последнюю версию
Отлично, то что надо…а то сток левака перебрали уже
А на УПП 1.3 взлетит?
Ошибка инициализации модуля: ВнешнийОтчет.РегламентированныйОтчетСтатистикаФормаП4.МодульОбъекта
по причине:
{ВнешнийОтчет.РегламентированныйОтчетСтатистикаФормаП4.МодульОбъекта(948)}: Метод объекта не обнаружен (ПолучитьОписаниеТиповСтроки)