Проверка соответствия НДФЛ удержанного/перечисленного (Бух: ОСНО/УСН)




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?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='\

34 Comments

  1. TrinitronOTV

    полезный отчет для конфигурации бухгалтерского учета, спасибо

    Reply
  2. legioner

    Не за что.

    Поверьте… Для ЗиК не менее полезен)))))))))

    Reply
  3. log1

    Спасибо!

    Reply
  4. Доня

    Плюсую, спасибо, очень нужный отчет, скоро отчет годовой !

    Ой, беда!

    Выскачило: ТаблицаКодовОКАТО.ОКАТО = СОКРЛП(ТаблицаКодовОКАТО.ОКАТО.Код);

    … ПРОВЕРКАНДФЛ.ERT(91)}: Значение не представляет агрегатный объект (Код)


    Поправила

    Что я делаю не так?

    Я наверное поторопилась с оценкой:

    1) Сумму выдает не правильно ?!

    2) Почему то показывает 3 человека, у меня их 12 ?!


    Поправила

    3) при попытке поставть период январь — февраль выдает:

    СуммаНалогаУдержанная = СуммаНалогаУдержанная — Окр(ДоходыВычетыНалогиСотрудников.ПолучитьЗначение(СтрокаИтоговойТаблицы-1,НомерКолонки));

    ПРОВЕРКАНДФЛ(1).ERT(286)}: Номер за пределами значения!

    Reply
  5. legioner

    На конфе УСН отработало как часы…

    Посмотрю на ОСНО что не так — подправлю

    Reply
  6. legioner

    По поводу 12 человек…. А вы корректировку данных по НДФЛ в справочнике сотрудников сделали? Данные сохранили?

    Справка 2НДФЛ у вас выдает данные по отсутствующим?

    Reply
  7. Доня

    (6) По кол-ву человек закрыто.

    А вот период глючит

    Reply
  8. TrinitronOTV
    legioner пишет:

    Не за что.

    Поверьте… Для ЗиК не менее полезен)))))))))

    этот отчет я видел и скачал, спасибо, но пока не тестил

    Reply
  9. legioner

    (7) Сегодня перепроверю

    Reply
  10. Hellgga

    Добрый день.

    По ОСНО выдаёт вот такое….

    СуммаНалогаУдержанная = СуммаНалогаУдержанная — Окр(ДоходыВычетыНалогиСотрудников.ПолучитьЗначение(СтрокаИтоговойТаблицы-1,НомерКолонки));

    По УСН ошибок не выдаёт но и суммы перечисленные не заполняет.

    Корректировка данных по НДФЛ сделана, Перечисление НДФЛ в бюджет заполнено.

    Что я не так делаю?

    Reply
  11. Арчибальд

    (4)(10) Там у автора цикл по месяцам с переменной НомерМесяца. Но эта переменная не учитывется при определении строки итоговой таблицы, т.е. движения по таблице на самом деле нет.

    Reply
  12. legioner

    Приношу свои извинения. Ошибся когда переделывал из ЗиК.

    Отдельная благодарность Арчибальду за то что поправил.

    Выложил исправленный отчет

    Reply
  13. Hellgga

    Добрый вечер.

    Ошибку выдавать перестал — в остальном всё осталось по прежнему (10).

    И в подвале в столбик выдаёт цифирки после косого флэша, типа

    /10

    /19

    /154 и т.п.

    🙁

    Reply
  14. legioner

    Скачивайте файл из публикации. Там исправлена еще одна ошибка — не учитывался налог начисленный если по человеку в этом месяце не было уплаты. Проверено на 3 организациях. Все работает как нужно

    Reply
  15. Доня

    (14)

    А где-же сама публикация, вы забыли наверное ее прикрепить после исправления

    Reply
  16. legioner

    Не очень пока получается с опубликованием.

    Перезалил

    Reply
  17. ninaK

    Проверила на общей бухгалтерии — документы уплаты есть, а в отчет эти суммы не берет. Почему?

    Reply
  18. ninaK

    Т.е та-же ситуация , что и в (10).

    Reply
  19. legioner

    Вы корректировку НДФЛ заполняли по сотрудникам?

    Справка 2-НДФЛ заполняется корректно?

    Reply
  20. Hellgga

    Нет, всё тоже самое (13); цифирки с флэшами вроде как исчезли, но уплату не видит….

    Корректировка НДФЛ заполнялась обработкой с ИС — Групповое заполнение Корректировки по НДФЛ;

    Регистр заполнялся в 1С…

    Тоска, вобщем 🙁

    Reply
  21. ninaK

    И Корректировку заполняла и справка 2НДФЛ нормально становится и регистр с оплатой печатается, а вот в отчете суммы уплаты не ВИДИТ.

    Reply
  22. legioner

    Если не затруднит — стукните в аську 583269827

    Хотелось бы глянуть на это чудо удаленно (если есть такая возможность)

    Reply
  23. legioner

    Выложил новую версию.

    Исправлены выявленные ошибки….

    Reply
  24. Hellgga

    Добрый вечер.

    1. Не показывает уплаченный НДФЛ

    2. кол-во выплат сотрудника в периоде тоже не показывает.

    Она (обработка) не видит журнал «Перечисление НДФЛ в бюджет»…

    Reply
  25. legioner

    Не показывает? А вы уплаты занесли?

    Журнал обработке и не нужно видеть… Там прямой запрос к документам уплаты

    Reply
  26. Hellgga
    legioner пишет:

    Не показывает? А вы уплаты занесли?

    Журнал обработке и не нужно видеть… Там прямой запрос к документам уплаты

    Что вы имеете ввиду под документами уплаты? П/п — оно на общую сумму перечисляемого НДФЛ, а вот в Журнале уже разбивка по сотрам — сам 1С распределяет, ну, или ручками подправка.

    Reply
  27. sibEris

    1С Предприятие 7.7 (7.70.027) Конфигурация: Бухгалтерский учет: ред. 4.5 (7.70.530)

    Документ Перечисление НДФЛ в бюджет есть. Корректировка НДФЛ по сотрудникам есть. Справка 2-НДФЛ заполняется верно.

    1. Проверка распределения уплаты НДФЛ (сводно): Сотрудников указывает верно. Сумма НДФЛ удерж пишет верно. Сумма НДФЛ уплач ставит 0.

    2. Начислено/уплачено помесячно — такая же ситуация как и п.1.

    3. Соответственно Итоги такие же как и п. 1, 2

    4. Проверка распределения уплаты НДФЛ (количество вхождений сотрудника) … у меня вообще ничего нет… Только таблица:

    Столбец 1: Период/Сотрудник/Документ

    Столбец 2: Счётчик

    Reply
  28. Hellgga
    sibEris пишет:

    1С Предприятие 7.7 (7.70.027) Конфигурация: Бухгалтерский учет: ред. 4.5 (7.70.530)

    Документ Перечисление НДФЛ в бюджет есть. Корректировка НДФЛ по сотрудникам есть. Справка 2-НДФЛ заполняется верно.

    1. Проверка распределения уплаты НДФЛ (сводно): Сотрудников указывает верно. Сумма НДФЛ удерж пишет верно. Сумма НДФЛ уплач ставит 0.

    2. Начислено/уплачено помесячно — такая же ситуация как и п.1.

    3. Соответственно Итоги такие же как и п. 1, 2

    4. Проверка распределения уплаты НДФЛ (количество вхождений сотрудника) … у меня вообще ничего нет… Только таблица:

    Столбец 1: Период/Сотрудник/Документ

    Столбец 2: Счётчик

    У меня точно то же самое:один к одному.

    Reply
  29. legioner

    Проверю на актуальном релизе на выходных… Исправлю

    Reply
  30. Hellgga
    (29)Проверю на актуальном релизе на выходных… Исправлю

    И ?

    Reply
  31. Noorby
    sibEris пишет:

    1С Предприятие 7.7 (7.70.027) Конфигурация: Бухгалтерский учет: ред. 4.5 (7.70.530)

    Документ Перечисление НДФЛ в бюджет есть. Корректировка НДФЛ по сотрудникам есть. Справка 2-НДФЛ заполняется верно.

    1. Проверка распределения уплаты НДФЛ (сводно): Сотрудников указывает верно. Сумма НДФЛ удерж пишет верно. Сумма НДФЛ уплач ставит 0.

    2. Начислено/уплачено помесячно — такая же ситуация как и п.1.

    3. Соответственно Итоги такие же как и п. 1, 2

    4. Проверка распределения уплаты НДФЛ (количество вхождений сотрудника) … у меня вообще ничего нет… Только таблица:

    Столбец 1: Период/Сотрудник/Документ

    Столбец 2: Счётчик

    1С Предприятие 7.7 (7.70.027) Конфигурация: Бухгалтерский учет: ред. 4.5 (7.70.536)

    У меня помимо вышеперечисленного, по сотрудникам введенным вручную (без приказа) ни выводит и Сумма НДФЛ удерж

    Когда можно рассчитывать на исправление обработки??? ОЧЕНЬ НАДО

    Reply
  32. Coollerok

    Спасибо за обработку! пригодилась. Бухи довольны и от меня отсатали)

    Reply
  33. foton7

    На ОСНО не показывает уплаченно — теряется смысл обработки

    Reply
  34. westinka

    спасибо автору, пригодилась в качестве основы отчета для бухгалтерии, которая осталась довольна

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *