Алкогольная декларация 2012




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

39 Comments

  1. hogik

    (0)

    «автора не нашел, но есть мыло»(с)

    Может это оно: http://infostart.ru/public/118836/

    P.S. Потратил две минуты на поиск. 😉

    Reply
  2. Bosma

    (1) Спасибо, поправил!

    Reply
  3. sergb1979

    скажите, а формат утвержден

    Reply
  4. voka_64

    На сайте пока изменений к нему нет

    Reply
  5. winterspring

    А перемещения между обособленными подразделениями учитываются?

    Reply
  6. winterspring

    Неплохо бы было включить в обработку недостающие процедуры из глобального модуля. А так же указать, что в обработке использована компонента 1с++

    Функция не обнаружена (глПолучитьВыборку)

    Переменная не определена (гл_rs)

    Процедура не обнаружена (глСтрокаСообщения)

    Reply
  7. DefaultUsers

    (6) winterspring, Поддерживаю!

    Автор, пришлите пожалуйста недостающие функции или сделайте полностью автономной обработку, чтобы можно было запустить на типовой ТиС.

    Reply
  8. sergb1979

    формат утвердили

    Reply
  9. апостол

    (8) подскажи, а где можно скачать утвержденный формат, а то на сайте росалкоголь регулирования не могу найти

    Reply
  10. afecn42

    Постановление от 9 августа 2012 г. №815 О представлении деклараций об объеме производства, оборота …

    http://government.ru/gov/results/20165/

    Форматы

    http://www.fsrar.ru/files/structure/1366.pdf

    Информации что утвердили форматы пока не видел.

    Reply
  11. апостол

    (10) спасибо за информацию

    Reply
  12. sergb1979

    вообщем и постановление пока не опубликовано, странно уже 23 число…

    http://base.consultant.ru/cons/cgi/online.cgi?req=doc;base=LAW;n=134109

    Reply
  13. sergb1979

    (9) апостол, В последнем деклорант-алко как раз актулаьные схемы

    Reply
  14. апостол

    (13) подскажи, везде написано про розничную продажу пива, а если имеется только оптовая, тогда что декларировать не нужно?

    Reply
  15. Mihand

    Е(14) апостол,

    Если у вас только оптовая торговля пивом, то Вы сдаете 5,6,7 декларации точно. Пиво — это алкоголь. Для них ввели специально 3 кода в классификаторе.

    Reply
  16. апостол

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

    Reply
  17. maskva

    как запустить эту обработку в тисе? одни ошибки почему то

    Reply
  18. sergb1979

    (15) Mihand, скажите а 8-ую форму надо заполнять?

    Reply
  19. soba

    Присоединяюсь к просьбе добавить недостающие процедуры из глабальника

    Reply
  20. igoren032@mail.ru

    (12) sergb1979,

    Постановление уже есть:

    http://правительство.рф/gov/results/20165/

    Reply
  21. sergb1979

    (20) igoren032, а что оно не требует опубликования в российской газете?

    Reply
  22. ivanov_alex

    да. хотелось бы недостающие гл_rs и глПолучитьВыборку

    строка сообщения непринципиальна

    Reply
  23. Mihand

    (16) апостол,

    Нет. Инструкции пока нет. Сами ждем.

    Reply
  24. afecn42

    Человек на форуме ФСРАР пишет:

    Постановление 815 опубликовано

    Источник публикации

    «Собрание законодательства РФ», 20.08.2012, N 34, ст. 4735

    В КонсультантПлюс: примечание.

    Начало действия документа — 28.08.2012.

    Сайт ЗакСобрания не выложил 34 номер. Наверно типа тупо набирают текст.

    Присоединяюсь к (18).

    Мы тоже не можем понять кто же сдает 8 форму. Надо ли сдавать оптовику перевозящему в розницу на своем транспорте только фасованную продукцию?

    Reply
  25. maskva

    ребятки, подскажите пожалуйста, как эту обработку попробовать?

    Reply
  26. maskva

    подниму темку. актуально.

    Reply
  27. maskva

    Работающий вариант!!!

    Исправьте тогда на Неработающий вариант!!!

    Reply
  28. ivankudinr

    Подскажите, что нужно установить, чтобы появились Функция (глПолучитьВыборку) и Переменная (гл_rs)? Или их автор сам написал?

    Reply
  29. Bosma

    (28) ivankudinr,

    Функция глПолучитьВыборку(ODBCRecordset,Текст, Отладка=0, Очищать = 1, ТЗ2 = «») Экспорт

    ODBCRecordset.Отладка(Отладка);

    Если ODBCRecordset.Открыть(Текст)=0 Тогда

    Ошибка=ODBCRecordset.ПолучитьОписаниеОшибки();

    Если ПустаяСтрока(Ошибка)=0 Тогда

    ВыполняемыйМодуль=СоздатьОбъект(«ВыполняемыйМодуль»);

    ВыполняемыйМодуль.СформироватьОшибку(Ошибка);

    КонецЕсли;

    КонецЕсли;

    Если ПустоеЗначение(ТЗ2) = 1 Тогда

    ТЗ2=СоздатьОбъект(«ТаблицаЗначений»);

    КонецЕсли;

    ODBCRecordset.ПолучитьРезультатыВ_ТЗ(ТЗ2,Очищать);

    ODBCRecordset.Закрыть();

    Возврат ТЗ2;

    КонецФункции

    Эта функция для запуска SQL запроса. Будет работать если стоит компонента 1С++

    гл_rs=СоздатьОбъект(«ODBCRecordset»);

    Reply
  30. Bosma

    Повторимся. Этот вариант работающей нашей конфигурации измененной очень сильно Торговле 24

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

    Reply
  31. donpedro

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

    Reply
  32. maskva

    (29) Функция глПолучитьВыборку(ODBCRecordset,Текст, Отладка=0, Очищать = 1, ТЗ2 = «») Экспорт

    ODBCRecordset.Отладка(Отладка);

    Если ODBCRecordset.Открыть(Текст)=0 Тогда

    Ошибка=ODBCRecordset.ПолучитьОписаниеОшибки();

    Если ПустаяСтрока(Ошибка)=0 Тогда

    ВыполняемыйМодуль=СоздатьОбъект(«ВыполняемыйМодуль»);

    ВыполняемыйМодуль.СформироватьОшибку(Ошибка);

    КонецЕсли;

    КонецЕсли;

    Если ПустоеЗначение(ТЗ2) = 1 Тогда

    ТЗ2=СоздатьОбъект(«ТаблицаЗначений»);

    КонецЕсли;

    ODBCRecordset.ПолучитьРезультатыВ_ТЗ(ТЗ2,Очищать);

    ODBCRecordset.Закрыть();

    Возврат ТЗ2;

    КонецФункции

    гл_rs=СоздатьОбъект(«ODBCRecordset»);

    В КАКОЕ МЕСТО ГЛОБАЛЬНОГО МОДУЛЯ ЭТО ВСТАВИТЬ?

    Ps. далек от программирования 1С, решил потестиь бекап.

    Reply
  33. Svetlya4ok13

    У нас КА, доработанная под алкоголь. Поправила запрос на выборку данных. Форма заполняется, но при попытке выгрузки файла ругается

    Следующие отчеты сохранены с единицей измерения и/или точностью, не соответствующими требованиям формата выгрузки:
    — Объемы розничной продажи алкогольной и спиртсодержащей продукции за 1 квартал 2012 г. (Первичный) должен быть сохранен с единицей измерения «в рублях» с точностью «0»
    Сохраните отчеты с нужной единицей измерения и перезапустите процесс формирования.
    Продолжение невозможно! Формирование текстов выгрузки прервано.
    

    Почему? Что поправить надо?

    Reply
  34. Bosma

    (33) Svetlya4ok13

    куда выгружаете? не понимаю откуда ошибка

    Reply
  35. Svetlya4ok13

    Автор, извините ради Бога, ошиблась с веткой — не к вам вопрос.

    Reply
  36. pudmma

    Попробовал открыть в торговле 24h выдала кучу ошибок

    1С 7,70,027 24h 7.70.345 что сделать?

    Reply
  37. Bosma

    (36) pudmma,

    допиливать!

    структура обработки простая, сбор и обработка данных разделены

    оставляйте движок формирования, а запросы к данным делайте свои или правьте имеющиеся

    наша конфигурация поддерживается самостоятельно, с Торговлей24 уже мало чего общего осталось.

    Reply
  38. ivanov_alex

    Переменная не определена (гл_mdw)

    объявление переменной нуно

    И да, нужно добавить что конфигурация должна быть sql-ной

    с дбф не работает

    Reply
  39. 21stas

    У нас пока типовая 24h (файловая). Тоже хотим алкогольную декларацию. За сколько возьмётесь сделать?

    Reply

Leave a Comment

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