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

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

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

Повідомлення Inkognito » 23 серпня 2016, 09:22

Как раз пробую сделать такой функционал у себя. Напишу как только что-то будет известно.
П.С. если работает через попытку, - может так и оставить? Или боретесь за чистоту кода? ;)

PetroP
Повідомлень: 714
З нами з: 22 січня 2015, 18:50

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

Повідомлення PetroP » 23 серпня 2016, 09:57

Скорее последнее.
К тому же из-за проблем с документацией, думал, может у меня пробел в понимании данных методов...

PetroP
Повідомлень: 714
З нами з: 22 січня 2015, 18:50

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

Повідомлення PetroP » 14 вересня 2016, 14:52

Не происходит получения сообщений методом "ReceiveCorrespondence()" - выполняется быстро и возвращает ложь. Интерактивно (F9) сообщения получаются.
Код:

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

App = Новый COMОбъект("MEDOC.ZApplication");
sign = App.GetDocSigning();
rez = sign.CertToCache("*", "*", "*");
Если rez <> 0 Тогда
	ВызватьИсключение("Помилка підпису: " + rez);
Иначе
	ЄНовіПовідомлення = App.ReceiveCorrespondence();
	Сообщить(?(ЄНовіПовідомлення, "Є нові повідомлення!", "Немає нових повідомлень!"));
КонецЕсли;
Что упустил?

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

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

Повідомлення Inkognito » 14 вересня 2016, 15:44

Перепроверьте пути и пароли. Полгода назад проверял, работало. Правда, может уже и не работает... Перепроверю в ближайшее время, напишу.

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

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

Повідомлення Inkognito » 14 вересня 2016, 15:54

Проверил. Не работает.
Использовались действующий сертификат и ключ сотрудника. Находятся в сети.
П.С. при указании неправильного пароля все равно пробует принять почту. Ранее вроде проверка была на его корректность :?
Простой код из инструкции | Показать
App = Новый COMОбъект("MEDOC.ZApplication");
sign = App.GetDocSigning();
res = sign.CertToCache(
"W:\.....crt",
"W:\... .ZS2",
"ТутБылПароль");
res = App.ReceiveCorrespondence();
Сообщить(res);

PetroP
Повідомлень: 714
З нами з: 22 січня 2015, 18:50

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

Повідомлення PetroP » 14 вересня 2016, 16:14

Если бы проблема была в путях или паролях, rez был бы иной.
Буду благодарен, если протестируете у себя.

PetroP
Повідомлень: 714
З нами з: 22 січня 2015, 18:50

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

Повідомлення PetroP » 14 вересня 2016, 16:16

Inkognito писав:П.С. при указании неправильного пароля все равно пробует принять почту. Ранее вроде проверка была на его корректность :?
Все верно. Вы же не проверяете результат помещения в кеш.

PetroP
Повідомлень: 714
З нами з: 22 січня 2015, 18:50

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

Повідомлення PetroP » 14 вересня 2016, 16:21

Inkognito писав:Использовались действующий сертификат и ключ сотрудника.
Да, кстати. Для получения, как я понимаю, нужен же ключ печати шифрования, а не сотрудника...

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

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

Повідомлення Inkognito » 14 вересня 2016, 16:53

Перепроверил ключем шифрования. Те же яйца.
П.С. вроде в инструкции ограничений на тип используемого сертификата нет, но может просто недоработка инструкции.

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

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

Повідомлення Inkognito » 14 вересня 2016, 17:18

Выходит, это уже не первый поломанный метод :( , и ждать покращення не приходится.

PetroP
Повідомлень: 714
З нами з: 22 січня 2015, 18:50

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

Повідомлення PetroP » 16 вересня 2016, 10:21

Предположим, мы получили документ в Медке методом "OpenDocumentByCode". Как нам узнать "EXDOCID" этого документа (если он есть)?

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

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

Повідомлення Inkognito » 16 вересня 2016, 16:47

док =App.OpenDocumentByCode(...);
дс = док.DataSets("MAIN");
ExDocID=Строка(дс.FldVal("ExDocID"));
Сообщить(?(ЗначениеЗаполнено(ExDocID)), "Есть внешний ИД=" + ExDocID, "Нет внешнего ИД");

PetroP
Повідомлень: 714
З нами з: 22 січня 2015, 18:50

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

Повідомлення PetroP » 16 вересня 2016, 16:57

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

.FldVal("ExDocID");
не работает для запросов в ЕРНН.

PetroP
Повідомлень: 714
З нами з: 22 січня 2015, 18:50

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

Повідомлення PetroP » 16 вересня 2016, 18:04

Супер! Снова надо в попытку...

ODINES
Повідомлень: 1
З нами з: 02 листопада 2016, 17:57

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

Повідомлення ODINES » 02 листопада 2016, 18:23

Не могу из 1с сформировать "Запит по контрагентам" P2000201 пишу такой код:

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

Doc = App.CreateGovQryByCharCode("P2000201");
rsMain=Doc.DataSets("TAB1");
....
и на строке rsMain=Doc.DataSets("TAB1"); ругается из-за ошибки:
{ВнешняяОбработка.ME1С.Форма.Форма.Форма(11226)}: Ошибка при вызове метода контекста (DataSets)
rsMain=Doc.DataSets("TAB1");
по причине:
Неизвестная ошибка
что я делаю не так?

vatikan
Повідомлень: 8
З нами з: 22 листопада 2016, 18:32

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

Повідомлення vatikan » 22 листопада 2016, 18:47

Приветствую всех. Помоги с проблемой. Стоит задача получить самый последний документ Акцизная накладная в Медке. Сейчас это планируется сделать так:

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

Попытка 		
		App = Новый COMОбъект("MEDOC.ZApplication");
		НачПериода = ДобавитьМесяц(ТекущаяДата(), -1);
		ТекГод = Формат(НачПериода, "ДФ=гггг");
		ТекМесяц = Формат(НачПериода, "ДФ=М");
		ТекЧисло = Формат(НачПериода, "ДФ=д");
		НачПериода = Строка(ТекГод + ","+ ТекМесяц + ","+ ТекЧисло);
		СтрокаЗапроса=Строка("CharCode='J1203001' AND PerDate>='") + Строка(НачПериода) + Строка("'");
		ТаблицаДоков = App.DocumentsDataSet(СтрокаЗапроса);
		Сообщить("Всього знайдено документів: "+ТаблицаДоков.RecordCount);
		Пока НЕ ТаблицаДоков.EOF Цикл
			КодДокумента = Число(ТаблицаДоков.FldVal("Code"));
			Если ЗначениеЗаполнено(КодДокумента) тогда
				Документ = App.OpenDocumentByCode(КодДокумента);
				main = Документ.DataSets("MAIN");
				Сообщить("Дата="+main.Fields.Item("N2").value);
				Сообщить("Номер="+main.Fields.Item("N3").value);
			КонецЕслИ;
			ТаблицаДоков.Next();
		КонецЦикла;	 					
	Исключение
		Сообщить("Ошибка выполнения метода", СтатусСообщения.Важное);
		Возврат;
	КонецПопытки;
Код рабочий и нашел его несколькими страницами ранее, но он кажется очень не эффективным. Возможно есть какой-нибудь метод GetLast() или что то в этом роде, что бы не делать запрос ко всем документам за период, а сразу получить последний документ определенного вида, в моем случае 'J1203001' – Акцизная накладная.

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

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

Повідомлення Inkognito » 23 листопада 2016, 01:32

ODINES
Попробуйте через OpenOrCreateByExDocID.

vatikan
SELECT card.code
FROM card
WHERE code=(SELECT MAX(card.code) FROM card) and card.form='12740'

vatikan
Повідомлень: 8
З нами з: 22 листопада 2016, 18:32

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

Повідомлення vatikan » 23 листопада 2016, 17:43

To Inkognito
Большое спасибо, на 99,9% процентов то, что мне нужно, а можно как то достать код именно из поля DOCNAME? Например Акцизна накладна №XXXX / від 21.11.2016, интересует код XXXX. Конечно можно разобрать поле DOCNAME, но это не очень красиво, я думаю что код XXXX все таки есть но где то в другой таблице, но я пока не нашел.

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

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

Повідомлення Inkognito » 23 листопада 2016, 18:11

Т.е. достать номер из документа, имея его CODE? (из кода выше)?
Просто не совсем понятно, - то ли Вы хотите получить номер документа, то ли его код из системы. Имея код из системы, можно получить что угодно, например вызвав метод GetPrimaryReestr() с фильтром по CODE. Получите датасет с единственной записью, в которой будет и дата, и номер, и другие поля.

vatikan
Повідомлень: 8
З нами з: 22 листопада 2016, 18:32

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

Повідомлення vatikan » 23 листопада 2016, 18:29

Мне нужен максимальный номер документа(определенного вида в моем случае Акцизная накладная) чтобы самому нумеровать документы из 1С. Подключаюсь к медку или напрямую к базе, получаю максимальный номер и потом формирую в 1С xml файл для загрузки в медок, в котором проставляю параметр номер документа на 1 больше чем вернул медок.
Недостаток предыдущего запроса в том что не факт что последний документ(документ с самым большим ID), будет иметь самый большой номер :oops:

Відповісти

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