<?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.начислена выплачена зарплата, налоги(НДФЛ) к примеру за август месяц 100000 рублей.
2. уплаты в августе за август небыло.
3. уплата 2 сентября за август — 20000 рублей, 10 сетября за август — 70000 рублей, 26 сентября по платежке 80000 рублей, из за август 10000 рублей и 70000 за сентябрь.
уплачено было по всем сотрудникам (сотрубников 270 человек)
И сам вопрос как в программе это будет разноситься?????
т.е как и в какой пропорции разносить эти перечисленные суммы в программе в документе Перечисление НДФЛ?????
(1) Так ведь как я понял, смысл этой обработки создавать платежки (документы) на перечисления НДФЛ, а не наоборот разносить уже готовые платежки.
(2) kgdrsu, Согласен, сделать документ и мы знаем сумму для перечисления НДФЛ.
Дальше если столько денег нет у предприятия сейчас на перечисления налога, соответветственно будет применяться мой вариант заполнения Документов с дроблением общей суммы на платежки, т.е от обратного.
Обработка не делит по окато-кпп.Просто формирует из каждой ведомости.Выбираю окато-кпп одного определенного подразделения,он собирает документы на основании всех выплат,независимо выбрала я окато -кпп или нет .В итоге во всех документах, сформированных за этот период проставляется окато кпп этого подразделения,а сотрудники садятся со всех подразделений.Смысл?как их делить?
Спасибо, скачала, буду смотреть дальше правильно ли разносит суммы по каждому сотруднику.
(4) Katusha_iv,
Скачаю тоже посмотрю, что и как делается в самом отчете, при создании нового документа Перечисление НДФЛ.
Вопрос к kgdrsu
Что действительно такое получается ??? Собирает всех сотрудников в не зависимости от того какой документ выбран, только по выбранному ОКАТО/КПП, может там надо проверку добавить на наличие добавляемых сотрудников в выбранной ведомости выплаты.
Спасибо, буду смотреть, у нас тоже народу много
Может кто нибудь скинуть мне эту обработку на почту, спасибо заранее android_x собака mail.ru
Спасибо, буду смотреть, правда у нас не много народу
А как сделать, чтобы суммы в табличную часть документа заполнялись сами, а не в ручную?
Буду благодарна, если скинете обработку на почту, cluda собачка list.ru
Интересно, а автор читает замечания-пожелания к разработке, собирается ли дальше развизвать свою разработку ?)
Без отбора по ОКАТО-КПП обрабока очень многое теряет..
Обработку скачала 01.11.11(это к тому, что может уже были исправления?).Сейчас дошли руки посмотреть. Да, у нас тоже несколько окато, отбор не работает. И сумма в документе считается от выплаты, а не от начисления. Это не правильно! Т.е. начисленно 9000, на выплату 7830, в док. перечисления НДФЛ бъется 7830*13%=1018.00, а нужно 9000*13%=1170. Ну, ладно это в модуле можно поправить. А сами-то как работаете?
Хммм.. надо посмотреть код. Пока авансом + .
да я думаю, что ваша обработка полезна в том случае, в моем тоже, если бух-и ведут учет параллельно в ручном варианте и перечисления в бюджет сделали исходя из ручных данных. думаю тут возникает вопрос расхождения сумм по окато. и как правильно будет подогнать?
если суммы по сотрудникам вводить вручную, то работа же практически не уменьшается для бухгалтера?
Вот именно работа для бухгалтера практически не уменьшается тут как раз самое главное сумму налога рсчитать. тут же не просто 13 % но и вычеты надо учитывать.
Сталкнулся с такой ошибкой
ПеречислениеНДФЛвБюджет.Записать();
{E:ИЗ_ВЫПЛАТЫ_В_ПЕРЕЧИСЛ_НДФЛ.ERT(65)}: Номер не уникальный!
что это? расчитываюся за 2011 год. В 2012 все создается правильно
А вычеты учтены???
А вычеты сотрудников не учтены. А то при автоматическом формировании НДФЛ уплаченный становится больше реально начисленного. То есть простая математика: Выплата — это 87% следовательно Выплата делится на 87 и умножается на 100%. Многие пытались сделать обработки, только про вычеты забыли. Было бы не плохо видеть сколько вычетов предоставлено. Есть не плохие обработки про вычеты, только не все виды предоставленных вычетов опять же учтены. Все циклятся на стандартных вычетах и забывают про другие. Например вычеты по подаркам, или чернобыльцы и т.д.