Списание расходов будущих периодов (РБП) с 76 счета (с любого выбранного счета)




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

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

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

<?php // Полная загрузка сервисных книжек, создан 2025-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='\

16 Comments

  1. unk2

    Выполнять списание расходов будущих периодов (РБП) на любом выбранном счете. Возникла необходимость часть РБП амортизировать на 76 счете (вместо стандартного 97) в связи с изменениями законодательства. В начале 2011 года чиновники существенно переписали положение по ведению бухучета, утвержденное приказом Минфина России от 29 июля 1998г. №34н. (статья журнала Главбух №14 июль 2011) что потребовало часть РБП амортизировать не на стандатном 97 счета, а на 76 счете.

    Для конфигурации «Бухгалтерия предприятия КОРП, редакция 2.0»

    Перейти к публикации

    Reply
  2. Арчибальд

    Я пропустил эту публикацию в общий доступ, поскольку формальные правила выполнены. Однако не могу не сказать о том, что приведенный текст вреден.

    Дело в том, что РБП, как и прежде, учитываются на 97 счете. Просто часть платежей, которые ранее относились на РБП, теперь стали дебиторкай, а часть стали приниматься в текущем периоде (страховые взносы). Ни о какай «амортизации дебиторской задолженности» речь идти по-прежнему не может. А тогда зачем эта обработка?

    Reply
  3. unk2

    Почитай форум 1с http://partners.v8.1c.ru/forum/thread.jsp?id=941051#941051

    И почитай журнал Главбух №14 за июль 2011 года. Там четко пояснено что например расходы по страхованию и арендные платежи НЕОБХОДИМО учитывать на 76 счете!

    Да и даже если бы по прежнему все учитывалось на 97 счете. Гипотетически. Что мешает жить обработке, которая может начислить РБП на ЛЮБОЙ (!) счет. Я как понимаю ставят минус если обработка не работает. А это ФУНКЦИОНАЛЬНЫЙ продукт. Который в любом случае расширяет функциональность типового решения.

    Абсолютно нет конструктива в критике…

    Reply
  4. unk2

    Можно было бы еще почитать статью http://its.1c.ru/db/metod81#content:4335:1

    Reply
  5. Арчибальд

    (2) Цитата по ссылке:

    исключено правило — затраты, произведенные в отчетном периоде, но относящиеся к следующим, отражаются в бухгалтерском балансе отдельной статьей как расходы будущих периодов и подлежат списанию в порядке, устанавливаемом организацией (равномерно, пропорционально объему продукции и др.) в течение периода, к которому они относятся.

    Т.е. теперь не все затраты, относящиеся к будущему, являются РБП и пдлежат постепенному списанию.

    С 01.01.2011 года затраты, произведенные в отчетном периоде, но относящиеся к следующим периодам, отражаются в бухгалтерском балансе в соответствии с условиями признания активов, установленными нормативными правовыми актами по бухгалтерскому учету (п. 65 Положения по ведению бухгалтерского учета и бухгалтерской отчетности в ред. Приказа Минфина РФ № 186н от 24.12.10). Такие затраты подлежат списанию в порядке, установленном для активов данного вида. До 2011 года такие затраты включались в расходы будущих периодов.

    Именно в порядке, предусмотренном для данного вида, а не в порядке, предусмотренном для РБП

    В состав расходов будущих периодов включаются затраты, для которых предусмотрено равномерное списание

    А если уж не включено в РБП, то надо забыть о равномерном списании.

    Таким образом, обработка производит действия, нарушающие правила бух. учета. Единственный конструктив, который может быть в критике — совет спрятать эту обработку, и никому больше не показывать.

    Reply
  6. unk2

    Цитата из журнала Главбух. «Итак, все оставшиеся суммы, признать которые расходами будущих периодов вы не можете, надо убрать со счета 97. <…> Закрывать суммы таких авансов вы будете по мере того, как дебитор оказывает услуги или выполняет работы. То есть, по сути, сумму предоплаты вы так же равно списываете в составе текущих затрат, просто не с 97, а с 76 счета.»

    Reply
  7. unk2

    ДА пошел уже откровенный троллинг…

    Reply
  8. dob_a

    Я бухам сегодня поставил, вот что сказали: Обработка подтягивает документ операции (бух. и нал. учет). Непонятно для чего нужна эта обработка, если и так списание с 76.1.1 можно занести документом (бух. и нал. учет).

    Спасибо, не подошла.

    Reply
  9. unk2

    Не понял вашего вопроса. Каким можно занести документом? И судя по тому что вы указываете 76.1.1 счет вы не совсем поняли смысл обработки…

    Reply
  10. husky

    Молодец, в ногу со временем идешь, гут!

    Reply
  11. husky

    Можно доработать под УПП 1.3 с двумя планами счетов, заранее спасибо.

    Reply
  12. husky

    {Форма.Форма.Форма(96)}: Ошибка при вызове метода контекста (Выполнить)

    Результат = Запрос.Выполнить();

    по причине:

    по причине:

    {(7, 32)}: Поле не найдено «ХозрасчетныйОстатки.Субконто1.СубконтоЗатрат1»

    ХозрасчетныйОстатки.Субконто1.<<?>>СубконтоЗатрат1 КАК СубконтоДт1,

    Reply
  13. slige

    Данную возможность реализовали в релизе 2.0.29.10.

    Reply
  14. unk2

    Бухгалтерию предприятия КОРП (2.0.29.10) пока еще не ставил. Жду следующего релиза, он должен выйти почти следом. Как понимаю вы хотите чтобы обработка работала для счета 76.01.9, который добавили в этом релизе. Если речь идет об этом то не обещаю что это будет. Мои бухи пользуются текущей версией обработки, и других требований пока не выдвигали… Потребности дорабатывать обработку пока нет… Возможно они появятся когда они увидят новые 76 счета 🙂

    Reply
  15. YuliaYVS

    Выдает ошибку

    {Форма.Форма.Форма(96)}: Ошибка при вызове метода контекста (Выполнить)

    Результат = Запрос.Выполнить();

    по причине:

    по причине:

    {(7, 32)}: Поле не найдено «ХозрасчетныйОстатки.Субконто1.СубконтоЗатрат1»

    ХозрасчетныйОстатки.Субконто1.<<?>>СубконтоЗатрат1 КАК СубконтоДт1,

    Reply
  16. unk2

    Обработка работает со счетом, аналогичном 97 счету (На котором субконто РБП). Тогда ошибок не выдает… Вы видимо пытаетесь ее использовать для счета, на котором нет субконто1 — РБП

    Reply

Leave a Comment

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