<?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. Что за загадочная колонка «Дополнительный оплачиваемый», какие дни в ней показывает отчет?
2. Прошлые годы, остатки тех отпусков, кроме текущего, отчет не учитывает? Как настроить, чтоб считал с начала учета?
3. Дополнительные неоплачиваемые отпуска > 14 дней не учитывает?
4. Где в типовой конфигурации можно увидеть типовой механизм расчета остатков отпусков, о котором упоминается?
Наверное я не умею его готовить ;))
(1)
1. Загляни в справочник «Виды ежегодных отпусков»
2. Считает с момента последнего заполнения справочника «Остатки отпусков организаций»
3. Неоплачиваемые отпуска > 14 дней и отпуск по уходу за ребёнком (вопреки закону) учитываются как стаж дающий право на отпуск… Я для себя сам исправлял.
4. В конфигураторе)))
(2)
1. Как бы удалить из отчета этот дополнительный, не удаляя из справочника, может потом понадобится? К сожалению в отборах нет вида отпуска.
3. Ответ не понят. По законодательству неоплачиваемые отпуска (за свой счет) > 14 дней в год уменьшают (или сдвигают) рабочий период для исчисления отпуска. Отчет это учитывает, или гуляй хоть сколько за свой счет — ничего не уменьшится?
Огромное спасибо.. впервые ничегошеньки не пришлось дописывать, подправлять.. просто подключила и в кадрах праздник
Обновили конфигурацию в октябре и отчет перестал работать, что делать? Подскажите, пожалуйста.
Ждать, когда я обновлю конфигурацию и переделаю отчет 😐
Заранее, спасибо, будем ждать.
Почему обработка скачивается, как просто файл?
Выдает ошибку (ТК 2.5.20.3):
{ОбщийМодуль.ПроцедурыУправленияПерсоналом(2011)}: Ошибка при вызове метода контекста (Выполнить): {(6, 2)}: Тип не может быть выбран в запросе
<<?>>&Таблица КАК ТаблицаПериодов
Запрос.Выполнить();
по причине:
{(6, 2)}: Тип не может быть выбран в запросе
<<?>>&Таблица КАК ТаблицаПериодов
Что делать?
(9) Необходимо в модуле объекта добавить в функцию ПолучитьТаблицуОстатковОтпусков
следующий код:
Ошибка возникала именно из-за неопределенного типа колонки
Не очень удачно решение, требующее создания фиктивного документа. Делается это только для того, чтобы используя механизмы типовой, рассчитать стоимость остатков отпуска.
Мною добавлена проверка заполненности параметра. Если он пуст, то сумма не рассчитывается.
Показать
Кстати, без сумм отчет формируется за считанные секунды 🙂
Ещё не очень удобно, когда в отчет попадают давно уволенные сотрудники.
Но и с этим можно справиться:
В «ОсновнаяСхемаКомпоновкиДанных» у поля «Состояние» снимите галки в ограничениях. Теперь реквизит «ДанныеОРаботнике.Состояние (Текущее состояние)» доступен для отбора. Ставим «Не равно Уволен» и видим чистенький отчет по работающим сотрудникам.
Ну а красиво это оформить в настройках вы сможете и сами. Или дождитесь официального релиза от разработчика.
8.2.10 после конвертации в Параметре можно выбрать только Параметры. Документ. Конкретный документ не дает.
К сожалению эта обработка перестала работать в версии Зарплата и Управление Персоналом, редакция 2.5 (2.5.19.3) 😥 😥 😥
Выдает ошибку:
{ОбщийМодуль.ПроцедурыУправленияПерсоналом(2167)}: Ошибка при вызове метода контекста (Выполнить): {(6, 2)}: Тип не может быть выбран в запросе
<<?>>&Таблица КАК ТаблицаПериодов
Запрос.Выполнить();
по причине:
{(6, 2)}: Тип не может быть выбран в запросе
<<?>>&Таблица КАК ТаблицаПериодов
Может кто подскажет в чем тут проблема? очень нужный отчет, без него худо 🙁
Функция ПолучитьТаблицуОстатковОтпусков()
…
…
ТаблицаСотрудников.Колонки.Добавить(«Период»);
Заменить на:
ТаблицаСотрудников.Колонки.Добавить(«Период», Новый ОписаниеТипов(«Дата»));
Также
Функция РассчитатьСуммуОтпуска(СтрокаТаблицыОстатков)
…
ПроведениеРасчетов.РассчитатьЗаписиРегистраРасчета(«ДополнительныеНачисленияРаботниковОрганизаций», НаборДополнительныеНачисления, , НаборРасчетСреднего, СтрокаТаблицыОстатков.Организация, СтрокаТаблицыОстатков.ОбособленноеПодразделение);
Заменить на ПроведениеРасчетовПереопределяемый.РассчитатьЗаписиРегистраРасчета(«ДополнительныеНачисленияРаботниковОрганизаций», НаборДополнительныеНачисления, , НаборРасчетСреднего, СтрокаТаблицыОстатков.Организация, СтрокаТаблицыОстатков.ОбособленноеПодразделение);
Спасибо Armando и Alex Y. Всё хорошо, только при расчете остатка отпуска учитывается и тот период когда сотрудник был в декретном отпуске…
Залит файл erf,а не ert,перезалейте нормальный,пожалуйста…
В последних релизах выдаёт ошибку:
Общий модуль. Типовые отчеты: Модуль
Метод объекта не обнаружен (ПолучитьПараметрыИсполненияОтчета)
ПараметрыИсполненияОтчета = ОтчетОбъект.ПолучитьПараметрыИсполненияОтчета();
В предыдущих релизах в общем модуле была Попытка/Исключение/КонецПопытки, а теперь её убрали и отчёт ругается 🙁
Решение нашлось 🙂
В модуле объекта нужно добавить
Функция ПолучитьПараметрыИсполненияОтчета() Экспорт
СтруктураНастроек = Новый Структура();
Возврат СтруктураНастроек;
КонецФункции
ОГРОМНОЕ СПАСИБО!
а как можно увеличить скорость?
Что может означать ошибка (открываю платформой 8.2 конфмгурация УТП Украина релиз 1,2,2,3):
Помилка в схемі компонування даних
через:
Помилка отримання інформації набору даних
через:
Помилка у запиті набору даних
через:
{(4, 30)}: Поле не знайдено «РаботникиОрганизации.ПериодЗавершения»
КОГДА РаботникиОрганизации.<<?>>ПериодЗавершения < &Период
(21) Сильно тормозит расчет сумм. Для увеличения скорости воспользуйтесь советом Alex Y (11) (ну естественно сумм вы не получите :))
(22) Это значит что в конфигурации УТП для Украины в регистре сведений «РаботникиОрганизации» нет поля «ПериодЗавершения» (возможно оно по другому называется). Для этой конфигурации отчет нужно переделывать.
Автору плюс конечно. Публикация старая, но скачивают неплохо и до сих пор её. Было-бы совсем замечательно если бы подправили ошибочки которые здесь написаны в комментариях(тем более решения тоже описаны). А то получается как в том анекдоте: «доработать напильником».
Спасибо большое за отчет.Формирует суммы конечно медленно, но если надо, то деваться некуда(((Хотелось бы корректировки от самого автора,т.к. скачивают и будут скачивать еще много людей.А без программиста допилить нормально нельзя(
Полезный отчет! Спасибо)))
Вы пишете: Это значит что в конфигурации УТП для Украины в регистре сведений «РаботникиОрганизации» нет поля «ПериодЗавершения» (возможно оно по другому называется). Для этой конфигурации отчет нужно переделывать.
Автору плюс конечно. Публикация старая, но скачивают неплохо и до сих пор её. Было-бы совсем замечательно если бы подправили ошибочки которые здесь написаны в комментариях(тем более решения тоже описаны). А то получается как в том анекдоте: «доработать напильником». Замечательно
Подскажите в конфигурации 1С:Зарплата и Управление Персоналом 8.2 работает?
Очень пригодился отчетик! Спасибо!
Подойдет ли отчет для Комплексной автоматизации?
Оооо, это как раз то что доктор прописал, плюхаем 🙂
Огромное спасибо.. впервые ничегошеньки не пришлось дописывать, подправлять.. просто подключил и в кадрах праздник
Не знаю с какой версии релиза это началось, но пробовал уже на 2.5.45.3. При формировании выдаёт ошибку:
{ВнешнийОтчет.ОстаткиОтпусковСотрудниковОрганизации.МодульОбъекта(192)}: Метод объекта не обнаружен (РассчитатьЗаписиРегистраРасчета)
ПроведениеРасчетов.РассчитатьЗаписиРегистраРасчета(«ДополнительныеНачисленияРаботниковОрганизаций», НаборДополнительныеНачисления, , НаборРасчетСреднего, СтрокаТаблицыОстатков.Организация, СтрокаТаблицыОстатков.ОбособленноеПодразделение);
У кого происходит тоже самое, нужно подправить в модуле объекта в функции РассчитатьСуммуОтпуска(СтрокаТаблицыОстатков):
ПроведениеРасчетовПереопределяемый.РассчитатьЗаписиРегистраРасчета(«ДополнительныеНачисленияРаботниковОрганизаций», НаборДополнительныеНачисления, , НаборРасчетСреднего, СтрокаТаблицыОстатков.Организация, СтрокаТаблицыОстатков.ОбособленноеПодразделение);
А в остальном, если подправить ещё и уже вышенаписанное, то работает и на 8.2 после конвертации. Пока ещё не опробовал на своих замороченных организациях, но — спасибо автору!
Спасибо! Будем пользовать, осталось допилить под свои нужды и можно временно вопрос по резервам закрыть.
А то в 1С это все пока очень сыро.
Спасибо!
Я не умею читать инструкции заранее…
Сконвертировал отчет под 8.2, исправил все ошибки, добился, чтобы отчет работал в УПП 1.3.22.1, и только потом увидел, что добрые люди в комментариях уже нашли и описали все ошибки 🙂
Если кому-то нужно сразу рабочий отчет, могу выслать на почту. Или автору могу прислать его же отчет, чтобы перезалить в публикацию
Я добавил в отчет страховые взносы (жестко забил ставки налогов, но можно в последствии переделать) и доработал процедуру формирования резерва на 96 счете с разбивкой по сотрудникам с использованием документа Отражение зарплаты в регл. учете.
Опять же, могу поделиться с желающими, только автор не торопится отвечать… Товарищи форумчане, подскажите, можно ли сделать новую публикацию, со ссылкой на эту и ее автора? В ней было бы здорово разместить последнюю рабочую версию отчета, плюс механизм начисления резерва. Если в дальнейшем разработаю механизм списания резерва при начислении отпусков, его тоже размещу.
Огромное спасибо за Ваш труд! Бухгалтерия в восторге!
На конфигурации: Зарплата и Управление Персоналом, редакция 2.5 (2.5.49.2) — после внесенных изменений (описанных выше) работает без проблем!
Как исправить следующую ошибку?
{ВнешнийОтчет.ОстаткиОтпусковСотрудниковОрганизации.МодульОбъекта(180)}: Метод объекта не обнаружен (ПодготовитьДанныеПоРегламентированнымОтпускам)
ВыборкаПоОстаткам = ПроцедурыУправленияПерсоналом.ПодготовитьДанныеПоРегламентированнымОтпускам(ТаблицаСотрудников,,Ложь,);
метод удалили в новом релизе, а другой не добавили?)
И я тоже столкнулся с тем, что метод удалили. Ищу, что теперь можно сделать. Может кто подскажет?
(42) ptica-voron, возьми с прошлых релизов, могу выслать, но не факт, что в новом релизе отчет будет работать корректно
Ну и кто как теперь остатки получает?) Нужно метом новый подставить, я так понимаю) Кто разбирался уже?
(44)Я на выходных буду разбираться…
Отчет очень интересный, сейчас метод добавлю и посмотрю что получится
если заменить на
ВыборкаПоОстаткам = ПроцедурыУправленияПерсоналомДополнительный.ПодготовитьДанныеПоУправленческимОтпускам(ТаблицаСотрудников);
то по крайней мере в последнем релизе считает дни ругается на РасчетРегистров..по Допначислениям ,
изменить на:
ПроведениеРасчетовПереопределяемый.РассчитатьЗаписиРегистраРасчета(«ДополнительныеНачисленияРаботниковОрганизаций», НаборДополнительныеНачисления, , НаборРасчетСреднего, СтрокаТаблицыОстатков.Организация, СтрокаТаблицыОстатков.ОбособленноеПодразделение);
Релиз 2.5.62.1 . — работает правильно!
спасибо masik85. Необходимые изменения!
В ЗУП Корп не заработал. Это отчет для ЗУПа подходит? а то он может для УПП ?