Ещё один вариант свертки регистров учета НДФЛ (для ЗБУ/ЗКОУ/ЗКМУ ред. 1, ЗУП ред. 2.5)




Принцип обмена данными из 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='\

49 Comments

  1. lehale

    Спасибо. Отлично помогло.!

    Reply
  2. nord

    В ЗУП 2.5 будет работать, не проверяли?

    Reply
  3. GlebHappy

    (3) nord, в части очистки НДФЛкЗачету и РасчетовСБюджетом — точно не будет, у меня в запросе есть измерения, которых в ЗУП нет, а вот закрытие РасчетовНалоговыхАгентов может сработать

    Reply
  4. GlebHappy

    (3) nord, можете чуть подправить 1 и 2 запрос и попробовать)

    Reply
  5. GlebHappy

    (3) nord, проверьте, выложил вариант, рабочий в ЗУПе

    Reply
  6. irisha

    А в каком порядке запускать обработку? У нас стояла «галочка» — исчисленный ндфл как удержанный.

    Reply
  7. nord

    (6) Спасибо.

    Reply
  8. GlebHappy

    (7) irisha, согласно рекомендациям, в этом году этот флажок надо отключать

    Reply
  9. irisha

    Я это знаю. Я же не про «галочку» спрашиваю, а про порядок запуска обработки.

    Reply
  10. GlebHappy

    (10) irisha, а, ну этот флажок на получение остатков по регистрам не влияет

    Reply
  11. scanner1980

    Подскажите, если заработная плата начисленная за декабрь 2015 года частично выплачивалась в декабре, а остатки в январе. То на какую дату запускать вашу обработку? Или возможно есть какой то порядок действий в данном случае?

    Reply
  12. GlebHappy

    (12) scanner1980, единственное могу предложить — откорректировать получившийся документ «Корректировка записей регистров» и убрать оттуда удержание НДФЛ по суммам, которые фактически ещё не выплачивались

    Reply
  13. Zolotova78

    Зарплата и кадры бюджетного учреждения, редакция 1.0 (1.0.91.1). Запускается обработка, нажимаю кнопку выполнить.. и ничего не происходит. Остатки также не меняются. Что я делаю не так? Сервис- Доп отчеты и обработки-

    Reply
  14. GlebHappy

    (14) Zolotova78, дата установлена в 31.12.2015?

    Проверьте так же, создан ли документ «Корректировка записей регистров» этой датой.

    Reply
  15. Zolotova78

    Корректировка записей регистров» документ создан, но НДФЛ за прошлый период попадают в отчет 6-ндфл

    Reply
  16. GlebHappy

    (16) Zolotova78, а после этого Вы перепровели в правильном порядке документы с 01.01.2016? Просто обработка только выравнивает остатки на 01.01.2016; если эти неправильные остатки успели поучаствовать в доках текущего года — НДФЛ в них нужно проверить и при необходимости перепровести

    Обратите внимание на удобный отчет — http://infostart.ru/public/458549/

    Reply
  17. Zolotova78

    Спасибо, все получилось. Нужно перепровести документы за 2016 год

    Reply
  18. newtype

    Чем отличается ОчисткаРегистровПоНДФЛ_v1.1.epf и ОчисткаРегистровПоНДФЛ.epf ?

    Reply
  19. GlebHappy

    (19) newtype, файл с суффиксом «v1.1» содержит обновления от 27.03.2016

    Reply
  20. sempaii

    Спасибо за обработку.

    Небольшое дополнение — конфигурация «ЗКБУ Медицина» в метаданных называется «МедицинаЗарплатаИКадрыБюджетногоУчреждения», у Вас «ЗарплатаИКадрыМедицинскогоУчреждения».

    Reply
  21. GlebHappy

    (21) sempaii, спасибо за подсказку, сейчас исправлю и обновлю файл 🙂

    Reply
  22. MishaD

    Значит я зря свой велосипед изобретаю. Есть желающие потестировать ЗУП 2.5 ? НДФЛ к Зачету не закрывает.

    Reply
  23. GlebHappy

    (23) MishaD, ничего не зря) больше обработок хороших и разных!

    Reply
  24. hellf

    спасибо большое за обработку.

    почему-то все равно некоторые остатки не закрывает в ЗУПе.

    и по поводу проведения документов- было бы здорово на будущее сделать проведение за период. потому что все равно теперь регулярно придется перепроводить документы, чтобы восстановить ндфл для сдачи. теоретически каждый раз после сдачи хорошо закрывать период, и потом уже проводить только новые, а не с начала года.

    также вначале проведение нужно отменить, а потом последовательно проводить, иначе может получиться только хуже.

    вот если б так сделать было бы вообще просто замечательно на будущее)))

    Reply
  25. GlebHappy

    (25) hellf, по поводу незакрывшихся остатков напишите по возможности в л/с, было бы отлично, если бы была возможность через TV посмотреть — на попавшихся мне базах было нормально, но я тестировал только на паре ЗУПов, притом в состоянии, близком к идеальному)

    Reply
  26. hellf

    (26) я сейчас попробую разобраться что не закрылось и обязательно отпишусь. Зуп здоровенный, с двумя переносами из 7.7. хотя учет пытались вести довольно строго, но состояние все таки кхм… не идеальное, да.

    Reply
  27. GlebHappy

    (27) hellf, спс, будем ждать) если мой косяк — так надо исправлять)

    Reply
  28. Kapitan911

    Спасибо за обработку!

    Очень большое слезное пожелание — чтобы заодно с перепроведением документов в них исправлялась дата получения дохода с первого на последнее число месяца.

    Если базу обновили только недавно, в начислении ЗП, больничных и т.п. на вкладке НДФЛ дата получения дохода стоит первое число месяца…

    Reply
  29. ivnik

    Спасибо за обработку! Вроде бы замечательная вещь! Первое испытание проводил на новейшем релизе 1.0.92.2, (при условии, что все сальдо за 2015 год было выплачено в декабре). Правда, проведенные Ведомости в банк перепроводить не хочет, ругается, что не может, их перепровел вручную. «Анализ начисленных налогов и взносов» (по НДФЛ) показал «ровненький» красивый результат. Еще раз Спасибо!!!

    Но есть вопрос: если обработка формирует Корректировку записей регистров накопления на 31 декабря, то как тогда отработает НДФЛ удержанный и перечисленный в январе за декабрь, если декабрьская зарплата выплачивается в январе?

    Reply
  30. GlebHappy

    (30) ivnik,

    1. по поводу ведомостей — если не трудно, то приведите сообщение об ошибке

    2. по поводу НДФЛ декабря — к сожалению, на автомате данную ситуацию не обработать; если ну очень нужно — то можно убрать расходные записи регистра «НДФЛ расчеты с бюджетом» по декабрьскому НДФЛ из документа «Корректировка записей регистров»

    Reply
  31. ivnik

    (31) Сообщения вот такие: {Форма.Форма.Форма(484)}: Ошибка при вызове метода контекста (Записать): Не удалось провести «Ведомость в банк 00000000015 от 29.02.2016 12:00:05»!

    Произошла ошибка: Ведомость в банк 00000000016 от 29.02.2016 12:00:06

    {Форма.Форма.Форма(484)}: Ошибка при вызове метода контекста (Записать): Не удалось провести «Ведомость в банк 00000000016 от 29.02.2016 12:00:06»!

    Произошла ошибка: Ведомость в банк 00000000017 от 14.03.2016 0:00:01

    P.S. Может на предыдущих релизах его и не было, а в последнем 1С-ники изменили алгоритмы проведения Ведомостей…..

    Reply
  32. hellf

    проверила. Остатки чистит нормально.

    но простое перепроведение в некоторых случаях задваивает удержание по выпискам из банка.

    то есть, чтобы получить правильные удержания, надо все таки вначале отменять все движения за период, а потом последовательно проводить.

    иначе будут ошибки, которые к тому же сложно обнаружить при большом количестве данных.

    Reply
  33. GlebHappy

    (32) ivnik, сегодня ради интереса прогоню на 1.0.92.2

    (33) hellf, да, я уже сам столкнулся — надо сначала проведение по всем регистраторам отменять, потом по хронологии проводить, сохранять нужные движения, а потом откатывать транзакцию

    Reply
  34. hellf

    (34) )) можно рассчитывать на обновление обработки?

    ПС. вышло новое обновление,в котором изменения по ндфл в межрасчетных выплатах есть.

    надо проверить как оно теперь будет при перепроведении

    Reply
  35. GlebHappy

    (35) hellf, да, и даже нужно рассчитывать) просто я слегка в ахтунге с отчетностью)))))

    Reply
  36. alfi

    здравствуйте!

    работаем в облаке, к сожалению, применять обработки нельзя.

    из-за не совсем верного ведения обнаружены ошибки по оборотам за месяц/год, по начислено/удержано/выплачено, в том числе и по налогам, при чем в целом отклонения от реальности не слишком большие, но часто есть такое, что налог должен был быть удержан по одной статье расходов, а удержан по другой и т.п.

    придется исправлять руками.

    не могли бы вы сказать, какие регистры надо смотреть и что править?

    на заполнение ведомости влияет регистр «зарплата к выплате», там у нас ошибки обнаружились (сотрудник не по физ лицу).

    а как правильно корректировать начислено/удержано/выплачено (которые потом отражаются в отчете полный свод…

    спасибо

    Reply
  37. GlebHappy

    (37) alfi, добрый день

    Вам, скорее всего, подойдет документ «Корректировка учета по НДФЛ и страховым взносам»,там есть корректировка удержанного НДФЛ

    Reply
  38. hellf

    (37) alfi, еще можно корректировать через документ Перенос данных. он вообще универсальный для любых корректировок.

    Reply
  39. alfi

    (39) hellf, да, про документ знаю.

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

    Reply
  40. hellf

    (40) alfi, может быть связь регистров и документов? Это можно посмотреть из любого документа- в документе нажать Действия-Перейти-движения документа по регистрам. и там увидите какие ваши документы что двигают.

    Reply
  41. alfi

    (41) hellf, в конфигурации, в которой мы вынуждены работать, нет возможности посмотреть, что куда записалось.

    Поэтому и пытаюсь узнать, какие регистры надо править, чтобы данные пришли в норму.

    Еще при переносе, как сейчас выясняется, некоторые данные там удволились и затроились даже.

    Но этот регистр самый простой и ни на что почти не влияет.

    А как привести в порядок начисленное, удержанное (ндфл, профсоюз), выплаченное (оно не зависит от регистра зарплаты). Плюс потом надо проверить сам НДФЛ…

    и всё это вручную 🙁

    Reply
  42. RodinMax

    GlebHappy,

    Вопрос: если мы очистили регистры НДФЛ на 31.12.2015, то зачем и что делает флажок «Обрабатывать документы»?

    перепроводит документы за период до 31.12.2015 или после 31.12.2015

    Reply
  43. l-Rain

    (43) RodinMax, ну конечно после.

    Reply
  44. anto-belyaev

    (42) Да нет, возможность там есть, как и в любой 3.0 (Вид — настройка панели навигации формы — вытащить нужные регистры), только у вас должны быть права администратора, в облаке они обычно у сопровождающей компании или у ГБ.

    На вскидку, это РасчетыНалогоплательщиковСБюджетомПоНДФЛ, все остальное вроде бы вторично для целей 6-НДФЛ.

    Для полного свода (начисления/удержания) используется другой регистр — НачисленияУдержанияПоСотрудникам, для выплат — ВзаиморасчетыССотрудниками.

    С уважением, Беляев Антон

    Reply
  45. anto-belyaev

    (42) И если можно, вы кто: образование, культура, жилищники?

    Reply
  46. alfi

    (46) anto-belyaev, образование

    Reply
  47. lehale

    Добрый день на 1.0.93.2 выдает ошибку. Что-то со ставкой ндфл.

    Форма.Форма.Форма(325)}: Ошибка при вызове метода контекста (Записать)

    КлючЗначение.Значение.Записать();

    по причине:

    Запись не верна! Значение поля «Ставка налогообложения резидента» не может быть пустым! (Регистр накопления: НДФЛ расчеты с бюджетом; Номер строки: 1)

    Reply
  48. annapa

    Добрый день! У меня при запуске обработки пустой экран, вообще ничего нет версия Зарплата и управление персоналом, редакция 3.0 (3.0.25.144) (http://v8.1c.ru/hrm/)

    как исправить?

    Reply
  49. Agema

    (49) annapa, так версия предназначена для ЗУП ред. 2.5! А не для 3-ки, конечно не будет работать.

    Reply

Leave a Comment

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