Всем привет.
Нужна документация с описанием структуры БД Медка.
Есть задача на допиливание функционала 1С и получении данных из Медка, а именно: нужно сверять коды УКТЗЕД поставщиков (которые ведутся у нас в базе) и те, которые приходят в входящих налоговых накладных в Медке.
Из примера медовой стыковки COM-объект с реестром входящих налоговых получил, теперь хочу пройтись по таб. части товаров каждого документа, там есть колонка "Код УКТЗЕД" - вот не знаю как её вытянуть, не хотелось бы пальцем в небо тыкать, а знать наверняка. Может кто находил нормальную документацию?
Дошел до следующего места:
// получаем данные с МЕДКА
App = Неопределено;
Попытка
App = Новый COMОбъект("Medoc.ZApplication")
Исключение
Возврат;
КонецПопытки;
// Описание входящих параметров Медка:
// ТипДокумента - "10100" - Налоговая накладная
// ТипДокумента - "10101" - Приложение 2
// ТипДокумента - "10100" - Входящий налоговый документ
// Направление - 1 - исходящие
// Направление - 2 - входящие
prim = App.GetPrimaryDocs();
Reestr = prim.GetPrimaryReestr("10100", 2, НачалоДня(НачалоПериода), КонецДня(КонецПериода));
Reestr.First();
Счетчик = Reestr.RecordCount;
Пока Счетчик <> 0 Цикл
НомерДокМед = Reestr.Fields.Item("DOC_NUM").Value;
ДатаДокМед = Reestr.Fields.Item("DOC_DATE").Value;
СуммаДокМед = Reestr.Fields.Item("DOCSUM").Value;
// КАК ТУТ ОРГАНИЗОВАТЬ ПЕРЕБОР СТРОК ТАБ. ЧАСТИ И ВЫТЯНУТЬ КОД УКТЗЕД С КАЖДОЙ СТРОКИ ?
Счетчик = Счетчик-1;
Reestr.Next();
КонецЦикла;
Bernet @ Сегодня, 12:25
,
Откройте в Медке входящую налоговую, переключите в режим электронного документа - будет вам расписано по именам полей.
Обновленная инструкция (вер. 11) лежит в программном каталоге медка.
Прикрепил файлы в теме в Хранилище, админ одобрит, она появится.
Bernet @ Сегодня, 12:25
,
В вашем случае вы получили таблицу реестра, и читаете его поля.
Прочитайте поле идентификатора документа в медке;
CardCode = Reestr.FldVal("CardCode");
Doc = App.OpenDocumentByCode(CardCode);
rsMain = Doc.DataSets("MAIN");
rsTab = Doc.DataSets("TAB1");
Bernet @ Сегодня, 13:01
,
можете кинуть пример что у Вас получилось, спасибо.
Gazulo @ Вчера, 22:38
,
что-то вроде такого:
App = Неопределено;
Попытка
App = Новый COMОбъект("Medoc.ZApplication")
Исключение
Возврат;
КонецПопытки;
// Описание входящих параметров Медка:
// ТипДокумента - "10100" - Налоговая накладная
// ТипДокумента - "10101" - Приложение 2
// ТипДокумента - "10100" - Регистрация входящего налогового документа
// Направление - 1 - исходящие
// Направление - 2 - входящие
prim = App.GetPrimaryDocs();
Reestr = prim.GetPrimaryReestr("10100", 2, НачалоГода(ТекущаяДата()), КонецДня(ТекущаяДата()));
Reestr.First();
Счетчик = Reestr.RecordCount;
Пока Счетчик <> 0 Цикл
//ВнешИд = Reestr.Fields.Item("EXDOC_ID").Value;
//НомерДокМед = Reestr.Fields.Item("DOC_NUM").Value;
МедИД = Reestr.Fields.Item("DOC_ID").Value;
ДатаДокМед = Reestr.Fields.Item("DOC_DATE").Value;
СуммаДокМед = Reestr.Fields.Item("DOCSUM").Value;
CardCode = Reestr.FldVal("CardCode");
Doc = App.OpenDocumentByCode(CardCode);
rsMain = Doc.DataSets("MAIN");
КонтрагентИНН = rsMain.Fields.Item("FIRM_INN").Value;
rsTab = Doc.DataSets("TAB1");
СчетчикТЧ = rsTab.RecordCount;
Пока СчетчикТЧ <> 0 Цикл
Номенклатура = rsTab.Fields.Item("TAB1_A13").Value;
КодУКТЗЕД = rsTab.Fields.Item("TAB1_A131").Value;
ЦенаБезНДС = rsTab.Fields.Item("TAB1_A16").Value;
НоваяСтрока = ТабДанныхМедка.Добавить();
НоваяСтрока.ДокументИД = МедИД;
НоваяСтрока.ДатаДок = ДатаДокМед;
НоваяСтрока.СуммаДок = СуммаДокМед;
НоваяСтрока.КонтрагентИНН = КонтрагентИНН;
НоваяСтрока.Номенклатура = Номенклатура;
НоваяСтрока.КодУКТЗЕД = КодУКТЗЕД;
НоваяСтрока.ЦенаБезНДС = ЦенаБезНДС;
СчетчикТЧ = СчетчикТЧ-1;
rsTab.Next();
КонецЦикла;
Счетчик = Счетчик-1;
Reestr.Next();
КонецЦикла;
Кстати если кто будет страдать похожей фигней - чтобы не морочить Медовую стыковку, COM-объекты и уйти от необходимости запуска Медка для чтения данных из него - есть способ лучше и проще - обращение к базе медка Firebird напрямую через ODBC драйвер. Работает быстрее и надежнее. Простым SQL запросом можно вытянуть все что необходимо.
P.S. Однако стоит помнить что такую связку лучше использовать только на чтение из Медка, записывать в базу ничего из вне не рекомендуется, т.к. хз как поведет себя потом Медок.
awp @ Сегодня, 8:52
,
Нет, в Инете не нашел, Медок тоже сморозился. Как уже мне выше подсказывали, иена большей части полей базы совпадает с той структурой которая видна в пользовательском режиме, когда переходим в режим просмотра структуры документа (есть там такая функция точно не помню как называется, когда пользователь прямо на документе видит как эти поля называются в макете). Может это немного поможет и упростит работу
У меня была задача: в налоговую автоматом подтягивать коды УКТЗЕД и признак импортного товара, проблема в том что ещё и наименования товаров у нас в базе и у поставщиков не совпадают.
Логика такая: формируем налоговую накладную - смотрим по какой реализации она создана, дальше по реализации по проводкам смотрим с какой партии списало товар (ищем поступление товаров и услуг), далее ищем по партии созданную Входящую налоговую накладную. Получаю её дату и номер. Далее по этой дате и номеру нахожу в Медке в базе нужный мне документ, перебираю все товары и проверяю есть ли товар с таким количеством, ценой и суммой как у нас в поступлении (тут конечно это пальцем в небо, если учесть что могут быть две позиции с одинаковой ценой и количеством, но бухи такое захотели, пусть теперь мучаются
Если у вас что-то похожее могу дать имена таблиц и реквизитов, которые использовал - сэкономит время.
Bernet @ 27.04.17, 8:54
,
а я пітаюсь прописать ИД в 1С звит потому как DOCID без дефисов а EXDOCID пустой
Пока Счетчик <> 0 Цикл
Если ПустаяСтрока(Reestr.Fields.Item("EXDOC_ID").Value)Тогда
МедИд = Reestr.Fields.Item("DOC_ID").Value=СтрЗаменить(ИД,"-","");
Иначе
МедИд = Reestr.Fields.Item("EXDOC_ID").Value=ИД;
КонецЕсли;
НомерДокаМед = Reestr.Fields.Item("DOC_NUM").Value;
КонтрМед = Reestr.Fields.Item("PATRNER_IPN").Value;
Если МедИд и НомерДока = НомерДокаМед и КонтрМед = Контр Тогда
НаличиеВМедке = Истина;
ЕРНН = Reestr.Fields.Item("REGDATE").Value;
Если ПустаяСтрока(Reestr.Fields.Item("EXDOC_ID").Value)Тогда
orgId = App.SelectFirm(СокрЛП(КодПоЕДРПОУ), СокрЛП(пФил));
CardCode = Reestr.FldVal("CardCode");
Doc = App.OpenDocumentByCode(CardCode);
Doc.DisableScripts();
rsMain=Doc.DataSets("MAIN");
rsMain.Edit();
rsMain.Fields.Item("EXDOC_ID").Value=ИД;
rsMain.Post();
Doc.EnableScripts();//включаем скрипты
Doc.Save(1);
Doc.Close();
КонецЕсли;
Делаю задачу. В рамках задачи надо было получить некоторые данные из НН из базы Медок. Клиент не покупал модуль интеграции, поэтому пришлось разобраться как получать данные из Медка прямыми запросами. Хочу поделиться
Для отладки SQL запросов к базе Firebird использовал программу "SQL Manager for InterBase/Firebird". Входит в пакет "SQL Management Studio for InterBase/Firebird", использование 30 дней бесплатно
Запрос, которым можно получить список таблиц базы и их объем
SELECT I.rdb$relation_name RELATION,
cast(1/I.RDB$STATISTICS as integer) RECORD_COUNT
FROM RDB$INDICES I
JOIN RDB$RELATION_CONSTRAINTS C
ON (C.RDB$INDEX_NAME = I.RDB$INDEX_NAME)
AND (C.RDB$CONSTRAINT_TYPE = 'PRIMARY KEY')
AND (I.RDB$STATISTICS > cast(0 as double precision))
select
MAIN.*
, T.*
from FJ1201002_MAIN AS MAIN
INNER JOIN FJ1201002_TAB1 AS T
ON T.CARDCODE = MAIN.CARDCODE
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua