Проект внедрения Бюджетирования в 1С:УПП 8.1




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

25 Comments

  1. bobaG

    Разбавлю позитивом … 😀 полезная информация … хотя бы как еще один подход во множестве. За труды на сайте +

    Reply
  2. milkers

    Подход интересный, но было бы интересно поподробнее узнать о ходе внедрения. По поводу (1) уважаемый автор не выложил ни одного бита по поводу бюджетирования, но выдал в своих трудах развернутую классификацию программистов. И здесь, скороспешно, ставит диагноз, не разобравшись, что количество баз у клиента это методология работы клиента, не зависящая от внедренца, а большая часть сложностей проекта как раз и обусловлена этим фактом. Бюджетирование, почти всегда, вопрос вторичный и очень редко кто будет ради него кардинально менять бизнеспроцессы.

    Reply
  3. ILM

    (4)

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

    Когда бюджетирование делают ради галочки, тогда да. Когда бюджетирование делают ради управления предприятием, тогда нет.

    Из статьи, так и не понял главного в чем отличие внедрения от типового функционала в УПП?

    Но в статье насторожило: 1- ведение управленческого учета в разных бухгалтерских базах, 2- наличие нескольких баз в УПП, заметьте не организаций в одной базе для целей УУ и БУ, а УУ и БУ в разных базах, 3- а сводная база Бюджетирования — это шедевр, уверен, что ваш клиент кроме суммарных цифр ничего не видит, и ответ из чего состоит та или иная сумма, для него загадка.

    P.S. За биты, уж извините уважаемый milkers, пока не могу выкладывать.

    Reply
  4. DatchaninNN

    Интересные фантазии…

    правда, по опыту знаю, что это только фантазии…

    Не совсем понятно зачем вообще этот пост:

    1. Информации крайне мало… Для профи — прописные истины, для новичков — обманка просто…

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

    3. Не учтена организационная структура группы компаний… Думаю, что это не заработает, либо будет покрываться в итоге ёкселем…

    4. Вообще, правильно я понял, что у этой группы компаний нет центрального управления ???

    5. Присоединюсь к ILM — это Ваш первый опыт в построении подобных систем??

    минус поставить не могу, но очень хочется — не обессудьте, исключительно объективная оценка.

    Reply
  5. huse

    (0)

    Управленческий учет необходим для управления оперативной деятельностью всего предприятия.

    😀 Вот пишут что-то не думая.

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

    Было бы интереснее услышать:

    1. Зачем (цели) внедряли УУ?

    2. Как именно был реализован УУ. Почему выбрали такую реализацию?

    Reply
  6. ASMIR.ru

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

    Тем не менее было внедрено именно так… до начала внедрения УУ и бюджетирования, сначала был внедрен бухгалтерский учет.

    Ряд холдингов так и ведет учет — в разных базах по каждому предприятию. А руководству — нужны сводные цифры — с возможностью расшифровки — собственно по измерениям бюджетирования (статья, контрагент, проект, ЦФО (Подразделение-база)) и период.

    Система внедрена и используется.

    Reply
  7. huse

    (1)

    В УПП можно и в одной базе все делать, на разных сценариях получать любые бюджеты и ДДС.

    Можно то можно, только зачем? В (0) к принятию решения о раздельных базах УУ шли конечно сложными путями, но результат получили верный.

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

    Все перекладки Проводка БУ->УУ от лукавого. Проводка не описывает ВСЮ хозоперацию. А значит чтобы отразить Проводку в УУ ПРАВИЛЬНО нам элементарно не хватает данных. Конечно можно строить всякие заплатки и корректировки, но это все от лукавого, так как делается постфактум, а УУ нам зачем нужен?… Если же Проводка БУ легко перекладывается в УУ, тогда у меня вообще больше вопрос — А НАФИГ УУ нужен? Можно сразу отчеты на основе БУ строить!

    Вот и остается для большинства предприятий только один путь — в момент совершения хоз.операции отражать ее по одним правилам в БУ, и по другим в УУ. И делать это самое логичное в локальной базе.

    Reply
  8. huse

    (11)

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

    Непонятно на какой пост отвечаете.

    PS Ответьте плиз на вопросы в (10) — интересно. В (11) Вы упомянули консолидацию — это была единственная цель внедрения УУ?

    Reply
  9. ASMIR.ru

    (12) спасибо

    (9) Собственно, это статья — п.1.1. описания проекта внедрения, более конкретную информацию об уу, формировании и расчете планов и т.п. я думала опубликую позже. здесь суть — о том, что делать, если бухгалтерия хочет вести учет в разных базах. и эта маленькая статья имеет только одну полезную мысль, собственно да, так по сути и есть: для того чтобы внедрить бюджетирование в холдинге, ведущем учет в разных базах — достаточно переносить всего лишь один документ по учету фактических данных бюджетирования — решение это оказалось простым и исполнимым, по сравнению с множеством других вариантов.

    (13) Цели внедрения УУ — естественно более широкие… но об этом позже.

    Reply
  10. Abadonna
    Цели внедрения УУ — естественно более широкие…

    Цель внедрения УУ может быть одна, и только одна: в БУ мы белые и пушистые, в УУ — какие уж есть 😉

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

    Вот те на! 😀 В БУ (правильной) и половины из УУ не должно даже близко быть.

    Reply
  11. ASMIR.ru

    (16) В данной компании — и в управленческом тоже белые и пушистые (это ведь тоже входит в требования бухгалтерии), просто он более информативен и оперативен по сравнению с бухгалтерским (есть планы, заказы и т.п.).

    Reply
  12. Abadonna

    (17) Стало быть у нас разные понятия об УУ и БУ.

    Для меня УУ — что есть, БУ — нате, злобные налоговики, кушайте! 😉

    Reply
  13. ASMIR.ru

    (16), (10) В данной компании — и в управленческом тоже белые и пушистые (это ведь тоже входит в требования бухгалтерии), просто он более информативен и оперативен по сравнению с бухгалтерским (есть планы, заказы и т.п.).

    Reply
  14. milkers

    (16)(17)(18)(19) Существуют три основных вида учета : управленческий, финансовый и регламентированный, отличающиеся детализацией, соответсвущей основному назначению. Каждый из этих учетов может быть реализован с применением разных механизмов: бухгалтерских планов счетов, различных видов регистров и т.п.

    Ни в одно классическое определение белые и пушистые не входят 🙂

    Reply
  15. Abadonna

    (20) А Россия вообще ни в какие классические определения не входит 😀

    Нас, блин, и не измерить, и не понять 😉

    Хоть и написано было:

    Давно пора , @@@@ мать,

    Умом Россию понимать!

    © И. Губерман

    Reply
  16. ILM

    (20) Сейчас веду проект, четыре фирмы объединяем в одну УПП. Накушавшись разных баз, решило руководство жить дружненько в одной базе. Первые результаты впечатляют. Автоматизация операций межфирменной купли-продажи. Единые базы клиентов и номенклатуры, передача заказов между организациями и увеличение скорости продаж, возможность утаить кое-что от кое-кого. Создать единый план ДДС для всех, консолидировать там где нужно денежки и перераспределять прибыль, быстренько находить косяки в работе менеджеров — всё это дорогого стоит.

    А вы про разые УУ, ФУ и БУ. Можно и 50 учетов вести, вот только надо ли?

    Reply
  17. iov

    Бюджетирование есть только способ покарать превысивших бюджет и урезать на следующий период неосвоивших его… Кругом посмотрите госбюджет вот именно так и тащат. А до внедрения — молодцы раз сделали будет выбор при продаже клюентам.

    Reply
  18. WKBAPKA

    2(22): все познается в сравнении… конечно, вести деятельность 30 компаний холдинга в одной базе заманчиво, но если холдинг разноплановый? если у каждой компании свои бухгалтера… тогда караул… включать RLS ? в этом случае рационально разделение баз

    Reply
  19. milkers

    (23) Очень опасно превращать бюджетирование в репресионный механизм. Это погубило не малое количество фирм. Я лично был свидетелем, когда финансовые центры ответственности устраивали нездоровую конкуренцию друг с другом и начинали перетягивать финансовое одеяло на себя, губя фирму. Приведу пример: Адм. хозчасть, переведенная на самоокупаемость, диктовала монопольные расценки, вынуждая другие отделы терять ценные специалистов из за неспособности оплачивать их услуги. Траспортникам было выгоднее обрабатывать сторонние заказы и т.д. Это пример неправильно определенных центров финансовой ответственности. Бюджетирование — ценный инструмент контроля и только контроля.

    Reply
  20. iov

    (25) Ага и происходит это методом пришла компания людей и на «хочу бюджетирование» сдает работу денежки получает и уходит. А генералы получив новую игрушку без понятий о том за чем оно вообще ему надо, начинает строить всех и когда понимает что его идея -бред усложняющий работу — чтобы не выставить себя дураком — использует его для поиска виноватых. Все бюджетирование внедрено.

    Reply
  21. ASMIR.ru

    (25), (26) Бюджетирование в первую очередь выполняет функции анализа и планирования, и автоматизированная система бюджетирования — в первую очередь реально делает процесс бюджетирования (известный всем с советских времен) более быстрым, менее трудоемким и соответственно — менее затратным в части сбора и анализа данных. На основе этих данных принимаются управленческие решения. А решения, честно сказать, хотя косвенно и могут зависеть от системы бюджетирования, от результатов анализа, и разбивки по цфо… но…

    Управленческие решения зависят — … от управленческого мышления…

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

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

    Reply
  22. ASMIR.ru

    (28) В данном случае мы говорим просто о резюме внедренного достаточно простого проекта по бюджетированию.

    huse вы как то уклонились от темы в сферу эмоций и личного отношения к другим, можно быть немножко корректнее.

    Reply
  23. ASMIR.ru

    Да, необходимо добавить, что на этапе внедрения бюджетирования программист все таки необходим:

    а) для написания сложных запросов в источниках бюджетирования;

    б) для создания обработки переноса данных из баз;

    в) для создания более удобных форм отчетов в бюджетировании.

    Более подробно детали внедрения опишу в последующих статьях или в презентации на сайте.

    Reply
  24. ZyMik

    А где собственно текст?

    Reply
  25. ASMIR.ru

    Давно не смотрела… восстановила текст по адресу, хотя понимаю, что 8.1 и вообще… всё это уже история.

    Reply

Leave a Comment

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