Изменение границы последовательности




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

33 Comments

  1. vener2004

    Без заполнения измерения «ПроведенВХронологическойПоследовательности», ваша обработка бесполезна 🙁

    Reply
  2. Chif13

    Ну мне она пригодилась по любому, чесно говоря… я просто меняла границы при уже имеющихся… но явно Вы правы, постараюсь исправить, чтоб имерения тоже можно менять…

    Reply
  3. Chif13

    Изменила обработку для 82. Появилась возможность менять измерения в выбранных строчках последовательности

    Reply
  4. xxx6662000

    Подскажите, а как скачать обработку — что то не получается.

    Reply
  5. Chif13

    (4) isn2, Кликаешь на посмотреть и скачать все файлы или на большую синию папку с зеленой стрелкой… Должно получится.

    Reply
  6. rokhin

    Спасибо за обработку.

    Хочу заметить, что Ваша обработка будет работать не только со стандартными конфигурациями, если сделать непринципиальную корректировку

    //РД = ОбщегоНазначения.ПолучитьРабочуюДату();

    РД = ТекущаяДата();

    Спасибо!

    Reply
  7. Chif13

    (6) Исправлю 🙂

    Reply
  8. galinka1c8

    Немного не поняла, для каких случаев границу надо изменить, а документы не трогать. Как гарантировать, что все станет, как надо?

    Reply
  9. Chif13

    (8) ну например, поправить комментарий в документе, который влияет на границу. Да, бывает и такое… А еще когда ты приходишь в контору, а про границу последовательности никто не слышал и этим никто никогда не увлекался. Вот тогда правишь регистры на определенную дату, делаешь границу с нее и вперед уже правильно вести учет. И такое бывает… И опять таки — это крайние случаи, редкие. Так, конечно, желательно следить за ней 🙂

    Reply
  10. aianitro

    Спасибо! Очень помогла

    Reply
  11. mtv:)

    (0) Срочно понадобилась обработка для изменения границ последовательностей в УПП. Писать самому — просто не было времени. Перебрал на Инфостарте штук шесть обработок.

    Из всех опробованных — только эта обработка работает корректно с границами последовательностей!

    Спасибо за обработку. Качественная работа.

    Reply
  12. acuta

    Скачал обработку. Хотел использовать под УТ11.1

    Не смог воспользоваться 🙁

    Как отметить все товары (у меня в табличной части их тысячи)? Зачем они там? Как вообще менять границу последовательности?

    Прошу помощи автора. Заранее спасибо.

    Reply
  13. Chif13

    (12) acuta, наверное прежде чем что-то использовать такое, как изменение границ, удаление объектов, нужно знать немного теории, дабы не навредить еще больше.

    Объясняю: граница последовательности может иметь свои разрезы, например, по организациям. И тогда Вы увидите в границе вместо одной строки несколько по организациям, то есть для каждой организации будет определена своя дата этой границы последовательности. Это хорошо тем, что восстанавливая сбитую границу по документами проводятся не все документы, а только те, которые относятся к данной организации. Разрезы могут быть различны, их может быть несколько. Например, по последовательности взаимозачетов могут быть разрезы по организации и контрагентам. Соответственно, изменяя границу, вы не можете написать что общая граница будет на эту дату. По какому разрезу, как вообще потом считать в различных разрезах данных?

    Обработка тестилась в свое время на УПП. Там с разрезами было легче. У Вас судя по всему разрез идет по номенклатуре. Можно конечно допилить на автоматическое замещение даты границы во всех строках на указанную, но тогда надо подумать какой регистратор присваивать границам… да и замещение во всех строках даты скорей всего будет не верным.

    А теперь простой вопрос: а зачем Вы решили переместить границу? Тем более как выяснилось Вы не совсем понимаете что это такое.

    Reply
  14. acuta

    (13) в описании обработки сказано «Конфигурации: Все на 1С8». Думаю логичнее было бы указать УПП.

    С интересующей меня границей нужно было работать в разрезе номенклатуры и характеристик. Поэтому вопрос у меня и возник: как выделить все записи и поставить для них одну дату? Или почему нет возможности выбора сразу всех записей? Логика была непонятна.

    Reply
  15. Chif13

    (14) acuta, не логично указывать что только для УПП, тк она отработает на на других конфигурациях. Выделив любой Ваш разрез и обработка перенесет этот разрез на нужную дату. А вот групповая обработка разрезов — да, не поставила выбор сразу всех записей. Можно поставить конечно. Но вопрос на какой регистратор передвигать при групповом установлении остается открытым.

    Reply
  16. rokhin

    Забавно. Опять понадобилось двинуть границу. Ищу инструмент на Инфостарт. Открываю, эту обработку, вижу свой комментарий.

    Это не оффтоп. Это опять Спасибо!

    Reply
  17. vladir

    Из нескольких обработок отлично подошла только Ваша. Спасибо. 🙂

    Reply
  18. kaa79

    Спасибо! На мой взгляд самая грамотная и удобная обработка корректировки последовательностей на сайте.

    Reply
  19. alex_davydov

    Подскажите, предполагается написание аналогичной обработки только на управляемых формах?

    Reply
  20. Chif13

    (19) alex_davydov, навели на мысль, что пора сделать усилие и переписать.

    Reply
  21. sashocq

    Не работает для 8.3 на последней БП 3.0:

    Недопустимое значение параметра (Параметр номер ‘2’)

    Пытался сдвинуть последовательность Документы организаций

    Reply
  22. Chif13

    (21) А на какой платформе. Только вчера двигала последовательность «Документы организаций» Бухгалтерии 3.0, но у меня платформа пока 8.3.8.2054.

    Ошибок не было, все прошло норм. Напиши мне подробней где чего выбрал и как. Можно в личку.

    Reply
  23. sashocq

    Нужно было срочно, поэтому наваял по-быстрому свою обработку. При чём сразу же наткнулся на ту же ошибку. Разбор показал, что в той последовательности 2 измерения и вторым параметром ОБЯЗАТЕЛЬНО нужно указать структуру-отбор по этим 2-м измерениям. А в обработке она дала на редактирование только 1-е измерение (организация), а 2-е было недоступно для редактирования в таблице.

    Но когда моя обработка всё-таки заработала выяснилось, что в БП 3 вообще по-другому организована работа с последовательностью. Там граница вообще не смотрится, только движения. Так что пришлось совсем другой код писать, чтобы при закрытии месяца он не просил перепровести все документы с 2007 года.

    О, собственно, об этом комментарий (1)

    Reply
  24. Chif13

    (23) Ну да, по идее таблица последовательности у тебя пустая должна выходить. Я поэтому и не поняла где у тебя ошибка выходит. Для движений есть вкладка моей обработки «Набор последовательности» где и двигаются движения. Там достаточно на нужном документе поставить «Проведен в последовательности». У меня при этом ошибок не возникало )))))

    Кстати странно что у тебя вышла таблица последовательности, у меня во всех базах она пустая для Бухгалтерии 3.0. А насчет параметра все равно гляну, надо подправить.

    Reply
  25. sashocq

    Не, она у меня была пустая. Я просто подумал: «Что за фигня?» и добавил строку 🙂

    Reply
  26. sashocq

    В общем, может, просто не разобрался в функционале

    Reply
  27. maxis33

    Отлична обработка, то что искал для БП 3.0, начал уже свое писать — но это полностью подошла (чтобы пометить «сбитый с последовательности» документ на нормальный)!

    Reply
  28. MacLEOD

    Очень часто пользуюсь этой обработкой в БП 3.0 когда звонят бухгалтеры и говорят «Ой, мы закрываем ноябрь, а просит перепровести документы с 1 октября!».

    Интуитивно понятный интерфейс, все замечательно.

    Жирный плюс разработчику!

    Reply
  29. Wolfis

    Обработка классс

    Reply
  30. Mantis

    Бухгалтерия предприятия, редакция 3.0 (3.0.59.54) (http://v8.1c.ru/buhv8/)

    Copyright (С) ООО «1C-Софт», 2009 — 2018. Все права защищены

    (http://www.1c.ru)

    Не работает зря скачал.

    Reply
  31. Chif13

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

    Почитай переписку выше

    Reply
  32. ait74

    Проверил на УПП 1.3.106.2 (1С 8.3.11.3034). Передвинул границу по реализации. СПАСИБО!!!

    Reply
  33. tricolor

    В бухгалтерии 3.0 все сработало, знаю про то что можно типовым методом, но обработкой красивее)) Спасибо!

    Reply

Leave a Comment

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