Отчетная форма статистики №11 (краткая) за 2014 год с автозаполнением для БГУ8




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

18 Comments

  1. Yaga_2011

    Здравствуйте. А заполнение раздела 3 не предусмотрено?

    Reply
  2. Valmena

    У меня после заполнения отчета этой обработки появляется ошибка(((

    {Форма.ФормаОтчета2013Кв1.Форма(2203)}: Преобразование значения к типу Число не может быть выполнено

    ВозрастОС = Окр((ПараметрыОтчета.ДатаОкончанияПериода — Выборка.ДатаВводаВЭксплуатацию)/(86400*365),0);

    А старые сформированные отчеты Формы11 за прошлые года не открываются, пишет

    {ОбщийМодуль.РегламентированнаяОтчетность.Модуль(16017)}: Значение не является значением объектного типа (Открыта)

    Если УжеОткрытаяФорма.Открыта() И УжеОткрытаяФорма.мСохраненныйДок.Ссылка = Форма.мСохраненныйДок.Ссылка Тогда

    Reply
  3. infotec

    Для Yaga_2011. Вы очевидно имели ввиду заполнение раздела II, т.к. согласно приказа Росстата №543 от 29.08.2014г. раздела III у формы 11 (краткая) нет. Для автоматического заполнения раздела II могу порекомендовать в стартовой форме обработки выбрать обособленное подразделение, которое должно быть у вас в справочнике «Учреждения», и нажать кнопку «Заполнить», если по этому подразделению велся учет. Затем значение показателя среднегодовой полной учетной стоимости основных фондов, которое получится в строке 35 надо вручную подставить в строку 36 раздела II. Таким образом, вручную этот показатель Вам считать не придется. Поскольку срок сдачи отчета уже приближался я не стал тратить на раздел II время, чтобы как можно большее число пользователей смогло воспользоваться возможностями обработки для подготовки основного раздела I этого отчета.

    Reply
  4. infotec

    (1) Yaga_2011, Ответ в комментарии №3.

    Reply
  5. infotec

    (2) Valmena, Хотя я не увидел Вас в списке скачавших файл обработки, все же отвечу на второй вопрос. В статье сказано: «1) Отчет предназначен для подготовки формы 11 (краткая) за 2014 год в среде БГУ 8 версии 1.0.25.2 и выше». Т.е. я доработал стандартный отчет фирмы 1С только за 2014 год. Поскольку у фирмы 1С есть ошибки и недоработки в этом отчете за другие отчетные периоды (2005 — 2013 годы), то я не ставил задачу дорабатывать отчет 11 (краткая) за все эти периоды. Я их просто отключил. Если они Вам необходимы, то обращайтесь к стандартному отчету фирмы 1С.

    Что касается первого вопроса, то проблема в Ваших погрешностях заполнения реквизитов справочника «Основные средства».

    Reply
  6. Valmena

    Спасибо за ответ)

    Reply
  7. trycrime

    Добрый день!

    В БГУ релиза 32.6, были изменения по данной форме (Форма № 11 (краткая), утв. приказом Росстата от 29.08.2014 № 543).)

    Но у нас часть данных не попадает в отчет (возможно ошибка разработчиков).

    Ваш очтет сответствует полседним изменениям?

    Reply
  8. infotec

    (7) trycrime, Отчет соответствует всем последним изменениям нормативных документов Росстата и проверен на последних релизах БГУ8 1.0.32.6 и 1.0.32.7.

    Что касается стандартного регламентированного отчета фирмы 1С, то часть ваших данных не попадает в этот стандартный отчет потому, что в нем до сих пор отсутствует механизм заполнения граф 5, 6, 7 и 11. Ваш программист может убедиться в этом, посмотрев код функции «ЗначенияПоказателей_Форма11К_2013Кв1(ПараметрыОтчета)»

    общего модуля «ЗаполнениеРегламентированнойОтчетности». Успешной сдачи отчета!

    Reply
  9. AlexandraSerg

    Здравствуйте!

    В колонки 8 и 9 попадают все суммы по ОС, а должно попадать только то, что выше 40000. Если ОС были введены в эксплуатацию до 2011 года с линейным способом начисления амортизации, после 2011 года учитываются выше 40000 руб. они попадают все равно в отчет, хотя не должны

    Reply
  10. AlexandraSerg

    под описанный пункт 2 основные средства попадают. Но они были приняты до 2011 года, и тогда это был линейный способ. С 1 января 2011 года должны учитываться, если стоимость больше 40000 руб. Что не так? И что необходимо сделать, чтоб отчет выводил корректные данные?

    Reply
  11. infotec

    (10) AlexandraSerg, В соответствии с п.43 Инструкции по бюджетному учету (утвержденной приказом Минфина РФ №148н от 30.12.2008г.) амортизация на объекты ОС и НМА до 01.01.2011г. начислялась линейным способом при их балансовой стоимости выше 20000 руб. И эти правила для объектов, введенных в эксплуатацию до 01.01.2011г., никто не отменял, ни Минфин РФ ни Росстат — они действуют до сих пор, и эти объекты включаются во все колонки формы 11 (краткая), а не только 8 и 9. С 01.01.2011г. в эти правила были введены изменения приказом Минфина РФ №157н от 01.12.2010г. (п.92 Приложения №1 «Единый план счетов бухгалтерского учета . . «), и лимит стоимости объектов, на которые амортизация начисляется линейным способом, возрос до 40000 руб. Так, что приведенные ссылки на действующие нормативные документы говорят о том, что скачанный Вами отчет выводит корректные данные. И еще один момент. Поскольку в комментарии № 9 Вы пишете, что у вас в колонки 8 и 9 попадают «все суммы ОС», т.е. как я понял с любой стоимостью, то ваши бухгалтеры выбирают линейный способ амортизации для всех объектов независимо от стоимости, нарушая инструкции. Но возможно это просто Ваша оговорка.

    Reply
  12. AlexandraSerg

    (11) Спасибо за подробный ответ. Все поняла. планируете доработать отчет, чтоб заполнялась 34 строка? по библиотечному фонду

    Reply
  13. infotec

    (12) AlexandraSerg, Да, конечно. Я дорабатываю его ежегодно под новые требования. Просто для некоторых строк справочного раздела не хватает времени.

    Reply
  14. infotec

    (12) AlexandraSerg, Как я могу Вам отправить расчет 34 строки?

    Reply
  15. AlexandraSerg

    (14) Можно по почте alexandrakorobitsina@gmail.com

    Спасибо!

    Reply
  16. Slovar

    2015 года форма планируется ?

    Reply
  17. infotec

    (16) Slovar, Да, через несколько дней опубликую.

    Reply
  18. Slovar

    Спасибо, будем ждать..)

    Reply

Leave a Comment

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