<?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='\
«В случае использования кода обработки или внесения изменений в ее функционал, прошу оставлять ссылку на сайт автора»
/из описания/
ИМХО: для Инфостарта наилучший пример того, как, оставляя открытым код обработки, быть честным с честными. Ибо нечестные полюбому своруют, а честные еще и тебе, возможно, сделают рекламу.
(0) А учитывается то, что записи по другим составляющим сальдо в текущем месяце просто могут быть не рассчитаны?
В этом случае не имеет смысла сравнивать сальдо.
(1) Вообще я доверяю людям и считаю, что будущее за бесплатным ПО.
(2) В текущем расчетном периоде обработку имеет смысл использовать после того как зарплата полностью рассчитана и непосредственно перед переходом на следующий период.
Других вариантов на самом деле нет. Если накопленная задолженность вводится автоматически при использовании мастера смены периода расчетов, то начисление заработной платы бухгалтера обычно оставляют на «десерт».
(3) Так и я говорю, что для использования проще написать в форме, что нужно ввести доки «Начисление ЗП» на всех сотрудников и выполнить полный расчет ЗП.
А еще лучше, выполнить проверку — есть ли записи по сальдо вообще и рассчитаны ли они. это несложно.
(4) Спасибо. Я учту Ваши пожелания и сделаю соответствующие доработки.
Доработано в соответствии с пожеланиями artbear (4).
А зачем выводить в список тех, у кого все по нулям ? у нас 2000 сотров, зачем выводить всех ? и похоже не объединяются деньги у основного и внутр. совместителя ?
(7) Доработано в соответствии с Вашими пожеланиями.
Оч.нужная , правда не проверила еще.
И все-такм я бы сделела кнопку «сформировать», чтобы вначале выбрать настройки, а потом уже запустить обработку, особенно настораживает «исправлять автоматически». Я обычно правлю сальдо до перехода на след. м-ц т.е. до того, как сформирована «накопленная задолженность», поэтому сообщение о том, что она не сформирована вроде и ни к чему, а вот о ручном исправлении очень кстати.
Вообще очень полезная обработка, особенно для тех, кто только начинает работать в 1с.
(10) На счет кнопки «Сформировать» я подумаю, но смысла большого не вижу. Отчет формируется достаточно быстро даже для большого числа сотрудников, поэтому изменить настройки никогда не поздно.
При формировании отчета ничего не исправляется. Действия привязаны к расшифровке ячеек таблицы.
Флаг «исправлять автоматически» означает следующее: при двойном клике на ячейку «расхождение» программа находит необходимый документ «накопленная задолженность» и вносит в него изменения.
Флаг «открывать накопленную задолженность» в отличии от «исправлять автоматически» ничего не изменяет, а лишь открывает необходимый документ для ручного исправления.
Как я уже упоминал в (3) «в текущем расчетном периоде обработку имеет смысл использовать после того как зарплата полностью рассчитана и непосредственно перед переходом на следующий период». В этом случае уже введены все необходимые документы, в том числе, «начисление зарплаты» и «накопленная задолженность» и все записи журнала расчетов посчитаны.
Сразу после перехода на следующий период проверять сальдо не имеет смысла.
«Сразу после перехода на следующий период проверять сальдо не имеет смысла» — не понял. Документ «Накопленная задолженность» формируется ПОСЛЕ перехода на следующий период сразу после этого самого перехода. Так по-крайней мере, заложено методически в ЗиКе. Вместе с документом Начисления месяца (который формирует сальдо округления) они формируют общее начальное сальдо. Которое и следует проверять. И расхождения с конечным сальдо ПРОШЛОГО периода означает всего лишь, что какой-то сотрудник «забыт» доком Начисление… Никаких других причин расхождения просто не существует. На протяжении 5-и лет ни в одном релизе ЗиКе ошибок в модулях расчета сальдо (имею в ввиду именно сумму двух сальдо) никогда не наблюдалось.
Потому совершенно непонятно, как можно править сальдо текущего периода после того, как завершены все прочие расчеты? Просто похерить долги перед уволенным сотрудником, чтоль? Скрыть с глаз долой, чтоб дальше не беспокоили?
(12) Документ «Накопленная задолженность» формируется при переходе на следующий расчетный период обработкой «Помощник установки периода расчета». Причем галку «ввести документ…» в этом помощнике можно и убрать.
Документа «Начисления месяца» в типовой ЗиК вообще нет.
Сальдо по сотрудникам вводится двумя документами:
Накопленная задолженность (вводит ВР НачальноеСальдоЗадолженность) и
Начисление заработной платы (вводит ВР НачальноеСальдоОкругления и НачальноеСальдоПереплатаНДФЛ). Последний автоматически не вводится.
Причин расхождения сальдо предостаточно. Наиболее частыми являются:
— Неверное указание периода выплаты в документе «Выплата заработной платы»,
— Размер выплаты не соответствует сумме, подлежащей выплате в данном периода,
— Ручное редактирование документа «Накопленная задолженность»,
— Сотрудников забывают включить в один из документов «Накопленная задолженность» и «Начисление заработной платы», а порой и в оба. Особенно часто это бывает по уволенным, которым что-то не выплатили или наоборот выплатили больше чем должны были и ненулевое сальдо по ним переходит из месяца в месяц.
При выравнивании сальдо правится только документ «Накопленная задолженность», никакие долги при этом не удаляются, а скорее наоборот добавляются, если вдруг о них забыли.
То, что у вас в течение пяти лет не было проблем с сальдо, не значит, что этой проблемы не существует. Видимо Вам просто попался хороший бухгалтер, который понимает своеобразный механизм двойного сальдо в ЗиК и корректно вводит данные в программу.
Я более пяти лет занимаюсь только ЗиК. Поддерживаю более пятнадцати баз в разных городах. Иногда бухгалтера по расчету з/п увольняются, приходят новые и, не имея достаточного опыта работы в программе, совершают ошибки из-за которых сальдо расползается в разные стороны.
Да, «Начисления месяца» документа нет. Есть «Начисление заработной платы». Подзабыл. Уточнять не стал. Полагал, что аффтар поймет, о чем речь.
Ошибся. Виноват. Не понял аффтар.
Из изложения (13) мне теперь понятна цель данной обработки. Аффтар пытается «исправить», а вообще-то, просто скрыть криворукость и разгильдяйство расчетчиц.
Мне достаточно для этого вывода всего двух пассажей:
— Ручное редактирование документа «Накопленная задолженность»,
— Сотрудников забывают включить в один из документов «Накопленная задолженность» …
В связи с этим вынужден характеризовать эту обработку крайне вредной, как поощряющей безрукость и разгильдяйство расчетчиц.
Извините за прямоту.
(14) Обработка не поощряет безрукость, а помогает выявить причину расхождения. Исправлять самостоятельно, или указать на ошибку бухгалтеру — это личное дело каждого.
Если мне звонит расчетчик с жалобой, что у него расхождение в сальдо, я запускаю обработку, мгновенно нахожу ошибку и в укорительном тоне указываю на нее бухгалтеру.
Автоматическая корректировка в обработке была сделана лишь по той причине, что мне пришлось править сальдо в одной, богом забытой, базе ЗиК, сальдо в которой не проверялось ни коим образом с 2003 года.
Некоторые пояснения моего предыдущего поста (14).
Документ «Накопленная задолженность» в ЗиКе штатно предлагается формироваться при переходе на следующий период. После всех прочих проверок. При этом в формируемый документ попадают все сотрудники, имеющие накопленную задолженность. Никакого «забывания» при этом не грозит. Ну просто абсолютно.
Если после этого сформировать документ Начисление з/п по всем сотрудникам, то сформированное и расчитанное сальдо округления совместно с сальдо задолженности гарантированно приведет к тому, что начальное сальдо текущего периода будет совпадать с конечным сальдо прошлого периода (расчетным, разумеется).
«Ручное» копание в этих самых сальдо непременно приведет к тому, что это самое сальдо будет разбегаться с сальдо в бухучете (счет 70). Что не есть гуд, а даже совсем наоборот. Потери долгов (и перед уволенными сотрудников, и переплата им) гарантированы. Кому это нужно, кроме разгильдяек-расчетчиц? Никому. Невыплаченные «копейки» надо просто скинуть на депонент, откуда они тихо-мирно со временем спишуться. Переплаченные суммы явно раздражают администрацию, но обычно зарплату мне платит она, а не расчетчица, потому ее разгильдяйство — ее личное дело. Убирается, кстати, из ЖЗ легко и просто: удержанием на счет 90.2 (внерелезационные убытки). После чего сальдо исчезает.
Здесь есть два плохих момента.
Первое. При формировании документа Начисление… «по всем» попадает куча мусора в виде обязательных начислений по уже уволенным сотрудникам. Это не влияет на результат, но может элементарно раздражать, и просто тупо засоряет базу. Вот здесь я приготовил для расчетчицы обработоку «Метла ЖР», которая запускается именно перед сменой периода, и весь этот мусор убирает.
Если же расчетчица формирует док Начисления выборочно, чтоб избавиться от «мусора» изначально, то применяет обормотку для контроля сальдо (не данную, конечно). После чего она просто добавляет «забытых» в док Начисления… Существующий, или новый — по вкусу.
Второе. При нарушении порядка выплат офигительно просто растет накопленная задолженность. И так же офигительно расчет (по абсолютной величине) отрицательное сальдо округления. Это выглядит просто безобразно.
Но… это совершенно другая задача. Никак не связанная с «потерей сальдо». И решаемая другими методами.
Есть один момент: если у уволенного реально сальдо нулевое, то при вышеописанном безобразии оно выглядит как комбинация положительного сальдо накопления и отрицательного сальдо округления. Равных по абсолютной величине. Вот здесь их можно выбросить из ЖЗ совершенно спокойно. И дальше они появляться не будут.
И эта опция присутствует в упомянутой выше «Метле» 😉 Но для уволенных.
(16) Теперь все ясно. Вы тот самый «изобретатель волшебной палочки» © (обработки под названием «Метла ЖР»).
На всё, выше сказанное, хочу ответить следующее.
Я не против, что Вы рекламируете свою обработку в комментариях к моей. Но не стоит это делать подобным образом. У меня нет ни времени, ни желания убеждать Вас и доказывать полезность моей обработки. В данном случае алгоритм прост: тем кому обработка полезна, тот скачивает ее и использует, тем же, кому, по каким-то объективным или субъективным причинам, она не нравится — просто переходит к следующей странице в своем браузере (по желанию можно поставить минус).
Рассуждения на тему разгильдяйства расчетчиц, их забывчивости и криворукости давайте будем писать в соответствующих форумах, блогах и пр.
(17 Еслиб я «Метлу» рекламировал, то дал бы ссылку. Как и на обормотку своего решения контроля сальдо. Но я этого не сделал. Так что не надо инсинуаций…
Я просто объяснил ущербность (с моей точки зрения) подход сабжа. С показом того, как лично я вижу данную проблему. Какие проблемы она принесет (может принести) именно прогу в дальнейшем. Потомушто такого рода косяки расчетчицы самостоятельно исправить не в состоянии.
Пусть кто хочет, скачивает, или наоборот. Мне по-фигу, в общем-то.
(18) Главная цель обработки — это контроль (что, кстати, видно из названия), а не исправление косяков расчетчиц. Изначально я ее делал вообще как отчет, затем для собственного удобства добавил исправление.
(19) «для собственного удобства» я делаю скрытые от юзера опции.
(20) Не понял последний Ваш комментарий.
(21) Да просто все… Та же «Метла» (вариант не распространенный): есть возможность начать чистку с какого нить закрытого периода. Например, с начала года. Но расчетчику давать лазать в прошлый период нештатно очень стрёмно. А самому хоцца. А держать два варианта лень.
Потому элементы формы выбора периода (и жёскости «корректировки» сальдо) для юзера невидимы.
Кстати да. Уволенному корректировать сальдо можно так: убирать сальдо задолженности, одновременно эту же сумму вычитать из сальдо округления. Но без «лапки» 🙂 Тогда далее, и в следующих периодах, сальдо задолженности все время будет нулевым. А сальдо округления останется прежним. Равным «скорректированному». Но если юзер захочет его мошеннически убрать (интерактивно занулить же возможно), его правка результата будет украшена «лапкой» ;). На которую можно укоризненно показать перстом…