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




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

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

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

<?php // Полная загрузка сервисных книжек, создан 2026-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 не будет опубликован. Обязательные поля помечены *