Перенос НФА (ОС и МЗ) между учреждениями/базами через документы списания и поступления [БГУ 1.0]




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

29 Comments

  1. la-stryge

    Здравствуйте! Скажите, пожалуйста, работает ли эта обработка для счета 304.06, т.е. при передаче имущества при реорганизации. И если да, то каким образом будут присваиваться инвентарные номера основным средства, если в организациях нет единого шаблона и вероятность совпадения инвентарных номеров очень велика.

    Reply
  2. qwinter

    (1) la-stryge, не понял, какие именно проводки и документы Вам нужны? Для инвентарных номеров есть два варианта: 1. Полностью новые согласно шаблону. 2. Можно загрузить со старыми, если будут дубли то к инвентарному номеру добавиться префикс с ошибкой.

    Reply
  3. la-stryge

    (2) здравствуйте! Мне нужна хозяйственная операция «Принятие к учету ОС(МЗ, НПА, НМА) при реорганизации (304.06)» для, в принципе, всех документов по НФА, т.е. для ОС, МЗ, НПА, НМА (например, «Безвозмездное поступление ОС и НМА», «Безвозмездное поступление НПА», «Поступление материалов прочее»). У меня ситуация: 12 учреждений сливаются в одно, т.е. 11 учреждений передают свое имущество 12-му (моему), и заносить все НФА «ручками» не очень хочется. Т.е. мне надо, чтобы на основании документов по выбытию объектов НФА в результате реорганизации в 11 учреждениях, у меня создались документы по их поступлению. Из видео я уже поняла, что счет можно выбрать любой, в т.ч. и счет 304.06, но не очень понятно с ЦМО (если я не выбираю — то перенесутся ли ЦМО изначальной организации) и где на закладке «загрузка НФА» указывать файл, в который выгружаются документы в другой организации (по кнопке внизу формы «загрузить НФА»?). Плюс еще один вопрос, если данная обработка переносит элементы справочника ОС и Номенклатура, то переносит ли она также характеристики ОС?

    Не уверена понятно ли написала, но если что — могу уточнить. Заранее спасибо за ответ.

    Reply
  4. qwinter

    (3) la-stryge, переносятся только ОС и МЗ. НПА и НМА не переносятся. ЦМО переносятся. Выбор файла появляется по кнопке Загрузить НФА. Характеристики ОС не переносятся.

    Reply
  5. k_o_e

    В Учреждении выбытие ОС произведено документом «Списание хоз. инвентаря (колич. учет). Документы «Списание хоз. инвентаря (колич. учет)» и Извещения сформированы вручную. Возможно ли при помощи данной обработки сформировать, на основании этих документов выбытия, документы поступления ОС в другую базу (базу Учреждения -получателя ОС).

    Reply
  6. qwinter

    (5) k_o_e, да. Выгрузка проходит по документу Извещение. Соответственно добавляете в извещение все нужные документы выбытия и обмениваетесь между базами.

    Reply
  7. Taisss

    Добрый день!

    Подскажите работает ли данная обработка при выгрузке/загрузке данных между базами с разными конфигурациями. Например, типовая БГУ и доработанная БГУ (релиз одинаковый).

    Спасибо

    Reply
  8. qwinter

    (7) Taisss, если изменений в регистрах касающихся ОС нет, то все должно отработать.

    Reply
  9. Lisa_

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

    Текущий релиз БГУ 42.7 при попытке загрузить НФА выходит ошибка (во вложенных файлах), Обработку приобретали в феврале 2016 г.

    Выгружаем из релиза 427, загружаем в старый релиз — всё нормально, правда некоторые ОС задваивает.

    Reply
  10. qwinter

    (9) Lisa_, запросите обновленную обработку через техподдержку в заказах.

    Reply
  11. Lisa_

    Запросила техподдержку — молчат, а очень надо.

    Reply
  12. qwinter

    (11) Lisa_, я вам ответил в обращении еще вчера.

    Reply
  13. Tolyasik

    Добрый день! Подскажите пожалуйста будет ли работать данная обработка на конфигурации Воинская часть 2.0.57.1 платформа 8.3.9.2170, если нет то сколько будет стоить переделка под данную конфигурацию.

    Reply
  14. profite

    Здравствуйте, подскажите пожалуйста, работает ли данная обработка на релизе БГУ 1.0.47.3?

    Reply
  15. qwinter

    (14) да, работает.

    Reply
  16. alexxxmar

    Здравствуйте имеются 2 предприятия оба на Бухгалтерия государственного учреждения, редакция 1.0 (1.0.48.3) , реорганизованы в 3 предприятие т.е. из 2-х в 1 подойдет ли Ваша обработка для данного случая.

    Reply
  17. qwinter

    (16) Здравствуйте. Обработка должна подойти. Каким способом передаются НФА?

    Reply
  18. alexxxmar

    В источнике безвозмездная передача ОС МЗ при реорганизации на 304.06, в приемнике безвозмездный прием ОС МЗ при реорганизации с 304.06

    Reply
  19. qwinter

    (18) эта обработка именно для этого и предназначена.

    Reply
  20. user819616

    А как бы характеристики перенести сейчас очень много регистров по ОС,

    Reply
  21. sobico

    Добрый день! Есть такая же обработка для БГУ2?

    Reply
  22. qwinter

    (23) нет.

    Reply
  23. sobico

    А сделать можете ?

    Reply
  24. happyz03

    Обработка не проставляет суммы амортизации в документе поступления, и не переносит значения реквизита ОС «Тип НФА». Предлагаю разработчику оперативно доработать, или верните деньги. Потому что результата, ради которого покупал обработку, я не получаю!!!

    Reply
  25. kirka7

    Как обработка работает на текущих релизах (1.0.58.2, например)? За последние два года было много изменений по учету ОС (новые регистры накопления и сведений в том числе), а дата последнего обновления публикации 28.12.17.

    Reply
  26. qwinter

    (27) Чуть выше написаны ошибки на текущих релизах (амортизация и реквизит тип нфа). Работы программисту минут на 30.

    Reply
  27. iren-solikamsk

    Для БГУ 2.0 еще не написали?

    Reply
  28. user1153684

    Добрый день.

    Скажите, а выборка ОС делается или только полная передача?

    Reply
  29. qwinter

    (30) при списании выборки нет, списывается все, но можно вручную сформировать документы и выбрать в обработке извещение по которому требуется передать ОС.

    Reply

Leave a Comment

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