<?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='\
ну вот сам файл
На КД не быстрее?
Помогите пожалуйста разобраться. При переносе говорит
Перед записью в элементе справочника «Номенклатура» необходимо заполнить «базовая единица»!
Перед записью в элементе справочника «Номенклатура» необходимо заполнить «вид номенклатуры»!
Я запутался, что делать? Класификатор едениц. изм. заполнил, виды номенклатуры тоже.
Все разобрался, извините за беспокойство
добрый день, господа, выложите данную обработку или пошли пожалуйста мне на почту isn978@gmail.com , а то я не могу скачать.
запустил в УТ 10.3
указываю путь к базе торговля склад
нажимаю подключить — пишет
{Форма.Форма(237)}: Ошибка при вызове конструктора (COMОбъект): Недопустимая строка с указанием класса
V7=Новый COMОбъект(«V77s.Application»);
по причине:
Недопустимая строка с указанием класса
Все разобрался, извините за беспокойство
Помогите пожалуйста и мне разобраться, а то уж несколько ней именно с это проблемой вожусь.
Спасибо!
УРА!
И до меня дошло!!!
Спасибо дорогой Автор!
Спасибо автору, за актуальную прогу! Именно то что нужно.
Автор! у вас мега актуальная обработака тлько при подключении базы 7.7 вылезла ошибка как в (6) {Форма.Форма(237)}: Ошибка при вызове конструктора (COMОбъект): Недопустимая строка с указанием класса
V7=Новый COMОбъект(«V77s.Application»);
по причине:
Недопустимая строка с указанием класса
что делать?
Эта ошибка значит что у вас не подымается оле объект, возможно вы просто скопировали папку с бинарником 1с (7.7), или инсталили и при первом заходе в программу у вас было не достаточно прав доступа, и программа не сделала своих записей в реестре виндовс. Решается данная проблемма инсталляцией 1с-ки (7.7) и потом первый раз её нужно запустить под учетной записью администратора.
Все так прекрасно начиналось:
Загружается: .0000945 <Бакалея>, уровень 1
Загружается: .0001909 <Аджика>, уровень 2
Загружается: .0000053 <Блюда быстрого приготовления>, уровень 2
Загружается: .0001981 <Big Bon>, уровень 3
Загружается: .0002172 <Mivimex>, уровень 3
Загружается: .0001592 <Podravka>, уровень 3
и т.д.
вдруг ошибка: {Форма.Форма(167)}: Ошибка при вызове метода контекста (ПолучитьОбъект): Элемент не выбран!
ЭлОбъект=Эл.ПОлучитьОбъект();
по причине:
Элемент не выбран!
Что может быть?
И еще, все наименования, что записались в базу — названия папок и не одного элемента
скачать другую может обработку?
или это невозможно?
а может легче самому написать
Заменил Эл = Спр.НайтиПоКоду(Спр77.Код) на Эл = Спр.НайтиПоНаименованию(Спр77.Наименование) теперь группы сформировались правильно, но элементы не записались и вышла ошибка: {Форма.Форма(199)}: Ошибка при получении значения атрибута контекста (ПолноеНаименование): Неизвестная ошибка
Эл[СокрЛП(СтрокаСт.Реквизит)] = Спр77[СокрЛП(СтрокаСт.Реквизит_77)];
(16)многие, кто сами пишет, наверное сюда и не заглядывают, а другая обработка? есть? посоветуйте. подобных смотрел несколько, но групп нет, здесь понравилось, что по группам и пока смотрю…
да уж, что то никак не хочет элемент записывать: Загружается: 00034527 <Аджика»Боген»кавказская 130гр.>, уровень 3 Ошибка:Перед записью в элементе справочника «Номенклатура» необходимо заполнить «базовая единица»! В семерке реквизит БазоваяЕдиница тип Справочник.ЕдиницыИзмерения в 8ке БазоваяЕдиницаИзмерения тип СправочникСсылка.КлассификаторЕдиницИзмерения
Может забредут сюда (3) и (8), что й то у меня с единицами никак (Ошибка:Перед записью в элементе справочника «Номенклатура» необходимо заполнить «базовая единица»!) или может кто подскажет?
Спасибо автору! Именно то что мне было нужно для переноса огромной кучи номенклатуры из БП7 в УТ8.
Автору спасибо, но ошибочка с названием объекта решается вот так
было V7=Новый COMОбъект(«V77s.Application»);
стало V7=Новый COMОбъект(«V77.Application»);
Спасибо автору. Так а что на счет ошибки:
вдруг ошибка: {Форма.Форма(167)}: Ошибка при вызове метода контекста (ПолучитьОбъект): Элемент не выбран!
ЭлОбъект=Эл.ПолучитьОбъект();
по причине:
Элемент не выбран!
Что может быть?
У меня тоже такая ошибка. Возможно, что элемент заблокировался в 7.7. Или произошла какая-то ошибка при выборке элементов из 7.7.
Автору спасибо. Очень полезный материал. Мне обработка пригодилась при переходе с 7.7 на 8.2.
спасибо автору. Но с помощью конвертации данных и правда все это более универсально сделать можно
Хорошо отработала, есть предложения:
1. добавить возможность наложения фильтров для переносимого справочника (хотябы по группе)
2. добавить действия при нахождении такого же кода (заменять, добавлять новый, пропускать)
Спасибо автору. А ошибка так и не исправлена:
{Форма.Форма(167)}: Ошибка при вызове метода контекста (ПолучитьОбъект): Элемент не выбран!
ЭлОбъект=Эл.ПолучитьОбъект();
по причине:
Элемент не выбран!
Что может быть?
У меня тоже такая ошибка.
запустила в БГУ 1.0.10.2
указываю путь к базе торговля склад
нажимаю подключить — пишет
{Форма.Форма(237)}: Ошибка при вызове конструктора (COMОбъект): Недопустимая строка с указанием класса
V7=Новый COMОбъект(«V77s.Application»);
по причине:
Недопустимая строка с указанием класса
разобралась с этой ошибкой….но ничего не грузится….тишина….что не так? сопоставление для каждого реквизита надо делать? а если надо только догрузить? а очищать уже имеющийся справочник не надо…не получается…
(29) mari0210,
сопоставление надо делать для каждого реквизита
если не совпадают типы — придется дописывать обработку
насчет «догрузить» уже не помню как оно работает, мне догружать не нужно было, наоборот была цель как раз отладить разовую загрузку начисто
спасибо за ответ, переделала отчет, загрузила ,вернее сказать до грузила…спасибо за опыт)))
пользовался, пригодилось. Качественная работа.
А если не сложно закиньте обработку на mail-simferopol@rambler.ru
и не ясно, что делать с единицами и типом товара?
(33) bereznoy, закинул на мыло
с единицами и типом товара честно говорят сам не понял что происходит у народа, я не сталкивался с такоцй проблемой, ну вон пишут что разобрались сами как-то, возможно надо чтобы в справочнике единиц была хоть какая-то единица (или в константах единица по умолчанию), а в справочнике типов хотя бы один тип «Товар»
Универсальная штучка. Работает в 8.2. Как простой и универсальный вариант для небольших работ — хорошая обработка.
Плюсанул, когда быстро надо тогда возможно пригодится, а так ведь есть типовые средстваhttp://infostart.ru/public/150080/ , да и КД в конце концов есть.
Ой, про типовые средства это я погорячился, тут отбор по справочнику есть, сорри)
зря скачал… придется всё же через кд.