Экспорт налоговых накладных в свою учетную систему

Цікава інформація для наших клієнтів
Відповісти
Gavryuk
Повідомлень: 10
З нами з: 27 січня 2017, 17:15

Экспорт налоговых накладных в свою учетную систему

Повідомлення Gavryuk » 27 січня 2017, 17:59

Добрый день!

Есть задача получить список налоговых накладных из медка в свою учетную систему. Всех накладных, и своих и присланных контрагентами.

Выборку из журнала сделал:
PrimDocs:=medocapp.GetPrimaryDocs;
Reestr:=PrimDocs.GetPrimaryReestr(10100,-1,StrToDate('10.01.2017'),StrToDate('13.01.2017'));
Reestr.First;
While not Reestr.Eof do begin
Doc:=medocapp.OpenDocumentByCode(367548, true);
RstDS:=Doc.DataSets('',1);

?????????????????????

Reestr.Next;
end;
Вот в указанном месте прочитал заглавную часть НН могу, а как прочитать информацию о товаре/услуге? Вот в чем вопрос!
Пробовал RstDS:=Doc.DataSets('TAB1',1); появляется дополнительная информация, но похоже не та и только одна строчка.
Очень нужна помощь!
Спасибо!

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

Re: Экспорт налоговых накладных в свою учетную систему

Повідомлення Inkognito » 30 січня 2017, 14:40

Пробовал RstDS:=Doc.DataSets('TAB1',1); появляется дополнительная информация, но похоже не та и только одна строчка.
Все правильно делаете. Только неправильно перебираете. Это же датасет, значит его надо построчно считать:

Синтаксис 1С такой ("переведите" на свою систему):
table = ОтчетВх.DataSets("TAB1"); //она же RstDS:=Doc.DataSets('',1); //получаем датасет
table.First(); //позиционируемся на 1 записи
Пока НЕ table.EOF Цикл //цикл

Сообщить(Отчет.GetValue("TAB1", "TAB1_A8")); //перебираем поля
.....
table.Next(); //продолжить поиск
КонеЦЦикла;
Востаннє редагувалось 31 січня 2017, 13:01 користувачем Inkognito, всього редагувалось 1 раз.

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

Re: Экспорт налоговых накладных в свою учетную систему

Повідомлення Inkognito » 31 січня 2017, 11:18

Gavryuk, как успехи?

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

Re: Экспорт налоговых накладных в свою учетную систему

Повідомлення priup » 31 січня 2017, 11:38

Inkognito писав:....... как успехи?
Дык ктож Вам скажет................ :P

Gavryuk
Повідомлень: 10
З нами з: 27 січня 2017, 17:15

Re: Экспорт налоговых накладных в свою учетную систему

Повідомлення Gavryuk » 31 січня 2017, 16:24

priup писав:
Inkognito писав:....... как успехи?
Дык ктож Вам скажет................ :P
;) Пока не очень. На шажок продвинулся, но конечного результата пока не достиг.
По перечню позиций получаю нужно количество строк, но в каждой из них суммаа всех строк. Даже колличество суммируется (килограммы с метрами складываются в том числе).
Как поборю, обязательно отпишусь.
пысы: всем сопереживающим спасибо!

poltava_energy
Повідомлень: 717
З нами з: 13 червня 2012, 09:38

Re: Экспорт налоговых накладных в свою учетную систему

Повідомлення poltava_energy » 31 січня 2017, 16:35

Gavryuk писав:Даже колличество суммируется (килограммы с метрами складываются в том числе).
Навіщо складувать кілограми з метрами, коли у них різний код одиниці виміру?
Востаннє редагувалось 31 січня 2017, 16:36 користувачем poltava_energy, всього редагувалось 1 раз.

poltava_energy
Повідомлень: 717
З нами з: 13 червня 2012, 09:38

Re: Экспорт налоговых накладных в свою учетную систему

Повідомлення poltava_energy » 31 січня 2017, 16:36

poltava_energy писав:
Gavryuk писав:Даже колличество суммируется (килограммы с метрами складываются в том числе).
Навіщо складувать кілограми з метрами, коли у них різний код одиниці виміру?

Gavryuk
Повідомлень: 10
З нами з: 27 січня 2017, 17:15

Re: Экспорт налоговых накладных в свою учетную систему

Повідомлення Gavryuk » 31 січня 2017, 17:06

poltava_energy писав:
Gavryuk писав:Даже колличество суммируется (килограммы с метрами складываются в том числе).
Навіщо складувать кілограми з метрами, коли у них різний код одиниці виміру?
Я би теж хотів це знати. Але з розробниками поспілкуватися схоже марно прагнути.

poltava_energy
Повідомлень: 717
З нами з: 13 червня 2012, 09:38

Re: Экспорт налоговых накладных в свою учетную систему

Повідомлення poltava_energy » 31 січня 2017, 17:17

Gavryuk писав:
poltava_energy писав:
Gavryuk писав:Даже колличество суммируется (килограммы с метрами складываются в том числе).
Навіщо складувать кілограми з метрами, коли у них різний код одиниці виміру?
Я би теж хотів це знати. Але з розробниками поспілкуватися схоже марно прагнути.
До чого тут розробники :o
Вам пан Інкогніто підсказав дієвий алгоритм:
Inkognito писав:Сообщить(Отчет.GetValue("TAB1", "TAB1_A8")); //перебираем поля
Поля потрібно перебирати самому, і самому ж слідкувати за відповідністю одиниць.

Gavryuk
Повідомлень: 10
З нами з: 27 січня 2017, 17:15

Re: Экспорт налоговых накладных в свою учетную систему

Повідомлення Gavryuk » 31 січня 2017, 17:34

poltava_energy писав: Вам пан Інкогніто підсказав дієвий алгоритм:
Inkognito писав:Сообщить(Отчет.GetValue("TAB1", "TAB1_A8")); //перебираем поля
Поля потрібно перебирати самому, і самому ж слідкувати за відповідністю одиниць.
У жодного із класів не має такого методу. Використовую Deplhi. Я розумію, що то мої проблеми, тому на цьому і не акцентував увагу.
Поля перебирати я і сам умію, та перебирати треба записи. Вони перебираються:
CardCode:=Reestr.Fields.Item['CARDCODE'].Value;
Doc:=medocapp.OpenDocumentByCode(CardCode, true);
RstDS:=Doc.Card;
RstDS:=Doc.DataSets('TAB1',2);
RstDS.First;
while not RstDS.Eof do begin
memo1.Lines.add(RstDS.Fields.Item[9].name+'->'+rstds.FldVal[9]+
RstDS.Fields.Item[14].name+'->'+FloatToStr(rstds.FldVal[14]));
rstDS.Next;
end;
Я правильно перебираю?
Але всі записи повертають одне й те саме значення: суму по стовпчиках з усіх записів. І я про це писав, ви не звернули увагу.

poltava_energy
Повідомлень: 717
З нами з: 13 червня 2012, 09:38

Re: Экспорт налоговых накладных в свою учетную систему

Повідомлення poltava_energy » 31 січня 2017, 17:52

Gavryuk писав:У жодного із класів не має такого методу. Використовую Deplhi. Я розумію, що то мої проблеми, тому на цьому і не акцентував увагу.
Кинь сюди zip-архів проекту, гляну по свободі як матиму вільний час та натхнення...

Gavryuk
Повідомлень: 10
З нами з: 27 січня 2017, 17:15

Re: Экспорт налоговых накладных в свою учетную систему

Повідомлення Gavryuk » 31 січня 2017, 18:13

додав
Вкладення
MeDOC.rar
(172.71 Кіб) Завантажено 24 разів

Gavryuk
Повідомлень: 10
З нами з: 27 січня 2017, 17:15

Re: Экспорт налоговых накладных в свою учетную систему

Повідомлення Gavryuk » 31 січня 2017, 18:29

Доречі дивна штука виходить:
команда

Reestr:=PrimDocs.GetPrimaryReestr(10100,-1,StrToDate('10.01.2017'),StrToDate('13.01.2017'));
Reestr.First;
Doc:=medocapp.OpenDocumentByCode(CardCode, true);
RstDS:=Doc.Card;
rstds.Fields.Item['DOCNAME'].value
видає все як потрібно "Ïîäàòêîâà íàêëàäíà ¹41523 â³ä 13.01.2017"

а схожа комбінація
Doc:=medocapp.OpenDocumentByCode(367190, true);
RstDS:=Doc.DataSets('TAB1',1);
rstds.First;
for i:=0 to RstDS.Fields.Count-1 do begin
try
val:=rstds.Fields.Item[RstDS.Fields.Item.name].value;
s:=string(val);
except s:='?????' end;

видає:
CARDCODE ->1468760
CODE ->1358802
RECNO ->6
TAB1_51 ->0
TAB1_A1 ->10
TAB1_A10 ->268011.99
TAB1_A110 ->0
TAB1_A111 ->0
TAB1_A12 ->0
TAB1_A13 ->?????
TAB1_A131 ->0
TAB1_A14 ->?????
TAB1_A141 ->1336
TAB1_A15 ->757.724
TAB1_A16 ->2274.62
TAB1_A17 ->0
TAB1_A171 ->0
TAB1_A18 ->0
TAB1_A19 ->0
TAB1_A8 ->80
TAB1_A9 ->0
TAB1_RATE ->0

Чомусь стрінг викливає except. Дивно.

Gavryuk
Повідомлень: 10
З нами з: 27 січня 2017, 17:15

Re: Экспорт налоговых накладных в свою учетную систему

Повідомлення Gavryuk » 01 лютого 2017, 11:28

Усьо, панове!

Розібрався. Собака зарита дуже поганенько.
Ось тут: RstDS:=Doc.DataSets('TAB1',0);
Отам у кінці замість ноліка якщо вбамбехать 1, то й будуть тоді підсумки. Хоча кількість рядків видає як для самого змісту.
Коротше, ставимо 0 і насолоджуємося.
Усім дякую!

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

Re: Экспорт налоговых накладных в свою учетную систему

Повідомлення Inkognito » 01 лютого 2017, 12:08

Пропоную взагалі не вказувати після коми нічого. Завжди так роблю, ще й здивувася, для чого там якісь ще параметри.
1) Основний датасет main:=Doc.DataSets();
2) Таблиця table:=Doc.DataSets('TAB1');

Gavryuk
Повідомлень: 10
З нами з: 27 січня 2017, 17:15

Re: Экспорт налоговых накладных в свою учетную систему

Повідомлення Gavryuk » 01 лютого 2017, 13:03

Inkognito писав:Пропоную взагалі не вказувати після коми нічого. Завжди так роблю, ще й здивувася, для чого там якісь ще параметри.
1) Основний датасет main:=Doc.DataSets();
2) Таблиця table:=Doc.DataSets('TAB1');
Ось для чого:
[Error] ViewNN.pas(109): Not enough actual parameters

poltava_energy
Повідомлень: 717
З нами з: 13 червня 2012, 09:38

Re: Экспорт налоговых накладных в свою учетную систему

Повідомлення poltava_energy » 01 лютого 2017, 14:35

Gavryuk писав:Отам у кінці замість ноліка якщо вбамбехать 1, то й будуть тоді підсумки. Хоча кількість рядків видає як для самого змісту.
Коротше, ставимо 0 і насолоджуємося.
Пробачте за мій хрансузький.... але в документації зазначено наступне:
1.1Структура документа
Документ состоит из: тела документа (MAIN,0) и подтаблиц (TABn,0), итоговых строк для подтаблиц (TABn,1).
Власне саме це і є причина ексепшна при зверненні до певних полів, тому що у підсумковій таблиці ці поля зі стрінгами не проініціалізовані (хоча там має бути пусто :evil: :evil: :evil: побвивавби).
А видає помилку: [Error] ViewNN.pas(109): Not enough actual parameters тому що у вас явні звернення через інтерфейс IZDataSet, аби було через OleVariant, то можна було б писати із без останнього параметра.

Первіряв власним кодом, який написаний на базі вашого:

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

  Memo.Clear();

  medoc := CreateComObject(CLASS_ZApplication) as IZApplication;
  pdocs := medoc.GetPrimaryDocs();

  dateBeg := EncodeDate(2016, 06, 30);
  dateEnd := EncodeDate(2016, 06, 30);
  reest := pdocs.GetPrimaryReestr(10100, (-1), dateBeg, dateEnd);

  m(reest.RecordCount);
  m(reest.Fields.Count);

  reest.First();
  mds(reest);

  docum := medoc.OpenDocumentByCode(reest.Fields.Item['CARDCODE'].Value, true);
  docds := docum.Card;
  m('--- docum.Card');
  m(docds.RecordCount);
  m(docds.Fields.Count);
  docds.First();
//  mds(docds);

//  docds := docum.DataSets('MAIN', 0);
  docds := docum.DataSets('TAB1', 1);
  m('--- docum.TAB1');
  m(docds.RecordCount);
  m(docds.Fields.Count);
  mds(docds);

  m('--- field');
  field := docds.Fields.Item['TAB1_A13'];
  olev := field.Value;
  m(olev);

Gavryuk
Повідомлень: 10
З нами з: 27 січня 2017, 17:15

Re: Экспорт налоговых накладных в свою учетную систему

Повідомлення Gavryuk » 01 лютого 2017, 15:11

poltava_energy писав: Пробачте за мій хрансузький.... але в документації зазначено наступне:
1.1Структура документа
Документ состоит из: тела документа (MAIN,0) и подтаблиц (TABn,0), итоговых строк для подтаблиц (TABn,1).
Власне саме це і є причина ексепшна при зверненні до певних полів, тому що у підсумковій таблиці ці поля зі стрінгами не проініціалізовані (хоча там має бути пусто :evil: :evil: :evil: побвивавби).
Так, мій косяк. Майже всі неприємності в дрібницях. ;)
Заради справедливості слід зауважити, і з присутніх ніхто не помітив.
Будьмо уважними!
Дякую.

vmen10
Повідомлень: 175
З нами з: 16 січня 2012, 18:28
Звідки: Николаев

Re: Экспорт налоговых накладных в свою учетную систему

Повідомлення vmen10 » 14 лютого 2017, 20:48

Inkognito писав:
Пробовал RstDS:=Doc.DataSets('TAB1',1); появляется дополнительная информация, но похоже не та и только одна строчка.
Все правильно делаете. Только неправильно перебираете. Это же датасет, значит его надо построчно считать:

Синтаксис 1С такой ("переведите" на свою систему):
table = ОтчетВх.DataSets("TAB1"); //она же RstDS:=Doc.DataSets('',1); //получаем датасет
table.First(); //позиционируемся на 1 записи
Пока НЕ table.EOF Цикл //цикл

Сообщить(Отчет.GetValue("TAB1", "TAB1_A8")); //перебираем поля
.....
table.Next(); //продолжить поиск
КонеЦЦикла;
В 1С77 программе "Пока НЕ table.EOF Цикл " возникает ошибка,
методом проб(вывел на экран значение, подсмотрел состояния) нашел правильную, надо " Пока table.EOF<>-1 Цикл "
иначе можно перебирать по позиционно зная число строк table.RecordCount();

Відповісти

Повернутись до “Корисна інформація”