ЭЛИМОСИПЕД. Элиминация внутригрупповых оборотов товаров — изобретение велосипеда




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

28 Comments

  1. Abadonna

    Сам статью пробовал прочитать? Я на зрение не жалуюсь, но мелкий серовато-размытый шрифт напрягает (в отличие от шрифта оригинала по ссылке)

    Reply
  2. SunShinne

    Шрифт поменял. Действительно мелковатый был.

    Reply
  3. huse

    (0) Люблю думающих людей — однозначно плюс!

    Могу добавить к вариантам решения:

    1. Исключить наценку при внутренних перепродажах, выставлять ее как оказание услуг.

    2. Комиссионная продажа.

    3. Параллельный упр.учет — по сути Вы реализуете этот вариант только на бумаге ввиде корректировок.

    Reply
  4. huse

    В случае с производством остается только вариант 1, 3 и:

    4. Давальческая схема. Правда она дает власть закупочной организации — а это не всегда нужно.

    Reply
  5. RayCon

    (0) Здорово, что люди излагают свои мысли вслух, тем самым пытаясь войти в диалог с сообществом. Плохо только, что это не в блоге делается, да ещё пунктуация хромает.

    Если же говорить по теме, то описанная проблема — классика жанра для финансового директора группы компаний. Решений существует воз и маленькая тележка. Кстати, в (3) предлагаются разумные варианты. Но даже без учёта уже существующих решений, смело могу сказать: «правильной дорогой идёте, товарищ!» 🙂

    (4) +1

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

    Reply
  6. SunShinne

    Спасибо за комментарии, господа. Вот что касается исключения наценки, тут две проблемки. Во-первых по законодательству мы обязаны хотя бы копеечную наценку делать, а во-вторых — управление наценкой это хороший инструмент управления налоговыми платежами. Относительно параллельного упр.учета пока не заморачиваемся, полагаю в рамках внедрения МСФО это сделаем, через год-два, сейчас нужно на РСБУ выехать. По поводу давальческой схемы надо подумать — идея для нас свежая.

    [5] Пунктуация моя хромая лошадь 🙂

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

    (6) 1-й вариант из (3) можно скрестить с 4-м. В холдинге все равно ведь существует некая управляющая компания, которая, в том числе, контролирует внутрихолдинговые сделки. Так вот пусть один завод не продает станок другому заводу, а продает его управляющей компании, а та передает его получателю в пользование (аренду). Для производственных материалов это будет давальческая схема. Для товаров — комиссия.

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

    Reply
  8. tango

    за публикацию +

    за переложение проблем на регламентирование и сопроводительные справки о с/с —

    понравилось +

    Reply
  9. naxidiblya

    А может можно продавать внутри холдинга только по закупочной цене? Если хозяин один, например. Заодно избавимся от лишних НДС и НП.

    Reply
  10. WKBAPKA

    2(3): первым делом я бы и предложил параллельный управленческий учет… только не на консолидации, тут нужна транзакционная система учета… при параллельном упр. учете все внутренние продажи, включая ОС можно, практически в большинстве случаев, не отражать… например, теже ОС, если представить себе владельца в виде БОГА 😉 который смотрит на всю эту мышинную возню сверху, перемещение автомобиля между разными компаниями и его износ с точки зрения реальной первоначальной стоимости и его реального износа для его кармана ничего не меняет… в этом случае достаточно лишь изменять подразделение-владельца не меняя первоначальной стоимости… другой вопрос, если спуститься на уровень подразделений, эффективность которых, например, может оцениваться по полученному доходу с учетом тех же внутригрупповых операций, картина может резко поменяться… ощущается резкая необходимость в очень хорошо продуманном комплекте документов таких как: «Положение об учетной политике на предриятии», «Положение об управленческой отчетности», «Положение о финансовой/ ораганизационной структуре» и т.п. Все это нужно для того что бы понять, кто есть потребитель информации, какие отчеты ему нужны и какие цели сей потребитель преследует…

    Reply
  11. WKBAPKA

    перечитав данную статью не совсем понял конечные цели всего этого… почему это нужно делать исключительно отталкиваясь от регламентированного учета? если уж наплодили кучу предприятий с точки зрения оптимизации налогов, тогда нужен хороший управленческий учет… если это холдинг разноплановый, что то типа группы и есть КУА, тогда однозначно Консолидация, т.к. в этом случае на разных предприятиях могут быть и разные системы учета и тут без некоторого постоянно действующего комитета по сбору и подготовки отчетности холдинга не обойтись… ИМХО мое мнение…

    Reply
  12. WKBAPKA

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

    Reply
  13. WKBAPKA

    Руководитель департамента контроллинга Управляющая Компания Юг-Авто Холдинг (Краснодар)

    во, как я и предполагал: это КУА, а значит на объектах системы учета могут быть разные… еще бы знать, по каким критериям проводится оценка эффективности работы объектов, было бы вообще прекрасно.

    Reply
  14. scandium

    Добрый день! хотелось бы все же понять схему работы предприятия и некоторые параметры:

    1) Насколько территориально разрозненна ваша компания

    2) количество ю.л. (хотя бы порядок до 10 или более) (хотя судя по тому что задача только ставится, то до 10)

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

    это самый минимум что хотелось бы сразу узнать,

    а вообще еще интересно:

    4) структура взаимодействия внутри между ю.л. (каждый с каждым, или есть иерархия)

    Зная ответы можно было бы подумать над тем а что вам все-таки нужно в качестве информационной поддержки:

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

    2) База документооборота (аля Бухгалтерия 8, куда бухгалтера и вводили бы корректировки и где проходила бы сверка)

    3) Консолидация (расш. пункт 2)

    4) Много коленок

    p.s. тема поднята очень хорошая

    Reply
  15. kote

    После прочтения просьба учесть мнение автора о том, что настоящая статья не является учебным материалом, применение на практике любых изложенных здесь мыслей должно производиться на свой страх и риск и может привести к непредсказуемым последствиям, т.к. методика находится в стадии разработки и еще не проверена временем. Все конструктивные замечания приветствуются, дебаты ожидаются. Ссылка: http://sun-expert.blogspot.com/2010/10/blog-post.html

    ===

    Да все проверено уже.. и времени — 8 лет, и проверено даже 2 раза..

    http://khodorkovsky.ru/documents/2010/10/27/13735/

    Reply
  16. SunShinne

    [14] Добрый день.

    1) Почти весь бизнес в рамках одного города. Но есть четыре учетных центра.

    2) Ю.Л. чуть больше 10

    3) Загрузка бухгалтерия безусловная большая, но за счет унификации им должно стать легче. Им уже легче.

    4) Есть три ю.л. которые работают со всеми остальными (и друг с другом в т.ч.) — УК, хозсектор и производственная субподрядная площадка

    База документооборота — вопрос открытый, но на 90% это бухгалтерия. УТ слишком оперативная вещь, до консолидации не доросли. Я по-крайней мере не дорос, да и подрядчики тоже — в Краснодаре (насколько мне известно) нет успешных внедрений 1С-Консолидации. Хотя как следующий шаг — да, скорее всего консолидация.

    Reply
  17. SunShinne

    [10,11] Ну как Вам сказать… я и бухгалтерским данным у нас пока не сильно доверяю. Надо сначало научиться бух.учет вести и налоги правильно считать, прежде чем упр. учетом заниматься. И потом управленческий учет при умеренных требованиях менеджеров реализуем и на основе бухгалтерского. Это гораздо менее затратно. Положение по орг.структуре и фин.структуре есть (локально для всех основных бизнесов), но они применимы к бюджетированию. Учетную политику ваяем «с нуля» — суть статьи будет отражена в учетной политике в качестве отдельного параграфа. А написал с тем, что бы убить троих зайцев — себя организовать, обратную связь получить и людям полезные мысли подкинуть (мне бы такая статья еще пару недель назад не повредила бы)

    Reply
  18. huse

    (7) Не всегда сработает. Зачастую в УК не концентрируется прибыль. А юрлицо УК выполняет номинальную роль ЦЗ, которое выставляет свои услуги предприятиям Холдинга. Как следствие бухгалтерия там простая и бухгалтеров немного. Они просто не осилят потоки материалов через себя. Да и денег у УК на закупку оборудования может не быть.

    Reply
  19. huse

    (11) а мне (0) интересен как попытка. Так же никто не делал (ну или единицы) — почему бы не попробовать? У меня были мысли параллельного накопления ошибки прибыли, но я откинул такое решение, потому что не верил, что предприятие осилит. А если в данном случае есть достаточная власть для продавливания решения — почему бы не попробовать все на РСБУ сделать?

    2Автору: обязательно пишите как у Вас будут дела продвигаться — интересно.

    Reply
  20. huse

    (17) ну по большому счету — эта карточка с настоящей стоимостью и есть простой управленческий учет. Вы же ее не будете в РСБУ на проводках отражать. Просто привыкли, что УУ — это обязательно отдельная база (иногда с проводками).

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

    (18) Не всегда — это понятно. Но вряд ли из-за того, что в УК простая бухгалтерия. Кто-то ведь готовит консолидированную отчетность! Холдинги бывают с разной степенью централизации — это да. Если в УК не контролируют сделки между предприятиями изначально, а только получают информацию по факту… И если прибыль остается на предприятиях… но тогда и консолидировать-то для отчетности, фактически, нечего — достаточно суммирования.

    Reply
  22. huse

    (21)Чой-та «достаточно суммирования» :). ТМЦ-то могут кругами по-гулять, нарастив таким образом нереализованную прибыль. От УК это не зависит. Просто я на практике встречал только УК-ашки, в которых либо вообще нифига нет, либо ОС числятся, которые они в аренду сдают. А в операционную деятельность они обычно лезть не хотят. Не барско это дело )))).

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

    (22) Согласен, наверное, в большинстве случаев так и есть. Я в 7 посте нарисовал схему, частично (в части сырья) реализованную у нас в холдинге. Бухгалтерия в УК, похоже, никакая, зато есть подразделение консолидированной отчетности, подразделение внутреннего аудита, не говоря уже о финиках — и все считают (якобы). Скорее всего, на коленке. И нехилую зряплату получают.

    Reply
  24. support

    Раньше в ТИС Упр и Фин учет были разделены практически на разные регистры и движения были двойные. Вот там очень легко создавалась сводная отчетность по всем фирмам или по одной. В данном случае, внутренние перемещения вообще можно не проводить по Упр учету, а делать списание, когда товар выходит за пределы холдинга. Тогда себестоимость будет вычисляться исходя из общих партий по всему холдингу и с точки зрения учета, не важно какая именно партия взялась в списание, а то любят вычислять, чтобы именно эта партия списалась, а не по ФИФО.

    Reply
  25. WKBAPKA

    2(20): не обязательно — параллельная база, все можно вести в одной базе, но рациональнее использовать дополнительный план счетов… удобнее и проще

    Reply
  26. WKBAPKA

    2(24): вот и получается, что с точки зрения владельца внутренние переброски ТМЦ ну никак на их себестоимость не влияют с одной стороны…

    Reply
  27. ASMIR.ru

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

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

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

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

    В общем — спасибо.

    Reply
  28. Kamikadze

    У меня задача похожая. В УПП с использованием РАУЗ реализовать механизм учета ВГО наценок

    Reply

Leave a Comment

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