Тюнинг Бух 7.7.(релиз>=523), УСН(релиз>=179): Налоговый регистр НДФЛ.




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

58 Comments

  1. Арчибальд

    В случае появления социального заказа можно будет предложить вариант ведения налогового регистра без добавления «лишнего» документа в конфигурацию. Для корректной работы потребуется по каждой налоговой ставке производить перечмсление налога отдельным платежным поручением.

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

    Уже можно скачивать второй вариант 😀

    Reply
  3. niklaz

    Штука нужная. Плюс несомненно. Есть ли какие-нибудь официальные рекомендации на эту тему? 1Ц не парится по этому поводу?

    Reply
  4. Hellgga

    Думаю, не ошибусь, если поблагодарю уважаемого Арчибальда от имени всех бухгалтеров.

    Спасибо, спасибо, спасибо. 🙂 😳 🙂

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

    (3) Предприятие само утверждает форму регистра, есть только перечень реквизитов, которые обязаны присутствовать. Я форму взял у Камина — они, в отличие от 1С уже выпустили релиз зарплаты с регистром.

    Reply
  6. chev

    Несомненный плюс. Благодарю Арчибальда за своевременную

    разработку. 😀

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

    Теперь актуальна версия 2.1. (файл RegNDFL_1.ert)

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

    Версия 2.3: работает как на Бух 523, так и на УСН 179.

    Reply
  9. taw_1962

    Респект и уважуха! только плюс! спасибо огромное!

    Можно бросить вер.2.3 на мыло?

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

    (9) Да без проблем, было бы мыло.

    Reply
  11. taw_1962

    сенкс заранее. мое мыло taw_1962 собака mail точка ru 😀

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

    Внимание! Новая версия!

    Reply
  13. armag2001

    а это нормально, что в п 2.9 вычеты не подставляются?? ❓

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

    (13) Похоже, имеется в виду п. 3.1.

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

    Reply
  15. ondul

    (14) — При заполнении дивидентов, считываемых из карточки сотрудника по 1ндфл (обработка Registr_4.ert),

    помесячно считывается всё, но почему-то для выгрузки в печатную форму передаётся только первый месяц начисления.

    Потому, вместо перечня месяцев начисления, получается одна строка.

    Пока ещё не успел посмотреть, почему, — просто успел заметить, что все ставки, кроме дивидентов, заполняются верно .

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

    (15) Я вообще-то подразумевал, что дивиденды выплачиваются однократно, по результатам годового собрания акционеров. Поэтому в форму вставил дату их выплаты.

    Reply
  17. ondul

    (16) — В общем случае это не так…. — дивиденды могут быть итогом чистой прибыли месяца, квартала, полугодия, года…, а так же — выплачиваться порциями на основании прибыли прошлых лет, то есть — выплаты могут быть распределёнными по периоду, потому фиксировать их на одну дату — неверно…

    http://www.tls-cons.ru/news/aktualLetters/2009/at5.html

    — читаем пункт «Сроки и порядок распределения и выплат дивидендов акционерам (участникам) общества»

    Ну и логически можно представить (я так думаю) — зачем по дивидендам в карточке 1ндфл задействованы 12 месяцев года? — Если бы было так, как предполагалось и никак иначе — дивиденды будут выплачены концом года, одной суммой, тогда не надо было бы оставлять 12 свободных полей.

    p.s.

    По ходу своего просвещения о дивидендах, узнал, как они правильно пишутся… 😀

    Reply
  18. taw_1962

    Привет, Арчибальд! мона скинуть новую версию на мыло? Снова ставлю плюс…Респект…

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

    (18) Не вопрос…

    Еще бы увидеть тот плюс 😮

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

    07.04.2011. Провел углубленное исследование 1С-ной процедуры СобратьДанныеОДоходахСотрудника(). Выяснилось, что она работает правильно лишь для доходов, отражаемых в 1-НДФЛ нарастающим итогом, т.е. по ставке 13(30)%. По «разовым» доходам, именно, дивидендам 9(15)% и остальным, по ставке 35% процедуру пришлось переделать.

    Выложил версию 4.2. Первый вариант больше на поддерживается.

    Reply
  21. ondul

    (20) — Арчи, у меня было точно так же — разбирал код НачисленияЗП в Бухгалтерии и пришёл к тому же выводу,

    в результате и получилась переработанная версия начисления НДФЛ с разделением по ставкам в

    http://infostart.ru/public/82633/

    🙂

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

    (21) Потому я эту ссылку и вставил в публикацию 😉

    Reply
  23. ivanova.tfm-invest

    😀

    ПОТРЯСАЮЩИЙ ОТЧЕТ!!! ПРЕКЛОНЯЮСЬ!!!!!

    P.S.

    прошу простить за бред, который посмела Вам написать в личку

    подстроила 1С-ку и ПОЛУЧИЛОСЬ!!!!

    тысяча извинений (чайник-бух что с меня взять)

    Reply
  24. IgorSh

    Спасибо автору! Только вот почему-то платежки все-таки не попадают в отчет! В процессе формирования регистра появляется сообщение «Платежи за 1-ый месяц не оформлены! Начислено 27950, заплачено 0» и так по всем месяцам. Платежные поручения (налоговые) все есть. В чем может быть проблема?

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

    (24) Платежки отбираются по двум признакам:

    1. Это должно быть перечисление в бюджет, т.е. сформировано по соответствующей кнопке с указанием кода периода платежа

    2. В тексте назначения плажежа должен присутствовать текст «НДФЛ».

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

    Reply
  26. artbear

    (25) Добавь этот абзац в описании для большей ясности у пользователей!

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

    (26) Да он там есть изначально. Сейчас вот красным цветом выделил.

    Reply
  28. IgorSh

    Спасибо за ответ. Да, все получилось. У меня на самом деле в назначении платежа было написано «Налог на доходы физических лиц», изменил на «НДФЛ» — регистр стал формироваться правильно. Только, мне кажется, этот текст:

    «Платежки отбираются по двум признакам:

    1. Это должно быть перечисление в бюджет, т.е. сформировано по соответствующей кнопке с указанием кода периода платежа

    2. В тексте назначения плажежа должен присутствовать текст «НДФЛ«.»

    нужно указать и для Второго варианта, так как Первый вариант больше не поддерживается. Спасибо!!!

    Reply
  29. Oli29

    А у меня не формирует ни одной справки. Выводится

    «Данных о доходах за 2011 год не обнаружено»

    А данные есть.

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

    (29) А 1-НДФЛ заполнена? Данные оттуда берутся.

    Reply
  31. Oli29

    Извините, у меня уже 524 релиз там нет 1НДФЛ. Как мне быть?

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

    (31) Там зато регистр есть. Не знаю, правда, насколько он рабочий. А вместо 1-НДФЛ — Корректировка данных по НДФЛ.

    Есть вариант, чтобы работали параллельно мой вариант и вариант 1С. Придется только пару строк поменять в 1_НДФЛ (его не убрали, просто переместили в формы прошлых лет)

    Reply
  33. Oli29

    Заполняю и сохраняю «Корректировка данных по НДФЛ» и всеравно ничего не работает. А регистр это только печатная форма.

    Reply
  34. Oli29

    1-НДФЛ в формах прошлых лет заполняет только 2010 год.

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

    (34) Вот если его подправить, он будет с последующими годами работать.

    Я однако собираюсь опубликовать регистр для 524 релиза. Тот, что там есть, тупо ставит Перечислено = Начислено, а платежки вручную ставить предлагает.

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

    (33) Еще надо перепровести закрытие месяцев и, возможно, начисление ЗП.

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

    Новая версия 4.3 позволяет работать с последующими релизами Бух и УСН, куда 1С вставила свой вариант налогового регистра, а 1-НДФЛ «спрятала».

    Reply
  38. IgorSh

    Может быть, не в тему, но…. Кто-нибудь пробовал формировать в 524 релизе справки 2-НДФЛ за 2010 год? При правильной общей сумме дохода неправильно формируются налоговая база,налог исчисленный, удержанный — суммы увеличиваются более, чем в 5 раз!!! . Только у меня или у всех так? За 2011 год справки 2-НДФЛ в части налоговой базы, налога исчисленного, удержанного формируется правильно, но перечисленный налог в справку не попадает.

    А встроенный в 524 релиз налоговый регистр так и не показывает платежные поручения… Спасибо автору настоящей обработки!!!

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

    (38) В тему, в тему. Если бы 524 релиз нормально работал, не пришлось бы мне извращаться.

    Reply
  40. ondul

    (38) — По этому поводу уже писал на форуме 1С:

    http://forums.kuban.ru/showthread.php?t=1052634

    Повторю здесь:

    При формировании отчета СправкаПоНДФЛ, с выбором 2010г, попадаем на ошибку базы дохода.

    Ошибка возникла при переадресации модуля Функции глСобратьДанныеДляНДФЛ из СправкаПоНДФЛ 523 релиза в функцию глСобратьДанныеДляНДФЛ2010 Глобального модуля 524-525 релизов в части:

    Резидент=?(СтатусНеРезидента=1,2,1);

    — найдите эту строку в глобальнике и замените на

    Резидент=?(СтатусНеРезидента=1,1,2);

    В УСН релизов 180-181 такой ошибки нет.

    Reply
  41. АллаБух

    а для Комплексной конфы нет случайно? очень нужно!!!

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

    (41) В Комплексной зарплата сделана как в ЗиКе. Это у зарплатчиков надо спрашивать, я же на ЗиК посмотрел однажды, году в 99 — и больше смотреть не захотелось.

    Виноват, неправ.

    Сейчас посмотрю.

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

    +(41) Посмотрел. Все-таки слишком большая разница…

    Reply
  44. АллаБух
    Арчибальд пишет:

    +(41) Посмотрел. Все-таки слишком большая разница…

    Сможете сделать для комплексной? Буду очень признательна.

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

    (44) Надо подумать…

    Reply
  46. srykova

    Подскажите пожалуйста куда именно пристроить файл Rrg524_4?

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

    (46) Например, в ExtForms — тогда вызывать через Сервис — Допвозможности. Или в любом месте, и вызывать через Файл — Открыть.

    Reply
  48. 88Alsu88

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

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

    УСН 180 редакция

    Reply
  49. 88Alsu88

    первый вопрос снимается, увидела звездочку 😳

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

    (49) 1_НДФЛ для всех сделан?

    Reply
  51. 88Alsu88

    сделана корректировка данных по НДФЛ

    видно когда была 179 редакция, у некоторых людей была сделана 1-НДФЛ и теперь только по ним выдает регистр

    Reply
  52. j.ivanova.engeocom

    Плюсовала. И буду. Весьма достойная доработка. Мне лично нравится больше, чем типовая 1С-ная.

    Reply
  53. Lava596

    Это да, 1С каждый месяц дорабатывает-дорабатывает свою, в каждом релизе изменения.

    Reply
  54. anc2002

    Автору спасибо. после небольшой правки под себя использую на своей работе

    Reply
  55. Vetal85

    Доброе время суток. Обновил релиз до последнего актуального и при формировании карточки 1-НДФЛ столкнулся вот с таким вопросом. Если работник был уволен в Апреле 2010 то сумма накапливалась только до Апреля месяца а остальные месяца сумма начинает дублироваться за исключением колонки ДЕКАБРЬ, она почему-то у меня пустая, это так должно быть или что то я делаю неправильно?

    Reply
  56. Vetal85
    Reply
  57. vipq7

    Где же взять этот чудо отчет???

    Reply
  58. Доня

    Не выводится: перечислен налог,

    не видит платежку !

    Reply

Leave a Comment

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