|
8.2, COM-соединение, C#, dynamic, selectChanges | ☑ | ||
---|---|---|---|---|
0
kolobokf
02.04.15
✎
18:07
|
всем привет.
опишу ситуацию: есть сишарповский код, который тянет изменения определенных объектов из 1с из разных баз. на одной из баз периодически валится ошибка source:System.Dynamic; Object reference not set to an instance of an object. код: dynamic obj = null; dynamic changes = null; dynamic plans = null; int num = 0; string objType = null; string objTN = obj1c; try { dynamic planObj = exchangeNode.getObject(); obj = GetProperty(GetProperty(meta, objType), obj1c); plans = v82Base.ExchangePlans; num = exchangeNode.SentNo; if (isSqlLogSet) { param.Value = "num - " + num; sqlCom.ExecuteNonQuery(); param.Value = "obj - " + obj; sqlCom.ExecuteNonQuery(); param.Value = "plans - " + plans; sqlCom.ExecuteNonQuery(); } changes = plans.SelectChanges(exchangeNode, num, obj); if (isSqlLogSet) { param.Value = "выбрали изменения для объекта в отправляемое сообщение для "+obj1c; sqlCom.ExecuteNonQuery(); } ... валится на строке, где выбираются изменения - SelectChanges, перед этим я вывожу в лог все задействованные в этой функции аргументы - узел, номер сообщения и фильтр - они не являются null. в качестве фильтра передается объект метаданных. в основном валится на регистре бухгалтерии, но иногда бывает на регистре сведений. кто-нибудь сталкивался с чем-то подобным? есть какие-то соображения? |
|||
1
Serginio1
02.04.15
✎
18:21
|
plans = v82Base.ExchangePlans;
а plans проверял? |
|||
2
kolobokf
02.04.15
✎
18:45
|
да, plans также не null (isSqlLogSet перед SelectChanges как раз записывает в лог объекты). кроме того этим же кодом, вытаскиваются изменения из других объектов этой же базы корректно. грубо говоря, есть планировщик задач, который с определенной периодичностью дергает этот код для выгрузки изменений и иногда появляется эта ошибка.
может ли это быть связано с тем, что, допустим, регистр бухгалтерии в течение дня активно задействован и какая-нибудь внутренняя блокировка 1с не дает выполниться выбратьИзменения(selectChanges)? или блокировка mssql? |
|||
3
Рэйв
02.04.15
✎
18:48
|
obj вот тут у тебя затык судя по тексту.
имхо конечно |
|||
4
Рэйв
02.04.15
✎
18:49
|
смотри чего ты туда наприсваивал
|
|||
5
Dmitry1c
02.04.15
✎
19:44
|
Кстати, там тоже есть отладчик :)
|
|||
6
kolobokf
03.04.15
✎
08:39
|
(3) objType - РегистрыБухгалтерии, obj1c - наименование регистра, meta - метаданные. получаю не напрямую через v82Base, а через invokeMember, т.к. гружу разные объекты разных типов и соответственно подставляю их наименования.
вчера по этому регистру всё-таки выгрузились изменения, но вечером - днём падала ошибка. сегодня утром упала на РегистрНакопления.УчетЗатратРегл было бы проще, если она была бы систематической, но пока не могу выявить какую-либо систему в её проявлении |
|||
7
kolobokf
03.04.15
✎
08:43
|
(5) если б было так просто, я б сюда не заходил ) у себя на тестовой базе я её не ловлю. а на рабочей базе есть возможность только писать в лог, т.к. этот код завёрнут в dll и стороннее приложение им пользуется
|
|||
8
kolobokf
03.04.15
✎
08:46
|
видел такую ошибку в v8: 8.2, COM-соединение, C#, dynamic но там, я так понял, дело было в тексте запроса
|
|||
9
Serginio1
06.04.15
✎
11:31
|
(0) Проще использовать внешние обработки v8: 8.2, COM-соединение, C#, dynamic строки
Проще отладить в среде 1С, а затем просто вызвать нужный метод из C# |
|||
10
kolobokf
06.04.15
✎
18:27
|
(9) сделал в c# selectChanges через внешнюю обработку, теперь есть более внятное объяснение:
"Конфликт блокировок при выполнении транзакции: Microsoft SQL Server Native Client 10.0: Lock request time out period exceeded. HRESULT=80040E31, SQLSrvr: SQLSTATE=HYT00, state=33, Severity=10, native=1222, line=1" то же бывает и при УдалитьРегистрациюИзменений. т.е. лочится таблица изменений. есть какой-то способ это обходить кроме повторных попыток? 1с же не поддерживает sql'евский with(nolock) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |