<?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='\
По-моему нет ничего лучше универсальной обработки с ИТС.
Чем лучше обработки УниверсальныеПодборИОбработкаОбъектов.epf с диска ИТС?
Десятки людей, не сговорившись, упорно пишут перенумераторы.
Тут есть какая-то непонятная мне тайна.
Чем тема так всех манит ? Что в ней «сермяжного» ?
Равно как и гляделки констант пишут. Да, тайна сия велика есть.
Десятки людей, не сговорившись, упорно пишут перенумераторы.
Тут есть какая-то непонятная мне тайна.
Чем тема так всех манит ? Что в ней «сермяжного» ?
Ну не зря же даже рубрика есть такая в каталоге. Это практически как HelloWorld 😀
Опять же, перенумератор, это такая, почти безопасная и такая простая обработка, которую можно доверить обычному пользователю.
Чем лучше обработки УниверсальныеПодборИОбработкаОбъектов.epf с диска ИТС?
Ничем не лучше. Только не у всех есть ИТС, да и пользователи есть такие, объяснить которым как работать с формой в которой больше одной кнопки проблематично.
Основной целью было создать простой инструмент.
вот это лучше не афишировать…. иначе вопрос — а где 1С взяли? Потому как кто купил, у того минимум 1 диск есть (в коробочке лежит) + бесплатная подписка еще на 6.
Valerich,
ну ведь бывает же, обновляются с 6 бухгалтерии на 8.2 через франчей и все имеющиеся у пользователя ИТСы уже неактуальны =)
(1) Что Вы скажете по поводуhttp://infostart.ru/public/78695/ ?
А можно ли в качестве префикса перенумерации добавить что-то вроде произвольного алгоритма перебора. (например для отобранных элементов справочника производить перенумерацию с добавлением счета с точкой и например-номера склада или нескольких первых символов его наименования
В обработке нет выбора организации, поэтому использовать не могу, увы :-/
В обработке нет выбора организации, поэтому использовать не могу, увы :-/
Добавил отборы.
А чего удивительного? Всего найдется пара десятков
долбпользователей, которые наплюсуют. Вот и близко заветный рейтинг 30.(11) Спасибо!
(12) Я для 8.2 еще не встречал боле-менее удобного нумератора 😎
(11) Попытался начать перенумерацию с произвольного места(т.к. прошлые периоды закрываю)
В запросе ввел:
Организация = «наименование оргагнизации»
Дата > 01.06.2011
Номер >= А000023 (чтобы пернумероваллись все документы от 23 и боле )
Наверное стоило бы ввести «с какого номера начинать» и «ограничиватель длины номера»
——————
ОШИБКА:
{Форма.Форма.Форма(179)}: Ошибка при вызове метода контекста (Записать)
ВыбранныйЭлемент.Записать();
по причине:
по причине:
Значение поля «Номер» не уникально
———-
На самом деле, номера просто стоят не попорядку
по причине:
Значение поля «Номер» не уникально
———-
На самом деле, номера просто стоят не попорядку
В данном случае поможет предварительная нумерация с другим временным префиксом, а потом уже с нужным
Имхо это ошибка :-/
—
А может обработка начать перенумерацию с заданного номера?
Имхо это ошибка :-/
ну как бы это единственный способ избежать таких проблем. хотел сделать это обязательным по умолчанию, но пока это на усмотрение пользователей. позже добавлю в обработку либо как опцию, либо всегда.
А может обработка начать перенумерацию с заданного номера?
уже может
Автор, исправьте появление неразрывного проблема в номерах от 1000. Иначе появляются номера вида А000 001, А000 002 и т.д.
Автор, исправьте появление неразрывного проблема в номерах от 1000. Иначе появляются номера вида А000 001, А000 002 и т.д.
Исправлено
Еще в качестве пожелания хотелось, чтобы при выборе вида документа/справочника список позиционировался на выбранном элементы. Когда идет ренумерация нескольких видов, неудобно каждый раз сверху мотать до нужного объекта. Или как вариант, реализовать множественный выбор видов. Во всем остальном все работает отлично, очень пригодилось, спасибо!
Воспользовался, просто, быстро удобно… что еще нужно
Очень классная штука
Здорово получилось
скчала а мне под 8,1 надо было- не заиграло ))
захлебнулась на первом же дубле 🙁
Сразу сказала, что код не уникальный, а так все ок. Сделал новый префикс, переименовал с ним, а переименовал с тем префиксом, на котором говорил что код не уникален и все ок!:)
В управлении торговлей 8.1 не работает.НЕ может быть прочитана текущей версией.
Хорошая обработка, мне понравилось! Главное код открыт! )))
Спасибо,
испоьзовал как заготовку, работы меньше
код открыт и это хорошо.
Хорошая обработка — когда нужно осуществить перенумерацию, а не искать идеальных и эргономичных вариантов.
(31) Terking, это что за наезды на идеальность и эргономику? 😀
Жду предложений по этому направлению
Не знаю чем вызван негатив а ля «Чем лучше обработки УниверсальныеПодборИОбработкаОбъектов.epf» «чем лучше обработки с диска ИТС»… Яндекс нашел эту обраотку а не ИТСную с сайтаhttp://its.1c.ru Скачал, заюзал- проблему решил за 10 минут, ошибок не выявил. Автору- спасибо.
Эта обработка легче для обычных пользователей, чем с диска ИТС. Иногда очень нужно, чтобы пользователь не приставал каждый раз с вопросами по перенумерации. А для этого нужна простая в использовании обработка.
попробую, надеюсь поможет…:)
Спасибо. Очень удобно 🙂
Может тема и избитая, но с этой обработкой действительно удобнее,чем искать на диске ИТС, а еще у меня на рабочем компе нет дисковода 🙁
В запросе ввел:
Организация = «наименование оргагнизации»
Дата > 01.06.2011
Номер >= А000023 (чтобы пернумероваллись все документы от 23 и боле )
Наверное стоило бы ввести «с какого номера начинать» и «ограничиватель длины номера»
——————
ОШИБКА:
{Форма.Форма.Форма(179) }: Ошибка при вызове метода контекста (Записать)
ВыбранныйЭлемент.Записать();
по причине:
по причине:
Значение поля «Номер» не уникально
———-
На самом деле, номера просто стоят не попорядку
Показать
Скажите, пожалуйста, а эта ошибка на 8.2 или на 8.1 получается?
Вообще обработка запустится на 8.й А то я по сайту хожу, везде 8.2, а 8.1 нет отдельно
Заранее спасибо
Ничем не лучше. Только не у всех есть ИТС, да и пользователи есть такие, объяснить которым как работать с формой в которой больше одной кнопки проблематично.
Основной целью было создать простой инструмент.\r
полностью согласна
обработка понравилась, только не удобно что нет выбора организаций
(40) olgadogi, так отбор же есть по всем реквизитам
Обработка очень пригодилась в конце квартала для перенумерации документов поступления товаров и услуг. Спасибо! На диске ИТС искала что-то подобное- не нашла. У меня ИТС технологическая поставка. Если подскажете где на нем искать- буду благодарна.
А у меня обработка почему-то не работает… неправильно нумерует ПКО — не в хронологическом порядке. 1,2,3,51,6,4…. в чем проблема — не могу понять… и с префиксами пробовала, а потом без префиксов — ничего не помогает! перенумеровывает, но криво! ПОМОГИТЕ!!!
а МНЕ ВОТ ОЧЕНЬ ПОНРАВИЛАСЬ И ПРИГОДИЛАСЬ! СПАСИБО
спасибо
И у меня почему то обработка не правильно работает…
(46) davydoff, можно поподробнее, что не так? исправим…
Хорошая вещь.
Жаль, что уже не нужна.
Не так давно писал что-то подобное.
Ладно, плюсик оставлю, но есть ошибка: При перенумерации есть проверка которая складывает длину префикса и объектов для нумерации и проверяет достаточно ли длинны кода, так вот количество объектов считается без установленных отборов, в моем случае не смог перенумеровать так как всего объектов оказалось больше 1000, а тех которые мне нужно было перенумеровать всего 100+префикс.
Так что, юзаем типовую с ИТС.
ИМХО, результат обработки (код до и после) лучше выводить в табличный документ для последующего анализа, кому это необходимо, и лично я в подобных обработках делаю добавляю возможность «тестового выполнения» то есть выполнение всего кода кроме заветной строки Объект.Записать(), это даст возможность посмотреть «А так ли все будет хорошо как задумалось?».
(42) MBG 2, универсальные обработки на ИТС лежат в папке UNIREPS82 (для 8.1 соответственно UNIREPS81)
Ладно, плюсик оставлю, но есть ошибка: При перенумерации есть проверка которая складывает длину префикса и объектов для нумерации и проверяет достаточно ли длинны кода, так вот количество объектов считается без установленных отборов, в моем случае не смог перенумеровать так как всего объектов оказалось больше 1000, а тех которые мне нужно было перенумеровать всего 100+префикс.
Так что, юзаем типовую с ИТС.
ИМХО, результат обработки (код до и после) лучше выводить в табличный документ для последующего анализа, кому это необходимо, и лично я в подобных обработках делаю добавляю возможность «тестового выполнения» то есть выполнение всего кода кроме заветной строки Объект.Записать(), это даст возможность посмотреть «А так ли все будет хорошо как задумалось
Очередной велосипед. За труды плюсую.
Полезная штука, спасибо. Но вот «код неуникален» — это задалбывает. Как правило, обработка в итоге запускается трижды — первый раз обламываемся с неуникальным кодом, второй раз — вспомогательный, с большим стартовым номером, третий раз — окончательный. Это слегка чересчур. Хотя бы предупреждение надо добавить, что может неуникальность получится.
ндя полуручная обраьботка получилась…. отбор вместо дато-периодов тоже как то печалит.. а так все ничего спасибо!
а ей можно сразо вседокументы и справочники перенумерорывать? а то у меня что то неполучилось, требут выбор объекта
«код неуникален» — это задалбывает-не то слово.
Спасибо за обработку, Но смотрите, что перенумеровываете…..
Поставьте, пожалуйста, упорядочивание по дате, тогда все вообще хорошо. Спавибо. Обработка вроде неплохая, пока срабатывает.
Обработку тоже забрал для работы именно бухам, чтобы было меньше вопросов. А три раза нажать перенумерацию не так и сложно, по телефону можно решить. В отличие от объяснений, как работать с ИТС-ной обработкой.
Годится для бухгалтеров. Зачёт.
Однако, нет сохранения настроек. Перенумеровывал разные документы, и каждый раз надо было одно и то же заколачивать: проведение, организация, период.
Поставил плюс.
Хорошая обработка, но хорошо бы иметь возможность сразу переименовывать все объекты. Хотя наверное так можно очень сильно накосячить, переименовывая все подрят
Спасибо за обработку. Нужно было срочно перенумеровать часть документов за определенный период с отбором, все сработало четко. Не совсем правда понял, зачем нужна галка «Предварительная перенумерация»
Иногда такая нужна…