Ручная корректировка декларации НДС




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

28 Comments

  1. tailer2

    Попробовал в КА 1.1.58.3 — прокатило. Респект

    Если заточишь под бухгалтера обыкновенного (чтобы не сказать «вульгарис»), будет вполне себе коммерческий продукт.

    Reply
  2. tailer2

    Для открытия списка регламентированных отчетов надо нажать зеленый карандашик над верхней половиной обработки

    Reply
  3. university

    В самом, деле, дружище, сделай из этого конфетку.

    Reply
  4. alexdm

    Плюс за идею. А то мои редактируют в «Налогоплательщике ЮЛ». К следующему кварталу нарисую своим что-то подобное, как-то пока не срослось самому об этом подумать.

    У меня почти у всех уже БП 3.0, так что сама разработка для меня неактуальна…

    Reply
  5. Borisych

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

    Вопрос — много глюков встречается с сервисом ФНС по проверке ИНН+КПП?

    сегодня опять не выгружались декларации в БП 2.0 и в КА — самое интересное, у двух моих клиентов по одному и тому же юр.лицу

    Ы общем в 3.0 вбиваю его ИНН в форме нового контрагента, жму кнопку «заполнить по ИНН» — все сведения заполнились и тут же проявилась надпись, «КПП не соответствует данным ФНС».

    в общем подстава в 2.0 и в КА, там файл выгрузки вообще не сформируется (декларации по НДС) если найдутся ошибки при проверке, придется лезть в форму ФормаОтчета2015кв1″ и закомментировать строчку «Возврат Ложь;» в процедуре «УниверсальнаяВыгрузка»

    Reply
  6. tango

    Спасибо, друзья и коллеги.

    Сделать конфет, конечно, надо.

    Но где время, Зин?

    В этой голове слишком много идей, чтобы реализовать хотя бы одну :(((

    Reply
  7. 1cmax

    что-то у меня не выводится имя файла

    http://joxi.ru/dp27EL3cVMVWr7

    и что бы значил такой код?

     СтандартнаяОбработка = Ложь;
    ЭлементыФормы.ПТД.Очистить();
    Если Элемент.ТекущиеДанные.ИмяФайла = «Раздел8.mxl» Тогда
    дд = Элемент.ТекущиеДанные.СодержимоеФайла.Получить();
    ЭлементыФормы.ПТД.Вывести(дд);
    ИначеЕсли Элемент.ТекущиеДанные.ИмяФайла = «Раздел8.xml» Тогда
    дд = Элемент.ТекущиеДанные.СодержимоеФайла.Получить();
    тз = дд.Записи;
    ЭлементыФормы.тз.СоздатьКолонки();
    КонецЕсли;
    

    Показать

    Reply
  8. tango

    (7) 1cmax, на вашем рисунке — что в крайней справа колонке?

    или оно (имя файла) — что-то другое?

    Reply
  9. tango

    (7) 1cmax, этот код означает

    В нижней половине формы на закладке Страница1 увидите табличный документ такой же, как раздел 8 декларации.



    На закладке Страница2 увидите таблицу значений,
    Reply
  10. tango

    Коллеги, наверное, нет смысла делать эту шнягу на НЕ-управляемых формах?

    Reply
  11. 1cmax

    (8) вот такая таблица

    http://joxi.ru/aD2PyB0S9pyNA3

    Reply
  12. tango

    (11) 1cmax,

    Совсем немножко напильника, и править можно будет 9-й раздел.
    Reply
  13. tango

    Не очень приятная новость: разработчики произвольно меняют имена и структуру доп.файлов в релизах декларации.

    Приятная новость: править таблицу визуального представления нет нужды. В следующей версии обработки править табличный документ не будем, тем более что при большом количестве строк 1С ее не хранит, а предлагает обратиться к книгам покупок/продаж.

    Но зато в следующей версии будем работать и с 9-м разделом.

    С названиями и структурой полей работать придется по факту: какие есть, такие учитываем. Настраивать поля — это уже слишком для такой задачи. К тому же никто не запретит разработчикам извращаться, как смогут.

    Reply
  14. alexdm

    (10) Да почему — вполне есть смысл. Еще очень многие сидят на обычных, БП 2.0 со следующего года 99,9% закроют, а та же КА будет на них еще долго, если работает в КА, то и в УПП будет работать. КА на УФ пока только бета появилась, да и на УПП многие еще будут сидеть не один год. К тому же, перенос готового решения на управляемые проще, чем писать то же самое «с нуля».

    Reply
  15. abadonna83

    Я немного подкорректировала вашу обработку. Вопрос:

    Могу ли я выложить ее на данном ресурсе с указанием первоисточника конечно?

    Цену оставлю как у вас.

    Reply
  16. tango

    (15) abadonna.83, фигня вопрос 🙂

    но мне экземпляр — бесплатно 🙂

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

    Reply
  17. abadonna83

    Про ник непонела? Пришлю конечно даже с инструкцией.

    Reply
  18. alexdm

    (17) abadonna.83, Эта, как бы Вам сказать — забейте в поисковик «abadonna» — поймете… :)))

    Reply
  19. university
  20. abadonna83

    Какое живое обсуждение, а все проще. В свое время, была создана почта 10 лет назад, а теперь менять уже поздно. А 83 это стандартно просто abadonna было не доступно , не только я читала Мастера и Маргариту.

    Reply
  21. b-dm

    Честно говоря ваша обработка не заработала….После нажатия на зеленый карандаш открываются «Регламентированные отчеты»и далее ровным счетом ничего не происходит…Как мне из формы списка Регл.отчетов, что открываются, выбрать нужный, чтобы перейти к редактированию файла ?…Этого мне сделать так и не удалось…

    Reply
  22. b-dm

    А страница 1 и страница 2 какое значение имеют в отчете ? Сколько б я не щелкал на строчке с именем файла *.xml ничего не происходило…

    А кнопки Заполнить ,упомянутой вами в начале описания я и вовсе не нашёл 🙂

    Reply
  23. b-dm

    Конфигурация БУХКОРП 2.0.

    Reply
  24. b-dm

    Еще вопрос: файлы выгружаются, например, на диск C,как они читаются из хранилища ?)

    Reply
  25. user622896_mosshelp

    Что-то ничего не показывает УПП 1.3.86.3, ни ошибок ни чего не происходит. почему?

    Reply
  26. tango

    (1) см.рар

    Reply
  27. s.matyukin_visma

    Пытаюсь скачать обработку. Нужно сделать сравнение файлов по НДС

    Reply
  28. Glenas-New

    Обработка уже не рабочая на новых релизах БУх 2.0. Не тратьте средства

    Reply

Leave a Comment

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