Исправление кодов ОКТМО для БП 2.0 и ЗУП 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='\

34 Comments

  1. tiniji

    Открываешь организацию, там есть поле регистрации в ИФНС. В нем меняешь коды и перевыбираешь регистрацию.

    Надо пользоваться типовым функционалом.

    Reply
  2. seermak

    Хорошо бы было добавить кнопку открытия сайта соответствия кодов ОКАТО И ОКТМО Да и еще мне пришлось править регистр накопления НДФЛСведенияОДоходах — в реквизиты добавлять ЗарегистрированоДляПромежуточногоРасчета и ДатаПолученияДохода (бух.2.0)

    Кстати вот таже тема http://infostart.ru/public/249238/

    Reply
  3. Sergey_1c

    (1) tiniji, В первую очередь обработки нужны для внесения изменений в уже обработанные данные учета, а не для изменения кода ОКТМО в карточке организации, что легко делается руками.

    Reply
  4. ShantinTD

    (3) так и надо писать, что «ввели больше нулей чем нужно и успели наделать проводок». А не просто «нужно исправить ОКТМО, т.к. ввели больше нулей чем нужно». Тогда и претензий меньше возникнет.

    Reply
  5. Drak0n

    А уверены что ввели лишние цифры? Восемь цифр в ОКТМО вроде только у Москвы с Питером, все остальные регионы — 11.

    Т.е. город Астрахань — 12701000001.

    Reply
  6. Lo1jke

    (5) Drak0n,

    Для Москвы и Питера ТОЛЬКО 8 цифр.

    Для всех остальных либо 8, либо 11.

    Reply
  7. tim11.06

    вроде на зупе работает

    Reply
  8. СержТ

    Спасибо. Очень актуально для ЗУП из-за «бестолковщины» в ОКТМО то 11 то 8 цифр, то такое ОКТМО то другое….

    Reply
  9. Swetlana

    Только после исправления ОКТМО документы Перечисления НДФЛ в бюджет не перепроводите!

    Старые коды обратно встанут в регистре иначе.

    Reply
  10. BoneD

    (6) Lo1jke, откуда информация? В Кировской области ИФНС и ПФР требуют 8-ми значный ОКТМО. И это не только для областного центра, но для любого населённого пункта, у которого есть 8-значный ОКТМО.

    Reply
  11. soap

    При заполнении показателя «Код по ОКТМО», под который отводится

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

    случае, если код ОКТМО имеет восемь знаков, не подлежат заполнению

    дополнительными символами (заполняются прочерками). Например, для

    восьмизначного кода ОКТМО 12445698 в поле «Код по ОКТМО» указывается

    одиннадцатизначное значение «12445698—«.» 11 или 8 знаков зависит от того с каким бюджетом имеете дело городской 11 федеральный 8

    Reply
  12. gull22

    Обработка прямо в тему на 100%! Работаем в КА. В релизе 42. когда появилась штатная обработка, замену ОКТМО не сделали (там есть кнопочка «Отложить»). Перешли на релиз 43, запустили штатную обработку замены, в результате замена произошла только в декабрьских записях РН. Налоговый регистр по НДФЛ заполняется правильно в части уплаченного НДФЛ, а карточка для ФНС 2-НДФЛ хватает только записи по ОКТМО, остальные игнорирует. Штатная обработка повторно не запускается. Только Ваша обработка спасла ситуацию. Огромное спасибо.

    Reply
  13. BoneD

    6 попыток скачивания (для ЗУП), файл не открывается, т.к. 1С падает из-за ошибки потока.

    Пробовал скачать разными браузерами на разных компьютерах.

    Reply
  14. gucci76

    (13) Аналогично!

    Может это диверсионная обработка какая?

    Reply
  15. BoneD

    (14) gucci76, см. (16) и (17)

    Reply
  16. Sergey_1c

    (13) BoneD, Обновите платформу.

    Reply
  17. BoneD

    (16) на 8.3.4 рабочую базу ЗУП клиент сервак переводить из-за 1 обработки… не вариант.

    Открыл в ЗУП 3.0 сравнил, что там изменёно. Лучше перенесу модуль в типовую обработку.

    Платформа: 1C: Предприятие 8.2

    Хоть бы написали, что платформа 8.3.

    Во вложении версия для Платформы 8.2.

    Reply
  18. chmv

    Не работает Ошибка потока

    Reply
  19. maxim72e

    Респект!!!

    Reply
  20. greyden1

    Автору плюс!

    Если кому-то нужно, то вот такая же обработка для ЗБУ: http://infostart.ru/public/252121/

    Reply
  21. 1cspbru

    а что мешает в справочнике Регистрация в ИФНС этот код поменять. Чудно и странно?!

    Reply
  22. vvsokolov

    (23) 1cspbru, обработка не в справочнике меняет, а во всех движениях за год

    Reply
  23. friday1

    не обижайтесь конечно, но тут программист лоханулся по сравнению с консультантом))

    это ж надо было обработку написать)))

    такими темпами скоро будете обработки писать, чтобы помеченные на удаление объекты удалять, типа стандартная операция далеко)))))

    Reply
  24. ВРедная

    (25) ты не поверишь….

    http://infostart.ru/public/?q=%F3%E4%E0%EB%E5%ED%E8%E5+%EF%EE%EC%E5%F7%E5%ED%ED%FB%F5+%E­E%E1%FA%E5%EA%F2%EE%E2

    Попробуй в типовой обработке указать неверный код ОКТМО, нажать «обработать», а потом у организации указать правильный ОКТМО. После этого заплатить оставшийся налог или сформировать справку 2НДФЛ.

    Reply
  25. EmpireSer

    Для моей конторы я тоже стандартную обработку переписал. Вот только мне потребовалось ещё изменить ограничения по году. Т.е. стандартная берёт и проходится по данным регистров за 2013 год, а у клиента уже были набиты документы в 2014 году с не правильным ОКТМО.

    Reply
  26. Otshelnik

    Спасибо, обработка пригодилась!

    Единственное, поправил в ТЧ у поля ОКТМО длину «Переменная» на «Фиксированная». Мне нужен был 7 значный ОКАТО, и документы при проведении пишут в регистр «Расчеты налоговых агентов по НДФЛ» значение ОКАТО/КПП в виде «00000000 /КПП», а обработка писала «00000000/КПП». Из-за этого потом не заполнялся документ «Перечисление НДФЛ в бюджет»

    Reply
  27. siyayushhijasinxral@mail.ru

    подскажите пожалуйста, а чем данная обработка может заменить типовую, что устанавливается вместе с обновлением конфигурации ?

    Reply
  28. mastakw

    (29) siyayushhijasinxral@mail.ru,

    Типовая отрабатывает только один раз. Возможности для исправления ошибок непредоставляет

    Reply
  29. amarch2008

    Спасибо! Хорошая обработка.

    Reply
  30. WEBBY

    Очень полезная обработка. Спасибо автору!

    Reply
  31. igorscorp77

    Уже говорили, что надо просто зайти в справочник Регистрации в ИФНС и исправить там ОКТМО. Всё прекрасно исправляется.

    Reply
  32. JohnConnor

    Спасибо автору за труд

    Reply
  33. Ироида

    У меня в ЗУП всё исправилось стандартным способом, как описали выше

    Reply
  34. Yurushev

    ну надо же писать что для платформы 8.3

    или сделать для 8.2, а кому надо сконвертирует, не?

    Reply

Leave a Comment

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