Расшифровка доходов и расходов (БУ и НУ) для УПП 1.3 и БП 3.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='\

20 Comments

  1. Biochemist

    Добрый день! Скачал Вашу обработку, однако почему-то в ней некорректно отображаются данные по пункту 2.1 — себестоимость проданных товаров. Почему-то туда не попадает товар, а лишь ряд статей:

    Оплата труда, Аммортизация и Прочие расходы.

    Стоимость самого товара почем-то там не учитывается.

    Reply
  2. 9093042

    Добрый день, Никита.

    Проверьте, пожалуйста, значение реквизита «ВидРасходовНУ» у Субконто 3 (Тип значения:Статья затрат)

    Никаких дополнительных отборов (кроме детебового счета (в иерархии 20.01) не предусмотрено:

    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    «2.1. Себестоимость проданных товаров, продукции, работ, услуг» КАК Группа,
    СебестоимостьБУ.СубконтоДт3 КАК Статья,
    СебестоимостьБУ.СубконтоДт3.ВидРасходовНУ КАК ВидПрочихДоходовИРасходов,
    -СебестоимостьБУ.СуммаОборот КАК Сумма,
    СебестоимостьБУ.Организация,
    НАЧАЛОПЕРИОДА(СебестоимостьБУ.Период, КВАРТАЛ) КАК Поле1
    ПОМЕСТИТЬ сБУ
    ИЗ
    РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(, , Квартал, СчетДт В ИЕРАРХИИ (&Счет20), , , , ) КАК СебестоимостьБУ
    ;
    
    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    «2.1. Себестоимость проданных товаров, продукции, работ, услуг» КАК Группа,
    СебестоимостьНУ.СубконтоДт3 КАК Статья,
    СебестоимостьНУ.СубконтоДт3.ВидРасходовНУ КАК ВидПрочихДоходовИРасходов,
    -СебестоимостьНУ.СуммаОборот КАК Сумма,
    СебестоимостьНУ.Организация,
    НАЧАЛОПЕРИОДА(СебестоимостьНУ.Период, КВАРТАЛ) КАК Поле1
    ПОМЕСТИТЬ сНУ
    ИЗ
    РегистрБухгалтерии.Налоговый.ОборотыДтКт(, , Квартал, СчетДт В ИЕРАРХИИ (&СчетНУ20), , , , ВидУчетаДт = &ВидУчетаДтНУ) КАК СебестоимостьНУ
    ;
    /////////////////////////////////////////////

    Показать

    Reply
  3. OlegBog1971

    в конфигурации БП 3.0 будет работать ваш отчет?

    Reply
  4. 9093042

    Добрый день.

    Нет.

    Отчет создан для УПП 1.3.

    Идею понял ) сейчас напишу отчет для управляемой формы, с применением к БП 3.0

    Reply
  5. 9093042

    (3) Создал вариант отчета для БП КОРП 3.0.

    Reply
  6. OlegBog1971

    скачал, можно убрать пустые поля которые формируются в отчете? (см. скрин)

    Reply
  7. 9093042

    Олег, добрый день.

    Сообщите, пожалуйста, конфигурацию и структуру счета 90.01 и 90.03?

    По модулю (для раздела «1. Доходы и расходы по обычным видам деятельности»), показатели состоят из:

    1) + Кредитовый оборот счета 90.01 в разрезе Субконто №1 (Номенклатурная группа);

    2) — Дебетовый оборот счета 90.03 в разрезе Субконто №1 (Номенклатурная группа);

    Отдельно по показателям регистра: БУ, НУ, ПР и ВР.

    Проверил формирование раздела по своей конфигурации в наличии (БП КОРП 3.0 и БИТ.Финанс 3.0 (на базе БП 3.0)

    (во вложении)

    Подобной ошибки не обнаружил…

    Reply
  8. 9093042

    Олег, напишите Вашу почту, я вам вышлю форму отчета, где отбор по организации выведен на форму.

    Возможно в этом и есть проблема.

    Reply
  9. OlegBog1971

    Конфигурация БП 3.0.58.41, платформа 8.3.11.2924

    Структура 90.01 в прикрепленном файле.

    Оборот по Дт 90.01 формируется регламентной операцией «Реформация баланса» при Закрытии месяца декабрь

    Reply
  10. Эвелина

    Здоровский отчетик, спасибо

    Reply
  11. user999456

    Здравствуйте, как сделать чтоб в отчете отражалось Субконто 2 к счету 26? Мне необходимо сделать как бы к статье затрат под статью. Буду очень признательна

    Reply
  12. 9093042

    Добрый день.

    Напишите пожалуйста вашу почту я вам вышлю подправленный вариант.

    Reply
  13. 9093042

    И еще аналитику 26 счета (Субконто1 и Субконто2).

    Отчет построен на типовом плане счетов с предопределенной аналитикой.

    Субконто 1 = Подразеделения;

    Субконто 2 = СтатьиЗатрат.

    Reply
  14. frolova@irsbs.ru

    Здравствуйте. Подскажите пожалуйста, в отчете не отражается стоимость списанных товаров и материалов при реализации. Списаны они докуемнтом реализация, проводки 90.02.1/41.01 или 10.01 себестоимость товаров, материалов. Как сделать чтобы они отражались?

    Reply
  15. user1181543

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

    Отчёт на почту не приходит. Каким образом его можно получить?

    Reply
  16. 9093042

    Добрый день.

    Возможно задержка с Инфостарта.

    Подождите, пожалуйста.

    Reply
  17. Biochemist

    Добрый день еще раз. Сейчас снова вернулись к Вашему отчету, однако тем не менее у нас совершенно не отображается себестоимость реализованных товаров. 90.02 в расходной части. Подскажите, как можно понять причину?

    Reply
  18. German_Tagil

    Спасибо за отчет! Отдал на проверку данных ……

    БП 3.0 проф

    Reply
  19. 9093042

    Пользуйтесь на здоровье )

    Если будут пожелания, внесу изменения под ваши нужды.

    Reply
  20. German_Tagil

    Хорошо

    Reply

Leave a Comment

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