Финансовый анализ для бухгалтерии 7.7




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

61 Comments

  1. Арчибальд

    Если вместо 414 строки

    Результат = Число(Шаблон(Стр));

    поставить

    БИ.ВыбратьСчета();
    Пока БИ.ПолучитьСчет() = 1 Цикл
    Результат = Результат + Число(Шаблон(Стр));
    КонецЦикла;

    то падать перестает.

    Надо полагать, разворот итогов по субконто без выбранного счета не работает. Наверняка Ёпрст в курсе.

    После этого получается отличная штука для фиников 😀

    Reply
  2. WKBAPKA

    Все таки такой подход будет лучше, как мне кажется:

    http://infostart.ru/public/19117/

    Reply
  3. KurchataQ

    Интересно, почему данная обработка только для разработчиков? А как же мы, неразработчики?

    Reply
  4. Трактор

    (1) Спасибо за подсказку.

    (2) Такой подход использовался в построителе отчётов решения Рарус GAAP IV. Оно было взято за основу при написании Финансового анализа. Твоё решение хорошо, но оно другое.

    Минус твоего подхода в том что количество строк и колонок фиксированное. Нельзя развернуть вправо или вниз по аналитике или по периодам или по субсчетам. Минус моего решения в скудости оформительских инструментов. Я думал о том как поженить эти два подхода, но не нашлось клиента, готового оплатить работу, а писать «в стол» не было желания.

    (3) из-за ошибки, которую нашёл Арчибальд. Мне не жалко, могу вывесить и для всех, но ошибка ещё не исправлена. Готовы, курчата?

    Reply
  5. WKBAPKA

    2(4): разворачивать можно, но тут ты прав, идеалогия совсем иная…

    Reply
  6. gutentag

    + за идею !

    Reply
  7. KurchataE

    Как пионеры, если кто помнит кто /что/ это.

    Reply
  8. Трактор

    (7) Теперь доступно всем зарегистрённым. Ошибка пока не исправлена.

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

    (8) Эт’ ты зря. Исправь сначала 😐

    Reply
  10. Трактор

    (9) Дома поправлю. Сейчас вроде как работать надо. Кто сегодня скачает — сам виноват. Я предупредил.

    Reply
  11. john-k

    Считает возможно и хорошо, но методика расчета выручки лажает и сильно. НДС с выручки вытаскивать надо.

    Reply
  12. Трактор

    (11) >> методика расчета выручки лажает и сильно

    Финансовые показатели, заполненные в поставке даны только для примера. Разработка это конструктор, ты можешь самостоятельно изменить финансовые показатели как тебе удобно.

    Reply
  13. Трактор

    (7) Ошибку исправил.

    Reply
  14. KurchataE

    Отчет очень достойный. По показателям не смотрел, не проверял, но подход к формированию очень достойный!

    Reply
  15. Трактор

    (14) Плюс комментарию не за похвалу, а для того чтобы по новой системе мог скачать ещё. 🙂

    Reply
  16. KurchataE

    (14) Не понял, какая новая система?

    Reply
  17. Трактор
  18. CheBurator

    Заинтересованным м.б. имеет смысл порыться у Oplanet — у него был «управленческий баланс» похожий…

    Reply
  19. Maslennikova

    Установила отчет в базу, ничего не работает!!!!! Все таблицы пустые!!!

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

    (19) Надо весь пакет ставить в одну папку

    Reply
  21. Maslennikova

    Уже и в папку и без папки ставила — все одно.

    Reply
  22. Трактор

    (21) Всё что есть в архиве в папку ExtForms

    Если и справочник финансовых показателей пустой, то его можно наполнить самостоятельно. Не так приятно, конечно, зато будешь застрахована от ошибок о которых говорит john-k в 11.

    Reply
  23. Maslennikova

    Справочник финаоказателй не пустой. Но отчеты не формируются. 🙁

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

    (23) А период отчета? В примерах древний год проставлен 🙂

    Reply
  25. Maslennikova

    Период отчета, естественно, я беру 2009 год

    Reply
  26. Трактор

    (25) Какие показатели используются? Есть ли итоги на счетах, используемых показателями? Лучше всего снимки экрана сюда.

    Reply
  27. Maslennikova

    Если у Вас есть TeamViewer, можно бы посмотреть в режиме он-лайн.

    Reply
  28. Трактор

    (27) У меня есть скайп yulyashko. Правда к нему нет микрофона 🙁

    Зато через него можно делиться кусками экрана или всем экраном.

    Reply
  29. СветикК

    А почему пустые показатели показывает… даже сохраненные настройки?

    Reply
  30. СветикК

    поместила все файлы в экстформс — не помогает….

    Reply
  31. Трактор

    (30) Проверь по бухгалтерским отчётам. ОСВ, анализ счёта в тех же разрезах. Если в них итоги есть, а в результатах по показателям нет, то выложи базу, например, на http://narod.yandex.ru/ вместе с архивом ExtForms. Я вечером гляну.

    Вчера только победил свой комп. Вроде нормально заработал.

    Reply
  32. СветикК

    я просто создала папку мои показатели и два показателя остаток по кассе без аналитики… база типовая, сальдо беру конечное…

    вот ссылки на базу и на екстформс

    http://narod.ru/disk/15949538000/ExtForms.rar.html

    http://narod.ru/disk/15949443000/%D0%B1%D1%83%D1%85_%D1%82%D0%B8%D0%BF%D0­%BE%D0%B2%D0%B0%D1%8F.zip.html

    заранее благодарю…

    Reply
  33. Трактор

    (32) Скачал. Удаляй файлы с народа. Нефиг их светить. В следующий раз с паролем выкладывай, а пароль личным сообщением.

    Разверну и посмотрю вечером.

    Reply
  34. СветикК

    спасибо,

    Reply
  35. Трактор

    (34) (23) обновил файлик. Исправил ошибку.

    Reply
  36. СветикК

    спасибо работает, очень интересная а главное полезная штука… спасибо,

    Reply
  37. СветикК

    Вы не будете против если я ее подписывать буду…?

    Reply
  38. СветикК

    я скачала новую версию, она работает, но при открытии показателя в справочнике… Показателей вываливается такое сообщение:

    ТЗДиапазоны.КодВидаДиапазона = БазаВидовДиапазонов.CODE;

    {C:БАЗАБУХ77EXTFORMSПОКАЗАТЕЛЬ.ERT(291)}: Перед выполнением операции установите объект на запись!

    ТЗДиапазоны.ВидДиапазона = БазаВидовДиапазонов.NAME;

    {C:БАЗАБУХ77EXTFORMSПОКАЗАТЕЛЬ.ERT(292)}: Перед выполнением операции установите объект на запись!

    ТЗДиапазоны.R = БазаВидовДиапазонов.R;

    {C:БАЗАБУХ77EXTFORMSПОКАЗАТЕЛЬ.ERT(293)}: Перед выполнением операции установите объект на запись!

    ТЗДиапазоны.G = БазаВидовДиапазонов.G;

    {C:БАЗАБУХ77EXTFORMSПОКАЗАТЕЛЬ.ERT(294)}: Перед выполнением операции установите объект на запись!

    ТЗДиапазоны.B = БазаВидовДиапазонов.B;

    {C:БАЗАБУХ77EXTFORMSПОКАЗАТЕЛЬ.ERT(295)}: Перед выполнением операции установите объект на запись!

    Reply
  39. Трактор

    (38) Удали все диапазоны для показателя.

    Потом можно будет создать новые. Разъехалась ссылочная целостность 🙁

    Reply
  40. СветикК

    для новых показетелей все хорошо, нет ошибок, спасибо еще раз!

    Reply
  41. Трактор

    (37)

    Вы не будете против если я ее подписывать буду…?

    Не понял о чём речь. Если речь о распространении, то ссылка на автора обязательна. Моё имя Трактор. Почта traktor@km.ru. Домашняя страница разработки http://infostart.ru/public/62041/

    Reply
  42. СветикК

    нет, я не распространять… не правильно поняли… если что работать не будет… я имею ввиду дописывать под себя что-нибудь новое, вот …

    Reply
  43. Трактор

    (42) Дык это всегда пожалуйста. Однако если захочешь распространять доработанное, то ссылка на меня всё-равно должна быть.

    PS

    К слову. Шёпот теней плохой пример для подражания в части умения выражать свои мысли.

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

    (43) Руки прочь от Шепота теней ❗ 😉

    Reply
  45. User33

    Отличная идея, хорошая реализация, разработка нужная и полезная.

    Хотя некоторые итоги собирает немного некорректно:

    Пример: требуется получить обороты между счетами за месяц или квартал, год. Если ставим периодичность = день или неделя или декада, то

    отображение итогов оборотов между счетами правильное. Если же периодичность = месяц, квартал или год, то обороты высчитываются

    по счету в целом не обращая внимания на КорСчет!!!

    В целом удобная, нужная разработка.Плюсую.

    Reply
  46. Трактор

    (45) Проверил. Сделал показатель для получения оборотов меж счетами. Показывает верно. У тебя что-то не так настроено.

    Reply
  47. User33

    (46) Посмотрел твой скрин, вот что увидел (рассмотрю месяц январь):

    у тебя согласно анализу счета в дебет 50 с кредит 62 идут суммы

    от 10, 24, 31 января и = 6000 + 6000 + 1260 = 13260 (это правильно), а вот сумма от 3 января равная 6204 идет с кредита 51 в дебет 50, так что она не должна попадать в итог оборотов между 50 и 62 счетами (у тебя попадает 13260 + 6204 = 19464, что не есть правильно!). Так и с другими месяцами.

    Получается, что как я и писал ранее, КорСчет просто игнорируется.

    Reply
  48. Трактор

    (46) Точно. Что-то вчера я протормозил.

    Reply
  49. Трактор

    (47) (42) (3) (19) Не выдержал 🙂 Нашёл причину. Поправил получение оборотов с корсчетами. Странно. КорДО и КорКО было заглушено. Интересно зачем я это сделал 8 лет назад? Снял заглушки.

    В настройках показателя появились пункты «Дебетовый оборот между корреспонденциями» и «Кредитовый оборот между корреспонденциями»

    Reply
  50. User33

    (49) Да, теперь все правильно.

    Нашел еще маленький косячок: субконто1,2,3 в Корсчете по кнопке очистка не очищаются (задан неправильный идентификатор в поле формула: сейчас Субконто1,2,3,=»», должно КорСубконто1,2,3=»»).

    А так пока вроде все, что замечу еще отпишусь.

    Респект за оперативность.

    Reply
  51. KurchataE

    (17) Отчет хороший. Для скачивания меня система не ограничивает. У меня 6 пользователей, не знаю, нужно это писать. А вообще систему (-) оценки на сайте не понимаю. Если человек что-то сделал, это уже +, по жизни столько пустобрехов. Поэтому, если выкладывается какая-то разработка — автоматически +. Пусть маленький, но +. Даже если скомуниздил у кого-то, жаль, но народ подскажет у кого. Опять таки вспомнили. Так что система оценок должна быть другой.

    Reply
  52. Доня

    Ну, Трактор!

    Ну класная вещь!

    Правда еще не конца покопалать, но уже класно!

    Это я как бухгалтер говорю! :{}

    Reply
  53. User33

    (49) Заметил еще ошибку: не собираются итоги сальдо начальное дебетовое(кредитовое) развернутое; сальдо конечное дебитовое(кредитовое) развернутое.

    Reply
  54. natarezn

    можно задать вопрос? в книжках эти же формулы? работаю мехмат и бухгалтер — чистый финансист..

    Reply
  55. Трактор

    (54) >> в книжках эти же формулы?

    Нет. Формулы приведены просто для примера. Использовать для рабочих отчётов их нельзя.

    Reply
  56. tr2525

    СПАСИБО!!!

    Инструмент для бухашек!

    Reply
  57. Свой

    спасибо за отчет… какая старая разработка, но актуальная

    по-моему, разработка близка к поговорке «старый друг лучше новых двух»

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

    Вот тебе и отрывки из неопубликованного 😀 😀 😀

    Reply
  59. Лена_Лена

    Скачала, давно, но пользовалась редко, как- то было все заморочено, мне как бухгалтеру, нужно снова присмотреться.

    Reply
  60. erthia

    Скачал год с лишним назад, успешно пользуюсь. Настраивать показатели конечно нужно потрудиться. Но потом остается только задавать период и наслаждаться готовым расчетом. Респект разработчику. Заменяет в каких-то моментах «заклятого друга» Эксель!

    Reply
  61. Filipp_inf

    Очень интересная разработка, но не учитывает возможность многофирменного учета.Спасибо.

    Reply

Leave a Comment

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