<?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='\
Обработка создана в апреле 2003 года, комментарий написан только что.
Ну как обработка? Работает? 🙂
щаз заценим…
м-да… че-то никто не голосует… ничего не пишут…
видимо, бестолковая вещь 🙂
Спасибо, проверил работает, сейчас пойду документы ей переносить, опять клиенты набили в старой базе 🙂
Ура! Спасибо за отзыв 🙂
во, первые результаты нового раздела «обсуждение программ», где поднимаются откомментированные разработки.
wolfsoft нормально придумали или есть дополнения?
Хорошо придумали 🙂
как идея для лучьшения:
1. выбор варианта переноса — DBF (хотя txt — меня больше радует)$
SQL (создание таблички в базе и занос и считавание от тудаго)
спасибо за комментарий :))
1. А смысл? Столько мучений с ДБФ ради чего? 😉
2. Не очень понял. Перенос между базами через таблицу SQL? Практический смысл?
Мне кажется, в тех задачах, где планируется использовать эту обработку, вполне достаточно txt-файла. Впрочем, может я и ошибаюсь 🙂
Ща заценим.
Утром базу в офис с исправлениями запулил, загрузятор лоханулась и загрузила старую версию базы (без изменений в доках) и проработали целый денььь откатывать было уже поздно. Попробую перенести с помощью данной обработки все доки одного дня… Результаты сообщу…
Отлично! Жду результатов 🙂
Не покатило. Обработка ушла в ступор — 30 минут без отклика. Пришлось прогу снимать по трифиге. Днем еще раз попробую…
Жаль у меня нет твоих данных, мог бы посмотреть 🙁
Попробую предложить несколько вариантов:
1. Схему синхронизации настроил на свою конфигурацию?
2. В файле perenos_txt.ert в функции
и_СохранитьОбъект(ТЗ, ТЗ_Синхронизации, Объект)
раскомментировать строку
//Состояние(«Сохраняется объект: » + Строка(Объект));
Посмотреть с этой отладочной печатью, может быть просто медленно работает.
3. Сохранение таблицы значений в файл производится методом 1С
ЗначениеВФайл()
При сохранении большой таблицы может выполняться достаточно долго.
4. При сохранении выводятся сообщения в строке состояния, посмотреть на чем замирает.
5. Если запускаешь под ХР, не переключайся на другие приложения. В ХР статусная строка в 1с перестает обновляться, не увидишь как идет процесс.
Жду дальнейших результатов. Обработку тестировал только на типовых и не очень больших объемах данных. Поэтому очень хочется проверить на рабочих объемах. Пиши.
ЗЫ: 30 минут — не такой уж большой срок, чтобы уже снимать 😉
Там ведь тянутся все объекты по ссылкам. Их может быть очень много.
—
vladnet
02.06.2006
Как результаты? Перенос прошел нормально?
Вот сейчас буду делать. Результаты — вечером.
Пробовал перекинуть 1 день, объектов немного. Стандартная выгрузка ТИС-БУХ за месяц 12000-15000 объектов выгружается у меня порядка 20минут, так что тут…хз.. посмотрим… работаю под W2K.
У меня наверняка тормозней работает, чем XML 🙂
Ждем-с…
Да перенос прошел нормально 😉
У них объектов было мало, конфигурация по принятию заказов на корпусную мебель.
Жаль только справочники не переносит, без документов.
Сейчас посмотрю еще что есть похожего…
Извиняюсь, посмотрел, оказывается можно самому просто очень перенос справочников дописать. Сперва не понял для чего 2 файла, а сейчас понимаю что решение очень даже отличное. Файл example поправлю для переноса справочников.
Спасибо за отклик! Да, совершенно верно. Файл example — это просто пример использования обработки переноса. Сама обработка переносит ЛЮБЫЕ объекты, которые ей «подсовывают».
Просто подумал, если выложу только обработку переноса, то людям будет лень разбираться, как и чего в нее передавать через параметры 🙂
Жаль, что у Че Бурашки не получается 🙁
Подозреваю, что обработка медленно работает…
Че Бурашка, так и не получилось?
Внимание!
Исправлена ошибка в процедуре загрузки справочников. Если вид владельца был, например, «ВидыСвойств», то искался вид объекта «Виды свойств», вместо «ВидыСвойств». В результате выдавались ошибки при загрузке.
Ошибка возникала в тех случаях, когда вид владельца выгружаемого объекта (элемента справочника) не совпадал с представлением вида этого владельца. Пример в предыдущем сообщении.
Исправлена ошибка. Не корректно обрабатывались значения реквизитов неопределенного типа.
Просьба к посетителям принять участие в тестировании новой версии обработки.
В случае обнаружения ошибок — сообщайте автору.
Нука щас попробую перенести справочники ЗиКа из старой в новую конфу
есть же на ИТС стандартная обработка переноса между одинаковыми базами
неплохая штука, сработала,
жаль только после отбора документов, не получаеться редактировать их перечень.
Если, например нужно переносить не все документы за период, а, например, только кассу, или только банк и т.п. Вот это не получилось. Мож чего не угледел, как среди отобранных документов проводить селекцию.
P.S. Встретился один косяк — при обработке на выгрузке документа Ввод в эксплуатацию ОС повисала. Всё остальное пролезло.
Спасибо. Пойду проверять. По поводу всех документов — «example.ert» всего лишь ПРИМЕР использования обработки переноса. Сама обработка «perenos_txt.ert» способна переносить любые передаваемые ей объекты. Надо пожалуй все-таки набросать другой пример — поинтересней.
Исправлена ошибка при выгрузке документов вида «Ввод ОС в эксплуатацию» (бухгалтерия). Ошибка возникала в связи с наличием у документа реквизита с идентификатором «Объект», который совпадал с названием одного из служебных полей. Потенциально могут возникать подобные ошибки при совпадении идентификатора реквизита и названия какого-либо другого, кроме «Объект», служебного поля. Планируется исправить в следующем релизе.
хорошая фишка
Спасибо всем, кто оставлял комментарии и плюсовал рейтинг 🙂
При выгрузке из ЗиК информации за 10дней работы зависает на ЗначениеВФайл(ПолноеИмяФайлаВыгрузкиTXT, ТЗ_Данные);
Простое решение для создания архивной БД.
Спасибо!
2 Yelena Sol: Это он не зависает, а тормозит 🙂
«ЗначениеВФайл()» — это системный метод 1С и повлиять на его быстродействие не в моих силах 🙂
2 TimVG: Спасибо 🙂 Только для создания архивной БД вроде есть более простые и быстрые способы 🙂
+1 Спасибо
Вроде работает
спасибо автору
Сорри, долго не отвечал…
Есть ли в проге возможность сделать схему переноса, чтобы не тянулисб все данные по ссылкам? У меня в принимающей базе ЗАВЕДОМО есть все нужные объеты из базы-источнументыика. Т.е. мне нужно просто перекинуть документы и все.
2 Сhe Burashka:
Без переделки обработки — нет. Можно доработать: там, где ключ указывается, добавить значение «не выгружать», ну и отрабатывать это служебное значение в процедурах выгрузки. Но я не возьмусь, сейчас со временем напряженно.
В принципе, если даже заведомо есть все нужные объекты в БД-приемнике, то вроде ничего страшного не произойдет, только файл выгрузки «потяжелее» будет 😉
ок. попробуем… надеюсь…
2 Сhe Burashka:
На счет ключа «не выгружать», это я перемудрил вчера ночью. Посмотрел сейчас, не прокатит. Лучше при загрузке в процедуре п_ВосстановитьОбъект() после того, как найден нужный элемент справочника по ключу и записан в ТекТЗ, сразу его вернуть «Возврат Справочник.ТекущийЭлемент();». Тогда вроде должно прокатить, но не проверял. Должно грузиться быстрее и элементы справочника не тронет.
Когда появляется сообщение Сохраняем в файл — програма виснет, в чем дело, помогите !!!
Да не виснет, а тормозит 🙂
См. ниже: цитирую
«ЗначениеВФайл()» — это системный метод 1С и повлиять на его быстродействие не в моих силах 🙂
Я пытался выгрузить документы в файл за один день, это приблизительно около 100 документов, ждал 30мин, винчестер молчит, а windows xp выдает сообщение -программа не отвечает-. Если это такие тормоза, тогда как перекинуть документы, например, за неделю или две. Может я че не так делаю?
Сорри, уже все работает 🙂
Просто таблица значений большая получается (все объекты по всем ссылкам со всеми реквизитами), вот и сохраняет долго. А то, что ХР выдает, не обращай внимания 🙂
да, с несколькими документами работает на ура! я использовал example.. а perenos я не врубаюсь 🙁 т.к.я не знаю 1С конфигурирования.. завтра пойду попробую на работе 🙂
а потом буду разбираться как пишутся ert’ы
Весь перенос делает perenos, а example — это только пример (причем доволно примитивный) внешней оболочки, которая без perenos работать не будет. Сделать более сложный пример — руки никак не дойдут. Да и смысл? Все равно в каждом случае будет требоваться своя уникальная оболочка переноса. Чуть позже добавлю кнопки редактирования списка документов, а может что-нибудь поинтереснее придумаю…
Вопрос для специалистов — как можно ускорить удаление документов из базы за определенный период, потому как приведенный ниже пример работает очень медленно:
Док = СоздатьОбъект(«Документ»);
Док.ВыбратьДокументы(ДатаНач,ДатаКон);
Пока Док.ПолучитьДокумент()=1 Цикл
Док.Удалить(0);
КонецЦикла
ну и т.д.
Не обходимо установить ТА (точку актуальности) на дату ранее всех документов (ДатНач).
И запустить твой код. Он теперь выполнится моментально.
Обновлено.
По просьбам трудящихся, доработана обработка example.ert — пример использования основной обработки по переносу объектов.
Добавлены возможности
— удаление объекта из списка объектов;
— полная очистка списка объектов;
— добавление в список конкретного документа;
— отбор элементов справочника, выбранного вида, для выгрузки;
— добавление в список конкретного элемента справочника, выбранного вида.
Подскажите, есть ли способ снять пароль с конфигурации?
2 ur5tdk: Есть. Надо заплатить деньги автору конфигурации.
2 ALL: Спасибо, конечно, за ап-ы, но все-таки для для того, чтобы задавать подобные вопросы, есть форум 😉
> Подскажите, есть ли способ снять пароль с конфигурации?
По-моему, на этом форуме подобные вопроссы задавать не корректно, а тем более в комметах к разработкам. Совет: обращайся в личку к любрму члену форума, пока не получишь, что надобно.
Ну когда уже будет кнопка (вопросс Суппорту) «Настучать админу», чтобы подобный флуд удалять к хырам собачьим?
Да ладно, как мы разозлились, я сам занимаюсь программированием в 1С и просто стало интересно может ли кто влезть в мою конфигурацию, я ведь задавал вопрос на который можно было ответить только да или нет, все мы понимаем, что любая защита програм только от чайников и ответ на мой вопрос я уже нашел — soaron и найдет другой, кого интересует этот вопрос, вот так, Vasily Kushnir 😉
Обновлено:
1.70
Изменена обработка perenos_txt.ert:
— выгрузка/загрузка в файл сделана с использованием объекта «AddIn.V7TextFile» (расширение V7Plus.dll).
Непроверенная попытка избавиться от «тормозов» стандартных методов «1С» ЗначениеВФайл() и ЗначениеИзФайла().
Проверка будет производиться при дальнейшей эксплуатации.
Плюсы: вывод информации о количестве выгруженных/загруженных данных в процессе выгрузки/загрузки.
Минусы: содержит «тормоза» стандартных методов «1С» ЗначениеВСтрокуВнутр() и ЗначениеИзСтрокиВнутр().
ОК!
ur5tdk, ну а ты че завелся. Я ж тебе написал — подобные вопроссы в личку. А соароном (и не только) я уже давно пользуюсь — еще с 21 дебилда (сейчас 25 — 26 и 27 че-то не вызвали доверия). А ты просто под горячую руку попал — на форуме завелось несколько кренделей, что даже регистрационных данных не имели (как это получилось — отдельный вопрос суппорту), и стали гнать всякую пургу где попадя… А вообще, такие вопроссы лучше задавать в Форуме, а не в обсуждениях — быстрее получишь ответ. Так что ничего личного.
Ну Вы еще подеритесь, горячие финские парни 🙂 (с) ОНО
Ну и дерьмо ваша заливная рыба. Тухлая и гнилая.
15 документов за 6 часов выгрузила и уже 4 часа грузит! Да это вручную набить быстрее.
Видимо и организация ваша такая же дохлая! Не скачивайте, дохлый номер. Это антиреклама работы компании. Зачем так обманывать? Вы подрываете авторитет сайта. Двойка вам за поведение.
— Вам не нравятся кошки? Да Вы просто не умеете их готовить! 🙂
Не прет. У меня ошибки полезли
Ну что тут можно сказать… сочувствую 🙂
Дамы и Господа голосующие!
Большое спасибо вам за «плюсики» 🙂
И еще просьба — оставляйте комменты, если не трудно.
А то последние комменты какие-то негативные «висят», хотя рейтинг вырос уже намного с тех пор, как их оставили.
Что интересно, Анатолий50 тоже «плюсанул», а коммент негативный.
Парадокс. Голосовал авансом? Или изменил мнение?
В ответ на претензии по «тормозной» работе данной разработки выкладываю разработку:
Универсальный OLE-перенос объектов между БД с идентичными конфигурациями
http://infostart.ru/projects/1120/ .
Она работает быстрее, так как не содержит «тормозов» системных методов «1С» ЗначениеВСтрокуВнутр() и ЗначениеИзСтрокиВнутр().
Пожалуйста, комментарии, отзывы, ошибки — милости просим 😉
Хотелось бы потрогать обработку, очень надо!!!!!!
(73) Трогайте
http://www.1partner.nnov.ru/develop/files/181/perenos_txt_170.zip
😉
подскажите пож-та а возможно ли из Бухгалтерии 7 выгружать товарные наклвдные и с/ фактуры в бухгалтерию 8.
заранее спасибо за ответ
ОЛЕприемник=Параметры.Получить(«Приемник»);
{C:DOCUMENTS AND SETTINGSNICKРАБОЧИЙ СТОЛПЕРЕНОС.ERT(8)}: Поле агрегатного объекта не обнаружено (Получить)
(76) Чего хотел-то?
http://www.1partner.nnov.ru/forum/index.php?fid=3&id=120082323675
Если есть вопросы по этой обработке, то их задают здесь
Но даже наличие вопросов — это не причина без комментариев постить сюда какой-то «левый» код, которого даже нет в обработке 😉
+(77) Тьфу, прощу прощения, не проснулся ещё 🙂
↓
Это ж текстовый перенос, я то думал, что это ОЛЕ
По текстовому переносу вопросы задают здесь