<?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='\
СУПЕР!
плюс авансом за идею.
(2) Идея не моя и она не нова. В ЗиК оклад например всегда был в расчетках, в первых редакциях ЗУПа он вроде тоже присутствовал, да и на инфостарте подобные разработки уже были, только авторы их не поддерживают и к сожалению ни одна из них в последних редакциях ЗУПа не работает…
в зике оклад был отдельным реквизитом. просто было вытащить.
надеемся, что эта разработка будет жить 🙂
на УПП не заработало(
При таком построении набора данных, вы всегда будет иметь во всех расчетных листках оклад на &КонецПериода, т.е. при формировании расчетных листков за несколько месяцев, окажется что во всех листках у сотрудника одинаковый(последний оклад)
(6) действительно есть такая проблема, есть о чем подумать на досуге
Спасиб! …а может подскажите что-нить по реализации задачи: в одной канторе выплаты з/п и авансов осуществляются через «одно место» — аванс за предыдущий месяц дают до 10 числа текущего месяца, а зарплату (за пред месяц) — в 20 числах. Как реализовать, что бы аванс (к примеру, выплаченный в апреле за март) попадал в расчетный листок марта?
(8) вот так сразу не подскажу, нужно внимательно смотреть и думать, на что времени у меня сейчас нет…
и кстати говоря, организация не такая уж и особенная у вас, многие 20 платят ЗП за прошлый месяц, это даже соответствует закону, особенность только в том что расчетки неверно формировать хотят… я бы своим врятли стал такое делать…
Еще не учтено, что возможно тариф задан тарифной ставкой, но легко дорабатывается до нужной кондиции
Спасибо!
Именно то что надо!
Спасибо. Пригодится. А можно ли добавить проценты по начислениям?
Очень полезно, просили добавить % по районым надбавкам, немного доработал.
Спасибо. Пригодилась. В самый нужный момент
Отличная обработка. Плюсую с удовольствием
(8) tebedimon, У меня была такая ситуация, что клиенты (не в 1С) делали выплату на конец месяца ЯКОБЫ ВСЮ ЦЕЛИКОМ. И это писали и печатали в Расчетниках людям. А потом зарплата по кусочкам поступала на их счета. и они жаловались при этом на то, что не видят реально задолженности перед человеком. Парадоксальная ситуация… При этом разносить выплату как нужно отказывались.
Вот думают, переходить или нет на 1С 😀
Мне кажется, некоторые товарищи (пользователи) по-настоящему безумны. И не стоит идти на их провокации.
Спасибо за обработку!
Меня еще просили вытащить процент производственной премии в расчетку. Не думала что так сложно будет! Замучилась копаться в СКД и в запросе процедуры общего модуля НастроитьПостроительЗапросов(ПостроительОтчетов, ВидРасчетногоЛистка). Пока безрезультатно. Может кто сталкивался, как это можно сделать?
Спасибо. Пригодилось.
Еще раз спасибо большое
Спасибо огромное за отчет. Очень нужны были оклады и тарифные ставки в расчетных листах. Доработали по себя, но идея очень хорошая.
Cпасибо! Перерыла весь Интернет, но не нашла ничего больше! Здорово, что есть такая обработка!!!
Было бы здорово если бы добавлено еще КТУ . А так чесный плюс, на УПП 1.3 работает.
В ЗиКБУ (8.2.15.294) , редакция 1.0 (1.0.37.1) выдает ошибку:
{ВнешнийОтчет.РасчетныеЛисткиОрганизаций.МодульОбъекта(3171)}: Ошибка при установке значения атрибута контекста (Текст)
ПостроительОтчетов.Текст = ТекстПостроителя;
по причине:
{(396, 54)}: Неверные параметры «Перечисление.ХарактерВыплатыЗарплаты.Дивиденды»
КОГДА Взаиморасчеты.ХарактерВыплаты = ЗНАЧЕНИЕ(<<?>>Перечисление.ХарактерВыплатыЗарплаты.Дивиденды)
(24) в ЗКБУ отчет действительно не работает, структура ЗУПа и ЗКБу в некоторых местах всетаки различается, чуть позже выложу отдельную версию для нее. Если есть навыки конфигурирования, то можно легко добавить в бюджетную расчетку оклад. Из моего отчета нужно взять в СКД запрос «Оклады», добавить его в СКД бюджетной расчетки, добавить связь по сотруднику и организации, в вычисляемых полях добавить МАКСИМУМ(Оклад), и в макете прописать новое поле.
Сумму оклада тянет из регистра сведений?
(26) само собой из регистра сведений, правда если формировать расчеты за период отличный от месяца и в этом периоде было изменение оклада, то у части расчеток оклад будет неверный. Все забываю пофиксить сей баг
Работает с окладом, но не работает с часовой тарифной ставкой:( Подскажите, пож-та, как доработать???
(28) Тарифная ставка у вас задана через тарифные разряды? Тогда нужно в моем запросе по окладам добавить вложенный запрос по регистру сведений «Размеры тарифных разрядов». На следующей неделе посмотрю и может быть сделаю, если не забуду.
Да, часовая ставка привязана к тарифному разряду. Если у вас будет минутка — буду благодарна!
Спасибо за отчет! Но у меня неправильно формируются вычеты на детей. Не суммируются, если их несколько. Нельзя ли исправить?
Это очень просто подправить:) Если откроете обработку в конфигураторе, то без труда найдете блок для вывода вычетов. Коды поменялись, нужно добавить новые для суммирования. Если не разберетесь, то скопирую, что я доработала.
Спасибо за отчет!
автору респект
Спасибо за проделанную работу. У самого не вышло сделать…
Здравствуйте, отчет скачан. ЗУП типовая.(2.5.63.1). При формировании с «Подробно» ошибка-Метод объекта не обнаружен(ПолучитьСведенияОВидеРасчетаСхемыМотивацмм).
{ВнешнийОтчет.РасчетныеЛисткиОрганизаций.МодульОбъекта(928)}: Метод объекта не обнаружен (ПолучитьСведенияОВидеРасчетаСхемыМотивации) СведенияОВидеРасчета = РаботаСДиалогамиПереопределяемый.ПолучитьСведенияОВидеРасчетаСхемыМотивации(СведенияОВидахРасчета, ВидРасчета, «ПриРасчете»);
Не подскажете как можно исправить?
Так намного удобнее стало!