Что такое ТА — точка актуальности итогов




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

30 Comments

  1. support

    +5

    Reply
  2. Donat

    Начинающим будет очень полезно!!!

    +5

    Reply
  3. logarifm

    +1

    Reply
  4. Abadonna

    >в качестве точки актуальности итогов берется дата и время самого «старшего» документа

    Уж скорее самого «младшего» — чем позже родился, тем «моложе»

    Reply
  5. viacht

    +5

    Reply
  6. hogik

    Очень хорошая статья однозначно ставлю “плюс”. Однако самому понятию ТА ставлю “минус”. Мне не встречалось ни одной статьи про это понятие, где бы автор задался вопросом – а зачем она (точка актуальности) вообще нужна? Зачем нужен “временный расчет”? Какое отношение к реальной жизни (документообороту) имеет понятие “ось времени” и “последовательность документов”? А что происходит с остатками, когда документ проводится задним числом? А почему при проведении документ используются остатки на дату документа, а не остатки “на реальных полках”? Почему необходимо “открывать период” и “переносить итоги” да еще и в монопольном режиме? Почему пользователи “1С:Предприятие (Оперативный учёт)” постоянно “мучаются” с остатками, перепроводят документы, восстанавливают последовательности и задаются вопросом – как свернуть базу данных, чтобы всё это делалось в приемлемые сроки? Т.е. вопросов возникает масса. И у меня на это ответ один – точка актуальности (и всё что к ней “примыкает”) не имеет ничего общего с реальной жизнью (оперативным учетом) и является неизбежностью, возникшей в результате не продуманной схемы базы данных в части регистров. И странного желания разработчиков 1Са размещать документы на “оси времени”. Но другие решения существуют…

    Reply
  7. int3

    (6) pit?

    Reply
  8. hogik

    (7) (int3)

    Я не понял – что это означает?

    Reply
  9. int3

    (8) т.е. не pit?

    ну тогда поведай про «другие решения существуют»

    а то pit с Т1С стойко скрывает свои методы борьбы с последовательностями 🙂

    Reply
  10. poppy

    (6,9)

    Имхо здесь произошла подмена понятий. ТА и ГП — это разные сущности, имеющие разные цели и задачи.

    Reply
  11. hogik

    Т.е., я так понял, что pit это некий человек…

    У меня нет методов борьбы с последовательностями. У меня в системе их, просто, вообще не существует. Да и точки актуальности, тоже нет. Для реализации такого отсутствия этих понятий надо не использовать регистры. Мы написали свой инструмент ведения остатков без регистров (в понимании 1Са). Если говорить очень кратко, то суть в следующем. Остатки это одно число, привязанное к измерениям. У него нет не дата ни времени. Это то, что лежит на полках. Все действия с остатками (например, проведение документом) изменяют значение этого числа. Мы исходили из того, что остатки на дату, всегда можно получить в отчетах путем просмотра движения с конца. Для некоторого ускорения этого процесса сделано две вещи. Первое. Измерения хранятся в отдельном файле с присвоенным, каждому, уникального ID. Именно этот ID характеризует измерения в файлах итогов и движений. Т.е. ключ (измерения) не хранится в записях. Что уменьшает объем базы и, при длинном ключе ускоряет работу. Второе. Для некоторых алгоритмов просмотра движения с конца предусмотрены итоги за интервал – день, месяц, квартал, год. В итогах хранится не входящий/исходящий остаток, а сумма (с учетом знака) всех движений за интервал. Таким образом, проведение документа задним числом не требует изменения всех последующих входящих/исходящих остатков традиционного способа хранения информации в регистрах. А просмотр с конца может выполняться быстрей, если дата окончания отчета не является текущей.

    Это, если говорить кратко. На самом деле всё немного посложней…

    Но, повторюсь, самое важно это, то что “нет такого понятия” (в апострофах) как “итоги на…”. Есть остатки (итоги) на реальных полках. И если на наши задачи посмотреть с этой позиции, то всё становится проще и в программировании и в эксплуатации. Я допускаю, что существуют задачи, где надо смотреть на итоги, как это сделано в 1С. Но в торговле это, на наш взгляд, это не требуется. И это решение, у нас, успешно функционирует с 2000 года. База большая, пользователей много, номенклатура огромная… Система не останавливается (для пользователей) никогда. Естественно, за исключением процесса заливки конфигурации и потери напряжения в сети… Остатки сходятся. А если не сходятся, то исключительно, по “объективным” причинам. Например, украли…

    А что и где говорит (пишет) товарищ по имени pit?

    Reply
  12. hogik

    (10) (poppy)

    Извините меня, пожалуйста. Тупой я стал с годами. Но я не понял Вашей фразы. Если у Вас есть свободное время, проясните, пожалуйста, это для меня… Кто и чего подменяет в понятиях?

    Reply
  13. poppy

    (12) Попробую пояснить.

    в (6) ты задаешь риторические вопросы, которые касаются способа хранения данных (итогов) платформой от 1С:

    > а зачем она (точка актуальности) вообще нужна?

    > Зачем нужен “временный расчет”?

    Потом ты переходишь к другому механизму — ГП (вот здесь и произошла подмена понятий), который не имеет отношения к способу хранения данных (итогов):

    > Какое отношение к реальной жизни (документообороту) имеет понятие “ось времени”

    > и “последовательность документов”?

    > Почему пользователи “1С:Предприятие (Оперативный учёт)” постоянно “мучаются” с

    > остатками, перепроводят документы, восстанавливают последовательности

    Далее делаешь вывод, то ТА = плохая,потому что пользователи квазимучаются с ГП.

    В своих постах (6 и 11) ты пишешь об остатках товара. Из контекста однозначно понятно, что речь идет именно о количественных остатках (поправь меня, если ты имеешь в виду что-то другое).

    В (11) ты пишешь, что «У меня нет методов борьбы с последовательностями. У меня в системе их, просто, вообще не существует.».

    Для задачи, решение которой ты описал в (11) последовательность документов и ГП просто не нужны. Они решают другую задачу, решение которой у тебя не описано. Поэтому твой вывод, что ТА = плохая, потому-что ГП мне не нужна, более чем страннен.

    Эта дискуссия мне напомнила рекламу любого растительного масла: «Наше растительное масло самое лучшее, потому-что в нем нет холестирина». Странно, не правда ли? Ведь, масло с холестирином = нерастительное масло.

    Reply
  14. int3

    (10) Это так, но hogik же косвенно обещал, что и от ГП можно будет избавиться. Вот, решил уточнить 🙂

    (11) Ну, нормализация БД и вертикальная декомпозиция не новость, но от термина «граница последовательности» (да и точка актуальности тоже) только она не избавит. Просто в данном варианте ТА всегда установлена на последнем движении.

    Насчет же отсутствия проблем с остатками и работой «задним числом» — разберем простейшую ситуацию:

    1) введен приходный документ — 5 пар кирзовых сапог

    2) зарезервировали 4 пары для клиента

    3) обнаружили пересорт — 3 пары сапог и 2 пары тапочек, исправили задним числом приходник

    4) вопрос — достоверен ли резерв? в каком состоянии будут остатки после продажи?

    как отрабатывается данная ситуация?

    а если еще и про себестоимость с прибылью вспомнить…

    PS: я не то что бы с целью «прикопаться» спрашиваю, мне интересен корректный механизм, позволяющий обойтись без сущности «последовательность»

    если только раздробить общую последовательность, на их множество, привязанное к партиям товаров :-/

    Reply
  15. hogik

    Думаю, мы сейчас запутаемся, если я начну отвечать на ответы ответов по пунктам. Попробую вернуться к первоначальным моим утверждениям. Да – статья о ТА. И я не пытаюсь подменить понятия, а перечисляю (в риторических вопросах) те понятия (сущности), которые, на мой взгляд, не имеют ничего общего с реальной жизнью. Такие как, например – ГП. Ни каких выводов, типа, что “ТА = плохая,потому что пользователи квазимучаются с ГП” я не делаю. Я специально написал: “и всё что к ней “примыкает””. Да и еще в апострофах. Смешивание понятий – есть. А подмена, то где? А смешаны они у меня по тому, что это понятия, на которых базируется подсистема “Оперативный учет”. И я высказал своё отношение к “придумкам” разработчиков 1С в этой части. Отношение моё к ним резко отрицательное. Начиная с понятия – ТА (темы статьи). И проблемы при эксплуатации системы они создают далеко не “квази”.

    Огромное, Вам спасибо за подробный разбор моего “смешивания” понятий.

    Reply
  16. hogik

    (14) (int3)

    >> 3) обнаружили пересорт — 3 пары сапог и 2 пары тапочек, исправили задним числом приходник

    Для меня это странный пример. При нашем способе хранения итогов, если на остатках только “5 пар кирзовых сапог” и заменяется именно это на “3 пары сапог и 2 пары тапочек”, то данная процедура не выполнится с собщением о нехватке товара на складе. Т.е. надо вернуть на склад резерв “4 пары для клиента”. А уже потом исправить пересортицу.

    >>“а если еще и про себестоимость с прибылью вспомнить…”

    Мне вообще не “понятно” – как это связано с примером про пересортицу. Обращаю Ваше внимание на апострофы в предыдущей фразе. Если не использовать “придумки” от 1Са то такой проблемы (задачи, вопроса и т.д.) вообще не существует. Возможно, в 1Се в момент перемещения количеств тащится себестоимость. Если это так то это — бред.

    >>я не то что бы с целью «прикопаться» спрашиваю

    Я это понимаю и так не думаю.

    >>мне интересен корректный механизм, позволяющий обойтись без сущности «последовательность»

    Вот тут и возникает “моё смешивание понятий” (из разговора с poppy). Могу только ответить вопросом на вопрос. А при чем тут последовательность? Нет в этом примере никакой потребности в последовательности. Есть “остатки на полке”. И если совершается операция, нарушающая это понятие, система не даёт это сделать.

    Reply
  17. poppy

    (16)

    > Вот тут и возникает “моё смешивание понятий” (из разговора с poppy). Могу

    > только ответить вопросом на вопрос. А при чем тут последовательность?

    > Нет в этом примере никакой потребности в последовательности. Есть “остатки

    > на полке”. И если совершается операция, нарушающая это понятие, система

    > не даёт это сделать.

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

    В твоей системе можно носить изменения (документы — в терминах 1С) только в реальном времени. Это очень «щедящий» режим, в котором не нужно «мучаться с остатками», «перепроводить документы», «восстанаваливать последовательность» и т.д. (6).

    1С умеет работать с документами т.н. «задним числом». Те механизмы, которые ты так ненавидишь, облегчают жизнь пользователю, работающему задним числом. В то же время, они усложняют жизнь таким как ты.

    > Мне вообще не “понятно” – как это связано с примером про пересортицу.

    > Обращаю Ваше внимание на апострофы в предыдущей фразе. Если не

    > использовать “придумки” от 1Са то такой проблемы (задачи, вопроса и т.д.)

    > вообще не существует.

    Мне опять видится подмена тезиса…

    Проблемы возникают не от придумок 1Са, а от работы задним числом. А придумки от 1Са хоть как то пытаются нивелировать последствия такой работы.

    > Возможно, в 1Се в момент перемещения количеств тащится себестоимость.

    > Если это так то это — бред.

    Бред — не бред, но миллионы пользователей работают и не жужат. 😉

    Reply
  18. hogik

    (17) (poppy)

    >>В твоей системе можно носить изменения (документы — в терминах 1С) только в реальном времени.

    А в каком еще времени можно вносить документы? Только в реальном. А вот дата документа в моей системе может быть любая. Т.е. и задним числом и передним. А остатки будут верными и “последовательность” не нарушится.

    >>Это очень «щедящий» режим, в котором не нужно «мучаться с остатками», «перепроводить документы», «восстанаваливать последовательность» и т.д.

    Т.е. нужно мучится? О, теперь мне понятно, зачем выдуманы эти “сущности”. Для мучения!

    >>Те механизмы, которые ты так ненавидишь, облегчают жизнь пользователю

    Отрицательное отношение это еще не ненависть. Не стоит так усугублять мои проблемы.

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

    Я так и не понял – чем они облегчают жизнь пользователю? Это когда выполняются монопольные работы в системе можно пользователю ничего не делать? И про усложнение жизни “таким как ты” я тоже не понял. А какой я? Вы меня знаете? Видели мои работы? А нас много – таких как я?

    >>Проблемы возникают не от придумок 1Са, а от работы задним числом. А придумки от 1Са хоть как то пытаются нивелировать последствия такой работы.

    Т.е. задним числом с их “придумками” работать нельзя или можно? Или можно, но потом надо мучаться? А “придумки” позволяют потом “нивелировать последствия такой работы”. А в реальной жизни работа с документами задним числом существует? Думаю – да. Тогда система должна не считать это особым режимом с “последствия(ми) такой работы ”.

    >>Бред — не бред, но миллионы пользователей работают и не жужат. 😉

    Я бредом назвал: “в момент перемещения количеств тащится себестоимость”. А не весь “Оперативный учет”. Не надо меня провоцировать, а то назову… Наркотики тоже миллионы людей употребляют. Только это не оправдывает их пристрастия количеством “друзей по несчастью”. А пользователи 1Са “жужат”, надо только прислушаться…

    Это ответы по пунктам. А по существу темы – у меня сложилось такое впечатление, что, то ли я чего не так излагаю, толи Вы чего не так читаете. Я, например, не понимаю, как после моих текстов можно сделать вывод о том, что мы упростили себе жизнь. Переписать полностью конфигурацию и дать возможность работать с системой пятидесяти пользователям одновременно в любое время суток с базой данных, которая не сворачивалась семь лет. Это на обычных DBFах. И всё хозяйство обслуживается одним человеком (включая железо и системные вопросы). И потеря документа даже на 280 рублей для нас ЧП – ищем и находим. Странно мне это всё от Вас слышать (читать).

    Reply
  19. poppy

    (18)

    > >>Бред — не бред, но миллионы пользователей работают и не жужат. 😉

    > Я бредом назвал: “в момент перемещения количеств тащится себестоимость”.

    > А не весь “Оперативный учет”. Не надо меня провоцировать,

    Я именно это и имела в виду. Но…

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

    Так хотелось пообщаться с умным человеком, но не получилось. Жаль…

    Reply
  20. Abadonna

    Помирить? 😉 Используйте забалансовые счета, как я, и предмет дискуссии умрет

    Reply
  21. JohnyDeath

    (20) Аркадий, ты что???!!! Ты это серьёзно?

    У меня наоборот появляются периодически мысли о переводе всей бухии на регистры, а ты оперативный учет на БИ использовать хочешь!

    Reply
  22. hogik

    (19)(poppy)

    Я к этим “сущностям” не имею никаких отношений с 2000 года. После того как мы переписали полностью конфигурацию для торговли и склада. И прекрасно обошлись без “сущностей” (в понимании разработчиков 1Са) оперативного учета. Т.е. мы не пытались выправить их решения путем написания отдельных модулей, а переделали все. У нас не используются даже их регистры. Думаю, это уже совсем другая система. И обсуждать отдельные “сущности” в контексте нашей разработки уже не имеет никакого смысла. Т.е., например, вопрос от int3 про “последовательности” не может иметь ответа “мы это сделали так то” — у нас нет этой “сущности”. И не потому, что мы её просто “откусили”, а потому, что причин для её использования не возникает.

    Теперь про Ваше утверждение: “судя по твоей реакции и ошибках в предудущих утвержденеиях ты не владеещь”. Молодой человек, мой Вам совет – не переходите в обсуждениях явлений на обсуждение людей обсуждающих это явление. Тогда и реакция от людей будет нормальная.

    (20)(Abadonna)

    “Помирить?”

    Спасибо. Но уже не получится.

    Reply
  23. Abadonna

    (22) >Молодой человек

    Если ник «бесполый» советую не использовать впрямую выражения «молодой человек» и «мадам».

    В данном случае — вариант номер 2 :))))))))))))))))

    (21) Жека, ты меня уже почти убедил попробовать Опенконф — менталитет не тот 😉

    Я не хочу использовать — а использую, и никакой не оперативный, для меня нет такого понятия, обычный партионный. И видал я кое-где все точки актуальности, ГП и прочую хрень. Тем более у моих нынешних юзеров от появления окна «ТА будет перенесена…» ваще башню снесет, а она и так Пизанскую напоминает

    Reply
  24. hogik

    (19)(poppy) – продолжение:

    Выдержка из “Важные отличия от версии 7.7 с точки зрения разработчика”. Это про версию 8.х.

    7.7 — Используется понятие Точка актуальности регистров.

    8.х — Регистры «актуальны» на момент времени последнего документа, выполнившего движения по ним.

    7.7 — Требуется выполнение регламентных процедур в монопольном режиме для открытия следующего периода сохранения остатков.

    8.х — Выполнение регламентных процедур не требуется.

    А про последовательности сказано: “…система автоматически определит, что последовательность документов нарушена и сможет перепровести все последующие документы…”. Т.е. даже “если документ списывает товары или материалы по средней себестоимости”, то, надеюсь, перепроведение документов будет производиться автоматически и в не монопольном режиме.

    Т.е. на часть моих риторических вопросов заданных в (6) даже 1С ответила – “Да”. И кроме нашей самодеятельности есть еще системы других разработчиков где, перечисленных, мной “явлений” не существует.

    Reply
  25. hogik

    (23)(Abadonna) и (poppy)

    “Если ник «бесполый» советую…”

    Спасибо. Это я не внимательно прочел ответ в части родов. Да, действительно, есть фраза “Я именно это и имела в виду”. Но сути моего намека это не меняет.

    Перед poppy извиняюсь и тему (со своей стороны) закрываю.

    Reply
  26. JohnyDeath

    (23) Я просто считаю, что БИ в 7-ке это что-то нечто тормозное и неудобное. И не зря 1С отошла эт этих понятий для 8-ки. (Ну это я так… своё ИМХО высказал)

    Reply
  27. Abadonna

    (26)>нечто тормозное

    Мой вчерашний диалог с Кушниром:

    — Ты че на работе в воскресенье?

    — Период открываю

    В гробу я видал такие НЕ тормоза

    Reply
  28. JohnyDeath

    (27) раз открыл и всё. В процессе работы — летаем.

    Reply
  29. zaursoft

    Спасибо. Давно хотел понять, что-же это за загадочная точка актуальности 🙂

    Reply
  30. kihot

    Для тех, кто не умеет изменять ТА в разделенном режиме написал утилиту. Посмотреть можно здесь: http://kai-soft.sytes.net/item/setTA.php

    Reply

Leave a Comment

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