Доступ к МедКу через объекты

Сушко Денис
Повідомлень: 197
З нами з: 06 січня 2015, 17:23

Re: Доступ к МедКу через объекты

Повідомлення Сушко Денис » 22 січня 2015, 12:35

ignorant писав:Как сделать медовой стыковкой версии 4_70 не нашел
В документе formaty_import-export.doc описан объект GetDocKVT
ПРобував, але він там застосовується до
App.GetPrimaryDocs().GetDocKVT(ExDocID)

у медовиій стиковці використовується

МедКомпонент.GetPrimaryDoc(Данные)

у у цього об'єкту GetDocKVT відсутній :(

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

Re: Доступ к МедКу через объекты

Повідомлення olegyudin » 23 січня 2015, 13:03

Добрый день!

Кто-нибудь знает, как можно получить из списка первичных документов значения полей "Дата експорту", "Реєстрація в ДПС" и др.

Юдин Олег

vademchuk
Повідомлень: 79
З нами з: 15 липня 2012, 01:01

Re: Доступ к МедКу через объекты

Повідомлення vademchuk » 29 січня 2015, 14:24

olegyudin писав:Добрый день!

Кто-нибудь знает, как можно получить из списка первичных документов значения полей "Дата експорту", "Реєстрація в ДПС" и др.

Юдин Олег
Только перебирая/читая потом документы в цикле через например док = App.OpenDocumentByCode

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

 Если дс.FldVal("SEND_DPA") = 12 и СокрЛП(дс.FldVal("SEND_DPA_RN"))<> "" Тогда
			Новая.ВключенаРЕЕСТР         = Истина;
                        ДатаРег				     = СокрЛП(дс.FldVal("SEND_DPA_DATE"));
			Новая.ДатаВключенияВЕРНН = Дата(Сред(ДатаРег,7,4),Сред(ДатаРег,4,2),Лев(ДатаРег,2));
                        ................................
Вкладення
sendDPA.JPG
sendDPA.JPG (65.32 Кіб) Переглянуто 5497 разів

ignorant
Повідомлень: 67
З нами з: 10 грудня 2014, 10:58

Re: Доступ к МедКу через объекты

Повідомлення ignorant » 29 січня 2015, 15:03

vademchuk
По смыслу - те же 2 поля, что и в GetDocKVT:
- дата последней операции с документом (хотя по наименованию поля SEND_DPA_DATE можно предположить, что поле задумывалось как дата отправки в ДПА)
- регистрационный номер в ЕРНН

Квитанцию прочитать бы...

vademchuk
Повідомлень: 79
З нами з: 15 липня 2012, 01:01

Re: Доступ к МедКу через объекты

Повідомлення vademchuk » 29 січня 2015, 15:10

ignorant писав:vademchuk

По смыслу - те же 2 поля, что и в GetDocKVT:
- дата последней операции с документом (хотя по наименованию поля SEND_DPA_DATE можно предположить, что поле задумывалось как дата отправки в ДПА)
- регистрационный номер в ЕРНН
По смыслу да, но поскольку в большинстве случаев в этот момент вы создаете у себя в учетной системе НН, то все-равно читать документ в Медке надо, а вот саму квитанцию уже не надо - меньше запросов с медок.....

Kerberos
Повідомлень: 5
З нами з: 29 січня 2015, 22:39

Re: Доступ к МедКу через объекты

Повідомлення Kerberos » 29 січня 2015, 22:48

Коллеги,

Как из Дод2 получить строки документа?
В руководстве нашёл только
main = doc.DataSets("MAIN");
... Выводятся имена полей и их значения из ТЕЛА ДОКУМЕНТА

main = doc.DataSets("TAB1");
... Выводятся имена полей и их значения из ПЕРВОЙ строки Документа
Как узнать общее количество строк Документа? Как получить данные из остальных строк Документа?

Заранее спасибо за любой ответ!
| Показать

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

    // Просмотр документв
	App=СоздатьОбъект("MEDOC.ZApplication");
	prim = App.GetPrimaryDocs();
	reestr = prim.GetPrimaryReestr(2,2,Дата1,Дата2); 
	reestr.First();
	Для а = 0 ПО (reestr.RecordCount() - 1) Цикл
		doc   = App.OpenDocumentByCode(reestr.Fields.Item("CARDCODE").Value);
		main = doc.DataSets("MAIN");
		СчетчикКолонок = main.Fields.Count();
		Для Инд = 0 ПО (СчетчикКолонок - 1) Цикл
			Сообщить ( "М " + Строка (Инд) + " " + main.Fields.item(Инд).name + " = " + main.Fields.item(Инд).Value );
		КонецЦикла;
		main = doc.DataSets("TAB1");
		СчетчикКолонок1 = main.Fields.Count();
			Для Инд1 = 0 ПО (СчетчикКолонок1 - 1) Цикл
				Сообщить ( "Т " + Строка (Инд1) + " " + main.Fields.item(Инд1).name + " = " + main.Fields.item(Инд1).Value );
			КонецЦикла; 
		reestr.Next(); 
	КонецЦикла;	
  
	main = doc.DataSets("MAIN");
	... Выводятся имена полей и их значения из ТЕЛА ДОКУМЕНТА
 
	main = doc.DataSets("TAB1"); 
	... Выводятся имена полей и их значения из Первой строки Документа
				

ignorant
Повідомлень: 67
З нами з: 10 грудня 2014, 10:58

Re: Доступ к МедКу через объекты

Повідомлення ignorant » 30 січня 2015, 09:28

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

Строк = main.RecordCount();

Пока НЕ main.EOF Цикл
КонецЦикла;
К.О. ;)

ignorant
Повідомлень: 67
З нами з: 10 грудня 2014, 10:58

Re: Доступ к МедКу через объекты

Повідомлення ignorant » 30 січня 2015, 15:09

GetDocSender Send() полностью автоматизировать отправку не получается
замечания:
- запрашивает пароли при отправке первой порции в сессии
- запрашивает "Выбор адресата", хотя Send(true) указан явно
- отправка документов идет поштучно, не "пачкой" с прогресс-баром
- КМК, игнорирует маршрутизацию документов (РК хочет слать контрагенту на утверждение)

Kerberos
Повідомлень: 5
З нами з: 29 січня 2015, 22:39

Re: Доступ к МедКу через объекты

Повідомлення Kerberos » 30 січня 2015, 15:39

ignorant
Уважаемый К.О. :)

Строк = main.RecordCount(); // в моем примере получил ответ 4 строки

Пока НЕ main.EOF Цикл
Как в этом цикле получать данные из строк
написал вот так Sum=main.Fields.item("TAB1_A91").Value
так выдает 4 раза данные из первой строки
КонецЦикла;

Пожалуйста подскажите как выбрать данные из строк?
Спасибо!

ignorant
Повідомлень: 67
З нами з: 10 грудня 2014, 10:58

Re: Доступ к МедКу через объекты

Повідомлення ignorant » 30 січня 2015, 16:24

Kerberos
Строки выборки Вы листаете ?

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

Пока НЕ main.EOF Цикл
   НомерСтроки = main.Fields.item(2).value;
   main.NEXT ();
КонецЦикла;
у меня работает

JazzyManSerg
Повідомлень: 6
З нами з: 30 січня 2015, 18:46

Re: Доступ к МедКу через объекты

Повідомлення JazzyManSerg » 30 січня 2015, 18:50

Так никто и не ответил. Как всё таки прочитать поля KVT_SIGN, KVT_TEXT или хотябы FILE_NAME у GetDocKVT что бы можно было хмл прочитать. Из того что я опытным путём наковырял: 1-При попытке прочитать FILE_NAME- ошибка. 2- KVT_SIGN при переводе в строку возвращает TRANSPORTABLE 3- KVT_TEXT при переводе в строку дает пусто. 4 - поле OPERTYPE выдает 14 такого значения в перечне нет. 5 - Поля KVT_SIGN и KVT_TEXT имеют тип М - что єто такое ? Да и вообще - можно ли их прочитать или объект в разработке? :geek:

ignorant
Повідомлень: 67
З нами з: 10 грудня 2014, 10:58

Re: Доступ к МедКу через объекты

Повідомлення ignorant » 31 січня 2015, 00:38

+ до кучи, в качестве субботнего трёпа.

Имя файла электронного документа и ответов-квитанций к нему имеет жесткую структуру, которая содержит в т.ч. номер документа.
т.е. по имени файла - квитанции можно определить документ, к которому она выписана.

Но разработчики при назначении имени файла документу
вместо того, чтобы вЫчитать номер документа и сформировать на его основе имя файла,
используют какой-то свой нумератор документов,
из-за чего вынуждены использовать реквизит FILE_NAME.

Всё вышесказанное - IMHO. Сам лично не большой знаток Медка, могу ошибаться.

JazzyManSerg
Повідомлень: 6
З нами з: 30 січня 2015, 18:46

Re: Доступ к МедКу через объекты

Повідомлення JazzyManSerg » 04 лютого 2015, 17:59

JazzyManSerg писав:Так никто и не ответил. Как всё таки прочитать поля KVT_SIGN, KVT_TEXT или хотябы FILE_NAME у GetDocKVT что бы можно было хмл прочитать. Из того что я опытным путём наковырял: 1-При попытке прочитать FILE_NAME- ошибка. 2- KVT_SIGN при переводе в строку возвращает TRANSPORTABLE 3- KVT_TEXT при переводе в строку дает пусто. 4 - поле OPERTYPE выдает 14 такого значения в перечне нет. 5 - Поля KVT_SIGN и KVT_TEXT имеют тип М - что єто такое ? Да и вообще - можно ли их прочитать или объект в разработке? :geek:
Вычитал поле KVT_TEXT - Печалька - там только ХМЛ файл налоговой. Никакого текста квитанции. В KVT_SIGN при переводе в строку возвращает TRANSPORTABLE - тоже нет текста квитанции - ГДЕ ЖЕ ОН ? :oops:

Еще нашлась ошибка
метод GetPrimaryReestr с значениями параметров docMove=2, docType= 2 не использует параметры период - что туда не поставь - получается полный реестр.
с параметрами docMove=2, docType= 1 всё в порядке. с другими не проверял

Я считаю это не уважительно к программистам давать некорректные мануалы. Много имен полей не такие как в документации. кстати поле FILE_NAME которое я не мог вычитать, я всё таки вычитал по номеру kvt.Fields.Item(7).name и его имя оказалось FILENAME, в объекте GetPrimaryReestr поле Partner_IPN пишется ("Patrner_IPN") и т.д. В каждом обїекте какие то недочеты

ignorant
Повідомлень: 67
З нами з: 10 грудня 2014, 10:58

Re: Доступ к МедКу через объекты

Повідомлення ignorant » 04 лютого 2015, 18:11

JazzyManSerg писав:ВЫчитал поле KVT_TEXT - Печалька - там только ХМЛ файл налоговой.
Покажете _код_ как вычитывали?
Точно XML ПН :shock: ?

По имени поля - или XML квитанции или RPL-файл-ответ от шлюза ожидаемо было увидеть.

JazzyManSerg
Повідомлень: 6
З нами з: 30 січня 2015, 18:46

Re: Доступ к МедКу через объекты

Повідомлення JazzyManSerg » 04 лютого 2015, 19:05

всё штатными методами
Medoc=createobject("Medoc.ZApplication");
Prim=Medoc.GetPrimaryDocs();
Reestr=Prim.GetPrimaryReestr(1,2,Date(НачДата),Date(Кондата)); //Typedocs 0-all, 1-Nal, 2-Kor docMove -1 -all, 1-out 2-in
reestr.first();
Для номдок=0 по (reestr.recordcount()-1) цикл
Doc=Medoc.OpenDocumentByCode(Reestr.Fields.Item("CardCode").Value);
kvt=prim.getdockvt("",Reestr.Fields.Item("CardCode").Value);
textkvt=Сокрлп(kvt.Fields.Item("KVT_TEXT").value);
сообщить(textkvt);
reestr.next();
конеццикла;

я вывел в окно сообщений -100 процентов ХМЛ налоговой - я его даже разпарсил и получил нормальнуюю налоговую поставщика
В общим этим методом можно получить квитанции только своих налоговых А входящих - никак - имя файла только даёт по полю FILENAME (без нижнего подчеркивания)

В общем в техподдержке сказали - что эта задача не реальна (прочитать ФИО подписанта входяящей НН ) "- столько труда по анализу этих объектов медковских и из-за одного поля всё идёт на смарку :oops:

ignorant
Повідомлень: 67
З нами з: 10 грудня 2014, 10:58

Re: Доступ к МедКу через объекты

Повідомлення ignorant » 12 лютого 2015, 11:10

Метод GetDocKVT работает ОЧЕНЬ медленно при количестве налоговых несколько тысяч.
Это только у нас?
Есть другие варианты вЫчитать REGNUM - регистрационный номер?

vademchuk
Повідомлень: 79
З нами з: 15 липня 2012, 01:01

Re: Доступ к МедКу через объекты

Повідомлення vademchuk » 12 лютого 2015, 12:08

ignorant писав:Метод GetDocKVT работает ОЧЕНЬ медленно при количестве налоговых несколько тысяч.
Это только у нас?
Есть другие варианты вЫчитать REGNUM - регистрационный номер?

ВСЕ методы работают ОЧЕНЬ медленно, когда документов становится от 1000+.


Зачем вообще читать квитанцию, если факт регистрации есть в самом документе, а документ все-равно читать надо....

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

док = App.OpenDocumentByCode (Формат( табл.FldVal("Code"), "ЧГ=0"));
дс = док.DataSets("MAIN") ;

Если дс.FldVal("SEND_DPA") = 12 и СокрЛП(дс.FldVal("SEND_DPA_RN"))<> "" Тогда
				Новая2.Флажок = Истина;
                                Новая2.Флажок
........................
КонецЕсли;
send_dpa.JPG
send_dpa.JPG (50.08 Кіб) Переглянуто 5191 раз

Inkognito
Повідомлень: 1072
З нами з: 14 січня 2012, 14:26

Re: Доступ к МедКу через объекты

Повідомлення Inkognito » 12 лютого 2015, 12:09

У себя делал так: на форме есть Таблица. И по выделенным пользователем строкам, делаю выборку (добавляю фильтры - Номер и ИННКонтрагента):
Для Каждого СтрокаДокумент из ЭлементыФормы.ТаблицаДокументов.ВыделенныеСтроки Цикл
Документ = СтрокаДокумент.Документ;
ИД = Строка(Документ.УникальныйИдентификатор());

primДокументы = App.GetPrimaryDocs();
reestrNN = primДокументы.GetPrimaryReestr(1, "-1", Документ.Дата, Документ.Дата);
reestrNN.Filter = "Doc_num=" + СокрЛП(ОбщегоНазначения.ПолучитьНомерНаПечать(Документ));
reestrNN.Filter = "Partner_IPN=" + СокрЛП(Документ.Контрагент.ИНН);

Если reestrNN.RecordCount()=1 Тогда
Если ЗначениеЗаполнено(reestrNN.Fields.Item("REGDATE").Value) Тогда
Сообщить("Дата регистрации: " + reestrNN.Fields.Item("REGDATE").Value);
Иначе
Сообщить("Даты регистрации нет!");
КонецЕсли;
КонецЕсли;
КонецЦикла;

ignorant
Повідомлень: 67
З нами з: 10 грудня 2014, 10:58

Re: Доступ к МедКу через объекты

Повідомлення ignorant » 12 лютого 2015, 12:21

vademchuk писав:Зачем вообще читать квитанцию, если факт регистрации есть в самом документе, а документ все-равно читать надо....
По наивности считал, что новый метод GetDocKVT "заточен" для быстрого получения квитанций.
Похоже, информация по квитанциям отдельно НЕ хранится, а GetDocKVT читает документы неявно :roll:

aps
Повідомлень: 3
З нами з: 04 лютого 2015, 21:06

Re: Доступ к МедКу через объекты

Повідомлення aps » 20 лютого 2015, 18:37

Использую GetDocKVT с поиском по ExtDocID (список айдишек поступает из нашей учетной системы).
Затем отбирается квитанция 7-го типа, откуда достается REGNUM/REGDATE для "хороших" и причина отвержения для "плохих".
Скорость работы - 5-6 сек на документ, что при обработке ~2к накладных в день - имхо, слишком медленно.

Похоже, надо менять подход - проверять сначала статус документа и для "хороших" REGNUM/REGDATE брать из реестра,
а для "плохих" лазить в квитанции через GetDocKVT. Будет ли это быстрее? А кто его знает. :)

Відповісти

Повернутись до “1C”