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




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

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 не будет опубликован. Обязательные поля помечены *