CreateDocumentByParam

Відповісти
olegyudin
Повідомлень: 47
З нами з: 18 липня 2012, 12:23

CreateDocumentByParam

Повідомлення olegyudin » 05 липня 2021, 13:16

Добрый день!

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

Medoc Man
Повідомлень: 864
З нами з: 07 червня 2018, 14:28
Звідки: Kiev

Re: CreateDocumentByParam

Повідомлення Medoc Man » 05 липня 2021, 14:02

Непонятно, что Вы пытаетесь создать. То ли пакет старой отчётности по ЕСВ (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 Кіб) Переглянуто 1624 разів
Пустышка-НН | Показать
2.jpg
2.jpg (140.05 Кіб) Переглянуто 1624 разів
Из всего что пока видно - смущает каст создаваемого методом CreateDocumentByParam объекта к типу string:.
+ последний, 4ый аргумент в методе может НЕ указываться, т.к.:
Не нужен 4ый аргумент | Показать
3.jpg
3.jpg (125.89 Кіб) Переглянуто 1624 разів
+ возможно, в dDate попало что-то не похожее на дату или просто null.

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

olegyudin
Повідомлень: 47
З нами з: 18 липня 2012, 12:23

Re: CreateDocumentByParam

Повідомлення olegyudin » 05 липня 2021, 15:29

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

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 Кіб) Переглянуто 1603 разів

Medoc Man
Повідомлень: 864
З нами з: 07 червня 2018, 14:28
Звідки: Kiev

Re: CreateDocumentByParam

Повідомлення Medoc Man » 05 липня 2021, 16:17

А фрагмент кода вплоть до 511 строки можете прикрепить?
Человек-волшебник
Людина-чарівник
Wizard man

olegyudin
Повідомлень: 47
З нами з: 18 липня 2012, 12:23

Re: CreateDocumentByParam

Повідомлення olegyudin » 05 липня 2021, 16:49

Во вложении код
RNN2MeDok.txt
(31.64 Кіб) Завантажено 13 разів

Medoc Man
Повідомлень: 864
З нами з: 07 червня 2018, 14:28
Звідки: Kiev

Re: CreateDocumentByParam

Повідомлення 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, ) без преобразований даты в строку
//...
Востаннє редагувалось 05 липня 2021, 18:48 користувачем Medoc Man, всього редагувалось 2 разів.
Человек-волшебник
Людина-чарівник
Wizard man

priup
Повідомлень: 7713
З нами з: 22 червня 2011, 12:23

Re: CreateDocumentByParam

Повідомлення priup » 05 липня 2021, 18:29

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

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

Medoc Man
Повідомлень: 864
З нами з: 07 червня 2018, 14:28
Звідки: Kiev

Re: CreateDocumentByParam

Повідомлення Medoc Man » 05 липня 2021, 18:45

priup писав:
05 липня 2021, 18:29
Вы не указали какой стыковкой пользуетесь.............
02.07.2021 разрабы выложили новые............
... | Показать
images.jpg
images.jpg (5 Кіб) Переглянуто 1547 разів
P.S.: Вот вообще стыковки никаким боком тут :cry:
Человек-волшебник
Людина-чарівник
Wizard man

Забби
Повідомлень: 229
З нами з: 02 квітня 2018, 12:43

Re: CreateDocumentByParam

Повідомлення Забби » 05 липня 2021, 21:05

Аби щось ляпнути...

priup
Повідомлень: 7713
З нами з: 22 червня 2011, 12:23

Re: CreateDocumentByParam

Повідомлення priup » 06 липня 2021, 09:53

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

olegyudin
Повідомлень: 47
З нами з: 18 липня 2012, 12:23

Re: CreateDocumentByParam

Повідомлення olegyudin » 06 липня 2021, 12:04

Все ваши варианты с датой пробовал. Не помогает
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, ) без преобразований даты в строку
//...

Medoc Man
Повідомлень: 864
З нами з: 07 червня 2018, 14:28
Звідки: Kiev

Re: CreateDocumentByParam

Повідомлення Medoc Man » 06 липня 2021, 15:55

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

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

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

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

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

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

olegyudin
Повідомлень: 47
З нами з: 18 липня 2012, 12:23

Re: CreateDocumentByParam

Повідомлення olegyudin » 09 липня 2021, 11:44

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

Medoc Man
Повідомлень: 864
З нами з: 07 червня 2018, 14:28
Звідки: Kiev

Re: CreateDocumentByParam

Повідомлення Medoc Man » 09 липня 2021, 12:42

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 объектов?
Отладчик нужен не для самих объектов, а для того, что Вы в эти объекты передаёте и где это не получается.
Человек-волшебник
Людина-чарівник
Wizard man

olegyudin
Повідомлень: 47
З нами з: 18 липня 2012, 12:23

Re: CreateDocumentByParam

Повідомлення olegyudin » 26 липня 2021, 09:11

Разработчик обещал до следующего обновления разобраться

Белокопытов Геннадий
Универсал (склонность - системные вопросы)
Повідомлень: 10116
З нами з: 13 січня 2012, 11:21

Re: CreateDocumentByParam

Повідомлення Белокопытов Геннадий » 26 липня 2021, 10:03

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

Відповісти

Повернутись до “Модуль «Інтеграція»”