<?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='\
круче чемhttp://forum.infostart.ru/forum105/topic49734 ?
А зачем изобретать велосипед опять?
Ведь есть же портативные инструменты разработчика. Там это есть и даже много чего другого.
(3)У меня обработка «данные объекта» валяется уже не знаю, лет 10, она еще для 8.1 но тем не менее вот такого плана вещи вижу постоянно. Поискать по ИС, перед тем как пилить, как то не судьба что ли…
А ничего, по скринам годная вещь. Но я по привычке и солидарности использую девайс от Трактора, модифицированный им же, времён 8.0. Классика ведь.
Было бы круто, если можно было бы редактировать соответствие, хранимое в хранилище значений как у реквизита «ДвиженияИсправляемогоДокумента» у типовых документов.
Добрый день.
Не работает, пишет
{ВнешняяОбработка.УниверсальныйРедакторРеквизитов.МодульОбъекта(159)}: Поле объекта не обнаружено (ОбластьДанныхОсновныеДанные)
НоваяСтрока.ТекущееЗначение = Объект[Значение.Имя];
(7) Какая конфигурация, платформа? В какой момент выдается сообщение? Используются ли расширения?
(7) Данная ошибка исправлена. Возникала на конфигурациях с разделением данных.
(9), добрый день.
хорошо, что исправили, можете мне скинуть обработку, чтобы мне не тратить стартмани — я ведь уже заплатил один раз
(10) Не вопрос, скину, дайте контакт (на инфостарте не нашел).
А разве для повторного скачивания необходимо опять тратить стартмани? Я обработку не менял, просто обновил файл? Удивительно.
Добрый день, в профиле указана почта mikl79@list.ru
Сейчас когда нажал Скачать, он не стал спрашивать о снятии стартмани и действительно не снял!
Спасибо скачал, начал тестировать.
Выявил ошибку:
конфигурация — Зарплата и управление персоналом, редакция 3.1 (3.1.4.169)
платформа — 8.3.10.2561
При открытии документа Больничный лист и нажатии флага «Движения» вышла ошибка — Недопустимое значение
и не отобразилось ни одного движения ни по одному регистру
И еще не хватает флага «Отображать только заполненные движения», а то слишком много регистров
(12) «Отображать только заполненные движения» — такой флаг есть с самого начала, он вынесен на главное окно — «Только заполненные таблицы». Будут выводиться табличные части и движения у которых есть строки.
Такой конфигурации у меня нет, сложно протестировать… Попробую что-то решить.
(13), у меня этот флаг не сработал, может быть из-за ошибки
(14) Скорее всего. Попробуйте на другой конфигурации.
(15), а почему на этой не работает — конфа типовая
у вас этой конфы нет, хорошо протестирую на типовой БП 3
(16), на БП 3 вроде работает, но там мало движений
Ошибку по движениям исправил (еще не обновил на инфостарте) — возникала из-за того, что в документе «Больничный лист» есть табличная часть «Начисления» и движения по регистру «Начисления». Не верно формировалась панель для вывода.
В процессе тестирования, столкнулся еще с ошибкой — нельзя использовать режим модальности, а у меня задаются вопросы пользователю в модальном режиме. Нужно исправлять…
Обработка обновлена.
Спасибо за обновление, теперь буду использовать в ЗУП 3, там как раз запрет модальных окон.
Протестил в ЗУП 3 — работает.
Вообще классная вещь, спасибо автору!
(20) Спасибо
Добрый день. Движение документов в 1С рознице 2.1 возможно?
Спасибо
(22) Здравствуйте. Предполагается что обработка работает в любой конфигурации (хоть в самописной).
(3)
Затем, что портативные инструменты разработчика не поддерживают управляемые формы.
Не аргумент? Вот я запустил ЗУП 3.1.10.156 в режиме обычного приложения. Получил ошибку (см. скрин). А обычно ЗУП этот работает как часы. Никогда не вылетает. Кроме как в случае запуска в неуправляемом режиме.
Тогда я открыл данную обработку и и отредактировал всё, что нужно. Быстро и без проблем.
Так что это ни разу не велосипед, а очень даже полезный инструмент.