Акция

Миграция с других систем

Скидка на систему «ДЕЛО» при миграции с других решений.

Получите бесплатную демоверсию и консультацию

+7(495) 221-24-31

Форумы

Страницы: 1
как изменить контрольность РК с помощью API ActiveX, контрольность РК с помощью API
 
Set proc = o_Head.GetProc("edit_rc")
      proc.Parameters.Append proc.CreateParameter("aIsnDoc", 3, 1, 0, 48379)
       proc.Parameters.Append proc.CreateParameter("aControlState", 3, 1, 0, 2)
       proc.Parameters.Append proc.CreateParameter("aPlanDate", 200, 1, 20, Null)
        proc.Parameters.Append proc.CreateParameter("aFactDate", 200, 1, 20, Null)
         o_Head.ExecuteProc (proc)
На последнем этапе выходит ошибка Интерфейс не поддерживается ошибка 80004002.
Используется среда Visual Basic 6 - читать данные РК удается, а вот изменять - нет. Что за параметры, указанные в руководстве программиста, например после параметра aIsnDoc? Какую нужно подключить dll?
 
попробовал сделать так (использую Visual Studio 2012 Visual Basic)
код такой (мне нужно просто снять с контроля много накопившихся РК за долгие годы):
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

       head = CreateObject("eapi.head")
       head.OpenWithParamsEx("XX.XX.XX.X\subsidii", "XXX", "XXX", "XXX")
       doc = head.GetResultSet
       doc.Source = head.GetCriterion("Table")
       With doc.Source
           .Params("DocKind") = "In"
           .Params("Rc.DocDate") = "01/10/2013:01/12/2013"
       End With
       doc.Fill()
       For Each res In doc
           If (res.Isn = 48379) Then
               ii = 0
           'тут можно забрать в класс полученные РК
           End If
       Next res
       proc = head.GetProc("edit_rc")
       proc.Parameters.Append(proc.CreateParameter("aIsnDoc", 3, 1, 0, 48379))
       proc.Parameters.Append(proc.CreateParameter("aDueCard", 200, 1, 48, DBNull.Value))
       proc.Parameters.Append(proc.CreateParameter("aIsnCab", 3, 1, 0, DBNull.Value))
       proc.Parameters.Append(proc.CreateParameter("aFreeNum", 200, 1, 64, "07-02/43"))
       proc.Parameters.Append(proc.CreateParameter("aDocDate", 200, 1, 20, "2013.10.31"))
       proc.Parameters.Append(proc.CreateParameter("aSecureLevel", 3, 1, 0, 1))
       proc.Parameters.Append(proc.CreateParameter("aConsist", 200, 1, 255, "много"))
       proc.Parameters.Append(proc.CreateParameter("aSpecimen", 200, 1, 64, "1"))
       proc.Parameters.Append(proc.CreateParameter("aPlanDate", 200, 1, 20, "2013.11.15"))
       proc.Parameters.Append(proc.CreateParameter("aFactDate", 200, 1, 20, DBNull.Value))
       proc.Parameters.Append(proc.CreateParameter("aControlState", 3, 1, 0, 2))
       proc.Parameters.Append(proc.CreateParameter("aAnnotat", 200, 1, 2000, "Текст РК"))
       proc.Parameters.Append(proc.CreateParameter("aNote", 200, 1, 2000, DBNull.Value))
       proc.Parameters.Append(proc.CreateParameter("aDuePersonWho", 200, 1, 48, DBNull.Value))
       proc.Parameters.Append(proc.CreateParameter("aIsnDelivery", 3, 1, 0, 4057329))
       proc.Parameters.Append(proc.CreateParameter("aIsCollective", 3, 1, 0, 0))
       proc.Parameters.Append(proc.CreateParameter("aIsAnonim", 3, 1, 0, 0))
       proc.Parameters.Append(proc.CreateParameter("aDuePersonSign", 200, 1, 48, DBNull.Value))
       proc.Parameters.Append(proc.CreateParameter("aDuePersonExe", 200, 1, 48, DBNull.Value))
       proc.Parameters.Append(proc.CreateParameter("aNothardcopy", 3, 1, 0, DBNull.Value))
       proc.Parameters.Append(proc.CreateParameter("aCito", 3, 1, 0, DBNull.Value))
       proc.Parameters.Append(proc.CreateParameter("aOrderNum", 3, 1, 0, DBNull.Value))
       proc.Parameters.Append(proc.CreateParameter("aEDocument", 3, 1, 0, DBNull.Value))
       head.ExecuteProc(proc)
Теперь ругается на то что "Поле doc_rc.e_document is not null" ErrCode=-7
 
Собственно надо поверить сообщению - поле DOC_RC.E_DOCUMENT не может быть NULL.
 
И лучше последнюю команду писать так:
Call o_Head.ExecuteProc (proc)
или
o_Head.ExecuteProc proc ' без скобок
 
Спасибо за ответ,
Call o_Head.ExecuteProc (proc)  - не помогло :)
с параметрами вроде бы разобрался https://www.w3schools.com/asp/met_comm_createparameter.asp
Соответственно для small int параметр должен быть такой:
proc.Parameters.Append(proc.CreateParameter("aEDocument", 2, 1, 0, -1)),
но почему-то выходит та же самая ошибка -7 "Поле doc_rc.e_document is not null"
в таблице dbo.DOC_RC поле E_DOCUMENT имеет значение -1 посмотрел по ISN_DOC
Хранимая процедура EDIT_RC сперва проверяет пользователя по @@spid идентификатору сеанса (доступ)
потом отбирает поля по due_docgroup и Isn в таблицах DOC_RC и DOCGROUP_CL, проверяет все ли параметры заполнены
и на последнем этапе обновляет таблицу DOC_RC и здесь почему-то выходит ошибка:
      upd ate
doc_rc
se t
doc_date =@vDocDate,
free_num = @aFreeNum,
annotat = @aAnnotat,
consists = @aConsists,
specimen = @aSpecimen,
securlevel = @aSecurlevel,
plan_date = @vPlanDate,
fact_date = @vFactDate,
control_state = case @vrcctl when '1' then @aControlState else control_state end,
note = @aNote,
isn_delivery = @aIsnDelivery,
cito = isnull(@aCito, 0),
nothardcopy = isnull(@aNothardcopy, 0),
iscollective = case kind_doc when 2 then @aIsCollective else null end,
anonim = case kind_doc when 2 then @aIsAnonim else null end,
order_num = case when @aOrderNum is null then order_num else @aOrderNum end,
e_document = case when @aEDocument is null then e_document else @aEDocument end
where
isn_doc = @aIsn
В чем может быть проблема? -1 это правильное значение для поля E_DOCUMENT?
Изменено: Петр Мельчинов - 14.06.2017 05:32:39
 
Правильное значение - E_DOCUMENT = 0.
 
В общем стало работать (ошибок при вызове процедуры нет) - заменил в базе данных значение поля E_DOCUMENT на NULL, например если изменить параметр aAnottat - изменения в РК сохраняются. Но сейчас не могу выставить параметр aControlState=2 (снять с контроля) .
Тут есть один момент, который я вроде бы так  понял - этот параметр (aControlState) изменится, если @vrcctl будет равен 1, а он берется из следующей процедуры:
CRE ATE   procedure getparm @propname varchar(64),@propval varchar(255) output as
set nocount on
declare @user_isn int
exec get_user_isn @user_isn output
sel ect top 1 @propval = parm_value   fr om user_parms
      where parm_name = upper(@propname)
          and isn_user_owner in (@user_isn, -99)
       order by isn_user_owner desc
return 0
То есть должен существовать юзер с user_isn=isn_user_owner в таблице USER_PARMS у которого колонка PARM_NAME='RC_CTRL' и PARM_VALUE=1 и тогда control_state изменится на тот, который задан в параметре процедуры EDIT_RC. Но у меня такого в базе данных юзера нет.
Тогда такой вопрос - могу ли я снять с контроля старые РК, просто сделав выборку по датам и установив в DOC_RC поле CONTROL_STATE в 2 где было 1 - просто сделав выборку по диапазону дат?
 
1. Поле DOC_RC.E_DOCUMENT в базе должно быть NOT NULL. Никакие изменения структуры данных не допускаются. Точка.
2. Рекомендуем пройти обучение у нас по курсу прикладного программиста. В рамках этого курса как раз и рассматриваются все вопросы манипуляции с объектами базы ДЕЛО через API.
3. Если вариант с обучением Вас не устраивает, пришлите на support@eos.ru описание Вашей ситуации и какую задачу Вы хотите решить. Обязательно укажите название организации и серийный номер системы ДЕЛО.
Страницы: 1
Читают тему (гостей: 1)
Ольга Савко

Начальник группы телемаркетинга

Получите качественную бесплатную консультацию

Акция

Переход на отечественную АИС МФЦ

Скидка на право использования АИС МФЦ «ДЕЛО» при миграции с других решений по автоматизации МФЦ

Календарь мероприятий

01ноября

СЭД боты - от анализа к практике

Узнать больше

31октября

Автоматизация бизнес процессов - опыт разработки, секреты моделирования

Узнать больше

15октября

Как сделать быстрей и проще подготовку документов с помощью автоматической маршрутизации (на примере договоров и соглашений)

Узнать больше

Наши клиенты

7 000 компаний

Наши партнеры

250

во всех городах России
и странах СНГ

^