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




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2026-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 не будет опубликован. Обязательные поля помечены *