<?php // Полная загрузка сервисных книжек, создан 2025-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='\
Обработка предназначена для восстановления или изменения порядка номеров справочников и документов.
Возможности:
Документы: возможность установить префикс, выбрать период обработки в зависимости от периодичности документа или нумератора, установить отбор по документу, нумеровать в хронологическом порядке (при поддержке уникальности номеров, во избежании ошибки дублирования номеров рекомендуется предварительно перенумеровать документы без поддержки хронологии с нейтральным префиксом).
Справочники: возможность установить префикс, обработка производится в порядке старой нумерации с заданием нового номера (для исключения ошибочной ситуации).
Полная поддержка нумераторов у документов и серий кодов у справочников.
Перейти к публикации
От стандартной чем отличается?
Я ее в глаза не видел 🙁
А если несколько документов под одним нумератором, перенумерация сработает?
Сработает.
(4) Попробовал. Если два документа под одним нумератором, то перенумерация работает в пределах одного (выбранного) документа. Сквозной нумерации по двум типам документов к сожалению нет.
А, вон Вы о чем, я подумаю как это можно организовать.
(5) Обработку доработал и перезалил, теперь работает сквозная нумерация в документах на одном нумераторе и серии кодов в справочниках.
стандартная это, но без фишек
УниверсальныеПодборИОбработкаОбъектов.epf
(8) Спасибо за наводку, не знал про существование стандартной обработки.
(1) Кстати, выяснилось что стандартная не знает про нумераторы и серии кодов. Вот так.
а не подскажите как сделать так чтобы нумерация дальнейших документов продолжалась с последнего перенумерованного?
(11) При помощи моей программы — к сожалению никак.
Для Вашего случая я думаю проще набросать одноразовую обработку. 🙂
Спасибо!Очень удобно!
А где брать стандартную обработку?
еще один велосипед
(14) можно найти на диске ИТС называется «Универсальные подбор и обработка объектов»
(15) кому — как…
(11) такая же задача,
и смысл обработки если последующие не будут продолжать новые данные?
(17) После восстановления нумерации, система самостоятельно продолжает нумерацию объектов, если в настройках объекта стоит флаг «Автонумерация».
Обработка тут ни при чем.
(18) У нас получилось по другому, после перенумерования, продолжило автонумерацию с каких то предыдущих номеров, а не с последнего полученного от обработки. Но это не эта обработка а стандартная из ИТС. но я так понял разницы нет.
(19) Думаю да, попробуйте запустить сервисные обработчики, вроде тестирования и исправления, может поможет…
Спасибо!Добавляю плюс
Спасибо! Плюсую…
А можно эту обработку посмотреть avangardplus@rambler.ru
Я думаю вещь нужная
интересно, а от глюка, когда префикс другой организации ни с того ни с сего в приеме на работу появился, эта обработка не поможет?
(25) Поможет, только Вы уж сходите до справочника Организации и предварительно вытрите префикс там, если он есть, и своих сотрудников поругайте за то что такие вот глюки в номерах ручками делают :).
Можно глупый вопрос? Я скачала файл, куда мне его нужно установить чтобы в программе это работало? Я не разбираюсь в подобных вещах.
(27) Три варианта (по мере сложности)
1) Открываете 1C в режиме «Предприятие», открываете скачанный файл через меню Файл/Открыть
2) Регистрируете скачанный файл в справочнике внешних обработок
3) Открываете 1С в режиме «Конфигуратор», вставляете в дерево конфигурации скачанный файл, после обновления базы обработка будет доступна через меню Операции/Обработки
СПАСИБО!
неудобная весчь.
с Новым Годом
(30) Ну если уж минусы раздаешь, обоснуй, что не понравилось, обоснованная критика всегда приветствуется, в отличии от тро-ло-ло!
(31) например, хотя бы это:
1.нужно было исправить нумерацию в текущем году. Это невозможно.
2.В одной базе есть документы по нескольким организациям — префиксы нужны разные. За один проход этого не сделаешь этой обработкой.
3.Несколько документов могут быть связаны одним нумератором — здесь это не предусмотрено.
кстати, по поводу продолжения нумерации с новых номеров. Если я не ошибаюсь, метод есть для сброса данных счетчиков: ОбновитьНумерациюОбъектов()
(32) Обработка не писалась под конкретную конфигурацию, был прицел на универсальность, поэтому выставлять префиксы нужно вручную, отбор вам в помощь, за один проход действительно этого не сделать, причина — см. выше.
Все там предусмотрено с одним нумератором на несколько объектов, читайте описание, не верите, — открываете код и смотрите на реализацию.
ОбновитьНумерациюОбъектов() сбрасывает внутренний счетчик внутри одной сессии.
Так что уважаемый, прежде чем умничать и выставлять оценки, разберитесь сначала.
спасибо
(34)
>> Обработка не писалась под конкретную конфигурацию, был прицел на универсальность
Для универсальности есть методы проверки наличия каких-либо объектов в метаданных. Т.е. можно проверить наличие справочника «Организации», проверить наличие в нём реквизита «Префикс», добавить выпадающий список со значениями из базы.
>> ОбновитьНумерациюОбъектов() сбрасывает внутренний счетчик внутри одной сессии.
А где об этом сказано? Как-то не вяжется с этим высказыванием фраза из описания «Данный метод разрешено вызывать только администратору системы».
>> открываете код и смотрите на реализацию
Открыл, посмотрел. Ничего хорошего там не увидел. Очень удивился произвольному типу в реквизитах «Период», «Вид справочника» и «Вид документа». Вообще, обработка сделана из вон рук. Мелочам нужно уделять больше внимания.
(37) над ответом целый год думал?
Прошу прощения, с Вами забыл посоветоваться…
PS
Корона не жмет?
Не захотел, — имею право как разработчик.
Чем отличается от Групповой обработки объектов ?
(40) Всем, читайте описание. 😉
Ошибка загрузки документа .Внешняя обработка не может быть прочитана текущей версией программы.
(43) Какой версией программы открываете?
Попробуйте сначала открыть в режиме конфигуратора, и если программа запросит ковертацию, ответьте утвердительно, обработка писалась под 8.1., скорее всего дело в этом.
Спасибо за обработку, периодически очень нужна, особенно если собьется нумерация кассовых документов. Но нумерацию Кассовых документов не смогла восстановить почему то :(. Буду смотреть по ходу кода что не так.
(45) Давайте помогу, что пишет?
Тем, кто сюда забредёт в поисках решения, и если перенумерация не помогла, документы по-прежнему нумеруются как попало.
Процедура глобального контекста: ОбновитьНумерациюОбъектов
(47) не помогает, ничего не меняется после ОбновитьНумерациюОбъектов
Я переименовал кривые документы чтобы они выглядели не как последние если сортировать по номеру
Запустил ОбновитьНумерациюОбъектов, создал новый документ, сам указал там нужный мне следующий номер.
Создаю новый документ, опять не та нумерация.
Пробовал выбрать документы за последний месяц и перенумеровать их, ничего не изменилось — новый опять кривой