TurboBL




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?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='\

76 Comments

  1. mdzen

    Покрутил . Вещь!!! Особенно при работе с ТЗ и групповым контекстом разница во времени весьма ощутимая, после загрузки ВК это раз в 5-10 быстрее.

    Особенно порадовало, что можно через контекст обратится к методам и переменным модуля контекста.

    Получается весьма прикольно.

    У вас сказано, что «Функционал компоненты включен в состав 1С++», тогда вопрос:

    Где ее включить в 1С++?

    Reply
  2. mdzen

    Вроде нашел. По всей видимости следующий код включает ускоритель в 1С++:

    Попытка
    СоздатьОбъект(«УскорительГК»);
    Загружена=1;
    Исключение
    Загружена=0;
    КонецПопытки;
    
    Reply
  3. orefkov

    В 1С++ этот функционал по умолчанию включен, те достаточно сделать

    ЗагрузитьВнешнююКомпоненту(«1cpp.dll»)

    Но пока в 1С++ более старая версия, в которой несовсем правильно работают таблицы

    при вызове методов модуля через контекст, и нет автоускорения контекстов внешних отчетов.

    Reply
  4. orefkov

    Да, не стоит думать, что 1С будет после этой ВК «летать».

    Все-таки основное время в 1С тратится на доступ к базе данных, хотя в-среднем выигрыш по скорости будет, в районе 10-15 процентов.

    Reply
  5. CheBurator

    да, все хорошо… но прямо как в анекдоте (вот еще вчера с глюком формекса в составе 1с++ встретился)

    — Скажите, это правда что вы виграли в спортлото «Волгу»?

    — Правда, но не «Волгу», а 1000 руб, и не в Спортлото, а в преферанс, и не выиграл, а проиграл…

    😉

    Reply
  6. antonrost

    Валится 1С при «Запрос.Выполнить(…)»

    :(((((((

    Reply
  7. orefkov

    Исправлено

    Reply
  8. antonrost

    Вот это оперативность !!!!

    :)))

    +10, однозначно. С нетерпением ждем новых свершений.

    Reply
  9. orefkov

    Оказывается, когда делаешь Запрос.Выполнить, 1С генерит исполняемые модули, видимо для вычисления внешних функций.

    Но чем-то эти модули отличаются, тк при вызове одного из их методов, 1С падает.

    Reply
  10. корум

    +1.

    осталось телепат скрестить с 1с++, и научить её ускорять ДБФ.

    И получится НЕЧТО!

    Reply
  11. JohnyDeath

    корум, а чем тебя скрипты Intellisense не устраиваютт?

    Reply
  12. Saguna

    Валится при попытке выполнения кода управления таблицей в режиме ввода,

    например:

    Таблица.Область(, 1,, ФиксКол).ШиринаСтолбца(15);

    Reply
  13. orefkov

    Проверю

    Reply
  14. корум

    (JohnyDeath) Всё нравится. Но… 5-6 ДЛЛ хуже, чем 1. Забыть не получится ;о)

    Reply
  15. O-Planet

    Ты, конечно, монстЁр, но кое в чем не прав.

    > Некомпетентность: GetNMethods можно вынести из цикла

    Уверен на 90%, что это НЕ функция, как таковая, а on-line определение, типа:

    class BBB

    { void *ptr;



    public:

    int GetNMethods(int i) { return ptr+i; }

    }

    Поэтому, выносить его нет смысла.

    > Лень: не зря же FindMethod виртуальная, почему же она

    не переопределена ни в одном из наследуемых классов для более

    оптимального поиска?

    Это не лень, а осмотрительность. Функции позднего связывания, конечно, могут серьюзно украсить алгоритм и придать ему супер крутизну, но только не скорость выполнения! Это чуть ли не самый ресурсоемкий и медленный механизм. В предложенном тобой случае 1С работала бы медленнее раза в полтора.

    Reply
  16. O-Planet

    В смысле

    int *GetNMethods(int i) { return ptr+i; }

    конечно, а ПТР не void* а int*

    Reply
  17. orefkov

    (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 в конечных классах)

    и заработало быстрее

    Reply
  18. orefkov

    (Saguna)

    У меня не валится. Кинь мне пример таблицы, на которой у тебя падает

    Reply
  19. to O-Planet

    >> Некомпетентность: GetNMethods можно вынести из цикла

    >Уверен на 90%, что это НЕ функция, как таковая, а on-line определение, типа:



    >Поэтому, выносить его нет смысла.

    Не on-line, а очевидно inline? Не могет: она виртуальная. Интереснее другое: почему ее компилятор за цикл не вынес?

    >> Лень: не зря же FindMethod виртуальная, почему же она не переопределена ни в одном из наследуемых классов для более

    >>оптимального поиска?

    >Это не лень, а осмотрительность. Функции позднего связывания, конечно, могут серьюзно украсить алгоритм и придать ему супер крутизну, но только не скорость выполнения!

    Если так рассуждать, то тогда опять же, какого х. делать ф-цию виртуальной, если все равно не переопределять. Ведь вызов виртуала хоть на чуть-чуть, но медленнее вызова невиртуала.

    Reply
  20. orefkov

    Компилятор не может делать предположений о том, что GetNMethods каждый раз возвращает одно и то же значений, тк не видит ее реализации.

    Reply
  21. orefkov

    Глюк с таблицей (Saguna) исправлен.

    Номер версии менять не стал.

    Кто уже скачивал 1.1.0.4 — скачайте еще раз пжста.

    Reply
  22. JohnyDeath

    (корум) >(JohnyDeath) Всё нравится. Но… 5-6 ДЛЛ хуже, чем 1. Забыть не получится ;о

    Дык ни одной длл-кой больше не станет! Это скрипты для телепата! Подробнее можешь почитеть здесь: http://www.script-coding.info/Intellisense.html

    Reply
  23. корум

    (JohnyDeath) и таки ви мне будете говорить за интеллисенса?

    Ну не надо, стоит уже год.

    Телепат (+опенконф, естессно) подкупает своей открытостью, 1с++ — всеобъемлемостью. По крайней мере, пока. 1с++ = 1с++ плюс turbobl плюс FormEx плюс ещё что-то.

    Reply
  24. А есть ли возможность выложить дебаг версию DLL?

    Просто где-то она работает (Сервер 2003), а где-то (локальная машина) не работает.

    При запуске 1С, она пишет внизу «Выполнение обработки» и через 2-3 сек. закрывается.

    Потом приходится заходить монопольно чтобы восстановить индексы и картина повторяется.

    Может быть не срабатывает хук на CBLContext::FindMethod, но это визуально же не определишь, а копаться с отладчиком не очень хочется, но видимо прийдется…

    Reply
  25. orefkov

    Используются ли еще какиенить ВК?

    Не лежит ли где-нить на локальной машине старая версия TurboBL?

    Reply
  26. В самое программе никакие сторонние ВК не используются.

    Для конфигурирования подключен ОпенКонф + Телепат + 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 нигде не лежит (установлена первый раз, копированием в каталог базы).

    Reply
  27. Это мой пост внизу 🙂

    Reply
  28. Вроде как разобрались, это с машинкой что-то…

    Вообщем если у кого-то 1С будет закрываться при запуске, меняйте настройки DEP.

    Reply
  29. orefkov

    (InSTaNT)

    Примерно понял в чем дело, завтра вышлю тебе для проверки исправленую версию

    Reply
  30. orefkov

    InSTaNT

    Кинь мне свое мыло еще раз

    Reply
  31. orefkov

    Ошибки исправлены.

    Версия 1.1.0.5

    — Компонента доработана для работы на многопроцессорных системах и процессорах с HT.

    — Компонента доработана для работы со включенным DEP.

    — Оптимизировано обращение к полям ТаблицыЗначений.

    Reply
  32. JohnyDeath

    Александр, твоя оперативность поражает!

    А в 1с++ эти изменения будут внесены?

    Reply
  33. orefkov

    Да. Сейчас как раз ведется тестирование.

    Reply
  34. artbear

    Новая версия ТурбоБЛ включена в 1С++. Брать как обычно, в ночной сборке, начиная с сегодняшнего числа.

    Reply
  35. Jkey

    Александр, Есть проблема, пользовал версию 1.1.0.2.

    Модули справочников, доков, модулей проведения доков

    использовал из текстовых файлов

    например

    #ЗагрузитьИзФайла ReferenceНомеклатураФС.txt //модуль формыСписка Номенклатуры

    в процессе работы 1С в режиме Предприятия правлю текстовые файлы модулей, изменения отражаются сразу.

    Заменил на 1.1.0.5 изменения текстовых файлов модулей не отражаются, пока не закрою 1С и снова не запущу.

    Откатил обратно на версию 1.1.0.2

    все заработало

    Просьба проверить.

    Reply
  36. orefkov

    (JKey)

    Проблема исправлена. Качать 1.1.0.6

    В 1С++ исправления внесены.

    Reply
  37. Jkey

    Спасибо Александр. Работает.

    Reply
  38. maximum

    последняя версия Ошибка: форма открывается, но 1с-ина матерится

    Конт.Проверка();

    {Обработка.Тест.Форма.Модуль(129)}: Поле агрегатного объекта не обнаружено (Проверка)

    Reply
  39. orefkov

    Нажми кнопочку «Загрузить TurboBL», закрой форму и попробуй снова

    Reply
  40. orefkov

    Ктонить может подтвердить баг?

    У меня работает.

    Reply
  41. maximum

    «Нажми кнопочку «Загрузить TurboBL», закрой форму и попробуй снова»

    так и делаю

    Reply
  42. imsoftware

    Компонента просто замечательная! Все работает без ошибок с весьма ощутимым приростом в скорости. Тесторовалось на конфигурации по переносусинхронизации ИБ. Автору плюсик к рейтингу.

    Reply
  43. Александр, а можно в нее добавить еще один небольшой сервис?

    На машинах win XP или 2K не работает поиск по букве в выпадающем списке значений, а это очень не удобно! (пример: открываем Анализ субконто, вид субконто 1 и пытаемся набрать …контрагенты а в 98 работает),

    P.S. нечто похожее видел в FormEX , однако 100% работоспособности не добился

    Reply
  44. Бракозябра

    +1

    В чистой конфигурации в ГМ пишу три строчки

    Процедура ПриНачалеРаботыСистемы()

    ЗагрузитьВнешнююКомпоненту(«TurboBL.dll»);

    КонецПроцедуры // ПриНачалеРаботыСистемы()

    Сохраняю. Запускаю1С и … 1С падает.
    <

    Reply
  45. orefkov

    В чистой конфигурации напиши три строчки:

    Код
    Процедура ПриНачалеРаботыСистемы()
        СоздатьОбъект("Справочник");
    КонецПроцедуры // ПриНачалеРаботыСистемы()
    

    Показать полностью

    Сообщи результаты

    Reply
  46. Бракозябра

    Спасибо за науку.

    Reply
  47. support

    а как быть с контекстом документа:

    Код
    Док= СоздатьОбъект("Документ.ПродажаЧерезФирму");
    Док.ВыбратьДокументы(НачДата,КонДата);
    Пока Док.ПолучитьДокумент()=1 Цикл
       ОткрытьФорму(Док.ТекущийДокумент(),КонтДок);
       КонтДок.ЗаполнитьПоДокументамЗаДень();
       КонтДок.Записать();
    .....
    

    Показать полностью

    выдает:

    КонтДок.Записать();

    {C:DORZHDB77DB_SOUZПЕРЕЗАПОЛНИТЬОБЩИЕНАКЛАДНЫЕ.ERT(18)}: Данная команда не может выполняться в формуле элемента диалога!

    можно как-нибудь сохранить документ?

    Reply
  48. MAXXL

    Присоединяюсь к последнему вопросу — как записать и провести документ? Также не удалось поработать таким образом с уже существующим в базе документом (через ОткрытьФорму). Может не так что-то делал?

    Reply
  49. orefkov

    Вообще-то сейчас проверил, точно такое-же поведение 1С и без загрузки ТурбоБЛ.

    То есть что загрузил ТурбоБЛ, что не загрузил, выдается такая ошибка.

    Может что не так делал?

    Reply
  50. antonrost

    Я создал в модуле процедуру:

    Процедура _Записать()

    ПриЗаписи();

    Если СтатусВозврата() = 1 Тогда

    Записать();

    КонецЕсли;

    КонецПроцедуры();

    ———

    и вызываю Конт._Записать()

    Reply
  51. MAXXL

    Так смысл то в том чтобы исходный код не переписывать. У меня обработка внешняя, запустилась , сделала все нужное, закрылась. Автор, где автор? Скажи что-нибудь по этому поводу!

    Reply
  52. orefkov

    Еще раз повторю — таково ШТАТНОЕ поведение 1С.

    Вы хотите, чтобы я это исправил?

    Reply
  53. MAXXL

    Ну если это можно исправить при помощи Вашей компоненты (не трогая саму 1С), то я думаю многим это придется по душе 🙂 А так , даже по текущим возможностям очень ускоряется исполнение всяких доп. обработок по внешнему заполнению документов

    Reply
  54. последняя версия Ошибка: форма открывается, но 1с-ина матерится

    Конт.Проверка();

    {Обработка.Тест.Форма.Модуль(129)}: Поле агрегатного объекта не обнаружено (Проверка)

    Reply
  55. rudra

    Действительно: Ввиду дорабатываемости компоненты было бы прямо здорово предусмотеть возможность выгрузки компоненты. Не знаю только возможно ли это?

    Автору респект.

    Maniac

    30.08.2006 А вообще было бы круто (можно даже сказать верх совершенства) если бы компонента имела режим включения выключения (в реальном времени) на закладке свойств 1С++ (Меню сервис — Параметры). Там кстати такие кнопки уже есть под некоторые свойства FormEx. Я думаю и для ТурбоБЛ такое будет реально.

    Очень уж хочется иметь возможность «быстро» сравнивать быстродействие в рабочем режиме на очень больших объемах баз данных.

    Reply
  56. rudra

    oyua — положи TurboBL.dll в PF1cv77Bin

    иль забыл?

    Reply
  57. Извините. Вы правы, забыл.

    Положил, все заработало.

    Ускорение действительно наблюдается и обращение к процедурам

    во внешних отчетах проходит.

    Отлично!

    Спасибо за труд и щедрую душу.

    Reply
  58. можно как либо загрузить TurboBL без регистрации в реестре, например с помощью vkloader,

    Reply
  59. orefkov

    Читаем историю версий:

    Версия 1.1.0.3

    — Изменен способ загрузки ВК, что уменьшило ее размер и позволило ей загружаться всегда.

    Это и означает, что TurboBL не нуждается в регистрации в реестре для своей загрузки.

    Reply
  60. artbear

    >> Желательно, чтобы компонента имела режим включения выключения

    Данная фича реализована в 1С++ 2.5

    По умолчанию фича ТурбоБЛ в 1С++ включена. Отключить можно, но отключение будет выполнено только после перезапуска 1С.

    Но можно выключить ТурбоБЛ, перезапустить 1С, выполнить код без ТурбоБЛ, включить ТурбоБЛ, выполнить код с ТурбоБЛ и сравнить результаты 🙂

    Reply
  61. avega

    проблема совмесной работы ТурбоБЛ и ФормЭкс. При загрузке ТурбоБЛ перестала работать обработка событий нажатия клавиш {Процедура ПриНажатииКнопкиКлавиатуры(КодКлавиши, Alt,Shift,Ctrl,ФСО)} т.е. она просто не реагирует на нажатие описанных кнопок в частности на нажатие «Insert» и «Delete»

    Reply
  62. Pa3yM

    Большое спасибо! Компонента работает. Замерял время формирования прайс листа в Excel. С включенной компонентой формируется на 30% быстрее.

    Reply
  63. waol

    супер — с модулем формы теперь стало заметно удобнее.

    если распечатывать пакетом документы таким образом — то на экране будут мелькать их открываемые формы. можно этого как нибудь избежать ?

    Reply
  64. NFF

    Всё хорошо, но совместное использование TurboBL.dll с TurboMD.dll, перестает использоваться функционал последней

    Reply
  65. artbear

    (66) У тебя старый ТурбоМД 🙁

    Ищи новый TurboMd.dll версия 1.0.0.1 размер 20480б

    ЗЫ не удивляйся номеру версии, это действительно новая версия, просто автор по неизвестной причине поставил такой номер.

    Reply
  66. kivduts

    как узнать активна компонента или нет

    Reply
  67. shiuck

    Ребята помогите у меня закрывается Предриятие , не загружается turbobl.dll

    Reply
  68. sergebozz

    Без справочников вылетает 🙂

    Reply
  69. JohnyDeath

    (70) Ставь последнюю 1с++ http://www.1cpp.ru/images/3/32/Icpp-latest.rar , в состав которой входит и TurboBL. Там эта проблема решена, + ускорено создание встроенных объектов 1C и 1С++.

    А что это у тебя за конфа такая без справочников?

    Reply
  70. DarkAn

    >Хорошо бы поддержку Win7 😳

    Сори, все корректно работает :), Надо модуль загрузки библиотеки скорректировать, а то не грузит по умолчанию

    Reply
  71. byos

    Такая проблема нигде не нашел похожей ошибки — при загрузке 1c пишет: ошибка загруки turbobl, самое интересное что версия 1.1.0.2 работает нормально, а 5 и 6 вылетает с ошибкой, внешние компоненты загружаю через hook_1c

    Reply
  72. pisarevEV

    добрый день! с успехом использую ваш библиотеку, на разных базах

    всегда получал увеличение скорости построения отчетов в 2-3 раза

    однако сегодня не удача:

    77 торговля (почти обычная), крутиться на 2008-м сервере, поставил

    ВК, выигрыш по скорости 2-4%, т.е. почти нулевой… с чем это может быть

    связано?

    Reply
  73. levoven

    добрый день! с успехом использую ваш библиотеку, скорость значительно возросла

    Reply
  74. TrinitronOTV

    вот случайно наткнулся, по описанию заинтересовало, скачаю и попробую, спасибо автору за данный труд

    Reply
  75. Agema

    Спасибо! ускорение ощутимое! есть базы с тысячами сотров (1С7 ЗиК). Как раз для них.

    Есть еще методы ускорения, именно для 1с7ЗиК ?

    Конечно нашел и http://infostart.ru/public/18924/, очень полезная статья.

    Reply
  76. yuyu1

    Прекрасная библиотека! Спасибо!

    А если в процедуре Печать() есть вібор нескольких форм печати, можно как-то сделать, чтобы печаталась одна из них сразу, без выбора в каждом документе?

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *