Сторінка 1 з 1

CreateDocumentByParam

Додано: 05 липня 2021, 13:16
olegyudin
Добрый день!

Перестал работать метод CreateDocumentByParam
При вызове:
omedok:CreateDocumentByParam("J3000412", 0, "01.11.2020", 0)
Получаю ошибку
Несовпадение типов
1.png
1.png (55.88 Кіб) Переглянуто 1959 разів

Re: CreateDocumentByParam

Додано: 05 липня 2021, 14:02
Medoc Man
Непонятно, что Вы пытаетесь создать. То ли пакет старой отчётности по ЕСВ (J3000412), то ли налоговую накладную (J1201012).
Из VBScript Ваш пример в обоих случаях работает успешно (на 11.02.043 версии):
Скрипт | Показать

Код: Виділити все

Set medoc = CreateObject("Medoc.ZApplication")

Set doc = medoc.CreateDocumentByParam("J3000412", 0, CDate("01.11.2020 00:00:00"), 0)
doc.Save(0) 
doc.Close()

WScript.Echo "ЕСВ создан."

Set doc = medoc.CreateDocumentByParam("J1201012", 0, CDate("01.07.2021 00:00:00"), 1)
doc.Save(0) 
doc.Close()

WScript.Echo "Накладная создана."
Пустышка-ЕСВ | Показать
1.jpg
1.jpg (558.2 Кіб) Переглянуто 1943 разів
Пустышка-НН | Показать
2.jpg
2.jpg (140.05 Кіб) Переглянуто 1943 разів
Из всего что пока видно - смущает каст создаваемого методом CreateDocumentByParam объекта к типу string:.
+ последний, 4ый аргумент в методе может НЕ указываться, т.к.:
Не нужен 4ый аргумент | Показать
3.jpg
3.jpg (125.89 Кіб) Переглянуто 1943 разів
+ возможно, в dDate попало что-то не похожее на дату или просто null.

+ ещё смущает этот фрагмент:
Фрагмент | Показать
4.jpg
4.jpg (77.63 Кіб) Переглянуто 1939 разів
который вроде бы как бы указывает, что не создался объект omedok:

Re: CreateDocumentByParam

Додано: 05 липня 2021, 15:29
olegyudin
Спасибо за ответ. Прошу прощения, что запутал. У меня конечно создание НН:

monitor(omedok)
odoc := omedok:CreateDocumentByParam("J1201012",0,DTOC(f_d_month(dDate)),)

В monitor: AutomationObject(cargo=NIL)(O)
т. е. объект Медка создался
Последний параметр пытался не задавать, как выше, 0 или 1 - ошибка не меняется
Остальные параметры видны в экране ошибки
1.png
1.png (55.76 Кіб) Переглянуто 1922 разів

Re: CreateDocumentByParam

Додано: 05 липня 2021, 16:17
Medoc Man
А фрагмент кода вплоть до 511 строки можете прикрепить?

Re: CreateDocumentByParam

Додано: 05 липня 2021, 16:49
olegyudin
Во вложении код
RNN2MeDok.txt
(31.64 Кіб) Завантажено 13 разів

Re: CreateDocumentByParam

Додано: 05 липня 2021, 18:25
Medoc Man
Смотрите в этот блок (собственно, как ошибка и говорит):
Проблемное место | Показать

Код: Виділити все

IF Len(MY_OKPO_IS) = 8
   //odoc := omedok:OpenOrCreateByExDocID("J1201012",0,DTOC(f_d_month(dDate)),,"1234",0)
   odoc := omedok:CreateDocumentByParam("J1201012",0,DTOC(f_d_month(dDate)),)
ELSE
   odoc := omedok:CreateDocumentByParam("F1201012",0,DTOC(dDate),1)
ENDIF
Обратите внимание, что аргумент с датой различается (DTOC(f_d_month(dDate)) и DTOC(dDate)) для разных бланков (хотя, по логике не должен).
Может так сработает?
Хм? | Показать

Код: Виділити все

LOCAL charCode
//...

IF Len(MY_OKPO_IS) = 8
   charCode := "J1201012"
ELSE
    charCode := "F1201012"
ENDIF

odoc := omedok:CreateDocumentByParam(charCode, 0, DTOC(f_d_month(dDate)), )
// или odoc := omedok:CreateDocumentByParam(charCode, 0, DTOC(dDate), ) без f_d_month, т.к. что это - не понятно от слова совсем
// или odoc := omedok:CreateDocumentByParam(charCode, 0, dDate, ) без преобразований даты в строку
//...

Re: CreateDocumentByParam

Додано: 05 липня 2021, 18:29
priup
olegyudin писав:
05 липня 2021, 13:16
Добрый день!

Перестал работать................
Вы не указали какой стыковкой пользуетесь.............
02.07.2021 разрабы выложили новые............

Re: CreateDocumentByParam

Додано: 05 липня 2021, 18:45
Medoc Man
priup писав:
05 липня 2021, 18:29
Вы не указали какой стыковкой пользуетесь.............
02.07.2021 разрабы выложили новые............
... | Показать
images.jpg
images.jpg (5 Кіб) Переглянуто 1866 разів
P.S.: Вот вообще стыковки никаким боком тут :cry:

Re: CreateDocumentByParam

Додано: 05 липня 2021, 21:05
Забби
Аби щось ляпнути...

Re: CreateDocumentByParam

Додано: 06 липня 2021, 09:53
priup
Medoc Man писав:
05 липня 2021, 18:45
priup писав:
05 липня 2021, 18:29
Вы не указали какой стыковкой пользуетесь.............
02.07.2021 разрабы выложили новые............
... | Показать
images.jpg
P.S.: Вот вообще стыковки никаким боком тут :cry:
Дык про "Модуль Интеграция" же тема??

Re: CreateDocumentByParam

Додано: 06 липня 2021, 12:04
olegyudin
Все ваши варианты с датой пробовал. Не помогает
Medoc Man писав:
05 липня 2021, 18:25
Смотрите в этот блок (собственно, как ошибка и говорит):
Проблемное место | Показать

Код: Виділити все

IF Len(MY_OKPO_IS) = 8
   //odoc := omedok:OpenOrCreateByExDocID("J1201012",0,DTOC(f_d_month(dDate)),,"1234",0)
   odoc := omedok:CreateDocumentByParam("J1201012",0,DTOC(f_d_month(dDate)),)
ELSE
   odoc := omedok:CreateDocumentByParam("F1201012",0,DTOC(dDate),1)
ENDIF
Обратите внимание, что аргумент с датой различается (DTOC(f_d_month(dDate)) и DTOC(dDate)) для разных бланков (хотя, по логике не должен).
Может так сработает?
Хм? | Показать

Код: Виділити все

LOCAL charCode
//...

IF Len(MY_OKPO_IS) = 8
   charCode := "J1201012"
ELSE
    charCode := "F1201012"
ENDIF

odoc := omedok:CreateDocumentByParam(charCode, 0, DTOC(f_d_month(dDate)), )
// или odoc := omedok:CreateDocumentByParam(charCode, 0, DTOC(dDate), ) без f_d_month, т.к. что это - не понятно от слова совсем
// или odoc := omedok:CreateDocumentByParam(charCode, 0, dDate, ) без преобразований даты в строку
//...

Re: CreateDocumentByParam

Додано: 06 липня 2021, 15:55
Medoc Man
olegyudin писав:
06 липня 2021, 12:04
Все ваши варианты с датой пробовал. Не помогает
Тогда у меня для Вас 2 новости: хорошая и плохая.

Начну с плохой:
Вам нужно срочно переходить на что-то поновее.

Теперь хорошая:
После некоторых танцев с бубном:
Ошибка, если значение даты изначально в строковом типе и используем DtoC:
... | Показать
Screenshot_6.jpg
Screenshot_6.jpg (72.11 Кіб) Переглянуто 1755 разів
Предварительное преобразование строковой даты в тип Date и использование DtoC для преобразования обратно в строку:
... | Показать
Screenshot_7.jpg
Screenshot_7.jpg (84.82 Кіб) Переглянуто 1755 разів
Никаких преобразований и передача строкового значения даты напрямую в аргумент метода CreateDocumentByParam:
... | Показать
Screenshot_8.jpg
Screenshot_8.jpg (95.3 Кіб) Переглянуто 1755 разів

Во-первых и в главных - хорошо бы узнать тип значения переменной dDate.
Если используется так называемая "венгерская нотация", то видимо предполагается, что там значение с типом Date. А как оно на самом деле - неизвестно.

Если же оно имеет строковый тип (string) (а это случается чаще), то передача её значения в функцию DtoC (DateToChar) вызовет ошибку, т.к. входящим типом функция ожидает Date, а получает String.
Ошибку, ссылающуюся на аргумент (как у Вас) мне удалось "словить" только в случае, когда я пытался передать в функцию DtoC именно строковое значение даты (в примере - '07/01/2021', формат ММ/ДД/ГГГГ).
А решить её удалось двумя путями:
путя 1 - предварительно преобразовывать строковый тип в дату (если хотим оставить использование DtoC);
путя 2 - убрать все эти преобразования и напрямую передавать строковое значение даты аргументом метода.

Примеры и результаты выше.
Если не помогло - тогда ищите отладчик и смотрите, что там происходит в реальном времени.
То, что метод работает - это факт, проверил лично на 1С, VBScript, C# и теперь вот на этом (даже название не знаю).

Re: CreateDocumentByParam

Додано: 09 липня 2021, 11:44
olegyudin
Спасибо за ваш ответ.
В XBAse++ нет типизации переменных. Я вывожу в монитор то, что передаю в функцию: отображается точно то, что в ошибке. Попробовал все ваши варианты - ничего не помогает. Приходится все мои выгрузки переписывать на метод OpenOrCreateByExDocID
А как можно использовать отладчик в методах COM объектов?

Re: CreateDocumentByParam

Додано: 09 липня 2021, 12:42
Medoc Man
olegyudin писав:
09 липня 2021, 11:44
Спасибо за ваш ответ.
...Я вывожу в монитор то, что передаю в функцию: отображается точно то, что в ошибке...
Ну тогда получается, что Вы пытаетесь строку превратить из даты в строку (см. Аргумент[4]:"01.06.2021"). Кавычки вроде строку обозначают :? .
Другин причин ссылатся в 511 строке в Вашем примере нет. Чаркод - строка, указана явно, тип периода - число, тоже явно указано. Последний 4й необязательный аргумент - тоже вроде не указан (Аргумент[5]:NIL). Методом исключения остаётся только дата.
olegyudin писав:
09 липня 2021, 11:44
...Приходится все мои выгрузки переписывать на метод OpenOrCreateByExDocID...
Ощутимой разницы между ними нет, за исключением чуть большего количества аргументов (2 штук).
Но там так же требуется Дата одним из аргументом и есть вероятность, что получится то же самое.
olegyudin писав:
09 липня 2021, 11:44
А как можно использовать отладчик в методах COM объектов?
Отладчик нужен не для самих объектов, а для того, что Вы в эти объекты передаёте и где это не получается.

Re: CreateDocumentByParam

Додано: 26 липня 2021, 09:11
olegyudin
Разработчик обещал до следующего обновления разобраться

Re: CreateDocumentByParam

Додано: 26 липня 2021, 10:03
Белокопытов Геннадий
olegyudin
Добрый день.
По вашему примеру, в следующем ближайшем обновлении выпустим доработку по работе метода CreateDocumentByParam при использовании в XBAse++