Загрузка процессора 100% в 7.7 под Windows Server 2008 при блокировке журнала транзакций.




Принцип обмена данными из 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='\

92 Comments

  1. iov

    (0) А по «секретному» релизу если не трудно подкормите информацией… (а то честно говоря как то 7.7 уже не так оперативно отслеживаю.)

    Reply
  2. maxpiter
    iov пишет:

    (0) А по «секретному» релизу если не трудно подкормите информацией… (а то честно говоря как то 7.7 уже не так оперативно отслеживаю.)

    http://infostart.ru/public/82018/

    Reply
  3. zabaluev

    Что то не работает оптимизатор на 2003 сервере. До этого использовал vk_TerminalSleep.7z, эффект был. Решил попробовать вашу систему, пользователи закричали, что постоянно транзакции. 🙁

    Reply
  4. maxpiter

    (3) теоретически должно работать, но делалось по Windows Server 2008 + http://infostart.ru/public/82018/

    ОтключитьТаймаут = 1 — сделали?

    Reply
  5. zabaluev

    Вот такой код вставил:

    //////////////////////////////////////////

    Перем vk_hook Экспорт;

    //////////////////////////////////////////

    Процедура ПриНачале…..

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

    vk_hook=СоздатьОбъект(«Addin.vk_Hook1C»);

    vk_hook.ПерехватSQLExecDirect();

    vk_hook.МаксимальныйSleep=1024;

    vk_hook.ОтключитьТаймаут = 1; //по умолчанию = 0

    vk_hook.ОтключитьДедлок = 0; //по умолчанию = 0

    Reply
  6. maxpiter

    (5)

    возможно BkEnd.dll не оригинальная. Попробуйте взять оригинальную из поставки 1С переименовать ее в BkEnd0.dll, а BkEnd.dll взять из «Секретного релиза», хотя для 2003 достаточно оригинальной BkEnd

    Возможно используете ODBC32.dll в связке с ODBC33.dll. Нужна ODBC32.dll оригинальная.

    Установите на виртуалке или отдельной машине оригинальную 1С, добавьте туда vk_hook1C.dll и сымитируйте блокировку транзакции.

    Reply
  7. maxpiter

    (5) прикрепил пример базы.

    Reply
  8. zakiap2

    maxpiter, Пожалуйста выложи на альтернативный хостинг выложите, хочу посмотреть твой вариант …

    Reply
  9. zakiap2

    Народ хотел спросить кто использует ODBC33.DLL нет ли проблемы с 1с когда много блокировок идет начинается 1с у пользователей закрываться с ошибкой?

    Reply
  10. maxpiter

    (9) много это сколько? при 50 не закрывается.

    Reply
  11. zakiap2
    maxpiter пишет:

    (9) много это сколько? при 50 не закрывается.

    Ну это когда одновремено 3-5 пользователей начинаю проводит доки и тут еще масовая загрузка доков в течении сек 30, так у некоторых почему то 1с тупо закрывается и все, вот немогу понять из за чего скачал эту dll попробую место odnc33.dll

    Reply
  12. maxpiter

    (11) не должно, у меня пользователь висит в ожидании до посинения.

    Reply
  13. zakiap2
    maxpiter пишет:

    (11) не должно, у меня пользователь висит в ожидании до посинения.

    Проверил вроде работает, можно одно пожелание?

    Добавить «UseBalloon=1 ; Показывать balloon tooltips (всплывающие сообщения) в трее» как в odbc33 ?

    Reply
  14. maxpiter

    (13) добавлений чего либо в эту dll не планируется вообще.

    Reply
  15. zakiap2
    maxpiter пишет:

    (13) добавлений чего либо в эту dll не планируется вообще.

    Жаль, а тогда можно получить исходники? я сам доработают …

    Reply
  16. maxpiter

    (15) прикрепил исходники. Как «отмодерируют», появится.

    Reply
  17. zakiap2
    maxpiter пишет:

    (15) прикрепил исходники. Как «отмодерируют», появится.

    Большое спасибо!

    Reply
  18. mxm2

    При работе связки SQL Server 2008 R2 x64 + 1Cpp + Solution6 + vk_hook1C = Выпадает при потытке просмотра движений из журнала документов

    При начале работы системы сначала грузится 1Cpp, затем vk_hook1C.

    Добавка: Разобрался работает если установить в SQL Совместимость c SQL2000(80). пока работает.

    Reply
  19. maxpiter

    (18) 7ка только при такой настройке SQL и работает корректно.

    Reply
  20. maxpiter

    (20) а описание посмотреть не судьба? там синим по белому написано 🙂

    http://infostart.ru/public/83504/

    Reply
  21. Ferenz

    (20)А что за ошибки? И какое нашел решение?

    Reply
  22. Ferenz

    (6)Скажите пожалуйста, а патченой BkEnd.dll определенно работать не будет?

    Reply
  23. maxpiter

    (23) у меня не работало

    Reply
  24. astars

    Скажите пожалуйста, есть сервер Windows 2008 SP2, SQL 2000, 1С 7.7 (27 релиз), пользователи работают терминально через RemoteApp. Cлучается произвольно, что несколько (от 1 до 4 из 30 однотипных пользователей) подключений, начинают интенсивно использовать процессор, одна сессия забирает 13% проц. времени (всего 8 процессоров) т.е. 1 процессор, при этом у пользователя никаких форм журналов, обработок или списков не открыто. Пользователь при этом никаких изменений не замечает работоспособность не нарушается. Помогает только сброс сессии. Воспроизвести данную ситуацию не удается.

    Замеры производительности в отладчике ничего не показали, нагрузку даёт процесс 1cv7s.exe, монитор ресурсов Windiws тоже ничего экстремального не показывает. Использование vk_hook1C результатов не дало.

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

    Используются внешние компоненты 1С++, FormEx, DialMail. Используется Перехватчик и ТабличноеПоле, много прямых запросов через ODBCRecordSet.

    Reply
  25. maxpiter

    (25) у меня иногда начинает 1С очень сильно тупить у некоторых пользователей. Просто снимаю сессию RDP и пользователь заходит снова, тормоза исчезают. Это не связано с vk_hook.

    Благо такое случается раз-два в неделю и в целом не мешает процессу.

    Reply
  26. astars

    (26) у меня ежедневно появляется 2 — 4 таких подключения, а постоянно мониторить подключения нет возможности, благо пока мощности позволяют, но это неправильно. Установить бы причину.

    Reply
  27. maxpiter

    (27) так не связано ли это с RDP? или какими-то настройками сервера, сети, конкретной машины пользователя.

    если бы SQL то у всех бы тупило

    если бы 1С то скорее на похожих ситуациях вешалось бы и опять таки у всех

    у меня в основном 3-4 человек с такими зависаниями есть.

    Если есть подозрения на «… данное событие происходит во время краткосрочной потери связи …», то может попробовать для начала в маршрутизаторе провода в гнездах попереставлять, или вообще особо зависающих пересадить на отдельный хаб…

    ну это так, мысли вслух

    Reply
  28. xaker1C

    Не было такой проблемы 50 ком в сети все работают с 1с 7.7 и 8.2 смотри настройки сервера 2008

    Reply
  29. profych1

    Тема очень актуальна для тех, кто еще на 7.7

    Reply
  30. astars

    Всем спасибо за участие, проблема решена. Через Process Explorer выяснил что у этих процессов была подгружена ScanOpos.dll, вот она и давала такую нагрузку.

    Reply
  31. Масянечка

    Спасибо огромное! Пробую на связке Windows Server 2008 + Sql Server 2000 SP4 + секретный релиз.

    Reply
  32. MegaDimich

    Подскажите, пожалуйста, будет ли работать это решение на связке Windows Server 2003 + SQL Server 2005 + секретный релиз ?

    Reply
  33. MegaDimich

    При использовании секретного релиза обязательно ли установить в SQL Совместимость c SQL2000(80)?

    Reply
  34. maxpiter

    (33) На 2003 сервере нет необходимости устанавливать данную разработку. Эта сделана специально для 2008 сервера.

    (34) Да.

    Reply
  35. mybracho

    (34) Так секретный релиз ведь для того и сделан, что б работать «без понижения режима совместимости»

    Reply
  36. maxpiter

    (36) попробуйте, потом расскажете как оно живет 🙂

    Reply
  37. mybracho

    (37) Попробовал. Полгода стоит. Нормально работает.

    Для решения проблемы 100 процентов применил патч от ромикса

    Reply
  38. maxpiter

    (38) сервер какой?

    Reply
  39. mybracho

    (39)Server 2003 64x+SQL 2008 R2

    Reply
  40. maxpiter

    (40) тема называется «Загрузка процессора 100% в 7.7 под Windows Server 2008»

    Для Server 2008 патч от ромикса не работает, почему собственно и наваял это решения.

    В описании про это написано.

    Reply
  41. shurix

    Я не 1Сник, поэтому прошу о маленьком уточнении:

    достаточно просто подключить эту ВК для устранения проблемы или необходимо еще переписывать что-то в БД?

    Reply
  42. maxpiter

    (42) достаточно подключить как написано в примере.

    В приложении к публикации есть пример конфигурации.

    Reply
  43. shurix

    (43) спасибо за оперативный ответ.

    Reply
  44. ALCAPONA

    Привет, maxpiter !

    Имеем Win 2008 Std R2 + SQL 2008 Ent R2 + 7.7.027 + секретный релиз (начальный BkEnd оригинальный, переименован в BkEnd0).

    В каталог ИБ положил Вашу dll, в глобальник прописал

    ЗагрузитьВнешнююКомпоненту(каталогИБ()+»vk_Hook1C.dll»);

    vk_hook=СоздатьОбъект(«Addin.vk_Hook1C»);

    vk_hook.ПерехватSQLExecDirect();

    vk_hook.МаксимальныйSleep=1024;

    vk_hook.ОтключитьТаймаут = 1; //по умолчанию = 0

    vk_hook.ОтключитьДедлок = 0; //по умолчанию = 0

    ЗагрузитьВнешнююКомпоненту и СоздатьОбъект отрабатывает правильно, а на строке

    «vk_hook.ПерехватSQLExecDirect();» 1с-ка замирает и выбрасывается с ошибкой.

    После этого к сожалению пришлось закоментарить в глобальнике вызов Вашей компоненты.

    Не могли бы Вы помочь мне в данной ситуации ?

    Reply
  45. maxpiter

    (45) попробуйте конфигурацию, приложенную в примере.

    На ней как себя будет вести?

    Reply
  46. ALCAPONA

    (46)

    Пример скачать сам не могу, т.к. на форуме ещё менее 20 сообщений.

    Но вчера попробовал то же самое, но при понижении режима совместимости в БД до SQL 2000. В такой ситуации Ваша dll работает и справляется с блокировками как надо. Вот только остался како-то неприятный осадок, что специально ставился секретный релиз для сохранения режима SQL 2008, но всё таки его пришлось понижать …

    Reply
  47. maxpiter

    (47) а если режим совместимости поставить 2005? на момент тестирования у меня SQL 2005 установлен.

    Reply
  48. ALCAPONA

    (48)

    Уже запустил в созданную рабочую базу людей, пока не смогу опробовать.

    Reply
  49. ALCAPONA

    Попробовал режим совместимости 2005, та же история, вернул 2000.

    Reply
  50. vitn

    vk_hook1C.dll работает только если РЕЖИМ совместимости SQL установлен 2000, какой смысл тогда секретного релиза????????????

    Reply
  51. ALCAPONA

    Уважаемый maxpiter, может быть у Вас есть возможность переписать эту разработку для работы хотя бы в режиме совместимости SQL 2005 ?

    Reply
  52. maxpiter

    (51) без «секретного релиза» 1С не запустится на 7ке и 2008 винде без изменения 1С’ных библиотек.

    (52)

    по идее нужно найти как называется функция перехвата для 2005 и 2008 sql.

    для 2000 она называется SQLExecDirectA и SQLPrepareA.

    —-

    хотя не факт, что получится, т.к. нужно разбирать эту самую функцию придется.

    Мне сейчас искать их ну никак не получается, воюю с почтой россии и таможней 🙁

    Reply
  53. ALCAPONA

    (53)

    Ну если у Вас получится это сделать в обозримом будущем, буду Вам очень признателен.

    Reply
  54. shurix

    maxpiter, такой вот вопрос («слегка» не по теме):

    здесь на Инфостарте есть публикация «Удобная «выгонялка» пользователей из 1С без доработок кода» ( http://infostart.ru/public/14593/ ), основанная на разработке Romix’а. Она «вклинивается» в адресное пространство с целью перехвата WinAPI-функции ShellExecuteA при помощи патчинга seven.dll (заменяется с shell32.dll на hook_1c.dll). В общем, для меня весьма удобная штука была бы, если бы не одно «но»…

    Беда в том, что эта «выгонялка» не работает с Секретным Релизом. Может посоветуете что, учитывая что и у вас, и в той разработке используется hook_1c.dll ?

    Reply
  55. maxpiter

    (55) Подменять вашу hook_1c.dll на ту которая предложена в этой публикации пробовали?

    dll можно переименовать из vk_Hook1C.dll в hook_1c.dll и в конфигурации заменить на СоздатьОбъект(«Addin.vk_Hook1C»);

    Все остальное по идее должно работать.

    Или же в указанной вами публикации в hook_1c.dll внесены дополнения?

    Reply
  56. shurix

    (56) попробую воспользоваться вашим советом.

    Меня слегка смущает, что при использовании этой «выгонялки» для юзверя сообщение о блокировке базы появляется до выбора пользователей из списка 1С.

    Не знаю, насколько там изменена dll-ка. Она называется HOOK_1C.DLL и загружает плагины, перечисленные в файле Hook_1C.ini, из папки Plugins.

    P.S. Попробовал — пишет, что в библиотеке отсутствует точка входа ShellExecuteA 🙁

    Reply
  57. maxpiter

    (57) увы ничем помочь не могу, причины в 53

    Может быть, когда-нибудь 🙂

    Исходники у этой публикации и предложенной вами есть, осталось найти того, кто сможет их собрать 🙂

    Reply
  58. shurix

    (58) Выяснил в чём «затык» у той «выгонялки» — при использовании её вкупе с Секретным Релизом почему-то не появляется в трэе значок, через который можно заблокировать/разблокировать базу. Остается найти прогера, который исправит проблему (ООП и иже с ним, к сожалению, не мой профиль) или «терроризировать» самого автора-разработчика.

    Reply
  59. tana1257

    На данный момент очень актуальна Ваша сборка, так как процессор стал нагружаться до 100%. У нас Windows Server 2008, почему то 2,5 месяца(установили сервер 2008) все работало замечательно, установлен BkEnd пропатченный, теперь 5 дней, как все пользователи взвыли, очень сильно стал тормозить сервер. Попробую использовать вашу сборку.

    Reply
  60. tana1257

    Извените, что-то я не поняла, у вас нагружался процессор 100% при «секретном» релизе? У нас такое стало происходить при обычной конфигурации 1С (ПУБ). Для использования вашего оптимизатора, я должна установить «секретный» релиз?

    Reply
  61. maxpiter

    (60) интересно как у вас оно работало 2,5 месяца? Смысл «секретного релиза», как раз и заключается в том, чтобы 1С запустилась «в ОС Win Vista/7/2008 в режиме клиент-сервера (без манипуляций с файлами odbc-драйвера); »

    (61) если у вас и так работает без «секретного релиза», то вам его не нужно устанавливать. Достаточно скачать vk_hook1C.dll

    Reply
  62. tana1257

    Не дописала с обычным релизом.

    Reply
  63. tana1257

    Суть в том, что у на работала 1С с обычным релизом, на Сервере 2005, был полнейший тормоз, 2,5 назад купили новый сервер и установили 2008(я обычный пользователь, может не так изъясняюсь) Все пользователи вздохнули,1С стала «летать». Но наша радость длилась не долго, вот уже 5 дней, как при работе даже двух пользователей процесор подскакивает под 100% и обработка стала происходить очень медленно. Если я установлю «секретный» релиз и ваш оптимизатор улучшится ли работа 1С?

    Reply
  64. maxpiter

    (64) то что вы описываете, после установки компоненты и релиза, должно исчезнуть.

    К публикации прикреплен файл с демо базой, запустите его с вашими библиотеками, потом с теми что в поставке, сравните результат.

    Reply
  65. tana1257

    Большое спасибо за такой быстрый ответ

    Reply
  66. astars

    (64)Релиз установить нужно это проверено. Но если загрузка подскакивает до 100% при 2-активных пользователях, это что то с системой. Посмотри посты выше у меня была похожая ситуация.

    Reply
  67. shurix

    (53) вы «совершенно случайно» 🙂 не нашли свободного времени, чтобы сделать поддержку для sql2005/sql2008 режимов?

    Reply
  68. maxpiter

    (68) shurix, теперь ответный вопрос к вам 🙂 а вы разобрались с исходниками? получилось реализовать?

    Reply
  69. Maximysis

    Автору респект!!! Вещь нужная.

    Интересно а есть ли нечто подобное при записи справочников…

    Reply
  70. Maximysis

    ОтключитьДедлок что делает?

    Reply
  71. maxpiter

    отключает deadlock

    http://ru.wikipedia.org/wiki/%D0%92%D0%B7%D0%B0%D0%B8%D0%BC%D0%BD%D0%B0%D1%8F_%D­0%B1%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0

    Reply
  72. mrcastmaster

    Очень нужная вещь!

    Но проблема появилась следующего характера кто сталкивался?

    Неудачная попытка создания vk_hook=СоздатьОбъект(«Addin.vk_Hook1C»);

    Reply
  73. maxpiter

    (73) mrcastmaster,

    Не загружена компонента.

    Загрузку, инициализацию объекта и переменных делать в ГМ

    Reply
  74. mrcastmaster

    (74)

    Спасибо за ответ.

    Все прописал как и описан ов статье ушла проблема загрузки в 100% терминального сервера. НО не ушла проблема медленной работы 1С 7.7 и sql 2008 r2, все пользователи в терминале 2008 r2. Когда всех выгоняю и заходят первые люди все нормально, все работает. Но как только людей заваливается за 25-30 все начинает висеть и проведение 1 документа от 10 минут. Кто еще подскажет какие действия можно предпринять именно в данной связке(не предлагать использование sql 2000 и терминала под 2003)

    База 30 Гб. Пользователей до 170.

    Reply
  75. maxpiter

    (75) mrcastmaster, смотреть настройки SQL

    У меня SQL сервер 16 ядер, 128 гигов оперативки. БД вся в памяти умещается пока.

    База 105 гигов + log 91 гиг. tempdb на RAM диске.

    Работают одновременно до 75 юзеров. Самое долгое проведение 15 секунд, самое быстрое 0.19 секунды.

    То что до 10 минут проводится, означает что вы используете механизмы 1С для проведения документов, что очень плохо.

    Включайте отладчик и смотрите кто тупит, скорее всего ВременныйРассчет().

    И переходите на прямые запросы.

    Reply
  76. Supportkfk

    Привет всем

    Сильно не бейте.

    Скачал dll и пример базы. Все регистрируется, ошибок не выдает. НО нифига не фильтрует.

    В чем может быть проблема?

    Reply
  77. maxpiter

    (77) Supportkfk, сложно так сказать.

    На базе примера сделайте, пожалуйста, фильтрацию документов в журнале, как вы это видите и прикрепите сюда.

    Reply
  78. phsin

    Спасибо за разработку.

    Нашел ошибку — если в параметрах SQL базы установить Режим совместимости = 100 (MS SQL 2008)

    то при открытии журнала документов возникает ошибка:

    —————————

    1С:Предприятие

    —————————

    SQL State: 42000

    Native: 1018

    Message: [Microsoft][ODBC SQL Server Driver][SQL Server]Неправильный синтаксис около «INDEX». Если имелась в виду часть табличной подсказки, то для этого теперь необходимо использовать ключевое слово A WITH и круглые скобки. Правильный синтаксис см. в электронной документации по SQL Server.

    SQL State: 42000

    Native: 8180

    Message: [Microsoft][ODBC SQL Server Driver][SQL Server]Не удалось выполнить подготовку инструкций.

    —————————

    ОК

    —————————

    Если режим совместимости = 80, ошибка не возникает.

    Reply
  79. maxpiter

    (79) сминусовать бы 🙂

    коммент 18 и 34 выше написаны.

    Этот функционал работает только с режимом совместимости 80

    Reply
  80. chingiz001

    (80) Я вот тоже не понимаю, если использовать режим совместимости 80, то зачем тогда использовать секретный релиз?

    Reply
  81. maxpiter

    (81) столько лет уже прошло 🙂

    Без секретно релиза на 2008r2 1С не стартовала в даты топика. Как сейчас не знаю.

    Reply
  82. aldi.ivanovo

    vk_hook.ПерехватSQLPrepare() начинает перехват сообщений, а как завершить его?

    я использую режим совместимости sql 2014, перехват включаю только в одном журнале, перехватываю нужные мне запросы, ну и пяток не нужных, т.к. vk_hook шпарит запросы на диалекте sql 2000( другой сиснтаксис хинтов запроса ), приходится их тоже подменять.

    т.е. после установки нужных мне отборов мне перехват больше не нужен, а пользоваться полноценно журналом (смотреть подчиненные документы и т.д. ) уже невозможно, т.к. придется перехватывать кучу служебных запросов и все их заменять, чего делать не хочется.

    Есть ли метод остановки перехвата?

    т.е. ПерехватSQLPrepare() перехват начинает, а что может его завершить?

    Reply
  83. CheBurator

    Может кто-то подскажет в чем дело

    (доступа к с кулю не имею, SQL2008)

    Подключаюсь на удаленку к клиенту

    При попытке модификации метаданных — вылазит проблем.

    Например:

    — создаю новый справочник, сохраняю конфигурацию — все норм.

    — спр.номенклатура — меняю порядок реквизитов (строки неогр.длины вниз спсика реквизитов), сохраняю конфигурацию — бежит счетчик обработки спр.номенклатруры на 900 элементе в конфигураторе окошко проблемы (пиктограмма красный круглый знак ошибки), сообщеняи на окне никакого нет и кнопкой «Ок», жмем кнопку — получаем сообщение о проблеме

    — аналогично предыдущему, если пытаемся добавить реквизит в справочник.

    Проблемное сообщение:

    SQL State: HY000

    Native: 0

    …. Подключение занято до получения результатов для другого hstmt

    Беглое яндексение ссылается на проблемы когда прикладная работа с базой прямыми запросами и куросрами.

    Про конфигуратор — ничего бегло не нарыл.

    .

    куда смотреть, что копать?

    Спсб.

    Reply
  84. aldi.ivanovo

    (84)

    Как вариант нарушена уникальность какого нибудь поля в этом элементе(кода как правило), запустить в режиме предприятия, сортирнуть по коду, посмотреть что за 900й элемент, попробовать пересохранить его вручную с какими либо изменениями.

    Reply
  85. CheBurator

    (85) нет. такая же ситуация наблюдается если я аналогичным способом модифицирую спр.контрагенты

    Reply
  86. aldi.ivanovo

    (86)

    да, какая то нетипичная ошибка для конфигуратора.

    доступ к скулю все равно нужен.

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

    Reply
  87. CheBurator

    (87) хреново, это надо забэкапить скулем на всякий случай, а потом уже майстрячить…

    Reply
  88. aldi.ivanovo

    зачем, это типовые операции и к изменению структуры БД отношения не имеют, делается для отсечения прочих соединений, если они есть, чтоб уж быть точно уверенным. Бэкап и так делаться должен.

    Reply
  89. maxpiter

    (83) отключать ПерехватSQLPrepare метода нет, но он и не нужен, т.к. управление подменой реализовывается через

    УстановитьЗаменуSQL и УдалитьЗаменуSQL

    у меня реализовано так

    //======================================================================
    Процедура локУстановитьВКХук(vk_hook, стрКонтр, ИДОбъектов)
    т = «SP»+глМД.ИДОбъекта(Метаданные.ОбщийРеквизитДокумента(стрКонтр));
    vk_hook.ТекстSQL=т+»=?»;
    vk_hook.НовыйSQL=ИДОбъектов+т+»=?»;
    vk_hook.УстановитьЗаменуSQL();
    КонецПроцедуры // локУстановитьВКХук
    
    //==========================================================­============
    Процедура локУдалитьВКХук(vk_hook, стрКонтр)
    т = «SP»+глМД.ИДОбъекта(Метаданные.ОбщийРеквизитДокумента(стрКонтр));
    vk_hook.ТекстSQL=т+»=?»;
    vk_hook.УдалитьЗаменуSQL();
    КонецПроцедуры // локУдалитьВКХук

    Показать

    Reply
  90. maxpiter

    (84) возможно 1Сные dll не оригинальные используются в БД. С 2011 года используется этот перехватчик и описанных или каких-либо проблем с конфигуратором или БД не возникало. тьфу-тьфу-тьфу 🙂

    Режим совместимости 80 стоит?

    Reply
  91. maxpiter

    (83) предыдущий пост не совсем корректный, правильно так.

    vk_hook.ВключитьПодмену = 1;
    
    vk_hook.ТекстSQL=»Sel ect * fr om _1SJOURN(NOLOCK) where»;
    vk_hook.НовыйSQL=»Select * fr om _1SJOURN(NOLOCK) wh ere «+ИДОбъектовЮрЛицо+ИДОбъектов+ИДОбъектовАдмин;
    vk_hook.УстановитьЗаменуSQL();

    и когда она более не нужна, то

    vk_hook.ВключитьПодмену = 0;
    Reply
  92. aldi.ivanovo

    (91)

    (92)

    в том то и дело, что режим совместимости sql 2014. я понимаю, что как только включается ПерехватSQLPrepare() все запросы идут через hook. я использую 27 последний релиз где используется BkEndUtls.dll, беда в том что hook перехватывает весь sql трафик и запросы идут в режиме совместимости с sql 2000. Я использую его в пределах одного журнала, и хотелось бы управлять возможностью включения и отключения перехвата, потому что вне зависимости от включенных/отключенных подмен hook пропускает через себя все запросы.

    Reply

Leave a Comment

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