<?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='\
эхх, а она так нужна сейчас…
{Форма.Форма.Форма(168)}: Итератор для значения не определен
Для Каждого Реквизит Из ТекущиеМетаданные Цикл
Ой как не хватает автопоиска
Два отзыва — и те с критикой…. Ладно, попробую скачать и протестировать на корректность работы — вещь-то нужная, как-никак. Странно, что 1С до сих пор не выложила её на ITS-ке.
Да, давно пора перейти на 3.0. Обработка явно хорошая. Как перейду — по-тестирую обязательно. +1
В БП 3.0 все работает, не хватает только возможности отметитьснять отметку для всех объектов. И по результатам замены никакого информационного окна нет
В интерфейсе такси не дает выбрать объекты.
Запустил в «Такси»
1С:Предприятие 8.3 (8.3.5.1248)
Бухгалтерия предприятия, редакция 3.0 (3.0.35.26)
Вроде работает…
Процесс запуска не происходит. В чем может быть дело?
(8) eruil,
Толстый клиент, например.
Огромное спасибо. Выручили. Под рукой не было диска ИТС, но инфостарт всегда придет на выручку. Я совершала синхронизацию между БП 3.0 и ЗУП 3.0 . Может не правильно настроила синхронизацию, но помоему в ЗУПе проще простого, но задвоились ИФНС. Вы спасли.
Все хорошо, только надо бы добавить установку привелегированного режима. Потому как есть объекты (например последовательности), для которых в типовых вообще не установлен признак изменения. Только чтение и просмотр. На таких объектах валится.
А вообще — обработка классная. Разумеется, хотелось бы большую кнопку «СДЕЛАТЬ ЗАШИБИСЬ» )))
Добрый день! Спасибо за обработку. Она действительно супер.
Но подскажите пож-та в выборе типа данных нет справочника номенклатура?, т.е. с помощью этой обработки нельзя заменить дублеры номенклатуры в документах? Спасибо!
Такое может быть если в метаданных нет справочника номенклатура.
(13) Мириам, Такое может быть если в метаданных нет справочника номенклатура.
Спасибо, все работает)))
Очень не плохая обработка, но одно замечание есть: при выборе «На что заменить» снова открывается выбор типа данных, что является неудобным (для 8.2 сразу открывался тот же самый справочник, который был выбран в поле «Что заменить»).
(17) ivnik, там такого не было, там тоже открываются метаданные
А с регистрами бухгалтерии она также плохо отрабатывает как и та что на диске ИТС?
там в измерения валюта и подразделение попадает пустая ссылка вместо неопределено после замены значений для счетов с отключенным учетом по валютам (подразделениям)
(19) kwazi, эта обработка функционально ничем от ИТС-овской не отличается
На УНФ 1.6.1.44, платф.8.3.6.2332 работает. Плюс.
(15) Goobin, и что делать, если надо исправить номенклатуру в УТ 11? Как это в объектах метаданных нет справочника «Номенклатура»? Открываем конфигуратор — есть, открываем «все функции» — есть, в обработке — нет. Странно
Если Вы про поля «Что заменять» и «На что заменять», то оба поля содержат тип «Любая ссылка» и игнорировать ссылку на справочник (любой) не должны, а обработка не вмешивается в процесс выбора типа ссылки.
Хотелось бы увидеть это явление, но УТ 11 у меня нет.
(23) juricher,
Если Вы про поля «Что заменять» и «На что заменять», то оба поля содержат тип «Любая ссылка» и игнорировать ссылку на справочник (любой) не должны, а обработка не вмешивается в процесс выбора типа ссылки.
Хотелось бы увидеть это явление, но УТ 11 у меня нет.
(13) Мириам, вероятно УТ? (23) juricher Там номенклатура называется «Позиция номенклатуры», а вообще в конфигураторе смотрите как называется позиция справочника номенклатура.
Вроде взлетело, бухи довольны что увидели знакомую картинку. Единственное, чтобы зарегистрировать обработку во внешних, в модуль объекта нужно вставить код:
Показать
А на каком диске вы её нашли, смотрел на январском 2017, нет его….
(28) search and change есть на любом диске только для обычного приложения.
Itsexeextrepsunireps82
(29) На диске ИТС обработка идет только для толстого клиента. Поэтому для тонкого клиента обработка с ИТС не вариант.
К стати проверил на базе 1С Рарус НФО (создана на основе 1С Бухгалтерия 3.0) все работает. Только если захотите подключить ее как встроенную внешнюю обработку в базу то в модуль обработки нужно добавить экспортную функцию (попроще чем у 27):
// Для внутреннего использования.
Функция СведенияОВнешнейОбработке() Экспорт
Перем ПараметрыРегистрации;
Если ПодсистемаСуществует(«СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки») Тогда
МодульДополнительныеОтчетыИОбработки = ОбщийМодуль(«ДополнительныеОтчетыИОбработки»);
МодульДополнительныеОтчетыИОбработкиКлиентСервер = ОбщийМодуль(«ДополнительныеОтчетыИОбработкиКлиентСервер»);
ПараметрыРегистрации = МодульДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке(«8.3.0.1»);
ПараметрыРегистрации.Вид = МодульДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка();
ПараметрыРегистрации.Версия = «1.0»;
ПараметрыРегистрации.БезопасныйРежим = Ложь;
ПараметрыРегистрации.Информация = «Поиск и замена значений 8.3 Предназначена для поиска и замены значений в информационных базах 1С 8.3 Тонкий клиент»;
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = НСтр(«ru = ‘Поиск и замена значений 8.3 ред. 8.3.0.1′»);
НоваяКоманда.Идентификатор = «ПоискЗамена»;
НоваяКоманда.Использование = МодульДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
НоваяКоманда.ПоказыватьОповещение = Ложь;
КонецЕсли;
Возврат ПараметрыРегистрации;
КонецФункции
Спасибо из 2018! Работает! Хватило одного стартмани! Жаль что на диске ИТС нету — некрасиво!