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




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

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 не будет опубликован. Обязательные поля помечены *