<?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='\
Спасибо!!! Будем пробовать.
При расчете строки 34 у вас получаются остатки без учета границы. Нет ли здесь ошибки?
Бух утверждает, что попадают ОС стоимостью менее 40000.
И еще некоторые ОС не попали в отчет совсем. Например есть ОС с Окоф , пренадлежащим группе «сооружения» , счет учета 101.13 сооружения недвижимые. В прошлой форме 2014 года эти ОС попадали…
(3) Slovar, Ответ на первый вопрос.
В соответствии с п.43 Инструкции по бюджетному учету (утвержденной приказом Минфина РФ №148н от 30.12.2008г.) амортизация на объекты ОС и НМА до 01.01.2011г. начислялась линейным способом при их балансовой стоимости выше 20000 руб. И эти правила для объектов, введенных в эксплуатацию до 01.01.2011г., никто не отменял, ни Минфин РФ ни Росстат — они действуют до сих пор, и эти объекты включаются в форму 11 (краткая). С 01.01.2011г. в эти правила были введены изменения приказом Минфина РФ №157н от 01.12.2010г. (п.92 Приложения №1 «Единый план счетов бухгалтерского учета . . «), и лимит стоимости объектов, на которые амортизация начисляется линейным способом, возрос до 40000 руб. Это обстоятельство упускают из вида многие бухгалтеры, а не только ваш.
Ответ на второй вопрос.
Могу порекомендовать лишь проверить ведение бухучета по этим объектам.
В отчет попадают и отражаются во всех его графах объекты ОС и НМА, отвечающие условиям правильного ведения бухгалтерского учета и требованиям Указаний №563:
1) Реквизит справочника «ОС, НМА» «Порядок погашения стоимости» должен иметь значение «Начисление амортизации».
2) Реквизит «Способ начисления амортизации» должен иметь значение «Линейный».
3) Реквизит «Код ОКОФ» должен быть заполнен.
4) В регистре сведений «События ОС» для каждого объекта должны быть правильно заполнены реквизиты «Дата принятия к учету» и «Дата ввода в эксплуатацию».
5) Должны быть остатки и обороты в отчетном периоде по счетам 101, 102, 108 учета объектов.
6) В документах выбытия (списания) объектов должны быть правильно указаны характеристики движения по кредиту.
При выполнении этих условий проблем не возникает. Если все же вопросы останутся, то укажите свой почтовый ящик, постараюсь помочь с проверкой ведения бухучета.
(2) Гипервизор, Главным при расчете строки 34 являются значения двух реквизитов справочника «ОС, НМА»:
1) Реквизит справочника «ОС, НМА» «Порядок погашения стоимости» должен иметь значение «Начисление амортизации».
2) Реквизит «Способ начисления амортизации» должен иметь значение «100% при вводе в эксплуатацию».
Что касается границы, то она учитывается автоматически программой БГУ 8 при установке значения реквизита «Способ начисления амортизации», и не было необходимости ее дополнительно контролировать. Попробуйте, например, в БГУ 8 установить значение реквизита «100% при вводе в эксплуатацию» для объекта стоимостью свыше 40000 руб. и принять его к учету. Программа тут же выдаст ошибку «Цена объекта в строке 1 более 40 000 рублей, начисление амортизации должно производиться линейно». Если программа такого сообщения не выдает, то это уже проблемы самой программы, приводящие к некорректному ведению бухучета.
(5) А вы про какую границу? Про стоимость? Я-то про дату.
Маловероятно, но если кто умудрится принять к учету с датой, например, 31.12.2015 23:59:59, то данная сумма не попадет.
Кстати, не только в запросе по строке 34 такое увидел, еще где-то попадалось.
(6) Гипервизор, В модуле отчетной формы имеется экспортная переменная мДатаКонцаПериодаОтчета, которая при инициировании приобретает значение 31.12.2015 23:59:59 концом года и передает его в качестве параметра запроса ПараметрыОтчета.ПериодКонец во все запросы отчетной формы. Это обеспечивает попадание в отчет всех объектов ОС и НМА, в том числе принятых к учету 31.12.2015 23:59:59, что несложно проверить. Если умудриться принять к учету объект после формирования отчета, то такой объект точно в отчет не попадет.
(7) Юмор последней фразы оценил. Еще раз:
1. Сферический в вакууме бухгалтер принимает к учету ОС с датой 31.12.2015 23:59:59.
2. После этого формирует ваш отчет.
3. Везде, где у вас запрос к виртуальной таблице остатков, сумма этого принятия к учету в выборку не попадет.
Потому что вы передаете в параметр запроса дату, пусть и приведенную к концу периода, а не границу, о чем я и написал в (2).
Проверить это действительно несложно.
(8) Гипервизор, Благодарю за комментарии и обмен юмором. Границу в параметр запроса не счел нужным включать в связи с тем, что по правилам бухгалтерского учета к моменту формирования годовой регламентированной отчетности все документы первички должны быть проведены фактической датой и временем проведения, а в последнюю
секунду отчетного года проводятся только регламентные документы, закрывающие отчетный год: «Закрытие балансовых счетов в конце года» , «Перенос остатков по КПС» и др., для которых программа БГУ 8 автоматически устанавливает время 23:59:59 концом дня. Вместе с тем, чтобы закрыть вопрос для гипотетического случая, когда объект оформлен границей, могу предложить следующую реализацию Вашей идеи — замену строки кода в процедуре ЗаполнитьСтроку34(): Запрос.УстановитьПараметр(«КонецПериодаОстатки», ПараметрыОтчета.ПериодКонец);
на две строки:
ГраницаПериода = Новый Граница(ПараметрыОтчета.ПериодКонец, ВидГраницы.Включая);
Запрос.УстановитьПараметр(«КонецПериодаОстатки», ГраницаПериода);
(9) Да это как бы не идея, и передавать в запрос границу я умею. Можно и в одной строке.
Вашу позицию по данному вопросу я понял.
А отчет на самом деле превосходный, огромное вам спасибо.
() xradeo ГЕ, Поскольку ваш вопрос задан не в комментариях к публикации, то начинаю ответ с повторения этого вопроса: «Сотрудник, который раньше вел учет ОС уволился. При заполнении данных отчета строка (35) остается пустой. Это возможно потому что, ранее учет велся неверно?»
Для проверки правильности ведения учета ОС в вашей программе мне необходимо иметь вашу информационную базу и немного времени. Сейчас нет ни того, ни другого, а до сдачи отчета осталось двое суток. Поэтому рекомендую рассчитать строку (35) следующим способом.
1) Формируете оборотную ведомость по НФА (форма 0504035) поочередно за все месяцы 2015 года.
Ваши действия:
а) Главное меню программы — ОС, НМА, НПА — Отчеты по ОС, НМА, НПА — Оборотная ведомость по НФА (ф.0504035) — Настройка.
б) На панели настроек устанавливаете следущие настройки:
Параметр: Учреждение = Ваше учреждение
Поле группировки: Счет = Иерархия
Поле отбора: НФА.Порядок погашения стоимости = Начисление амортизации
Поле отбора: НФА.Способ начисления амортизации = Линейный
в) Устанавливаете период отчета: Январь 2015 г. (01.01.2015 — 31.01.2015).
Устанавливаете счет: 101.00 для ОС или 102.00 для НМА.
г) Нажимаете кнопку «Сформировать отчет».
2) В сформированном отчете находите сумму остатка по счету 101.00 или 102.00 на 1 января 2015 года. Обозначаем его как Ф1 — сумма остатка на 1 января 2015г.
3) Повторяем пункты в) и г) для оставшихся 11 месяцев (февраль — декабрь), находя остатки на 1-е число каждого месяца: Ф2 — Ф12.
4) Для декабря месяца находим остатки на 31.12.2015 на конец дня и обозначаем их как Ф13.
5) Среднегодовую полную учетную стоимость в рублях рассчитываем по формуле:
Фср.годовая = ((Ф1+Ф13)/2+Ф2+Ф3+Ф4+Ф5+Ф6+Ф7+Ф8+Ф9+Ф10+Ф11+Ф12)/12
6) Округляя полученную величину до тысяч рублей, получаем показатель строки (35).
В процессе работы с оборотной ведомостью по НФА (ф.0504035) сможете определить и правильность (неправильность) ведения учета ОС.
У меня выводит вот такое сообщение при заполнении отчета:
Форма.ФормаОтчета2016Кв1.Форма(4001)}: Поле объекта не обнаружено (П010011205)
мТитульный.Области[ИмяЯчейки].Значение = Цел(Значение/1000);
(12) vcspektr, Данное сообщение возникает в связи с тем, что в отчете за 2015 год была убрана строка № 12.1 «из него мебель», которая была в отчете за 2014 год.
Рекомендую в форме ФормаОтчета2016Кв1 закомментировать строку №3959 ТекстУсловияСтрокиКолонки56711(УсловияЯчеек, «112», «Показатели.ОКОФ В (&Коды112)»);
Если не сможете — сообщите свой почтовый ящик, чтобы я выслал отчет с закомментированной строкой. На расчет показателей отчета эта строка не влияет и вызывает сообщение только при попытке расшифровки показателей ячеек отсутствующей строки 12.1.