Обработка восстановления последовательности (НЕ МОНОПОЛЬНО, с возможностью задать отбор по Контрагентам и по Фирмам)




Принцип обмена данными из 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. Kuzya_brаtsk

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

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

    Отличается от стандартной обработки «Проведение документов», тем что, можно сделать отбор документов по фирме, по контрагенту или группе контрагентов, и нет необходимости в монопольном доступе, а также можно менять последовательность документов по усмотрению пользователя.

    Эта версия обработки для использования на платформе 8.2 в типовых конфигурациях БП 2.0, а также и для УТ 10.3 и УТП 1.2

    Перейти к публикации

    Reply
  2. gutentag

    Ваша обработка перепроводит(за выбранный период) документы банковской выписки, требование-накладная, документы поступления ? Или это делать не обязательно

    Reply
  3. gutentag

    + поставил за идею

    Reply
  4. Kuzya_brаtsk

    (1) gutentag, Чтоб программа считала правильно, желательно перепроводить все документы которые попадают в последовательность.

    Reply
  5. avcherkasov

    При нажатии кнопки заполнить:

    {Форма.Форма.Форма(70)}: Ошибка при вызове метода контекста (Выполнить)

    Результат = Запрос.Выполнить();

    по причине:

    по причине:

    {(9, 2)}: Таблица не найдена «Последовательность.ОбщаяПоследовательность»

    <<?>>Последовательность.ОбщаяПоследовательность КАК ОбщаяПоследовательность

    Reply
  6. Kuzya_brаtsk

    (4) avcherkasov, Эта обработка предназначена для БП 2.0, вы скорей всего пытаетесь использовать ее для

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

    Reply
  7. avcherkasov

    (5) Kuzyabr, да у меня УТП

    Reply
  8. avcherkasov

    (5) Kuzyabr, http://files.mail.ru/5AH5L6

    Кидаю ссылочку с файлом конфигурации

    Reply
  9. Shmell

    Спасибо! очень полезная обработка

    Reply
  10. klel

    Хорошая штука когда ручками лень переставлять даты документов + автору

    Reply
  11. Kuzya_brаtsk

    Теперь обработка работает и для конфигураций УТ 10.3 и УТП 1.2

    Reply
  12. esoldatov

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

    Reply
  13. kereo

    А как нибудь решена проблема с блокировкой(тормозами) при массовом перепроведении документов?

    Reply
  14. alexk-is

    (12) Вот здесь решена http://infostart.ru/public/18394/

    Reply
  15. arjuna

    Не монопольно, єто прикольно.

    Reply
  16. Kuzya_brаtsk

    (12) kereo,теперь решена, обработка блокирует документ который в данный момент перепроводиться

    Reply
  17. cubic

    Полезная вещь! Спасибо!

    Reply
  18. Tsr1c

    После переноса документов из 1с7 очень пригодилась, спасибо

    Reply
  19. candy_sk

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

    Reply
  20. Sunhare

    Удобно, Спасибо!

    Reply
  21. Ламия

    Конечно же самый огромный плюс,учитывая, что процесс восстановления последовательности весьма длителен, это возможность не выгонять пользователей. Так что огромное спасибо!

    Reply
  22. AB3012

    Удобно, когда отчет есть в программе, скачаю, Конечно же самый огромный плюс,учитывая, что процесс восстановления последовательности весьма длителен, это возможность не выгонять пользователей. Так что огромное спасибо!

    Reply
  23. materiy_boec

    Хорошая обработка, очень помогла спасибо

    Reply
  24. materiy_boec

    Хорошая обработка помогла спасибо

    Reply
  25. Levran123

    на SQL версии — начинаются дикие тормоза у пользователей которые, работают в момент выполнения обработки. Можете что-либо посоветовать?

    Reply
  26. Kuzya_brаtsk

    К сожалению я не тестировал на SQL версии, и ни когда с ней не работал. Скорей всего тормоза происходят из-за блокировок регистров. Если найду какое-то решение. То обязательно напишу вам.

    Reply
  27. romann

    В УПП 1.3 при нажатии на «Заполнить» выдает:

    {Форма.Форма.Форма(103)}: Ошибка при вызове метода контекста (Выполнить)

    Результат = Запрос.Выполнить();

    по причине:

    {(9, 2)}: Таблица не найдена «Последовательность.ОбщаяПоследовательность»

    <<?>>Последовательность.ОбщаяПоследовательность КАК ОбщаяПоследовательность

    Reply
  28. Kuzya_brаtsk

    (26) romann, дело в том, что она адаптирована только для БП и УТ. Киньте мне вашу конфигурацию (точнее ссылку на нее в обменнике). Сейчас у меня со свободным временем не очень, поэтому не могу обещать, что быстро, но постараюсь адаптировать ее и под вашу конфу, как можно быстрей.

    Reply
  29. romann

    (27) конфа — типовая, последний релиз (29.2)

    Reply
  30. Kuzya_brаtsk

    (28) romann, у меня нет этой конфы вообще. Если есть возможность, то скинте мне её.

    Reply
  31. Brawler

    Интерфейс обработки мрак просто, все колонки табличного поля не отрегулированы…

    Reply
  32. amadeus2011

    В принципе полезная обработка, бывает нужна и после снятия флажков в партионном учете-списывать по партиям.

    Reply
  33. Наталья509

    Добрый день! Скачала для УНФ, а кнопка Игнорировать восстановление последовательности неактивна((( а мне надо именно восстановить последовательность. Можете помочь?

    Reply
  34. dyak84

    Как скорость работы зарание спасибо за ответ

    Reply
  35. viktor2008

    Добрый День уважаемый Автор, данная обработка работает в управляемых формах на УТ 11.2? Если нет можно ли её доработать?

    Reply
  36. Kuzya_brаtsk

    (35) viktor2008, Добрый день, она не работает на управляемых формах, но если надо можно сделать. От вас потребуется выгрузка вашей базы или хотя-бы сама конфигурация, лучше выгрузка базы, чтоб я мог протестировать, т.к. у меня нет Баз УТ 11.2

    Reply
  37. tdradiator

    Добрый день при использовании обработки выдает ошибку — используем 1С:Предприятие 8.2 (8.2.19.102) Комплексная автоматизация, редакция 1.1 (1.1.64.2) (http://v8.1c.ru/ka/)

    {Форма.Форма.Форма(103)}: Ошибка при вызове метода контекста (Выполнить)

    Результат = Запрос.Выполнить();

    по причине:

    {(9, 2)}: Таблица не найдена «Последовательность.ОбщаяПоследовательность»

    <<?>>Последовательность.ОбщаяПоследовательность КАК ОбщаяПоследовательность

    Reply
  38. Kuzya_brаtsk

    (37) tdradiator, нужна ваша конфигурация, чтоб я смог разобраться, в чем дело, обработка проверялась только на БП 2.0, УТ 10.3, УТП 1.2 для обычных форм, и отдельно еще обработка для управляемых форм конфигурации БП 3.0. Скинте ссылку на вашу конфигурацию я посмотрю.

    Reply
  39. Agkorepanov

    в УТ 10.3 не попали документы «Платежное поручение». Очень жаль.

    Reply
  40. Kuzya_brаtsk

    (39) Agkorepanov, В типовой конфигурации УТ 10.3 «Платежные поручения» не входят в состав последовательности «ПартионныйУчет», поэтому они и не попадают в восстановление последовательности. В состав входят только те документы у которых есть движения по регистрам накопления — ПартииТоваровНаСкладах и ПартииТоваровПереданные. Вот список этих документов:

    АвансовыйОтчет, ВозвратТоваровОтПокупателя, ВозвратТоваровПоставщику, ЗаказПокупателя, ЗакрытиеЗаказовПокупателей, КомплектацияНоменклатуры, КорректировкаЗаказаПокупателя, ОтчетОРозничныхПродажах, ОтчетКомиссионераОПродажах, ПеремещениеТоваров, ПереоценкаТоваровПринятыхНаКомиссию, РасходныйОрдерНаТовары, РеализацияТоваровУслуг, СписаниеТоваров, ТребованиеНакладная, КорректировкаСерийИХарактеристикТоваров, КорректировкаКачестваТоваров, ПоступлениеТоваровУслуг, РезервированиеТоваров, ВозвратТоваровПоставщикуИзНТТ, ПоступлениеТоваровУслугВНТТ, ПриходныйОрдерНаТовары, КорректировкаСтоимостиСписанияТоваров.

    Reply
  41. Kuzya_brаtsk

    (39) Agkorepanov, И все таки если очень надо, можно добавить в конфигурацию свою последовательность и включить в ее состав те документы которые вам нужны, ну и конечно нужно будет немного доработать саму обработку «Восстановления последовательности».

    Reply
  42. dm68

    Добрый день!

    При выборе заполнить выскакивает ошибка:

    {ВнешняяОбработка.ВосстановлениеПоследовательности.Форма.Форма.Форма(103)}: Ошибка при вызове метода контекста (Выполнить)

    Результат = Запрос.Выполнить();

    по причине:

    {(9, 2)}: Таблица не найдена «Последовательность.ОбщаяПоследовательность»

    <<?>>Последовательность.ОбщаяПоследовательность КАК ОбщаяПоследовательность

    Конфигурация УПП вер.1.3

    Возможно ли сделать под эту конфигурацию? Очень нужно.

    Reply
  43. Kuzya_brаtsk

    (43)Добрый. Нужна ваша конфигурация, чтоб посмотреть.

    Reply
  44. zoomzd1234

    (0)

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

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

    Отличается от стандартной обработки «Проведение документов», тем что, можно сделать отбор документов по фирме, по контрагенту или группе контрагентов, и нет необходимости в монопольном доступе, а также можно менять последовательность документов по усмотрению пользователя.

    Обработка хорошая , жаль что на 8.3 и в БП 2.5 работать не будет

    Reply
  45. PtizaPtiza

    Спасибо за обработку, пользуемся)))

    Reply
  46. Kuzya_brаtsk

    (0

    Reply
  47. stv2011

    Документ «корректировка долга» попадает в отбор?

    Reply
  48. Kuzya_brаtsk

    (48) смотря какая у вас, конфигурация, если это документ включен в «общую последовательность» , тогда да. Например для типовой «Бухгалтерии предприятия 2.0» попадает.

    Reply

Leave a Comment

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