Последовательность …и как "я" её понимаю …




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

49 Comments

  1. redgad

    «Граница последовательности (ГП) – позиция, последнего введённого документа в последовательность.»

    Однако не совсем правильно: дата последнего введенного документа может быть больше ГП.

    Reply
  2. Шёпот теней

    (1)принято!

    читаем так:

    «Граница последовательности (ГП) – позиция, последнего проведённого документа в последовательности не нарушившим её. С т.з. временной оси, ГП — обозначает самую раннюю позицию (момент времени) нарушения последовательности.»

    воОотТакБудетПравиЛьНО…?…!

    Reply
  3. tango

    пс: Механизм последовательностей (был) задуман для некоей автоматизации отслеживания корректности отображения бизнес-процесса во времени.

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

    «Продвинутый» бух, не увидев себестоимости в передаче просто перепроведет все документы. Суперпродвинутый — сначала проверит ГП.

    Reply
  4. tango

    прикольно, поинтересовался, что у нас, оказалось

    Партионный учет (бухгалтерский): 03.07.2007 17:17:54

    спасибо, Шепот, если б не ты, так и не поинтересовался б 🙂

    Reply
  5. Шёпот теней

    (3) tango уважаю ваше мнение…

    и к вашему мнению хочется добавить следующие свои соображения:

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

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

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

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

    … и много-много ещё чего…

    и вот тогда:

    и решили если нет возможности бороться с «неправильностью» то пусть эта неправильность станет «правильностью» и будет зарегистрирован сам факт возникновения «неправильности»…

    воооооттакоемоЁмнение…..

    Reply
  6. halushka

    Насколько помню смутные времена обсчения с SAP-ом и прочими буржуйскими бухгалтериями, больше всего возни было именно с отсутсвием возможности нормально реализовать «работу задним числом», ну нигде не видел чтоб бухи работали как-надо. На днях глав. бух. перепровел ИЮЛЬ ПРОШЛОГО ГОДА ! Отт це веселуха в базе образовалась…. нАрод неделю руками регистры чистили 🙂 Имхо 1Ц тут рулит как учетка однозначно !

    P.S. По собственному опыту зачастую после ручной установки границ последовательности перестает нормально работать обработка проведения по партиям. Глюк наблюдался на УПП 1.2 с включенным режимом быстрого проведения. Поэтому ОЧЕНЬ не советую так делать.

    Reply
  7. Шёпот теней

    солидарен с halushka в (6)…

    весь, прошлый 2008 год проработал в R3… за ЧТОООО там такие деньги платят непонятно… видимо очередная мода…

    и

    сделал вывод, что 1С это лучшая учётная система для России …

    и

    следующий вывод:

    ЕВРОбухгалтерия — предназначены быть основой для последующих экономических расчётов… и они, эти евроБухии, ими, этими расчётами, и напичканы…

    наша РАШАбухгалтерия не служит экономике, а является полем для сдачи отчётности…

    отсюда и появляются противоречия в нашем бухгалтерском учёте…

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

    1С, пишет ПО для бухгалтерии являющейся основой экономического анализа, а надо писать ПО для сдачи внешних отчетов… всё одно – себестоимость продукции мы можем получать раньше, чем 1-2 месяца спустя, и это в самом лучшем случае, и зачем же тогда заморачиваться с LIFO & FIFO…

    у буржуев с их Директ-Костинг-ом и условно постоянными/переменными затратами и при условии их налогообложения получают себестоимость день в день … а нам за счастье получать хотя бы актуальные остатки на складах… какая уж тут себестоимость – всё одно всё перепроведётся ещё 100 раз…

    ВОоооотТакОООеМнениЕуОптимиста…

    Reply
  8. Ish_2

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

    Понравились Ваши комментарии. На мой вкус ,правда, если комментарий верен и точен

    то «молодежные довески» в конце излишни.

    Reply
  9. Шёпот теней

    (8) …можно по поводу «то «молодежные довески» в конце излишни» подробнее…

    уточните… не «прочитал»

    спасибоВоОот…

    Reply
  10. Ish_2

    На мой вкус (возможно , придирчивый) , как-то странно :

    «спасибоВоОот…»

    «ВОоооотТакОООеМнениЕуОптимиста…»

    Reply
  11. Шёпот теней

    (10) есть хорошая мысль от великих:

    хочешь, чтобы тебя заметили — удиви

    хочешь, чтобы тебя помнили — оскорби

    хочешь, чтобы тебя ждали — будь нужным…

    если честно то наверное… это наверное крайняя степень индивидуализма + детские комплексы… или так: это детские комплексы которые выражаются в форме крйнего индивидуализма.

    ….

    но и встречный вопрос-рассуждение: почему «мы» не любим подписываться и всегда скрываем о себе всё… поясню: например на нашем сайте у большей половины нет никаких данных в личках уж хотябы ФИО и ДМГ рождения…

    что это…? лень или страх…

    П.С. кстати поздравляю с вашим началом… первый «выход» и сразу же >80 плюсов… удачи!

    воОотТакоеМнение…

    Reply
  12. Ish_2

    Прочитал, почесал в затылке ,полистал свой цитатник — ничего не нашел подходящего. Жаль.

    » у большей половины нет никаких данных в личках уж хотябы ФИО и ДМГ рождения…

    что это…? лень или страх… »

    — Конечно,страх. Глупость явная и глупость инкогнито. Почувствуйте разницу.

    Reply
  13. Шёпот теней

    (12) спасибо ish..!

    вОт!…

    Reply
  14. Ish_2

    Вот и расплата. Такое именованное спасибо придется принять .

    Reply
  15. Шёпот теней

    восхищён и благодарен…

    удачи во всём…

    воооООООооооотОтчистОгОсердца…

    Reply
  16. Gilev.Vyacheslav

    спасибо, очень понравилось

    Reply
  17. svarog

    Очень актуальная тема, особенно для УПП с рабочей производственной частью….

    частенько перепроводится период от недели до месяца для рассчета себестоимости…

    Reply
  18. Mikle_Shaman

    (6) Не совсем понимаю. В западных системах нельзя ничего «перепровести задним числом». Можно только сторнировать и ввести заново. По правилам бухучета сторно вносится в периоде в котором были выявлены расхождения. Соответственно это у них гемора меньше, а не у нас. Я сейчас правда с не с SAP’ом завязан, а с Axapta, но принципы те же.

    Reply
  19. tango

    Китаец, учился здесь, жена русская, торгует по-малу. Рассказывал, что на исторической родине его просто не понимают, когда он пытается им объяснить, зачем ему здесь 1с. Не понимают. Просто.

    Reply
  20. Шёпот теней

    (16) спасибо….

    (17) именно это наверное и имелось ввиду в (6)

    (19) …. tango, и почему его никто не понимает..? зачем китайцу 1С в китае…?

    Reply
  21. tango

    «зачем ему здесь 1с»

    здесь — это на ВДНХ

    зачем, я и сам не знаю, но денег он мне давал

    Reply
  22. tango

    «почему его никто не»

    у китайцев не было Луки Пачиолли.

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

    Reply
  23. Шёпот теней

    (22) и какой же у китайцев, бедных, учёт-то без двойной записи… ошибаются наверное…?

    воОотведьКитайцыВсеНеКакуЛюдей…

    Reply
  24. dav405

    (18)

    «Соответственно это у них гемора меньше, а не у нас.»

    Многие даже не представляют насколько. Хотя продвигать учет реальным временем в окружении «классических», «заднепроводных» контор очень тяжко, но на круг окупается.

    Reply
  25. Шёпот теней

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

    … но реальность такова какова она есть…

    воооооОООоооооотЧтоТакНеХочетсяЭтоКонстатировать….

    Reply
  26. CheBurator

    потому что РАБОТАТАЬ (главбуху, буху, менеджеру, кладовщику) — надо постоянно, а не тогда когда припрет

    Reply
  27. Шёпот теней

    ГлавБух — это уже давно фигура политическая… а политика и дело вещи несовместимые…

    и …. главное — А зачем…? (в смысле работать…)

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

    и.. ещё… фактор АТ, так сказать… раньше сам бухгалтер искал свою ошибку… и ещё на стадии введения документов он был вынужден был быть очень аккуратным… т.е. именно на нём лежала ответственность за ведение БД.. а теперь этим занимается ПК, ПО и программист… пусть они этим и занимаются… разделение труда… воообщем-то где-то так…

    воооОооотЧтоХочетсяКонстатировать…

    Reply
  28. bogdan51

    Добрый день!

    Вот вопрос из сертификационного экзамена про последовательность.

    Мне не понятно,почему этот документ не повлияет на границу последовательности?

    13 Каким образом изменится состав списка последовательности «СебестоимостьПродаж» и ее границы при проведении документа «Приходная накладная 00002 от 13.02.2002 12:00:00»? Измерения в последовательности не используются, таблица последовательности приведена полностью.

    Состав списка последовательности не изменится, а граница последовательности установится на документ «Приходная накладная 00002 от 13.02.2002 12:00:00» 1 ложь

    Документ зарегистрируется в списке последовательности, но не повлияет на границу последовательности 2 ложь

    Ни состав списка последовательности, ни значение границы не изменятся 3 истина

    Документ зарегистрируется и в списке последовательности, и в качестве границы последовательности 4 ложь

    Reply
  29. Шёпот теней

    Венгер или Венгеровщина … ?

    Доколе можно терпеть и не иметь возможность либо избежать общения с некоторыми товарищами …

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

    Предлагаю на ИС организовать «черные список» пользователя … ТоварищЪЧи в него попадающие не смогут остАвлять свои комментарии в ветках пользователей отказавшихся от их мнения …

    У нас же есть списки друзей … Пусть бУдут списки Нежелательных лиц …

    Прошу организовать модераторство «своихВеток» …

    Официально прошу товарищЪЧа ВЕНГЕРА не посещать мои вЕтки и не оставлять свои комментарии …

    Прошу администрАцию, если есть техническая вОзможность оградить меня от общения с ним в моих «ветках» … я в его не «полезу» …

    Также прошу удАлить все его «+» выставленные в моих работах, статьях и комментариях …

    … ВОТ …

    Reply
  30. cruse

    Вот у меня последовательность есть, когда дергаю документы посреди кучи других, вроде граница нормально меняется, а когда делаю документ первым (самым ранним), то граница остается на его прежней дате. Почему-у-у-у? Не понимаю, прочитав статью, продолжаю не понимать почему.

    Reply
  31. Шёпот теней

    ГП стоит на точке отсчета (время):

    слева — документы входящие в последовательность

    справа — документы НЕ входящие в последовательность

    если вы «дёргает» левые документы — изменится ГП если с права то нет (они там уже дернутые) …

    … вот …

    Reply
  32. cruse

    Вообще если говорить о самой последовательности, то можно провести некоторую аналогию с проектированием в 3D. Например, в solidwork’e можно сделать некоторую базовую деталь или поверхность, потом применить к ней некоторые операции (вырезать отверстие, скруглить кромки…). Если потребуется, то можно изменить базовую деталь и все последующие операции пересчитаются. Как бы люди жили без этого представить сложно. Отсюда можно сделать один веселый вывод, бухгалтеры в европе тупо регистрируют события, наши же бухгалтеры «моделируют» свой учет :)) согласно налогам и прочему… А если серьезно, то не совсем понятно зачем последовательности в бухгалтерии (в типовых их по моему и нет), но кто сказал, что 1С можно использовать только для бухгалтерии?

    Reply
  33. cruse

    (31) Это понятный случай. У меня изначально в обоих вариантах последовательность восстановлена полностью (на 30.04). Когда перемещаю документ от 29.04 на один, два документа назад, ГП сдвигается, ок. Возвращаю документ на 29.04 и полностью восстанавливаю последовательность, теперь ставлю документ самым первым (27.04). Документ проводиться, в консоли запросов последовательность документов такая как есть и периоды и регистраторы. Мой документ как и полагается в ней первый, запрос по ГП возвращает регистратором мой документ от 27.04, но период остается на 29.04.

    Reply
  34. Шёпот теней

    (33) … хм … вы же перенесли документ с 27 на 29 … ГП останется 27 … всЁ правильно … теперь надо перепроводить … тогда ГП сдвинется на последний (поздний) документ …

    … вот …

    (32) … нуууу …. ))) столько копий сломано — надо/НЕнадо … ужжж ….

    Reply
  35. cruse

    Не так, ГП остается на 29, хотя документ проводиться 27 числом. У Радченко не нашел инфы как именно вычисляется дата сдвигаемой назад даты. Есть догадка. Когда я ставлю документ первым в последовательности (в моем случае) записи наблюдаемого последовательностью регистра становятся пустыми (ну так надо по задаче). Так вот, последовательность как написано у Радченко определяет дату не из даты документа и даже не из периода набора записей последовательности, а по периоду именно наблюдаемого регистра. Видимо, когда 1С сравнивает старый набор по регистру и новый пустой, то ГП определяется как наименьшая из этих, но не пустая (из нового пустого набора). И получается что это 29, а не 27.

    Reply
  36. cruse

    Из новых конф смотрел УТ на 8.2, там никаких «приседаний» из-за возможно пустого нового набора в регистре расчетов с клиентами нет. Я думаю, по расчетам с клиентами пустой записи не может быть, долг ест долг, может быть только нарушения закрытий по измерениям регистра, поэтому они и не парятся.

    Reply
  37. Шёпот теней

    (35) … хм … может быть … вот …

    Reply
  38. KAPACEB.AA

    Извините, я тут позанудствую 🙂

    Нашел в коде вложенной обработки неувязочку при выводе границ по измерениям —

    строку (62) «новСтр.Значения = строкаТГ.Организация;», по идее, надо бы заменить на «новСтр.Значения = строкаТГ[Строка(кол)];», иначе вывод границ работает только по измерению «Организация»

    Reply
  39. Шёпот теней

    (38) … СпасиБО ЗА занудстВО … вот …

    Reply
  40. Merlin12042009

    Кто знает, в режиме РАУЗ нужно следить за Последовательностью?

    Reply
  41. alexk-is

    (40) Прелесть РАУЗ в том, что не нужно следить за последовательностью для расчета себестоимости.

    Reply
  42. jiggli

    хорошая статья!

    Reply
  43. lady_lace@mail.ru

    спасибо, полезно в работе.

    Reply
  44. MURzzz

    Спасибо, полезная статья

    Reply
  45. nurislam

    Очень актуальная статья

    Reply
  46. Franchiser

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

    Reply
  47. CaSH_2004

    Мда, самая подробная информация которую я пока нашел, но может плохо искал, а все равно мало…нюансов то там на порядок больше.

    А по поводу обработки:

    1. Сделано под 8.1 поэтому под 8.2 после конвертации будет вылетать ошибка связанная с перебором подсистем — изменился способ работы с ними на уровне платформы

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

    3. При заполнении ТР несмотря на вопрос «Таблица будет очищена. Продолжить.? она не очищается 🙂

    4. Вместо документов в ТР выводятся представления — это уже совсем никуда не годится, даже открыть нельзя, в ТГ кстати тоже

    5. Непонятно зачем на закладке «Последовательности» выводить ГП если есть измерения у последовательности для каждого из них, а если нет то выводить на закладке «Таблица границ», тут явно нужно что-то одно

    Дальше уже в качестве развития:

    6. И если уж выводятся Измерения и ГП к ним то почему нельзя ТР получить по этим измерениям? Есть фильтр только по датам

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

    А так ничего обработка если допилить ее…

    Reply
  48. CaSH_2004

    +(48) Честно говоря после изучения обработки подробнее там нашлось еще больше ошибок и неточностей, так что за образец разработки лучше ее не брать. Но идея бесспорно очень хорошая!

    Reply
  49. echo77

    На первом скриншоте — граница последовательности партионного учета(БУ) с измерением организация = ПустаяСсылка. Кто-нибудь может объяснить как такое получилось и как с этим бороться? Вопрос не теоретический — у меня в базе такая же беда

    Reply

Leave a Comment

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