<?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='\
Покрутил . Вещь!!! Особенно при работе с ТЗ и групповым контекстом разница во времени весьма ощутимая, после загрузки ВК это раз в 5-10 быстрее.
Особенно порадовало, что можно через контекст обратится к методам и переменным модуля контекста.
Получается весьма прикольно.
У вас сказано, что «Функционал компоненты включен в состав 1С++», тогда вопрос:
Где ее включить в 1С++?
Вроде нашел. По всей видимости следующий код включает ускоритель в 1С++:
В 1С++ этот функционал по умолчанию включен, те достаточно сделать
ЗагрузитьВнешнююКомпоненту(«1cpp.dll»)
Но пока в 1С++ более старая версия, в которой несовсем правильно работают таблицы
при вызове методов модуля через контекст, и нет автоускорения контекстов внешних отчетов.
Да, не стоит думать, что 1С будет после этой ВК «летать».
Все-таки основное время в 1С тратится на доступ к базе данных, хотя в-среднем выигрыш по скорости будет, в районе 10-15 процентов.
да, все хорошо… но прямо как в анекдоте (вот еще вчера с глюком формекса в составе 1с++ встретился)
— Скажите, это правда что вы виграли в спортлото «Волгу»?
— Правда, но не «Волгу», а 1000 руб, и не в Спортлото, а в преферанс, и не выиграл, а проиграл…
😉
Валится 1С при «Запрос.Выполнить(…)»
:(((((((
Исправлено
Вот это оперативность !!!!
:)))
+10, однозначно. С нетерпением ждем новых свершений.
Оказывается, когда делаешь Запрос.Выполнить, 1С генерит исполняемые модули, видимо для вычисления внешних функций.
Но чем-то эти модули отличаются, тк при вызове одного из их методов, 1С падает.
+1.
осталось телепат скрестить с 1с++, и научить её ускорять ДБФ.
И получится НЕЧТО!
корум, а чем тебя скрипты Intellisense не устраиваютт?
Валится при попытке выполнения кода управления таблицей в режиме ввода,
например:
Таблица.Область(, 1,, ФиксКол).ШиринаСтолбца(15);
Проверю
(JohnyDeath) Всё нравится. Но… 5-6 ДЛЛ хуже, чем 1. Забыть не получится ;о)
Ты, конечно, монстЁр, но кое в чем не прав.
> Некомпетентность: GetNMethods можно вынести из цикла
Уверен на 90%, что это НЕ функция, как таковая, а on-line определение, типа:
class BBB
{ void *ptr;
…
public:
int GetNMethods(int i) { return ptr+i; }
}
Поэтому, выносить его нет смысла.
> Лень: не зря же FindMethod виртуальная, почему же она
не переопределена ни в одном из наследуемых классов для более
оптимального поиска?
Это не лень, а осмотрительность. Функции позднего связывания, конечно, могут серьюзно украсить алгоритм и придать ему супер крутизну, но только не скорость выполнения! Это чуть ли не самый ресурсоемкий и медленный механизм. В предложенном тобой случае 1С работала бы медленнее раза в полтора.
В смысле
int *GetNMethods(int i) { return ptr+i; }
конечно, а ПТР не void* а int*
(O-Planet) — типа наезд ради наезда?
> Уверен на 90%, что это НЕ функция, как таковая, а on-line определение, типа:
> class BBB
> { void *ptr;
> …
> public:
> int GetNMethods(int i) { return ptr+i; }
> }
> Поэтому, выносить его нет смысла
Ты хоть 1CHeaders смотрел когданить, в 1С++ например?
GetNMethods имеет такое объявление
virtual int GetNMethods();
А виртуальные функции не инлайнятся.
> Это не лень, а осмотрительность.
> Функции позднего связывания, конечно, могут серьюзно украсить алгоритм
> и придать ему супер крутизну, но только не скорость выполнения!
> Это чуть ли не самый ресурсоемкий и медленный механизм.
> В предложенном тобой случае 1С работала бы медленнее раза в полтора.
Странно, я как раз это реализовал (переопределение FindMethod в конечных классах)
и заработало быстрее
(Saguna)
У меня не валится. Кинь мне пример таблицы, на которой у тебя падает
to O-Planet
>> Некомпетентность: GetNMethods можно вынести из цикла
>Уверен на 90%, что это НЕ функция, как таковая, а on-line определение, типа:
…
>Поэтому, выносить его нет смысла.
Не on-line, а очевидно inline? Не могет: она виртуальная. Интереснее другое: почему ее компилятор за цикл не вынес?
>> Лень: не зря же FindMethod виртуальная, почему же она не переопределена ни в одном из наследуемых классов для более
>>оптимального поиска?
>Это не лень, а осмотрительность. Функции позднего связывания, конечно, могут серьюзно украсить алгоритм и придать ему супер крутизну, но только не скорость выполнения!
Если так рассуждать, то тогда опять же, какого х. делать ф-цию виртуальной, если все равно не переопределять. Ведь вызов виртуала хоть на чуть-чуть, но медленнее вызова невиртуала.
Компилятор не может делать предположений о том, что GetNMethods каждый раз возвращает одно и то же значений, тк не видит ее реализации.
Глюк с таблицей (Saguna) исправлен.
Номер версии менять не стал.
Кто уже скачивал 1.1.0.4 — скачайте еще раз пжста.
(корум) >(JohnyDeath) Всё нравится. Но… 5-6 ДЛЛ хуже, чем 1. Забыть не получится ;о
http://www.script-coding.info/Intellisense.html
Дык ни одной длл-кой больше не станет! Это скрипты для телепата! Подробнее можешь почитеть здесь:
(JohnyDeath) и таки ви мне будете говорить за интеллисенса?
Ну не надо, стоит уже год.
Телепат (+опенконф, естессно) подкупает своей открытостью, 1с++ — всеобъемлемостью. По крайней мере, пока. 1с++ = 1с++ плюс turbobl плюс FormEx плюс ещё что-то.
А есть ли возможность выложить дебаг версию DLL?
Просто где-то она работает (Сервер 2003), а где-то (локальная машина) не работает.
При запуске 1С, она пишет внизу «Выполнение обработки» и через 2-3 сек. закрывается.
Потом приходится заходить монопольно чтобы восстановить индексы и картина повторяется.
Может быть не срабатывает хук на CBLContext::FindMethod, но это визуально же не определишь, а копаться с отладчиком не очень хочется, но видимо прийдется…
Используются ли еще какиенить ВК?
Не лежит ли где-нить на локальной машине старая версия TurboBL?
В самое программе никакие сторонние ВК не используются.
Для конфигурирования подключен ОпенКонф + Телепат + Intellisense.
Сейчас проверил, на сервере просто стоит Опенконф+Телепат.
Удалил Intellisense на локальной машине — то же самое.
Локальные машина: Win2k3 RUS на AMD Athlon 3000+ и Win2k3 RUS на Intel Prescott 3.0Ghz с вкл. HT, на обеих вылетает.
Проверил, если на Win2k3 RUS на AMD Athlon 3000+ включаю 1С в список исключаемых из DEP, то работает.
На Win2k3 RUS на Intel Prescott 3.0Ghz с вкл. HT — не помогло…
P.S. Локально TurboBL нигде не лежит (установлена первый раз, копированием в каталог базы).
Это мой пост внизу 🙂
Вроде как разобрались, это с машинкой что-то…
Вообщем если у кого-то 1С будет закрываться при запуске, меняйте настройки DEP.
(InSTaNT)
Примерно понял в чем дело, завтра вышлю тебе для проверки исправленую версию
InSTaNT
Кинь мне свое мыло еще раз
Ошибки исправлены.
Версия 1.1.0.5
— Компонента доработана для работы на многопроцессорных системах и процессорах с HT.
— Компонента доработана для работы со включенным DEP.
— Оптимизировано обращение к полям ТаблицыЗначений.
Александр, твоя оперативность поражает!
А в 1с++ эти изменения будут внесены?
Да. Сейчас как раз ведется тестирование.
Новая версия ТурбоБЛ включена в 1С++. Брать как обычно, в ночной сборке, начиная с сегодняшнего числа.
Александр, Есть проблема, пользовал версию 1.1.0.2.
Модули справочников, доков, модулей проведения доков
использовал из текстовых файлов
например
#ЗагрузитьИзФайла ReferenceНомеклатураФС.txt //модуль формыСписка Номенклатуры
в процессе работы 1С в режиме Предприятия правлю текстовые файлы модулей, изменения отражаются сразу.
Заменил на 1.1.0.5 изменения текстовых файлов модулей не отражаются, пока не закрою 1С и снова не запущу.
Откатил обратно на версию 1.1.0.2
все заработало
Просьба проверить.
(JKey)
Проблема исправлена. Качать 1.1.0.6
В 1С++ исправления внесены.
Спасибо Александр. Работает.
последняя версия Ошибка: форма открывается, но 1с-ина матерится
Конт.Проверка();
{Обработка.Тест.Форма.Модуль(129)}: Поле агрегатного объекта не обнаружено (Проверка)
Нажми кнопочку «Загрузить TurboBL», закрой форму и попробуй снова
Ктонить может подтвердить баг?
У меня работает.
«Нажми кнопочку «Загрузить TurboBL», закрой форму и попробуй снова»
так и делаю
Компонента просто замечательная! Все работает без ошибок с весьма ощутимым приростом в скорости. Тесторовалось на конфигурации по переносусинхронизации ИБ. Автору плюсик к рейтингу.
Александр, а можно в нее добавить еще один небольшой сервис?
На машинах win XP или 2K не работает поиск по букве в выпадающем списке значений, а это очень не удобно! (пример: открываем Анализ субконто, вид субконто 1 и пытаемся набрать …контрагенты а в 98 работает),
P.S. нечто похожее видел в FormEX , однако 100% работоспособности не добился
+1
В чистой конфигурации в ГМ пишу три строчки
Процедура ПриНачалеРаботыСистемы()
ЗагрузитьВнешнююКомпоненту(«TurboBL.dll»);
КонецПроцедуры // ПриНачалеРаботыСистемы()
Сохраняю. Запускаю1С и … 1С падает.
<
В чистой конфигурации напиши три строчки:
Показать полностью
Сообщи результаты
Спасибо за науку.
а как быть с контекстом документа:
Показать полностью
выдает:
КонтДок.Записать();
{C:DORZHDB77DB_SOUZПЕРЕЗАПОЛНИТЬОБЩИЕНАКЛАДНЫЕ.ERT(18)}: Данная команда не может выполняться в формуле элемента диалога!
можно как-нибудь сохранить документ?
Присоединяюсь к последнему вопросу — как записать и провести документ? Также не удалось поработать таким образом с уже существующим в базе документом (через ОткрытьФорму). Может не так что-то делал?
Вообще-то сейчас проверил, точно такое-же поведение 1С и без загрузки ТурбоБЛ.
То есть что загрузил ТурбоБЛ, что не загрузил, выдается такая ошибка.
Может что не так делал?
Я создал в модуле процедуру:
Процедура _Записать()
ПриЗаписи();
Если СтатусВозврата() = 1 Тогда
Записать();
КонецЕсли;
КонецПроцедуры();
———
и вызываю Конт._Записать()
Так смысл то в том чтобы исходный код не переписывать. У меня обработка внешняя, запустилась , сделала все нужное, закрылась. Автор, где автор? Скажи что-нибудь по этому поводу!
Еще раз повторю — таково ШТАТНОЕ поведение 1С.
Вы хотите, чтобы я это исправил?
Ну если это можно исправить при помощи Вашей компоненты (не трогая саму 1С), то я думаю многим это придется по душе 🙂 А так , даже по текущим возможностям очень ускоряется исполнение всяких доп. обработок по внешнему заполнению документов
последняя версия Ошибка: форма открывается, но 1с-ина матерится
Конт.Проверка();
{Обработка.Тест.Форма.Модуль(129)}: Поле агрегатного объекта не обнаружено (Проверка)
Действительно: Ввиду дорабатываемости компоненты было бы прямо здорово предусмотеть возможность выгрузки компоненты. Не знаю только возможно ли это?
Автору респект.
Maniac
30.08.2006 А вообще было бы круто (можно даже сказать верх совершенства) если бы компонента имела режим включения выключения (в реальном времени) на закладке свойств 1С++ (Меню сервис — Параметры). Там кстати такие кнопки уже есть под некоторые свойства FormEx. Я думаю и для ТурбоБЛ такое будет реально.
Очень уж хочется иметь возможность «быстро» сравнивать быстродействие в рабочем режиме на очень больших объемах баз данных.
oyua — положи TurboBL.dll в PF1cv77Bin
иль забыл?
Извините. Вы правы, забыл.
Положил, все заработало.
Ускорение действительно наблюдается и обращение к процедурам
во внешних отчетах проходит.
Отлично!
Спасибо за труд и щедрую душу.
можно как либо загрузить TurboBL без регистрации в реестре, например с помощью vkloader,
Читаем историю версий:
Версия 1.1.0.3
— Изменен способ загрузки ВК, что уменьшило ее размер и позволило ей загружаться всегда.
Это и означает, что TurboBL не нуждается в регистрации в реестре для своей загрузки.
>> Желательно, чтобы компонента имела режим включения выключения
Данная фича реализована в 1С++ 2.5
По умолчанию фича ТурбоБЛ в 1С++ включена. Отключить можно, но отключение будет выполнено только после перезапуска 1С.
Но можно выключить ТурбоБЛ, перезапустить 1С, выполнить код без ТурбоБЛ, включить ТурбоБЛ, выполнить код с ТурбоБЛ и сравнить результаты 🙂
проблема совмесной работы ТурбоБЛ и ФормЭкс. При загрузке ТурбоБЛ перестала работать обработка событий нажатия клавиш {Процедура ПриНажатииКнопкиКлавиатуры(КодКлавиши, Alt,Shift,Ctrl,ФСО)} т.е. она просто не реагирует на нажатие описанных кнопок в частности на нажатие «Insert» и «Delete»
Большое спасибо! Компонента работает. Замерял время формирования прайс листа в Excel. С включенной компонентой формируется на 30% быстрее.
супер — с модулем формы теперь стало заметно удобнее.
если распечатывать пакетом документы таким образом — то на экране будут мелькать их открываемые формы. можно этого как нибудь избежать ?
Всё хорошо, но совместное использование TurboBL.dll с TurboMD.dll, перестает использоваться функционал последней
(66) У тебя старый ТурбоМД 🙁
Ищи новый TurboMd.dll версия 1.0.0.1 размер 20480б
ЗЫ не удивляйся номеру версии, это действительно новая версия, просто автор по неизвестной причине поставил такой номер.
как узнать активна компонента или нет
Ребята помогите у меня закрывается Предриятие , не загружается turbobl.dll
Без справочников вылетает 🙂
(70) Ставь последнюю 1с++http://www.1cpp.ru/images/3/32/Icpp-latest.rar , в состав которой входит и TurboBL. Там эта проблема решена, + ускорено создание встроенных объектов 1C и 1С++.
А что это у тебя за конфа такая без справочников?
>Хорошо бы поддержку Win7 😳
Сори, все корректно работает :), Надо модуль загрузки библиотеки скорректировать, а то не грузит по умолчанию
Такая проблема нигде не нашел похожей ошибки — при загрузке 1c пишет: ошибка загруки turbobl, самое интересное что версия 1.1.0.2 работает нормально, а 5 и 6 вылетает с ошибкой, внешние компоненты загружаю через hook_1c
добрый день! с успехом использую ваш библиотеку, на разных базах
всегда получал увеличение скорости построения отчетов в 2-3 раза
однако сегодня не удача:
77 торговля (почти обычная), крутиться на 2008-м сервере, поставил
ВК, выигрыш по скорости 2-4%, т.е. почти нулевой… с чем это может быть
связано?
добрый день! с успехом использую ваш библиотеку, скорость значительно возросла
вот случайно наткнулся, по описанию заинтересовало, скачаю и попробую, спасибо автору за данный труд
Спасибо! ускорение ощутимое! есть базы с тысячами сотров (1С7 ЗиК). Как раз для них.
http://infostart.ru/public/18924/ , очень полезная статья.
Есть еще методы ускорения, именно для 1с7ЗиК ?
Конечно нашел и
Прекрасная библиотека! Спасибо!
А если в процедуре Печать() есть вібор нескольких форм печати, можно как-то сделать, чтобы печаталась одна из них сразу, без выбора в каждом документе?