Универсальный отчёт по проводкам




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

47 Comments

  1. artbear

    Раз платная, качать не хочется, но хочется услышать ответы на вопросы 🙂

    1) Есть ли демо-версия или бесплатная ?

    2) В чем отличия коммерческой версии от демо или бесплатной?

    Reply
  2. azernot

    Демо-версия отличается от полной только тем, что не позволит сформировать отчёт за период позднее 31.12.2005 г.

    Reply
  3. azernot

    Небольшая инструкция по запуску:

    Распаковываем архив (полностью, с каталогами)

    Открываем файл Start_URBI.ert (это стартер, он инициализирует Decoder.dll и запустит саму обработку)

    Далее в рамке «Сохранение/загрузка настроек» жмём кнопку «Открыть…», находим каталог Examples, там лежит несколько уже готовых настроек. Открываем, формируем, смотрим. Потом задаёмся вопросом, а что ещё можно? Открываем инструкцию в формате MS Word читаем, пробуем создать настройки, задаём вопросы, получаем ответы…

    В случае, если в вашей базе нет данных ранее 01.01.2006, могу порекомендовать попробовать на демо-конфигурации (от 1С).

    Reply
  4. CheBurator

    наверняка надо поставить [+1]

    кстати.. есть у меня парочка действительно грамотных бухов — с ними очень комфортно работать… так вот — все они обходятся набор штатных отчетов типовой бухии…

    Reply
  5. azernot

    Как бы тебе сказать, Че… Для составления баланса, достаточно 3 отчётов из состава типовых и комплект регламентных. А можно и ещё проще, комплект журналов-ордеров и главная книга. В принципе, даже калькулятор можно заменить счётами…

    Но вот незадача, современный менеджмент — он отходит от совка, он хочет получать максимум информации, причём в удобном именно ему виде. Всякие там ОСВ по субконто — это не совсем то, что они хотят видеть. «Такой же, только с перламутровыми пуговицами» — моя горькая присказка в то время. В итоге я написал вот этот конструктор. К нему порядка 50 (!) настроек. Яйца варёные, яйца жаренные, омлет, в мешочек, мешочек омлета, омлет в мешочке, жареный мешочек, омлет варёный в мешочке с яичной скорлупой.. в фас и в профиль. Открою секрет, изначально, НАВИГАТОР был всего-лишь оболочкой для этого отчёта (чтобы настройки хранить в иерархии и с описанием). На любой запрос бухгалтерии, где не употреблялось слово «остатки», я давал ответ в течение 0.5- 1 часа. «На любую задницу с резьбой…»- вот моя присказка после создания этого конструктора.

    Возможно, я перемудрил, возможно оно никому не нужно, возможно полёт моей мысли страшно далёк от народа.. Судить вам.

    Reply
  6. CheBurator

    Не, совершенно все правильно… У меня тож самое — только в Торговле — хотелки рождаются с бешенной скоростью… Навигатор еще докуручу чуток — и буду запускаться… А по бухии — у меня проще… В принципе у клиентов тоже что-то интересное вертится не на бухииНо у кого-то не так — им твой конструктор самое оно.

    Только какие-то уроды — поставили….

    Reply
  7. azernot

    По заявкам радиослушателей

    Демо-версия имеет несколько вариантов ограничений (на выбор):

    — Ограничение по периоду (только за период до 01.01.2006 г.)

    — Искажение суммы (случайным образом все суммы в отчёте умножаются на 0.001, 0.01, … 10, 1000)

    — Сокрытие суммы (если в числе встречается цифра «5», в отчёт выводится слово «Демо»)

    Reply
  8. viacht

    На украинском ПУБе — показала обработка большую дулю. Нихрена не работает. Бабло платить не за что.

    Но идея хороша. Готов помочь в доводке на украинских конфах.

    Reply
  9. azernot

    А можно текст дули? У меня к сожалению нет украинских конфигураций. Вообще старался делать универсально, но допускаю возможность ошибки.

    Reply
  10. azernot

    Как и предполагалось, проблема скорее всего в использовании типовых настроек. Настройки в архиве — только для типовой бухгалтерии! В других конфигурациях они не будут корректно работать (ну разве что конфигурации почти идентичны).

    Попробуйте задать свои настройки, даже простейшие… Я уверен, что у вас получится.

    Reply
  11. azernot

    Научил обработку работать с периодическими реквизитами справочников. (Периодические реквизиты берутся на дату операции).

    Вставил «защиту от дурака» на разделитель учёта.

    Reply
  12. support

    Все хорошо, но надо выбрать просто третий вариант демо:

    «Сокрытие суммы (если в числе встречается цифра «5», в отчёт выводится слово «Демо») «

    Reply
  13. azernot

    3 варианта демо-версии всяко лучше чем 1 вариант…

    Reply
  14. Abadonna

    Я вот просто из принципа похвалю, а то всё ТиС да ТиС кругом….

    А я больше БУХать люблю

    +1

    Reply
  15. vasilykushnir

    (15) Наливай — буду участвовать.

    Reply
  16. support

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

    Reply
  17. Abadonna

    >скачал и…. без поллитры не разобраться

    Не забывайте, что azernot в первую очередь (как мне кажется) мыслит, как бухгалтер.

    Я вот тоже всегда мыслю сначала как инженер-механик

    Reply
  18. azernot

    А вы спрашивайте! Я ж отвечу, никуда не денусь!

    А кто-то может и инструкцию почитать, я там пример создания конкретной настройки привёл.

    Reply
  19. support

    может какой-нибудь деморолик сделаешь, могу прогу дать

    Reply
  20. azernot

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

    Могу предложить ещё вариант: вы озвучиваете условия-задание, я делаю настройку и прикладывю комментарии. Когда настройка сделана по вашим условиям, мне кажется проще будет понять прнцип работы обработки. Понятно, что условия должны быть более-менее универсальные.

    Reply
  21. support

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

    Reply
  22. azernot

    Если бы количество подходящих конфигураций было бы отлично от 1, я бы наверное так и сделал. Все настройки сделаны для типовой Бухгалтерии. (есть правда одна для Украинского ПУБ, но это на мой взгляд, лишь оправдание к посту №9.

    Reply
  23. support

    Круто! Вот это ролики!

    Reply
  24. support

    Только можно узнать кодек? 🙂

    Reply
  25. azernot

    Итак, разжившись нужным софтом, я приступил к формированию видеокурса…

    Задачу я себе поставил простую:

    сформировать настройку отчёта о движении безналичных денежных средств на рублёвых счетах, при этом:

    — движения между рублёвыми счетами учитываться не должны,

    — движения по статьям «Сдача наличных в банк» и «Поступления наличных из банка» учитываться не должны

    — формировать отчёт надо в тысячах рублей;

    — группировать отчёт надо по разрезам деятельности, показать отдельно поступления и списания по каждому разрезу, расшифровать движения по статьям, контргентам и договорам с контрагентами.

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

    Сразу оговорюсь, при создании видеороликов были допущены несколько ошибок.

    КОНКУРС НА САМОГО ВНИМАТЕЛЬНОГО! Найдите их! Найдите их все!

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

    Также необходим дополнительный разрез — Банк (не счёт, а именно банк!), для движений по кассе, по этому разрезу показать «Касса».

    Результаты вывести в рублях и сводно по всем валютам.

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

    Тому кто первым КОРРЕКТНО создаст такую настройку — респект и уважуха.

    Reply
  26. azernot

    Ролики в формате Xvid Mpeg4 Codec

    Reply
  27. Abadonna

    (27) Подари софтяру, или ссылку дай 😉

    Reply
  28. JohnyDeath

    Есть несколько плееров, которые проигрывают почти всё, независимо от установленных кодеков. Один из них VLC media player (бесплатный): http://www.videolan.org/vlc/

    Reply
  29. JohnyDeath

    Теперь бы сконвертировать всё в .3gp и можно будет делать лозунги типа таких:

    «Закачай «Настройку периодичности» себе на мобильник!» 😉

    Reply
  30. support

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

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

    Нужны уже разработанные сложные отчеты. Формирование и быстрое редактирование.

    Главный вопрос: что можно получить с помощью этого конструктора, а не как получить?

    Reply
  31. azernot

    Что можно получить с помощью пилы и топора? Кто-то скажет дрова.. Кто-то скажет стул, стол, мебель.. Кто-то скажет сарай, баню, дом… Кто-то скажет отпиленные и отрубленные конечности и головы…

    Конструктор есть конструктор. Можно сказать что топор рубит, пила пилит. Можно объяснить как рубить и как пилить.. Можно приложить немного нарубленных-напиленных изделий. Однако сами по себе ни топор, ни пила не сделают ни дощечки.

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

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

    Что касается сложных отчётов… Сложные отчёты делаются с учётом особенностей предприятия. Сложные отчёты не могут быть универсальными. Поглядите пример отчёта о доходах и расходах — вот вам сложный отчёт.

    Поймите — это конструктор! Отчёт делается в конструкторе исходя из поставленной задачи. А вы предлагаете набросать отчётов, чтобы посмотреть не рашает ли один из них стоящей задачи.. Шиворот-навыворот всё.

    P.S. Счётчики скачиваний демо-роликов наглядно демонстрируют кому они нужны 🙂

    Замкнутый круг: Администратор понимает принцип работы обработки, но не может проверить конструктор, т.к. у него нет задач. Бухгалтер имеет кучу задач, но не обладает знаниями чтобы понять принцип работы обработки…

    Reply
  32. poppy

    (26) Сразу оговорюсь, при создании видеороликов были допущены несколько ошибок.

    При настройке периодичности используется неделя. При выводе результатов — неделя отсутствует.

    Reply
  33. azernot

    (33) ну. Ещё?

    Reply
  34. poppy

    В отборе проводок показано только два отбора, должно быть четыре.

    Reply
  35. poppy

    В отборе проводок используется первое субконто, надо — второе.

    Reply
  36. azernot

    Умница, poppy! Самая серьёзная ошибка в (36), наглядно демонстрирует необходимость аккуртоности в заполнении настроек. 2 отбора только потому, что в демо-конфигурации почему-то есть поступления из банка в кассу по Д51… В реальной жизни так не должно быть.

    ещё 1 отличие не найдено… (даже не ошибка по сути, но имеет место быть, ищите..)

    Reply
  37. poppy

    При заполнении условий группировки «Разрез деятельности» показано только одно условие по 51 счету. Второе условие может быть по виду второго субконто.

    Reply
  38. azernot

    Абсолютно верно!

    Мадам, позвольте замереть в глубоком пардоне! (с)

    Если вы ещё и создадите настройку по условиям описанным в (26) мой пардон будет наиглубочайшим а поза непоколебима. В любом случае, респект вам!

    Reply
  39. RegrZ

    — Ограничение по периоду (только за период до 01.01.2006 г.)

    — Искажение суммы (случайным образом все суммы в отчёте умножаются на 0.001, 0.01, … 10, 1000)

    — Сокрытие суммы (если в числе встречается цифра «5», в отчёт выводится слово «

    Reply
  40. azernot

    Ну должно же быть какое-то ограничение в демке 🙂

    Вот я и дал ограничение на выбор.

    Reply
  41. azernot

    Сейчас, по прошествии нескольких лет после написания этой обработки, случайно запустил посмотрел… Да-а-а-а… И ведь было же у меня время и желание написать ТАКОЕ. Фундаментальный труд.

    Фактически это СКД из 1С 8.х для 1С 7.7.

    Reply
  42. PiccaHut001

    За жалкое поделие 5000 рублей. 1С-ники такие 1С-ники(**пые и жадные)

    Reply
  43. azernot

    Не взлетела на Мисте темка с предложением беспатного доступа к этой обработке 🙁

    Ну что ж, пусть остаётся как было. Альтруистический порыв пресечён на корню 🙂

    Да, если кому нужна подобная обработка формирующаяся по данным регистров, готов обсуждать требования и ценник 😉

    Reply
  44. tsd

    (43) обгадить можно кого угодно. Можете лучше? Сделайте и выложите бесплатно, будет Вам хвала и почет.

    Reply
  45. azernot

    (43) Ага, жалкое поделие 🙂 На коленке, за 20 минут, любой накатает 🙂

    P.S. Качал хоть?

    Reply
  46. studentka

    Использую и рекомендую

    Reply
  47. azernot

    Полная версия обработки за SM.

    Reply

Leave a Comment

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