К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

SQL State: HYT00 Native: 0 Message: [Microsoft][ODBC SQL Server Driver]Время ожидания истекло

Гость
0 - 25.07.2012 - 10:59
Здравствуйте!

1С77, Win2003, SQL2000.

На абсолютно безобидном участке кода 1С (внедрено и работает без изменений более года) начался сабж...

Если Доки.НайтиПоНомеру(ТЗ.ИДДока)=0 Тогда : {Обработка.Обмен.Форма.Модуль(2863)**: SQL State: HYT00 Native: 0 Message: [Microsoft][ODBC SQL Server Driver]Время ожидания истекло

Внешне вроде бы с данным сервером всё ОК, место есть, скульные регламенты на базе 1С (шринк, реиндекс и проч…) – регулярно выполняются…

Куда копать?



Гость
1 - 25.07.2012 - 13:03
может хотя бы датами ограничить ? Переменная "Доки" какого типа ?
Гость
2 - 25.07.2012 - 13:43
1-Maximus23region > Датами - не желательно...
Но ограничу, если не найду решения.

Доки - типа СоздатьОбъект("Документ.ТакойТоВид");
Гость
3 - 25.07.2012 - 13:53
Вообще-то, НайтиПоНомеру(Номер,Дата) и НайтиДокумент(ссылка) - весьма разные методы. Судя по написанному (ТЗ.ИДДока) бедный скуль вспотел шибко, ищя среди номеров строковое выражение, совпадающее со строковым выражением ссылки...
Гость
4 - 25.07.2012 - 13:58
датами по нумератору однозначно
Гость
5 - 25.07.2012 - 14:49
3-VZ > Валера, ну ты меня совсем за чайника держишь... :-)
Бедный скуль не потеет, а прекрасно отрабатывает данную конструкцию (примерно 500 раз)...

Загрузит документов 500 и зависает...
Бедная юзерша - запускает загрузку заново...
Уже загруженные доки - пролетают, грузится новая порция, потом опять зависон... Юзер опять жмакает загрузку...

До прошлой пятницы - всё работало без зависонов.
ТЗ.ИДДока - 100% число. Всегда.
=ЧИСЛО(Payment.ПолучитьАтрибут("id"));
Гость
6 - 26.07.2012 - 09:35
5-DeiMos > ТЗ.ИДДока - 100% число. Всегда.
А поле DocNo - строка... Та зачем скуля лишний раз думать заставляешь?
И вообще. 500 раз это выполнять. Тут внаглую запрос с параметрами просится.
Гость
7 - 26.07.2012 - 11:16
6-Sadovnikov > Немножко ты меня не понял.
Это выполняется 1 раз, а не 500.

При загрузке каждого документа.
А таких документов - загружается больше тысячи в день.
Одной обработкой, из xml файлов. По 1 файлу на каждый документ.
Гость
8 - 26.07.2012 - 11:47
7-DeiMos > Я вот из этого исходил:
Бедный скуль не потеет, а прекрасно отрабатывает данную конструкцию (примерно 500 раз)...
Но цифра "больше тысячи в день" еще больше намекает на использование нормальных запросов.
Гость
9 - 26.07.2012 - 12:50
5-DeiMos > Вообще-то, я исхожу из того, что грамотный специалист присваивает идентификаторы не абы как, а со смыслом. Исходя из этого, я расшифровал идентификатор ИДдока как ссылку. Или основную часть полной ссылки на документ, вроде поля IDDOC из таблицы 1SJORNAL. Это поле типа строка, размерностью 9, и там содержится нечто вроде "....1LX" (точки изображают пробелы). Бог с ним, что для поиска вовсе не обязательно транслировать это в десячичное число (мы же не собираемся производить с ним вычисления, так?).
Главное, это вовсе не дублер поля DOCNO. Хотя это поле строковое, конвертировать его в число строго не рекомендуется. И что характерно, в методе НайтиДокумент поиск идет по полю IDDOC, а в методе НайтиПоНомеру - по полю DOCNO и полю DATE.
В связи с чем выражение из (0) Доки.НайтиПоНомеру(ТЗ.ИДДока)=0 лично меня погружает в глубокую печаль.

P.S. И отчего-то крутится в мозгу фраза "Вы бы, сударь, или крестик сняли, или трусы надели".
Гость
10 - 26.07.2012 - 13:16
+9 В сабже задача не раскрыта, потому есть два варианта оной:
1. Юзер тыкает пальчиком (мышой) в строку списка документа, и далее ищутся в базе места, где этот документ прописал свою ссылку.
2. Юзер либо мучительно вспоминает номер документа "после вчерашнего", или смотрит на бумажку, и хочет опять же найти места, где есть ссылка на этот документ. С целью посмотреть, что же он ввел, например. Или испортить его. Или еще что.
Так вот, в первом случае надо непременно задействовать именно ссылку. Из которой легко и просто вырезать IDDOC для дальнейшего поиска. И даже не продвинутые, вполне типовые методы, справляются с этой задачей быстро, ибо IDDOC уникален, и неповторим. И метод НайтиДокумент как раз работает с этим полем.
Во втором случае номера мало. Нужна дата. Точнее, период уникальности номера. Или несколько смежных. Даже если манагер срёт кирпичами, утверждая, что этот номер только в этом году использован. И использовать надо метод НайтиПоНомеру. Включив в параметры дату. И именно номер документа, а не его ссылку. Или кусок ссылки.
Гость
11 - 26.07.2012 - 13:40
9-VZ > "Вообще-то, я исхожу из того, что грамотный специалист присваивает идентификаторы не абы как, а со смыслом"

ИДдока - это цифра. Создаваемая в другом ПО (не 1С). И она там именно так и называется в том ПО, именно как "ID".
Таким образом, ЧИСЛО(Payment.ПолучитьАтрибут("id")); - с моей стороны излишне. Просто для подстраховки. Но на этом участке не тормозит. Ничего критичного, сервак не вспотеет число в число перевести.

Нумерация доков в 1С - числовая, без периодичности. Т.е. "По всем данного вида". Т.е. - именно по DOCNO мне и нуно.
Не ограничиваю по датам, потому что могут приходить документы тыщулетней давности. Такое редко, но бывает...
(Суд повторный, или спустя годы сказался вред здоровью, или наследники объявились и т.п....).

10-VZ > Никаких манагеров (на такой объём работы - манагеров нужно роту сажать). Всё на полном автомате.
Загружаются тыщи документов. Затем по нажатию кнопки создаётся столько же платёжек на различные суммы, затем по нажатию - все эти платёжки уходят в Выписку и далее в клиент-банк на оплату.


"P.S. И отчего-то крутится в мозгу фраза "Вы бы, сударь, или крестик сняли, или трусы надели". "
- Валера, не надо ехидничать и критиковать мой код и архитектуру решения.
Поверь, я всё сделал ОЧЕНЬ грамотно.

Мне нужно именно разобраться с поведением SQL-сервера.
С "плавающим" фантомом из сабжа.
Кстати, вчера никаких тормозов из сабжа не наблюдалось.
Всё загрузилось "влёт", с первой попытки.

Вот такой вот трудноотловимый зависон...

В принципе, некритично.
Пользователь не вспотеет нажать кнопку "загрузка" несколько раз после сбоев, догружая порциями...
Однако, хотелось бы самому разобраться.
Гость
12 - 26.07.2012 - 13:43
11-DeiMos > Нумерация доков в 1С - числовая
А вот это уже никого не интересует - все равно в таблице строка.
Гость
13 - 26.07.2012 - 13:47
12-Sadovnikov > DOCNO - строка?
Уверен на 100%?
Гость
14 - 26.07.2012 - 13:52
CREATE TABLE [dbo].[_1SJOURN](
[ROW_ID] [int] IDENTITY(1,1) NOT NULL,
[IDJOURNAL] [int] NOT NULL,
[IDDOC] [char](9) NOT NULL,
[IDDOCDEF] [int] NOT NULL,
[APPCODE] [smallint] NOT NULL,
[DATE_TIME_IDDOC] [char](23) NOT NULL,
[DNPREFIX] [char](18) NOT NULL,
[DOCNO] [char](19) NOT NULL,
Гость
15 - 26.07.2012 - 14:14
14-Sadovnikov > Гхм.... А ведь верно, поиск доков даже определённого вида по номеру - всё равно производится в общем журнале...

ОК, попробую убрать ЧИСЛО(
Гость
16 - 26.07.2012 - 15:24
6-Sadovnikov > Большое спасибо!
Мысль интересная насчёт DocNo, буду копать в этом направлении.


К списку вопросов






Copyright ©, Все права защищены