<?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='\
Чем лучше штатной обработки, размещаемой на дисках ИТС?
Во-первых можно выбрать какой вид документа или справочника перенумеровывать
(выбирается в форме, а не передается параметром).
Во-вторых для документов выбирается период за который перенумеровывать.
В-третьих выполняется в десятки раз быстрее.
В-четвертых можно указать количество разрядов номера (шаблон для текстовых номеров).
спасибо, за обработку….)))
(2)
1. ну и что? преимущество сомнительное…
2. а если мешающий номер будет лежать вне заданного периода — что будет в случае «нарушения уникальности»?
3. это надо проверить..
4. это да, может пригодится… но тоже сомнительно…
ТипНомера = СокрЛП(Метаданные.Справочник(ВидСправочника).ТипНомера);
КОВ000000.ERT(37)}: Поле агрегатного объекта не обнаружено (ТипНомера)
{C:ПЕРЕНУМЕРАЦИЯДОКУМЕНТОВИСПРАВОЧНИКОВПЕРЕНУМЕРАЦИЯСПРАВОЧНИ
Ответ Сhe Burashke: в модуле вместо указанной строчки написала ТипНомера= «Текстовый»; и все работает, автору спасибо большое!
смотрим сюда. на всякий случай…
http://www.infostart.ru/articles/242/
(6)
Esperance, на справочнике с числовым кодом и выбраным префиксом проверяла?
У O-Planet’а в похожей ситуации аналогичная обработка вообще подвисает.
>ТипНомера = СокрЛП(Метаданные.Справочник(ВидСправочника).ТипНомера);
Вредный ты, Чебур 😉 Описка у автора, полагаю…
Надо
ТипНомера = СокрЛП(Метаданные.Справочник(ВидСправочника).ТипКода);
>в модуле вместо указанной строчки написала ТипНомера= «Текстовый»; и все работает, автору спасибо большое!
Да уж… А в следующий раз ТипНомера= «Числовой» писать будешь?
Показать полностью
Вот так надо, во избежание…
(10) Сам чуток лопухнулся.. 🙂
Показать полностью
И на фига мне последовательность справочников, как они в конфе идут? Неудобно!
Надо добавить: ВидыСпр.Сортировать();
я не вредный, я — дотошный.. это значит до тошноты вредный…
Исправлены ошибки, учтены пожелания.
Особые благодарности Abadonna +1, Сhe Burashka (я тоже ДоТошный).
(4)
Если мешающий номер будет лежать вне заданного периода: две возможности 1) расширить период, 2) номер будет пропущен
Хороший алгоритм перенумерации. Однако, при определенных исходных данных можно получит ошибку:
ДокуменДляПеренумерации.Записать();
{С:ПЕРЕНУМЕРАЦИЯДОКУМЕНТОВ.ERT(234)}: Номер не уникальный!
Например. В выбранном периоде имеется 7 документов. Исходные номера — с префиксами. Задаем префикс = «1», длина шаблона = 1.
(12)
> я не вредный, я — дотошный.. это значит до тошноты вредный…
— это что за клоун?
— местный, говорит мудила-страшный…
— страшный? ты сказал страшный? меня зовут страшила-мудрый, однако! живу в подводном посёлке, в оленеводческом совхозе…
(с) Гоблин (Буря в стакане)
Извини, навеяло… 😉
Добавлена проверка на правильность шаблона.
Плюс некоторые внешние усовершенствования.
Есть пара вопросов.
Вид документа, имеющий ссылку на общий нумератор нескольких видов, похоже, не сможет перенумероваться?
Функция ПроверкаВЗаблокированныхДокументах() поиск номера осуществлен перебором списка. Имхо, лучше обрезать пробелы в значениях в списке сразу и использовать НайтиЗначение(). Еще метода, — на порядок быстрее будет искать в строке, сделав предварительно ВСтрокуСРазделителями().
На поле ввода ПрефиксШаблона логичнее повесить процеудру ПроверкаПравильностиШаблона(), но не ПриВводеДлинаШаблона()
Кнопки Закрыть() не хватает.
Еще предложение. Вместо кода
Показать полностью
Можно написать:
Показать полностью
По какому признаку были выбраны недопустимые симовлы?
Проверка шаблона нужна только для предупреждения пользователя или для его ограничения?
Если перед шаблоном поставить пробелы, то проверка незаметит запрещенные символы. Например шаблон «~» проверку не пройдет, но » ~» пройдет успешно.
(17)
> Добавлена проверка на правильность шаблона.
Бяка. Стало хуже. ИМХО неоправданные ограничения для получения сомнительного результата.
Спасибо! помогло — времени нет и эта обработка очень кстати!!
а в чем отличие по функционалу от стандартного комплекса обработок UChoice?
Спасибо ОГРОМНОЕ очень помогла!!!!!
Пришлась оченьно к стати. Самому было лениво писать. А юэеры такого понаписали за то время пока я в отпуске был.
В общем Спасибо.
спасибо за лелеяние моей лени )))))
Спасибо огромное!!! Прекратились мои мучения по перенумерации вручную.
надо добавить фирму…. в перенумерцию по документам у многих на разные фирмы разные префиксы и разные номера а он зараза их под одну греьенку
Очень удобная обработка…
афтару +1
Отсортируйте список видов, добавьте описание. Плюсую.
Извините, а я могу такую обработку по перенумерации рко и пко получить, очень нужно… 🙂
почему-то при перенумерации в документе количество символов в номере 7
у себя я поправил так:
// Для КолвоЗнаков = 1 По ДлинаШаблона-СтрДлина(СокрЛП(ПрефиксШаблона))-СтрДлина(Строка(МаксНомер)) Цикл
Для КолвоЗнаков = 1 По ДлинаШаблона-СтрДлина(Строка(МаксНомер)) Цикл
В свете Украинских изменений в налоговом законодательстве-хорошая обработка плюсую однозначно!
Спасибо большое!
мнее подошло за что автору спасибо) конечно давняя обработка но сработала)
Спасибо большое!
спасибо))очень пригодилась))
спасибо))очень пригодилась))
я тоже присоединяюсь….
То что надо!!
Респект автору
Спасибо автору! Очень удобно, если документы вводятся не по порядку по датам, можно в любой момент, в пределах отчета, перенумеровать. За исключением уже выписанных документов для клиентов.
Что-то я не понимаю… Максимальная длина кода справочника — 8, а он дает с учетом префикса сделать максимум 7. Разряд теряет, что меня совсем не устраивает. Но за скорость работы — плюс.
спасибо!
Огромное СПАСИБО!!!