Замена КОСГУ/КЭК по приказу 209н для БГУ ред.1 и ред.2




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

32 Comments

  1. Valera_ch55

    Спасибо, очень помогли

    Reply
  2. user716289

    Вам спасибо!

    Reply
  3. dvsidelnikov

    Обратите внимание, что переделываются ТОЛЬКО ДВИЖЕНИЯ документов. Реквизиты документов остаются прежними. Соответственно после перепроведения таких документов всё вернётся в старину (кроме операций введеных вручную =))

    Reply
  4. user716289

    (3) так и есть. то что КЭК/КОСГУ меняются только в проводках написано в описании.

    Reply
  5. Sashares

    (4)Эм, а зачем такую мину себе подкладывать?

    Печать документов получается не будет соответствовать движениям.

    Случайное перепроведение — и все.

    Reply
  6. user716289

    (5) хм … если «случайно» перепроведете документ у вас не только КЭК/КОСГУ изменится, но и суммы списания МЗ например. Для перепроводимых документов надо менять реквизиты в самих документах. В описании к обработке явно указано, что меняются КЭК/КОСГУ только в проводках.

    Reply
  7. dvsidelnikov

    (4) ну описание это дело такое — лучше обеспечить избыток информации, чем оставить простор для её неоднозначной интерпретации =) Лично мне не хватило фразы «Реквизиты документов остаются прежними.» для формирования правильного представления о функционале Вашей обработки. Я не в укор написал.

    Reply
  8. Sashares

    (6)Да это понятно, что указано, но соглашусь с (7), не хватает фразы про реквизиты.

    Я не понимаю зачем в принципе нужно делать такое рассогласование реквизитов документов и проводок.

    Reply
  9. user716289

    (7) Подправил описание. Спасибо.

    Reply
  10. Agema

    21.03.2019 На портале 1С:ИТС опубликована новая версия 1.0.56.8 «Бухгалтерия государственного учреждения».

    Новое в версии 1.0.56.8

    Исправлены найденные ошибки использования новых счетов и КОСГУ в документах и проводках.

    Исправлены другие, найденные ошибки.

    !!!

    Внешняя обработка «Замена КЭК в проводках и документах

    С дистрибутивом обновления конфигурации поставляется обработка, которая производит замену в документах и проводках устаревших оборотных КЭК, ставшими групповыми, на детальные.

    Более подробная информация о работе обработки приведена в справке к обработке.

    Reply
  11. user856012

    (10)

    С дистрибутивом обновления конфигурации поставляется обработка, которая производит замену в документах и проводках устаревших оборотных КЭК, ставшими групповыми, на детальные.

    Скопировали…

    Reply
  12. mrPepper

    Подскажите, а как быть с остатками на 1 января 2019 года которые надо перенести на новый кэк?

    Reply
  13. dvsidelnikov

    (12) неа… КЭКи оборотные,а в разрезе оборотных КЭКов сальдо не хранится.

    Reply
  14. Kaniman

    На какой версии БГУ 2.0 тестировали, применяли?

    Reply
  15. Kaniman

    В общем, скачал для БГУ 2.0. Спасибо!

    Не хватает выбора периода и учреждения. Актуально для большой базы, чтобы обрабатывать и проверять порциями по периодам.

    Reply
  16. Kaniman

    И еще, не обработались 303-и счета. У них ведь прямо прописано 731 и 831. Можете добавить?

    Reply
  17. user716289

    (16) Да. Добавил. Любой каприз за ваши мани)

    Reply
  18. user716289

    (14) Версия не имеет значения.

    Reply
  19. user716289

    (15) Это по сути шаблон. Алгоритм простой и элементарный. Если надо внести какие то изменения под себя, то это не сложно.

    Reply
  20. Kaniman

    (17) спасибо! Можно получить исправленную на почту, kanimen_yandex.ru?

    Reply
  21. user716289

    (20) отправил.

    Reply
  22. Courious

    (11) Нет, не скопировали. Обработка из дистрибутива меняет КОСГУ в документах, а это, как уже писали выше, штука необходимая.

    Reply
  23. leon302

    (10)

    Подскажите, не могу найти такую обработку для БГУ2.0. Неужели ее не сделали?

    Reply
  24. Agema

    (23) имеете ввиду в поставке от 1С? Нет и не собирются.

    Reply
  25. leon302

    (24) блин, странно. сами пишут что 2.0 является сейчас приоритетной, а обработку не сделали(

    Reply
  26. Sashares

    (25)Пишут, что для БГУ2 она не нужна, т.к. при перепроведении документов в проводках автоматом заполнится детальный косгу.

    Reply
  27. Галька

    (17) а можно за наши мани как то получить эту обработку не через инфостарт?

    Reply
  28. user716289

    можно. любой каприз за ваши мани ))) напишите на churascsa__mail.ru

    Reply
  29. fenix635613

    хотела узнать кэк 105 встает только по счету или по типу номенклатуры

    Reply
  30. Denis_CFO

    (30) По типу номенклатуры.

    Reply
  31. irina_ph

    подскажите а кэк 105 можно заменять по МОЛу?

    Reply
  32. user716289

    (32)(32) нет. но сделаем как угодно. за ваши мани

    Reply

Leave a Comment

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