Свод проводок ЗиК с 97 счетом




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

    Спасибо за обработку!

    Не сочтите за наглость, но очень хотелось бы видеть в отчёте полную разбивку по страховым как прежде. Возможно ли добавить это в обработку. 😳

    Спс

    Reply
  2. GSokolov

    Какая разбивка по страховым, которая была прежде, имеется ввиду:?: Страховые в РБП сейчас не переносятся. Остальной алгоритм — из стандартного отчета.

    Reply
  3. nusmumrik

    У нас бухгалтерия попрежнему (ссылаясь на ПБУ18) использует счет 97 и вручную сейчас разбивает суммы (69.2.2; 69.3.2; 69.3.1 и т.д. из старого свода). Убеждены в такой необходимости и требуют «восстановить» отчет. 🙁

    Вот и возник вопрос: возможноли внести данные изменения в обработку или они выходят далеко за ее рамки.

    Спс

    Reply
  4. GSokolov

    В принципе возможно, но считаю нецелесообразным. В соответствии в приказом МФ № 186н от 24.12.2010 понятие «расходы будущих периодов» вообще исключено из ПБУ, теперь расходы признаются в соотв. с правилами признания активов, изложенных в ПБУ. Исходя из требований ПБУ 10/99 (п.16) расходы на страховые взносы должны признаваться в периоде их начисления, т.е. никакого РБП по ним нет. В ПБУ 18 вообще никаких указаний по отнесению расходов по страховым взносам на РБП нет. Пусть Ваши бухгалтера получше изучат бухгалтерию.

    Reply
  5. Tchuprov

    Добрый день,

    подскажите пожалуйста, при использовании Вашего свода у нас программа выдает ошибку:

    Если (Найти(СтрокаСправочников,»,»+СокрЛП(СчетДебета.Субконто1.Идентификатор)+»,»)>0) Тогда

    {C:DOCUMENTS AND SETTINGSUMFILIAРАБОЧИЙ СТОЛВНЕШНИЕ ОТЧЕТЫ 1С ЗИКСВОД ПРОВОДОК С РБП.ERT(3463)}: Значение не представляет агрегатный объект (Субконто1)

    что это может быть

    Reply
  6. GSokolov

    (5) Конфигурация не дорабатывалась? Субконто ЗиК или шаблоны проводок нестандартными методами не правились? М.б. в проводках используется нестандартный счет затрат без использования субконто, введённый самостоятельно.

    Reply
  7. ValeryB

    Прошу прощения за, возможно, глупый вопрос, но если я правильно понимаю до вступления в силу нового закона проводки по 97 счету выгружались в бухгалтерию в разрезе элементов справочника РБП, которые различались по периоду списания расходов, счету отнесения затрат и пр., более того этот справочник автоматически заполнялся новыми данными при каждой загрузке из зик. Теперь же проводки по 97 счету выгружаются в разрезе одного единственного элемента спр РБП который называется «Расходы будущий периодов на оплату труда» одной суммой.

    Ваша доработка гл.модуля если я правильно понял возвращает разрез по РБП с периодами, счетами и пр. верно?

    Reply
  8. GSokolov

    В принципе, верно. Однако 1С с 2011 года вообще отказалась от использования в проводках ЗиК счета 97, кроме списания РБП, отложенных по состоянию на конец 2010 года.

    Reply
  9. mfpi

    (8)

    Однако аудитор требует ведение 97 счета с разбивкой по страховым взносам, а здесь только 97 счет по з/п. Приходится в переходящем периоде ручками вычленять взносы и относить в расходы будущих периодов

    Reply
  10. GSokolov

    Аудитор не может требовать, он может только предложить исправить и разъяснить, почему так. За это ему деньги платят. Или его не устроило то, что я написал в (4)? По-моему, в отношении страховых взносов есть полная уверенность, что начисленные в данном расчетном периоде взносы должны быть уплачены и обязательно произойдёт уменьшение экономических выгод организации, чего нельзя сказать о расходах на оплату отпуска, здесь есть предмет спора, из-за чего и появилась на свет эта обработка.

    Reply
  11. Boroda

    (10) Может, вы и правы, что страховые взносы надо оставлять в текущем периоде, а начисления допустимо относить на 97…. Но всё же соглашусь с (1), что коли оставляем 97, т.е. идём по распределению затрат 2010 года, надо бы и взносы оставить по 2010 году. Т.е. у вас «половинчатый» вариант (при всёй его воозможной правильности в соответствии с изменениями 2011 года), а бухгалтера идут либо поновому пути, т.е. как предлагает 1С, либо остаются на старых позициях, т.е. «чистый» 2010 год. Поэтому и взносы надо ы было учесть в своде (соответственно, выгрузке).

    Reply
  12. GSokolov

    По многочисленным просьбам трудящихся доработал введением варианта распределения РБП и со страховыми взносами. Теперь можно выбирать три варианта формирования проводок:

    1. без РБП (флажки РБП сняты);

    2. РБП только по отпускным без страховых взносов (последние учитываются в расходах текущего периода);

    3. РБП по правилам 2010 года (и отпускные и страховые взносы — в РБП);

    Reply
  13. didol3

    Спасибо за доработку. Вот теперь отчетик очень нравится.

    Reply
  14. Lava596

    Часто бывает так, что бухгалтерия 20 лет делает одно и то же, а потом выходит какое-нибудь постановление правительства и вроде бы логично, что теперь делаем по-другому, но чтобы доказать правоту, можно полечь в борьбе с бухгалтерией, так что гораздо проще бывает согласиться с ними и сделать неправильно, взамен на спокойную жизнь. Тоже столкнулась с такой проблемой, чтобы сумма распределялась как раньше, по страховым взносам. Спасибо автору за отчет, поставим своим =)

    Reply
  15. vovkakursk

    Спасибо за доработку

    Reply
  16. Lava596

    Спасибо за обработку!

    Reply
  17. b-dm

    Спасибо за обработку, првда она стала формировать дополнительно лишние строчки, где то пустые, где то заполненные на немного. А будет ли переработка на 322 релиз, чтобы корректно отображались переплаты в 512 000 , не на 91.2 а на счете затрат.

    Reply
  18. kida1

    Доработка древняя. Пробовали ее переносить на 348 релиз?

    Reply

Leave a Comment

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