Как получить реестр отчетов через com

Відповісти
kvatik
Повідомлень: 6
З нами з: 17 березня 2020, 15:15

Как получить реестр отчетов через com

Повідомлення kvatik » 17 березня 2020, 15:23

Добрый день.
Пишу интеграцию с Медком через COM (Medoc.ZApplication)
Есть метод GetPrimaryReestr для получения реестра первичных документов.
Есть ли аналогичный метод для реестра отчетов? Мне необходимо вытащить из Медка Таблицы данных плательщика налогов (J1312303).

kvatik
Повідомлень: 6
З нами з: 17 березня 2020, 15:15

Re: Как получить реестр отчетов через com

Повідомлення kvatik » 18 березня 2020, 15:49

Подскажите пожалуйста хотя бы где спросить, очень надо.

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

Re: Как получить реестр отчетов через com

Повідомлення priup » 18 березня 2020, 17:05

kvatik писав:
18 березня 2020, 15:49
Подскажите пожалуйста хотя бы где спросить, очень надо.
Попросите Вашего продавца МЕДОК вопрос в БО отослать!!

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

Re: Как получить реестр отчетов через com

Повідомлення Белокопытов Геннадий » 18 березня 2020, 17:38

kvatik
Добрый день. На текущий момент для работы с реестром отчетов СОМ методов, аналогичных GetPrimaryReestr, нет.
Вы можете посмотреть вариант DocumentsDataSet из описания существующих методов.
Если вам необходима индивидуальная доработка, можете также обратиться к обслуживающей организации или по форме обратной связи на оф. сайте, ссылка

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

Re: Как получить реестр отчетов через com

Повідомлення Inkognito » 18 березня 2020, 17:41

DS = App.DocumentsDataSet("PerDate > DateValue('01.01.2019')"); //датасет за пеірод з 01.01.2019, поставте свій варіант
DS.Filter = "Charcode=J1312303"; //фільтр за чаркодом, щоб тільки такі звіти залишились
DS.First(); //позиціювання в першу стрічку датасета

Пока НЕ DS.EOF Цикл //цикл

Cardcode = Формат(DS.Fields.Item("Cardcode").Value,"ЧГ="); //внутрішній код
PerDate = DS.Fields.Item("PerDate").Value; //період звіту
Сообщить("Cardcode=" + Cardcode + "; PerDate =" + PerDate); //для наглядності
// читаємо документ
док = App.OpenDocumentByCode(Cardcode);
MAIN= док.DataSets("MAIN"); //шапка
TAB1= док.DataSets("TAB1"); //таблиця
//далі свій код
//
DS.Next(); //наступна стрічка
КонецЦикла;
Востаннє редагувалось 18 березня 2020, 17:47 користувачем Inkognito, всього редагувалось 6 разів.

kvatik
Повідомлень: 6
З нами з: 17 березня 2020, 15:15

Re: Как получить реестр отчетов через com

Повідомлення kvatik » 18 березня 2020, 17:44

Огромнейшее спасибо!!!! :)

kvatik
Повідомлень: 6
З нами з: 17 березня 2020, 15:15

Re: Как получить реестр отчетов через com

Повідомлення kvatik » 18 березня 2020, 18:02

При выполнении App.DocumentsDataSet медок крашится (((
Ну буду ковырять.

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

Re: Как получить реестр отчетов через com

Повідомлення Белокопытов Геннадий » 18 березня 2020, 20:01

kvatik писав:
18 березня 2020, 18:02
При выполнении App.DocumentsDataSet медок крашится (((
Ну буду ковырять.
Необходимо более детальное понимание, что вы выполняете и что в логах программы.

kvatik
Повідомлень: 6
З нами з: 17 березня 2020, 15:15

Re: Как получить реестр отчетов через com

Повідомлення kvatik » 19 березня 2020, 11:34

Inkognito писав:
18 березня 2020, 17:41
DS = App.DocumentsDataSet("PerDate > DateValue('01.01.2019')"); //датасет за пеірод з 01.01.2019, поставте свій варіант
DS.Filter = "Charcode=J1312303"; //фільтр за чаркодом, щоб тільки такі звіти залишились
DS.First(); //позиціювання в першу стрічку датасета

Пока НЕ DS.EOF Цикл //цикл

Cardcode = Формат(DS.Fields.Item("Cardcode").Value,"ЧГ="); //внутрішній код
PerDate = DS.Fields.Item("PerDate").Value; //період звіту
Сообщить("Cardcode=" + Cardcode + "; PerDate =" + PerDate); //для наглядності
// читаємо документ
док = App.OpenDocumentByCode(Cardcode);
MAIN= док.DataSets("MAIN"); //шапка
TAB1= док.DataSets("TAB1"); //таблиця
//далі свій код
//
DS.Next(); //наступна стрічка
КонецЦикла;
Cardcode = Формат(DS.Fields.Item("CODE").Value,"ЧГ=");
Все получилось спасибо.
P.S. С датой тоже что-то отбор не получился, но так как мы решили грузить все, то фильтр по дате не нужен.

kvatik
Повідомлень: 6
З нами з: 17 березня 2020, 15:15

Re: Как получить реестр отчетов через com

Повідомлення kvatik » 19 березня 2020, 11:35

Итоговый код | Показать
    // получаем данные с МЕДКА
    Попытка
        App = Новый COMОбъект("Medoc.ZApplication")
    Исключение
Сообщить(НСтр("ru = 'Подключение не выполнено. Возможные причины:';uk = 'Підключення не виконано. Можливі причини:'") + Символы.ПС +
НСтр("ru = '- M.E.Doc не запущен.';uk = '- M.E.Doc не запущений.'") + символы.ПС +
НСтр("ru = '- не выполнен вход в предприятие из списка.';uk = '- не виконаний вхід у підприємство зі списку.'"), СтатусСообщения.Важное);
        Возврат;
    КонецПопытки;                
    
ОргМедок = App.GetCurrEdrpou();
Если Не УстановитьОрганизацию(ОргМедок) Тогда
Сообщить("Не найдена организация, выбранная в Медке, по коду ЕДРПОУ " + ОргМедок, СтатусСообщения.Важное);
Возврат;
КонецЕсли;
//DS = App.DocumentsDataSet("PerDate > DateValue('01.02.2020') AND PerDate < DateValue('01.03.2020') AND Charcode='J1312303'");
DS = App.DocumentsDataSet("Charcode='J1312303'");
//DS.Filter = "Charcode=J1312303";
DS.First();
    
    Пока НЕ DS.EOF Цикл
    
     //Cardcode = Формат(DS.Fields.Item("Cardcode").Value,"ЧГ=");
     Cardcode = Формат(DS.Fields.Item("CODE").Value,"ЧГ=");
     Если Cardcode="" Тогда
     DS.Next();
Продолжить;
КонецЕсли;
     PerDate = DS.Fields.Item("PerDate").Value;
     Сообщить("Cardcode=" + Cardcode + "; PerDate =" + PerDate);
     //
     Doc = App.OpenDocumentByCode(Cardcode);
     rsMain= Doc.DataSets("MAIN");
    
    КонтрагентИНН = rsMain.Fields.Item("FIRM_INN").Value;
    
    НоваяСтрока_Документы = _Документы.Добавить();
    НоваяСтрока_Документы.CARDCODE = rsMain.Fields.Item("CARDCODE").Value;
    НоваяСтрока_Документы.CODE = rsMain.Fields.Item("CODE").Value;
    НоваяСтрока_Документы.Документ = НайтиДокументПоКодуМедка(НоваяСтрока_Документы.CARDCODE);
    Если Не ЗначениеЗаполнено(НоваяСтрока_Документы.Документ) Тогда
НоваяСтрока_Документы.ЗагружатьДокумент = Истина;
КонецЕсли;
    
     rsTab= Doc.DataSets("TAB1");
    СчетчикТЧ = rsTab.RecordCount;
    Пока СчетчикТЧ <> 0 Цикл
        
        НоваяСтрока = ДанныеДокументов.Добавить();
        НоваяСтрока.CARDCODE = rsTab.Fields.Item("CARDCODE").Value;
        НоваяСтрока.CODE = rsTab.Fields.Item("CODE").Value;
        НоваяСтрока.TAB1_ = rsTab.Fields.Item("TAB1_").Value;
        НоваяСтрока.TAB1_A1 = rsTab.Fields.Item("TAB1_A1").Value;
        НоваяСтрока.TAB1_A2 = rsTab.Fields.Item("TAB1_A2").Value;
        НоваяСтрока.TAB1_A3 = rsTab.Fields.Item("TAB1_A3").Value;
        НоваяСтрока.КодУКТВЭД_приобретения = НайтиКлассификаторУКТВЭД(НоваяСтрока.TAB1_A2);
        НоваяСтрока.КодУКТВЭД_поставки = НайтиКлассификаторУКТВЭД(НоваяСтрока.TAB1_A3);
        
        СчетчикТЧ = СчетчикТЧ-1;
        rsTab.Next();    
    КонецЦикла;
    
     //
     DS.Next();
    КонецЦикла;

Відповісти

Повернутись до “Электронний документообіг”