Проведение документов, восстановление последовательностей, установка дат последовательностей, установка дат расчета итогов и пересчет итогов (1.7.3.1) (НЕ МОНОПОЛЬНО)




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

99 Comments

  1. Fuego

    Юзабилити никакое… Что значит «Установить реализацию» над списком документов? Зачем номера строк в списке документов? Что значит «Повторное проведение документов»? А если у меня не типовая конфигурация, зачем мне вылет с ошибкой по поводу «поле организация не найдено»? А зачем завершать сеанс после проведения или восстановления? Неужели всё заведомо в порядке, и в окне служебных сообщений не будет никаких сообщений?..

    Reply
  2. Fuego

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

    Reply
  3. ValentinV

    А на фига это надо.

    Вроде 8.1 все это делает в фоновом…

    Если ошибаюсь, будте добры поправьте

    Reply
  4. Fuego

    (3), что 8.1 делает в фоновом? Проводит документы и/или восстанавливает последовательности? 8.1 — это платформа (а вернее — версия платформы). Платформа фоном ничего не делает.

    Reply
  5. ValentinV

    (1.4.Fuego ) К сожалению у меня сейчас мало времени, конец года.

    Я попозже этот вопрос изучу.

    А Вам (Fuego) хочу заметить, что Вы не объективны и пристрастны.

    Зами задаете вопрос и сами на него даете не однозначный и пристрастный ответ.

    Нет ссылки на конкретику.

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

    Отсюда, очевидна грубая логическая ошибка

    и О-Ч-Е-Н-Ь странный логический вывод

    с еще более странным обобщением.

    А мой вопрос был обращен к разработчику.

    Reply
  6. alexk-is

    (3) (5) В конфигурациях 1С есть обработка «Проведение по партиям», которая может работать в фоновом режиме. Но по работе этой обработки в конференциях проходит много нареканий. Кроме этого проведение проходит только по документам связанным с учетом ТМЦ, но в УПП есть и другие последовательности. А в случае, когда в учетной полите определено, что определение аванса происходит при проведении документа, для учета НДС проведения по партиям уже не достаточно.

    (2) > В многопользовательском режиме проводить документы — это просто извращение.

    Развивая тему, можно продолжить, что пакетная обработка документов — это еще большее извращение, т.к. неизвестно, что бесконтрольно делает программа и какие решения она принимает. И вообще программы и компьютеры от лукавого 🙂

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

    Конечно, такая обработка не всем нужна. И не всем кому она нужна она подойдет. Нам она подходит и мы пользуемся ей 3 года.

    Reply
  7. Fuego

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

    Reply
  8. alexk-is

    Постарался учесть все «замечания»…

    Reply
  9. Zixi

    Использую обработку в Бухгалтерии. При восстановлении границы последовательности — всегда пишет ошибку «Восстановление последовательности завершено с ошибками.».Хотя последовательность вроде восстанавливается! Что за странный цикл «Для Номер = 1 По 10 Цикл» ? а потом: «Если Номер > 10 Тогда

    Сообщить(«Восстановление последовательности завершено с ошибками.», СтатусСообщения.Важное);» …в этом случае Номер всегда будет больше 10 , т.е. равен 11 ! …так и должно быть? …как исправить?

    Reply
  10. alexk-is

    (9) Исправил…

    Reply
  11. aryan_spirit

    очень удобная штука, благодарю!

    а можно как-нить запускать ее автоматически по шедулеру в определенное время?

    Reply
  12. aryan_spirit

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

    Reply
  13. alexk-is

    (11) Можно, но для этого должна быть соответствующим образом переработана конфигурация. Т.е. при запуске программы должен обрабатываться параметр запускающий в свою очередь обработку. Обработка может быть включена в состав конфигурации. Ведение протокола можно организовать при помощи прилагающегося ярлыка.

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

    Reply
  14. anderson

    Есть предложение восстанавливать последовательности с шагом не 1 день, а произвольным, например час. У нас документов за день бьется много и терять день в случае прерывания восстановления последовательности не хотелось бы

    Reply
  15. RomAnd

    Обработка проводит непроведённые документы — это минус.

    Reply
  16. alexk-is

    (16) Какая версия? Еще раз проверил, в 1.3.1.3 к проведению включаются только проведенные документы.

    Reply
  17. RomAnd

    Версии не видно, но скачивал 07.04.09, 1.3.1.3 не запускал.

    Reply
  18. RomAnd

    У v1.3.1.3 есть «подводные камни», какие ?

    Reply
  19. alexk-is

    (19) Наверное есть, но я о них не знаю. 🙂

    Найдете, пишите, исправлю…

    Reply
  20. veber

    торговля 10.3.1.17.

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

    {ВнешняяОбработка.ПроведениеДокументов(191)}: Значение не является значением объектного типа (Имя)

    Если Соединение.Пользователь.Имя <> «Регламент» Тогда

    это после нажатия кнопки «выполнить».

    если никого нет или кто-то есть но ничего не делает, то запускается нормально.

    Reply
  21. alexk-is

    (21) Да, действительно. Подобная ошибка возникала в случае, если при восстановлении последовательности кто-то из пользователей начал подключаться к базе данных, но еще не закончил процедуру регистрации. Т.е. висит диалог с выбором имени пользователя и пароля.

    Ошибка исправлена в версии 1.3.1.5

    Reply
  22. veber

    т.к. Ваша обработка предназначена для работы в НЕ монопольном режиме, быть может, стоит внедрить механизм ожидания при ошибке блокировки? на данный момент если таблица заблокирована, обработка просто завершается с ошибкой в сообщениях. Как вариант, если произошла ошибка блокировки, подождать 5 секунд, потом 6 и т.д. а в настройках где-нибудь указать максимальное время ожидания. Ну или жестко прописать минуту или пять минут, например.

    Reply
  23. alexk-is

    (23) Добавил в версии 1.4.1.1.

    Reply
  24. Abadonna

    (0) 1. Привычнее бы звучало «Перепроведение», а не «Повторное проведение»

    2. Если бы еще условия на отбор (в случае выбора одного вида документа) по любому реквизиту шапки — было бы здорово

    Reply
  25. alexk-is

    (25) «Повторное проведение» — это 10 попыток повторного проведения в случае ошибки при проведении проведенных документов. 😉 Ошибка при проведении может быть любая: блокировка или отсутвие остатков. Подробнее описано тут http://www.infostart.ru/public/18394/blog/post/918/

    Над отборами я подумаю…

    Reply
  26. Alav

    А можно добавить отбор по измерению последовательности?

    Reply
  27. alexk-is

    (14) Переделал на почасовое восстановление последовательности.

    Добавил индикатор прогресса.

    Reply
  28. alexk-is

    В версии 1.5.0.2 исправил ошибку, которая возникала, если прервать восстановление последовательности по Ctrl+Break и после этого снова запустить восстановление последовательности. Ошибка была связана с тем, что после прерывания восстановления последовательности не обновлялись данные о текущем состоянии последовательностей. Ошибку можно было обойти обновив данные о последовательностях по кнопке.

    Reply
  29. alexk-is

    (19) Нашелся ещё один камешек 🙂

    Reply
  30. buy_sale

    Плюс поставил . Но пришлось переписать блок восстановления посл-ти — взял из обработки Проведение по партиям , блок Проведение документов — убрал число попыток в 1.

    — добавил возможность автозапуска в файловом варианте с подхватом сохраненых настроек

    — если нужно настройки поменять, то прога теперь задает вопрос «Запустить в ручном режиме ?»

    Использую для автовосстановления последовательности на сервере ночью из назначенного задания Виндовс. Кстати скорость раза в 3 быстрее, чем в ручном режиме, так как АПИшный интерфейс не используется, а прога запускается в фоне, а на фон у меня кэш в винде 2003.

    Может выложить со ссылкой на исходного автора ?

    Reply
  31. alexk-is

    (31) Выкладывай. Я потом ещё что-нибудь добавлю. Например, как в (25)

    Reply
  32. veber

    Может вы лучше скоопериреуетесь и тут выложите общую версию с указанием соавторов? а то потом за двумя следить сразу, и вспоминать, что эта умеет вот так, а другая умеет вот эдак 🙂

    Reply
  33. ВторойDimanYa

    Было бы здорово добавить отбор по принципу: проведён, не проведён, и проводить все. Как в стандартной обработке.

    Reply
  34. tani6e4ka

    еще было бы здорово добавить отбор по подразделению.

    Reply
  35. newman379

    нам тоже пригодился бы отбор по подразделению, можете добавить?

    Reply
  36. alexk-is

    (34)(35)(36) Да. В планах есть сделать режим работы с универсальным отбором в версии 2.х. Т.е. отбор по любым реквизитам шапок документов. Но к сожалению пока приходится сдвигать планы.

    Reply
  37. veber

    при скачивании качает версию 1.7.1.1. а в 1с говорит что есть более новая версия и ведет на ту же страницу.

    Reply
  38. Tarlich

    советую добавить что бы вначале доки делались не проведеными

    что бы видеть в журнале проблемные доки

    Reply
  39. marochkin

    Вот так кашернее для сохранения значений: (при этом таблицу видов документов добавить в сохряняемые значения)

    Процедура ЗаполнитьТаблицуВидовДокументов() Экспорт
    
    Для каждого СтрокаМетаданных Из Метаданные.Документы Цикл
    Рез = ВидыДокументов.Найти(СтрокаМетаданных.Имя, «Имя»);
    Если Рез = неопределено Тогда
    НоваяСтрока = ВидыДокументов.Добавить();
    НоваяСтрока.Имя = СтрокаМетаданных.Имя;
    НоваяСтрока.Наименование = СтрокаМетаданных.Синоним;
    НоваяСтрока.Выбор = Истина;
    КонецЕсли;
    КонецЦикла;
    
    КонецПроцедуры //ЗаполнитьТаблицуВидовДокументов

    Показать

    Reply
  40. rainstars

    у меня вопрос по восстановлению последовательностей.

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

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

    1С УПП 8.1.

    p.s.: а за обработку огромная благодарность. такие вещи всегда пригодятся.

    Reply
  41. alexk-is

    (41) Методически всё правильно. Последовательность восстанавливается с той даты с которой она сбилась.

    Можно конечно установить последовательность на любую дату http://infostart.ru/public/18394/files/ и затем восстановить её до нужной, но это методически неверно.

    Reply
  42. rainstars

    alexk-is, благодарю. я уже прочитал про это, но все равно огромное спасибо.

    объяснил это главбуху и она согласилась.

    Reply
  43. Cobranet123

    alexk-is, у меня к вам такой вопрос, я конечно не особо может и понимаю но почему бы не добавить возможность восстановить последовательность до определенного документа? а не только даты?

    Reply
  44. alexk-is

    (44) Можно всё. Ну, или почти всё. 🙂

    Reply
  45. pik4

    alexk-is, хотелось бы уточнить, вот если в момент восстановления последовательностей, любой из пользователей зашел в документ (датой ранее актуальной восстановленной последовательности) в этот момент и внес какие либо изменения. Чем это чревато? Заранее спасибо.

    Reply
  46. alexk-is

    (46) Последовательность продолжит восстанавливаться с этого документа.

    Reply
  47. alexk-is

    Добавил обработку «Установка дат расчета итогов»

    Reply
  48. leo072

    а мне класс

    Reply
  49. asg1975

    Использую в УТ 10.3. Все устраивает. Немного тормознее штатной — ДА. Но в целом очень даже удобно. Особенно если настроено в базе автоматом закрытие периода (допиливал сам). А один из ответственных пользователей восстанавливает последовательность данной обработкой в закрытом периоде.

    Reply
  50. 1C82

    Использую . спасибо! очень полезно.

    Reply
  51. Ibragimov

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

    Reply
  52. shekl

    спасибо пользуюсь. все устраивает

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

    Reply
  53. pantera190

    спасибо.очень помогло.

    Reply
  54. popova190

    спасибо,пригодилась обработка.

    Reply
  55. asg1975
    shekl пишет:

    спасибо пользуюсь. все устраивает

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

    Насколько я понял, ставите принудительно дату последовательности без перепроведения документов, если не сложно чиркните как, вроде в данной обработке только с проведением…

    Reply
  56. alexk-is
  57. asg1975

    Спасибо, не приметил «слона»: в одной публикации несколько линков…

    Reply
  58. profych1

    Удобная и полезная обработка, но требует доработки

    Reply
  59. morok83

    А мне понравилась (КА 8.2). Удобно разделение по проведению на организации.

    Reply
  60. BagА

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

    Reply
  61. alexk-is

    (61) В данном случае не требуется. См. (46) (47)

    Reply
  62. avavadim

    Спасибо большое за обработку.

    Reply
  63. kubfest

    Могу сказать одно, обработка нужна, если у вас типовая конфа и вы не программист… Обычно такие обработки пишутся для конкретных конфигураций… Но за обработку +, очень хорошая, хотя некоторые моменты под вопросом.

    Reply
  64. alexk-is

    (64) Какие?

    Reply
  65. Farsis

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

    Reply
  66. zhleonid8

    добавь проведение по расписанию срочно:)

    Reply
  67. dva2000

    Спасибо, все работает.

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

    Reply
  68. andrys

    отличная обработка.

    Reply
  69. muaddib

    Вначале для восстановления писал свою обработку, но посмотрев вашу понял, что изобретаю велосипед.

    Reply
  70. lady_lace@mail.ru

    Спасибо за обработку пригодилась в работе

    Reply
  71. _ink_

    Спасибо за обработку. Пригодилась.

    Reply
  72. fornasov

    Спасибо

    Reply
  73. fornasov

    помогло

    Reply
  74. SERJ_1CC

    Помоему тоже ничего +1

    Reply
  75. Motor24

    А на платформе 8.2 будет работать, если конвертировать?

    Reply
  76. Serg0FFan

    (66) Farsis, а можно потестировать вашу «докрученную» версию?

    Reply
  77. alexk-is

    (77) Так работает же

    Reply
  78. Motor24

    Прошу прощения — не проверил перед тем, как задать вопрос

    Reply
  79. niram

    Вопрос автору — Планируется ли доработка под версия 8.2 в режиме «Управляемое приложение».

    А то, что то с такими обработками для Управляемого приложения туго. Или я не нашел или не туда смотрел. (

    Reply
  80. alexk-is

    (81) Нет. Пока не планируется.

    Reply
  81. morpheus2

    Большое спасибо! Лично мне очень пригодится.

    Reply
  82. dyh

    спасиб

    Reply
  83. serge_focus

    alexk-is,

    Большое спасибо!!! Очень нужная обработка, особенно когда месяц закрывают :).

    Reply
  84. sae74

    Пользуюсь пол года!

    Спасиоб!

    Reply
  85. svbel85

    что то не совсем понятно как ей пользоватся,

    все отличии от типовой в возможности не монопольного проведения ??

    Reply
  86. alexk-is

    (93) Достаточно заглянуть во внутрь и сразу будут видны все 143 отличия 🙂

    Reply
  87. _ink_

    Спасибо. Давно пользуюсь

    Reply
  88. avcherkasov

    Большое спасибо за полезную вещь! Перешли на 8-ку и столкнулись с такой необходимостью. Плюсую.

    Reply
  89. Liashov

    Хотелось бы доработку под версию 8.2 в режиме «Управляемое приложение». Но, в любом случае, и за то, что есть, большое спасибо. Очень, думаю, пригодиться в работе.

    Reply
  90. AlexShap

    Спасибо. Очень полезная и нужная вещь. Давно искал что-то подобное

    Reply
  91. Fanil

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

    Reply
  92. Анна79

    Пригодился бы отбор по подразделению, сделайте пожалуйста…

    Reply
  93. electronik

    То что не в монопольном ето хорошо а то запустишь и все не могут работать

    Reply
  94. denezhka

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

    Reply
  95. curys

    Спасибо большое автору за обработку, как раз то что нужно.

    Reply
  96. Ange-Lika

    Актуально для 1С 8.2 УПП?

    Reply
  97. alexk-is

    (105) Да, конечно.

    Reply
  98. bdlk

    Чет не работает.

    открываю установку границ последовательностей, выставляю дату. Все меняет красиво.

    открываю проведение по партиям, а там все как было раньше. Может руки у меня кривые? Подскажите уважаемые Доны.

    Reply
  99. materiy_boec

    Плюсую, мне нравится

    Reply

Leave a Comment

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