Финансы и анализ




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

33 Comments

  1. WKBAPKA

    Ежели какие вопросы, пишите… если вопросы будут по коду, спрашивайте, может что то вспомню.. 🙂

    Reply
  2. AndrewEv

    Открыл шаблон. А как запустить этот шаблон для формирования отчёта? По «Новая таблица» открывается пустая…

    Reply
  3. AndrewEv

    А, понял, это только для создания шаблонов. Не плохо было бы и выполнение прямо отседова.

    Идея интересная

    Reply
  4. WKBAPKA

    Забыл сказать, что шаблоны в примере заточены под украинскую конфигурацию «Бухгалтерский учет для Украины».

    Основной файл для запуска «Afs.ert»

    После запуска нужно указать путь к шаблонам, тогда уже выбирать шаблон. Расчет по нажатию горячей клавиши F9

    Reply
  5. WKBAPKA

    Программа полностью бесплатная, если встречаете слова «демонстрационная» не обращайте внимание, разработка старая, когда то давно хотел ее продавать. В тексте программы я пофиксил, а вот в помощи не смогу, т.к. уже потерял приблуду с помощью которой компилил файлы помощи, а счаз лень вспоминать…

    нашел более новую версию, сегодня обновлю…

    Reply
  6. gutentag

    Если можно, то выложите, пожалуйста, примеры с настроеенными отчетами.

    Reply
  7. WKBAPKA

    примеры в архиве… завтра обновлю до последней версии, сегодня нарыл в недрах своего компьютера… что касается примеров, я уже писал, отчеты заточены под конфигурацию «Бухгалтерский учет для Украины»… могу сделать еще пару примеров, напишите в личку запрос, какой пример сделать…

    Reply
  8. WKBAPKA

    Обновил сегодня версию до последней, что нашел, проверил, вроде не глючит… правда вместо обновления удалил старый файл, теперь счетчик сброшен 🙁 недосмотрел…

    Reply
  9. tsd

    (8) да нет, в заголовке общее кол-во скачиваний указывается

    Reply
  10. ash2015

    СПАСИБО

    Reply
  11. WKBAPKA

    незачто 🙂

    Reply
  12. yarosha

    УВАЖАЕМЫЕ!!! Разобрался (потребовалось 10 минут -просто руки не доходили) в так называемом «решении»… Подобных помоев — в жизни не видел… Немного привираю — енто случается сплошь и рядом — например, когда обжимают без оболочки кабеля. (точка).

    А теперь — по существу (как говорят юристы — в суде).

    Все очень просто, как два пальца об асфальт: имеется комплексный вариант поставки 1-эсины, в который входит конфа «1С-инталев — Финансовое Планирование (редакция 1.2)».

    Так вот — берете «Стандарт 2 — Баланс (ПСБУ)», затем «Отчет О финансовых Результатах» — и Вы получаете всю картину. Вставляете необходимые цифры (Отчеты-ФинансовыйАналиЗ). Тока надобно немного разбираться в ФИНАНСАХ И БУХГАЛТЕРИИ (в отличие от ентой фирмочки, которая захотела показать, что она, типа, что-то из себя представляет).

    Те, берете от туда все данные, тупо вставляете в типовую отечность конфы и получаете следующее (например):

    1. Коэффициент абсолютной ликвидности (quick ratio, коэффициент срочности, коэффициент оперативной ликвидности).

    2. Коэффициент срочной ликвидности (acid test ratio, quick ratio, коэффициент критической оценки, промежуточный коэффициент ликвидности).

    3………… и т.д. и т.п.

    Но, дело не в этом.

    Так вот — Вы НИКОГДА (!!!) не сумеете вывести исходя из отчетности (ПСБУ и т.д.), например — МАЖИНАЛЬНУЮ прибыль — исходя из данных баланса и финрезультатов (почему — объясню в приватной беседе — а то какого я второй институт заканчивал — все стоит денег).

    Так что — енту «разработку» — рекомендация модератору (пусть он меня простит, что я не в его дела лезу) — убрать как спам — рекламку галимой фирмочки…

    Reply
  13. WKBAPKA

    Походу Вам жена не дала 🙂

    во первых, как видите обработка бесплатная, писаная еще в 2000 году… фирмочку, галимую, я не рекламирую, да в принципе фирмочки то уже и нет, остался только сайт…

    а относительно 3 пункта, так а причем тут отчетность по ПСБУ не совсем понятно… да и назначение обработок явно не для автоматизаии бюджетного управления… вам наверное мало двух институтов было закончить… если не можете вытащить маржинальную прибыль, как разница между валовой прибылью и прямыми расходами, хотя в этом месте можно поспорить, организуйте паралелльный управленческий план счетов, трансляцию и вытягивайте оттуда на здоровье…

    еще раз хочется подчеркнуть, «Финансы и анализ» просто обработки которые позволяют создавать собственные отчеты и не притендуют на некую особый статус… создавалось для того, что бы бухгалтер мог создавать собственные отчеты, а уж с какой целью, это остается за кадром…

    так что вам рекомендую относиться к людям с уважением, своим сообщением ваша репутация немного снизилась… а относительно рекламы фирмочки, где вы тут на сайте видите рекламу фирмочки, не понятно…

    Reply
  14. WKBAPKA

    To yarosha:

    Вот выдержка из описания:

    ——————————————————————————

    Технически система предназначена для создания собственных аналитических отчетов произвольной формы и содержания, а идеологически — для автоматизации труда финансовых аналитиков.

    ——————————————————————————

    и причем тут весь Ваш словесный бред, который Вы написали, вероятно под хмельком?

    Reply
  15. WKBAPKA

    Особенно мне нравиться у yarosh-i профиль

    Ярослав Логин: yarosha

    Имя: Ярослав

    Дата последнего входа: 05.03.2009 13:09:31

    Дата регистрации: 08.11.2007 12:11:57

    Контактная информацияКонтактная информация недоступна.

    Личная информацияРейтинг: 0

    Рейтинг плюс: 0

    Рейтинг минус: 0

    Все по нулям, видно, что человек своими руками ничего не сделал, а вот вони… и фирмочку приплел, фу, редиска

    Reply
  16. yarosha

    Маржинальную прибыль можно вытащить, используя 9-й класс счетов (если учет ведется только на девятке), либо 8-й и 9-й (крайне редко).

    Это еще есть недостаток раскрытия информации в украинской отчетности (см., например smida . gov . ua — там много чего интересного, но, к сожалению, украинские формы отчетности не способствуют полноценному анализу состояния дел на предприятии).

    Если использовать Баланс и Финрезультаты — тогда к постоянным затратам с уверенностью можно отнести разве лишь остаточную стоимость ОС.

    Интересно было бы написать решение, взяв за основу отчет «Финансовый анализ» из «Инталев — Финансовое планирование», который будет «подбирать» данные из типовой отчетности типовых решений.

    И здесь тоже будут грабли. Грабли в том плане, что фактически учет целиком и полностью в 1Сине не ведет практически ни одно предприятие (за очень редким исключением — и то, в основном фирмы, где работает 5 — макс 50 чел).

    И здесь те же франшизы тоже хорошо постарались.

    Привожу пример:

    Одна фирма продала «Зарплата+Кадры для Украины» фирме, в которой работает 40 человек персонала. Самое интересное, это то, что в беседе с главным бухгалтером этой фирмы было выяснено то, что и должно было быть: бухгалтеру вполне достаточно документа «Начисление З/П» из типовой бухии.

    А ведь в ЗиКу требуется (хотя бы на начальном этапе один постоянный программист, который в этом разбирается и отдельный постоянный бухгалтер.

    В конечном итоге, зачастую «внедрение 1С» приводит к тому, что бухгалтера работают по принципу: «а зачем нам 1с, если мы и в экселе неплохо считаем».

    Кстати, а смысл ставить пароли на обработки (уж лучше зашить в dll). Саблей давно все проломано (не гуманно — но факт).

    🙂

    Reply
  17. yarosha

    Извиняюсь за резкости, но просто уже давно наболевшая тема — качество работы некоторых фирм-франчайзи, после которых все приходится начинать с нуля. Притом, что заказчик уже не обладает тем бюджетом на внедрение, который был.

    Думаю, очень многие с таким сталкивались.

    В общем, часть написанного переношу в блог (не поленюсь).

    Как-нибудь потом добавлю примеры. Может, интересная тема получиться.

    Reply
  18. WKBAPKA

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

    Вас кажется не туда понесло… в первом своем комментарии вы написали, что обработка полное фуфло, потом написали, что маржинальную прибыль в ПСБУ нельзя получить, хотя можно получить, однако не на 8-ом классе, т.к. в любом случае счета 8-класса транзитные… разница между кредитовым оборотом 70 счета и 90 + 91 счета вот вам и маржинальная прибыль… я бы сказал, что это операционная прибыль, т.к. маржинальная прибыль все таки разница между выручкой и прямыми расходами… однако, если корректно сгруппировать справочник «Статьи затрат» по статьям затрат, тогда можно будет получить и маржинальную прибыль… хотя это и не решает вопрос корректного управленческого баланса, т.к. внутрикорпоративные стандарты могут сильно отличаться от стандартов ПСБУ… да и дисскусия не об этом… Вы безосновательно и безаппеляционно сделали вывод, что моя обработка полный отстой, как бы сказал моя младшая дочка «но но но»…

    относительно последнего, так счаз УПП парят всем подряд, даже если компании занимается услугами и в штате два бухгалтера… ничего нового не увидел…

    Reply
  19. WKBAPKA

    Кстати, оригинальность этого решения в том, что можно в каждой ячейки писать целые подпрограммы… конечно, обычный бухгалтер или даже финансовый аналитик не осилит макро-язык, как впрочем обычный бухгалтер часто оказывается слабо знаком и с бухгалтерским учетом как таковым, но в целом на мой взгляд идея интересная…

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

    Reply
  20. ink57

    А все-таки — как подключить эту обработку?

    Reply
  21. WKBAPKA

    заходите в режим 1С:Предприятие, выбираете файл — открыть — ищите обработку Afs.ert ее и выбираете

    Reply
  22. helenchekc

    да, я тоже так и не разобралась — как пользоваться этой системой «Финансы и анализ»… Pliase, help me:)))

    Reply
  23. WKBAPKA

    ну все достаточно просто…

    в архиве комплект обработок. Основная обработка afs.ert. Заходите в режим 1С:Предприятие, выбираете файл-открыть, находите эту обработку и открываете ее…

    Дальше Вы можете создавать свои отчеты. как это делать описано в помощи.

    Примеры можете посмотреть в архиве.

    Reply
  24. nataliy17

    какой пароль, при открытии у меня запрашивает пароль

    Reply
  25. WKBAPKA

    Вам пароль на обработки в конфигураторе?

    Reply
  26. GenTay

    Доброго времени суток! У меня тоже запрашивает пароль, даже на выбор файла afs.ert. А его не нашел в обсуждении данной обработки. В принципе, в обработку я вошел, но, видимо, для оценки обработки надо войти в код, подправить под свою конфу, а его нет.

    Reply
  27. WKBAPKA

    ок, я на выходных обновлю обработкой без пароля…

    Reply
  28. KurchataQ

    И без пароля, это видно, задумано и реализовано классно. Но хочется привинтить к своей конфе и пользоваться.

    Reply
  29. WKBAPKA

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

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

    Набрел вот. Раньше не видел почему-то 😐

    Понравилось 😀

    Reply
  31. post279

    Посмотрим, попробуем

    Reply
  32. Доня

    Скачала!

    Ковырялась, ковырялась и только потом увидела что для Украины.

    Жаль что в заголовке этого не сказано

    Reply
  33. WKBAPKA

    Почему только для Украины? Это внешняя обработка может быть интегрирована в любую конфигурацию 7.7. Что у Вас не получилось?

    Reply

Leave a Comment

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