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

Родин Евгений

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

Повідомлення Родин Евгений » 12 грудня 2012, 00:26

Это хорошо. В работе (совместной с 1С). Как будет реализовано точно еще не скажу, но предположительно будет "одной кнопкой".
П.С. см. в модуле "Реестр первичных документов", меню "Сервис", последнее по списку подменю.

---Billy---
Повідомлень: 18
З нами з: 06 квітня 2012, 13:15

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

Повідомлення ---Billy--- » 24 грудня 2012, 14:47

после последнего обновления налоговые через сом стали загружаться помилковими, если в них зайти и проверить - пишет помилок не знайдено и звит становится уже не помилковим...в чём может быть причина?

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

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

Повідомлення Inkognito » 25 грудня 2012, 17:10

Doc.Save(bool Scheck);
//равносилен обычной проверке по F4. Если передается (1), тогда документ проверяется по внутренним механизмам контролей. Не может быть, чтобы документ был ошибочным, а после повторного вхождения и проверки становился безошибочным. Значит, недостающие параметры при передаче, Медок дополняет своими. Нужно смотреть код выгрузки.

Vlad Kovalev
Повідомлень: 6
З нами з: 26 грудня 2012, 12:50

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

Повідомлення Vlad Kovalev » 26 грудня 2012, 13:00

---Billy--- писав:после последнего обновления налоговые через сом стали загружаться помилковими, если в них зайти и проверить - пишет помилок не знайдено и звит становится уже не помилковим...в чём может быть причина?
у меня точно такая же проблема на 1С 7.7
код загрузки налоговой накладаной | Показать
ме_Док = МЕДок.OpenOrCreateByExDocID(CharCode_Док,0,НачМесяца(ДатаДок),,НомерДокСтр,1);
ме_Док.UpdateSysFields();
ме_Док_Заголовок = ме_Док.DataSets("MAIN");
ме_Док_Заголовок.Edit();
ме_Док_Заголовок.FldVal("NAKL_TYPE",1);
ме_Док_Заголовок.FldVal("FIRM_EDRPOU",рПредприятиеЕДРПОУ);
ме_Док_Заголовок.FldVal("FIRM_NAME",рПродавец);
ме_Док_Заголовок.FldVal("FIRM_ADR",прАдрес);
ме_Док_Заголовок.FldVal("FIRM_SRPNDS",прНомерСвидетельства);
ме_Док_Заголовок.FldVal("FIRM_INN",прИНН);
ме_Док_Заголовок.FldVal("PHON",прТелефон);
ме_Док_Заголовок.FldVal("FIRM_STFOND",0);
ме_Док_Заголовок.FldVal("EDR_POK",рПокупательЕДРПОУ);
ме_Док_Заголовок.FldVal("SN",рНомерПоручения);
ме_Док_Заголовок.FldVal("N1","X"); // Оригинал
ме_Док_Заголовок.FldVal("N2",""); // Копия
ме_Док_Заголовок.FldVal("N2_1",НомерДок);
ме_Док_Заголовок.FldVal("N2_11",Число(НомерДок));
ме_Док_Заголовок.FldVal("N2_1I",Число(НомерДок));
ме_Док_Заголовок.FldVal("N3",рПокупатель); // наименование покупателя
ме_Док_Заголовок.FldVal("N4",пкИНН); // ИНН покупателя
ме_Док_Заголовок.FldVal("N5",пкАдрес); // адрес покупателя
ме_Док_Заголовок.FldVal("N6",пкТелефон); // телефон покупателя
ме_Док_Заголовок.FldVal("N7",пкНомерСвидетельства); // свидетельство покупателя
ме_Док_Заголовок.FldVal("N8",рДоговор); // условие продажи (вид договора)
ме_Док_Заголовок.FldVal("N81",рНомерДоговора); // номер договора

Если ПустоеЗначение(рДатаДоговора) = 0 Тогда
ме_Док_Заголовок.FldVal("N82",рДатаДоговора); // дата договора
КонецЕсли;

ме_Док_Заголовок.FldVal("N9",рВидВзаиморасчетов); // форма проведенных расчетов
ме_Док_Заголовок.FldVal("N10",рАвтор); // автор накладной
ме_Док_Заголовок.FldVal("N11",ДатаДок); // дата накладной
ме_Док_Заголовок.FldVal("N12",1); // включено в ЕРПН
ме_Док_Заголовок.FldVal("N13",рОригиналНеВыдается); // остается у продавца
ме_Док_Заголовок.FldVal("N14",рТипПричиныНеВыдОриг); // тип причины не выдавать оригинал
ме_Док_Заголовок.FldVal("A5_7",рИтогСтоимостьБезНДС); // всего по разделу 1 (по основной ставке)
ме_Док_Заголовок.FldVal("A5_11",рИтогСтоимостьБезНДС); // всего по разделу 1 (по всем ставкам)

Если рЗалоговаяТара > 0 Тогда
ме_Док_Заголовок.FldVal("A3_11",рЗалоговаяТара); // раздел 2 (залоговая тара)
КонецЕсли;

ме_Док_Заголовок.FldVal("A6_7",рИтогНДС); // раздел 3 (НДС по основной ставке)
ме_Док_Заголовок.FldVal("A6_11",рИтогНДС); // раздел 3 (всего НДС)
ме_Док_Заголовок.FldVal("A7_7",рИтогСтоимостьСНДС); // раздел 4 (всего сумма с НДС по основной ставке)
ме_Док_Заголовок.FldVal("A7_11",рИтогСтоимостьСНДС); // раздел 4 (всего сумма с НДС)

ме_Док_Заголовок.Post();

ме_Док_Таб1 = ме_Док.DataSets("TAB1");

ТаблицаДокумента.ВыбратьСтроки();

Пока ТаблицаДокумента.ПолучитьСтроку() = 1 Цикл
Если ТаблицаДокумента.НомерСтроки = 1 Тогда
ме_Док_Таб1.Edit();
Иначе
ме_Док_Таб1.Append();
ме_Док_Таб1.FldVal("RECNO",ТаблицаДокумента.НомерСтроки-1); // индекс записи таблицы
КонецЕсли;

ме_Док_Таб1.FldVal("TAB1_A12",ДатаДок); // Дата виникнення податкового зобов'язання

ме_Док_Таб1.FldVal("TAB1_A13",ТаблицаДокумента.TAB1_A13);
ме_Док_Таб1.FldVal("TAB1_A131",ТаблицаДокумента.TAB1_A131);
ме_Док_Таб1.FldVal("TAB1_A14",ТаблицаДокумента.TAB1_A14);
ме_Док_Таб1.FldVal("TAB1_A15",ТаблицаДокумента.TAB1_A15);
ме_Док_Таб1.FldVal("TAB1_51",ТаблицаДокумента.TAB1_51);
ме_Док_Таб1.FldVal("TAB1_A16",ТаблицаДокумента.TAB1_A16);
ме_Док_Таб1.FldVal("TAB1_A17",ТаблицаДокумента.TAB1_A17);
ме_Док_Таб1.FldVal("TAB1_A18",ТаблицаДокумента.TAB1_A18);
ме_Док_Таб1.FldVal("TAB1_A19",ТаблицаДокумента.TAB1_A19);
ме_Док_Таб1.FldVal("TAB1_A110",ТаблицаДокумента.TAB1_A110);

ме_Док_Таб1.Post();
КонецЦикла;

ме_Док.Save(1);

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

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

Повідомлення Inkognito » 26 грудня 2012, 14:35

ме_Док.Save(1);
Становится ошибочным, заходите-проверяете- становится не ошибочным? Добавьте обновление грида, чтобы быть абсолютно уверенным, последней строкой после передачи отчета (см. последнюю версию Инструкции по СОМ-объектам).

App.RefreshRstDoc();

Родин Евгений

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

Повідомлення Родин Евгений » 27 грудня 2012, 11:49

Проблема еще актуальна?

---Billy---
Повідомлень: 18
З нами з: 06 квітня 2012, 13:15

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

Повідомлення ---Billy--- » 27 грудня 2012, 11:53

Родин Евгений писав:Проблема еще актуальна?
переделал на .Save(0) - проблема исчезла
.Recalc()
.UpdateSysFields()
не помогают

Родин Евгений

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

Повідомлення Родин Евгений » 27 грудня 2012, 11:58

1) Попробуйте предложенный выше:
App.RefreshRstDoc();
2) Указанные Вами я специально удалил из Инструкции, ввиду их бесполезности.

Vlad Kovalev
Повідомлень: 6
З нами з: 26 грудня 2012, 12:50

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

Повідомлення Vlad Kovalev » 28 грудня 2012, 12:44

Метод App.RefreshRstDoc() ничего не дал для решения проблемы. Его действие проявляется только тогда, когда открыт Журнал налоговых накладных (НН). После его применения загруженные НН становятся видны. Если журнал не был открыт, то после открытия вновь загруженные накладные и так станут видны.

Суть проблемы заключается в следующем. Имеется фирма-импортёр. Все её налоговые накладные содержат товары с кодами УКТ ЗЕД и требуют регистрации в Едином реестре налоговых накладных. Когда этих накладных неколько штук в день, то не имеет особого значения, чтобы после переброски НН из 1С в Медок их нужно было открыть, проверить на ошибки и записать. Но когда НН несколько десятков в день, то для бухгалтера добавляется лишняя работа.

Делаем эксперимент. Перебрасываем НН в Медок, документ виден в журнале как "Помилковий". С помощью утилиты Firebird 2.1 isql.exe выгружаем содержимое таблиц CARD, FJ1201002_MAIN и FJ1201002_TAB1 в файл. Открываем в Медоке документ, делаем проверку и сохраняем. Состояние документа становится "Вірний". Выгружаем isql.exe содержимое таблиц CARD, FJ1201002_MAIN и FJ1201002_TAB1 в другой файл и сравниваем с первым, чтобы найти поля таблиц, которые изменились. В таблицах FJ1201002_MAIN и FJ1201002_TAB1 изменений нет, это значит, что в данных самой НН ничего не изменилось. В таблице CARD изменилось значение поля STATUS с 3 на 2.

Если кроме перечисленных таблиц НН не затрагивает никаких других, то можно сделать такой вывод - проверки по методу ме_Док.Save(1) и в диалоговой форме НН выполняются по-разному. Но в любом случае, если в документе ошибки нет, но процедура проверки устанавливает ему статус "Ошибочный", это не нормальная работа программы.

Родин Евгений

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

Повідомлення Родин Евгений » 28 грудня 2012, 13:21

Передача накладной не вносит изменений в таблицы FJ1201002_MAIN и FJ1201002_TAB1, поэтому их сравнение лишнее.
А вот насчет ошибочной накладной...можете прислать ее например в формате ХМЛ или ПДФ? Чтобы проверить у себя.

Vlad Kovalev
Повідомлень: 6
З нами з: 26 грудня 2012, 12:50

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

Повідомлення Vlad Kovalev » 28 грудня 2012, 14:05

Родин Евгений писав:Передача накладной не вносит изменений в таблицы FJ1201002_MAIN и FJ1201002_TAB1, поэтому их сравнение лишнее.
В этих таблицах хранятся реквизиты налоговых накладных?
А вот насчет ошибочной накладной...можете прислать ее например в формате ХМЛ или ПДФ? Чтобы проверить у себя.
Отправил на [email protected] в формате XML.

Родин Евгений

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

Повідомлення Родин Евгений » 02 січня 2013, 11:37

Накладная как накладная...проблем в ней нет.
Доработал Инструкцию (Версия 2. См. описание на последней странице).
Предполагаю включить ее в 106 версию. Вот она. Посмотрите, если есть вопросы-предложения, доработаю.
Вкладення
MedocDocs_Help.rar
(373.72 Кіб) Завантажено 74 разів

Vlad Kovalev
Повідомлень: 6
З нами з: 26 грудня 2012, 12:50

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

Повідомлення Vlad Kovalev » 02 січня 2013, 12:06

Родин Евгений писав:Накладная как накладная...проблем в ней нет.
Евгений, в накладной не было проблем.

После обновления Медка до 102 версии изменилась работа самого Медка, а не программ 1С, которые загружают в него документы через COM-объекты. 1С как и раньше загружает в Медок правильный документ, но Медок после метода .Save(1) даёт НН статус "Помилковий".

Проверка НН в диалоговой форме документа не обнаруживает ошибок, потому что их там нет.

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

Родин Евгений

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

Повідомлення Родин Евгений » 02 січня 2013, 12:18

До 102 он вообще не работал, его недавно доработали. Бухгалтер и раньше открывал и проверял, не так ли?
Сейчас проверю, выгрузив правильную накладную. Будет ли она неправильной...

Vlad Kovalev
Повідомлень: 6
З нами з: 26 грудня 2012, 12:50

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

Повідомлення Vlad Kovalev » 02 січня 2013, 12:45

С февраля 2012 работал такой код: | Показать
ме_Док = МЕДок.CreateDocumentByParam("J1201004",0,ДатаДок,);
ме_Док.UpdateSysFields();
ме_Док_Заголовок = ме_Док.DataSets("MAIN");
ме_Док_Заголовок.Edit();
ме_Док_Заголовок.FldVal("NAKL_TYPE",1);
ме_Док_Заголовок.FldVal("FIRM_EDRPOU",рПредприятиеЕДРПОУ);
ме_Док_Заголовок.FldVal("FIRM_NAME",рПродавец);
ме_Док_Заголовок.FldVal("FIRM_ADR",прАдрес);
ме_Док_Заголовок.FldVal("FIRM_SRPNDS",прНомерСвидетельства);
ме_Док_Заголовок.FldVal("FIRM_INN",прИНН);
ме_Док_Заголовок.FldVal("PHON",прТелефон);
ме_Док_Заголовок.FldVal("FIRM_STFOND",0);
ме_Док_Заголовок.FldVal("EDR_POK",рПокупательЕДРПОУ);
ме_Док_Заголовок.FldVal("SN",рНомерПоручения);
ме_Док_Заголовок.FldVal("N1","X"); // Оригинал
ме_Док_Заголовок.FldVal("N2",""); // Копия
ме_Док_Заголовок.FldVal("N2_1",НомерДок);
ме_Док_Заголовок.FldVal("N2_11",Число(НомерДок));
ме_Док_Заголовок.FldVal("N2_1I",Число(НомерДок));
ме_Док_Заголовок.FldVal("N3",рПокупатель); // наименование покупателя
ме_Док_Заголовок.FldVal("N4",пкИНН); // ИНН покупателя
ме_Док_Заголовок.FldVal("N5",пкАдрес); // адрес покупателя
ме_Док_Заголовок.FldVal("N6",пкТелефон); // телефон покупателя
ме_Док_Заголовок.FldVal("N7",пкНомерСвидетельства); // свидетельство покупателя
ме_Док_Заголовок.FldVal("N8",рДоговор); // условие продажи (вид договора)
ме_Док_Заголовок.FldVal("N81",рНомерДоговора); // номер договора
Если ПустоеЗначение(рДатаДоговора) = 0 Тогда
ме_Док_Заголовок.FldVal("N82",рДатаДоговора); // дата договора
КонецЕсли;
ме_Док_Заголовок.FldVal("N9",рВидВзаиморасчетов); // форма проведенных расчетов
ме_Док_Заголовок.FldVal("N10",рАвтор); // автор накладной
ме_Док_Заголовок.FldVal("N11",ДатаДок); // дата накладной
ме_Док_Заголовок.FldVal("N12",1); // включено в ЕРПН
ме_Док_Заголовок.FldVal("N13",рОригиналНеВыдается); // остается у продавца
ме_Док_Заголовок.FldVal("N14",рТипПричиныНеВыдОриг); // тип причины не выдавать оригинал

ме_Док_Заголовок.FldVal("A5_7",рИтогСтоимостьБезНДС); // всего по разделу 1 (по основной ставке)
ме_Док_Заголовок.FldVal("A5_11",рИтогСтоимостьБезНДС); // всего по разделу 1 (по всем ставкам)

Если рЗалоговаяТара > 0 Тогда
ме_Док_Заголовок.FldVal("A3_11",рЗалоговаяТара); // раздел 2 (залоговая тара)
КонецЕсли;

ме_Док_Заголовок.FldVal("A6_7",рИтогНДС); // раздел 3 (НДС по основной ставке)
ме_Док_Заголовок.FldVal("A6_11",рИтогНДС); // раздел 3 (всего НДС)

ме_Док_Заголовок.FldVal("A7_7",рИтогСтоимостьСНДС); // раздел 4 (всего сумма с НДС по основной ставке)
ме_Док_Заголовок.FldVal("A7_11",рИтогСтоимостьСНДС); // раздел 4 (всего сумма с НДС)

ме_Док_Заголовок.Post();

ме_Док_Таб1 = ме_Док.DataSets("TAB1");

ТаблицаДокумента.ВыбратьСтроки();
Пока ТаблицаДокумента.ПолучитьСтроку() = 1 Цикл
Если ТаблицаДокумента.НомерСтроки = 1 Тогда
ме_Док_Таб1.Edit();
Иначе
ме_Док_Таб1.Append();

ме_Док_Таб1.FldVal("RECNO",ТаблицаДокумента.НомерСтроки-1); // индекс записи таблицы
КонецЕсли;

ме_Док_Таб1.FldVal("TAB1_A12",ДатаДок); // Дата виникнення податкового зобов'язання

ме_Док_Таб1.FldVal("TAB1_A13",ТаблицаДокумента.TAB1_A13);
ме_Док_Таб1.FldVal("TAB1_A131",ТаблицаДокумента.TAB1_A131);
ме_Док_Таб1.FldVal("TAB1_A14",ТаблицаДокумента.TAB1_A14);
ме_Док_Таб1.FldVal("TAB1_A15",ТаблицаДокумента.TAB1_A15);
ме_Док_Таб1.FldVal("TAB1_51",ТаблицаДокумента.TAB1_51);
ме_Док_Таб1.FldVal("TAB1_A16",ТаблицаДокумента.TAB1_A16);
ме_Док_Таб1.FldVal("TAB1_A17",ТаблицаДокумента.TAB1_A17);
ме_Док_Таб1.FldVal("TAB1_A18",ТаблицаДокумента.TAB1_A18);
ме_Док_Таб1.FldVal("TAB1_A19",ТаблицаДокумента.TAB1_A19);
ме_Док_Таб1.FldVal("TAB1_A110",ТаблицаДокумента.TAB1_A110);
ме_Док_Таб1.Post();
КонецЦикла;

ме_Док.Save(1);
Когда после обновления 102 НН стали помечаться как "Ошибочные", я перепроверил всё, что мог, но не помогло. Во время экспериментов заменил
ме_Док = МЕДок.CreateDocumentByParam("J1201004",0,ДатаДок,);
на
ме_Док = МЕДок.OpenOrCreateByExDocID("J1201004",0,НачМесяца(ДатаДок),,НомерДокСтр,1);

До 102 обновления бухгалтер проверяла только некоторые накладные, по своему усмотрению, заходить в каждую не нужно было.

Родин Евгений

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

Повідомлення Родин Евгений » 05 січня 2013, 13:09

Vlad Kovalev, ---Billy---
Проявил. Спасибо, будем искать причину.

Как временное решение, предлагаю выделить все документы в переданном периоде, и нажать "Проверка":
ЗображенняЗображення
Например документы выгружены за 2-3 дня. Обводим их, и нажимаем "Проверка" . Ошибочные документы стали безошибочными.
Тестировал на 106 (ждем оффрелиза).

Vlad Kovalev
Повідомлень: 6
З нами з: 26 грудня 2012, 12:50

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

Повідомлення Vlad Kovalev » 08 січня 2013, 12:18

Родин Евгений писав: Как временное решение
Спасибо, Евгений!

Родин Евгений

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

Повідомлення Родин Евгений » 08 січня 2013, 17:06

Исправили. Выйдет в ближайших обновлениях (107 предположительно).

Родин Евгений

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

Повідомлення Родин Евгений » 11 січня 2013, 21:35

а. Доработано получение IDOrg (которая используется при создании первичных документов), из-за чего она в большинстве случаев не работала.
б. Создан метод, позволяющий определить версию Медка. Добавлю в Инструкцию пример использования. Рекомендуется контролировать версию, и минимальной будет та версия, в которой выйдут все три правки.
Все три доработки будут в ближайшем системном обновлении.

--Billy--
Проверил:
.Recalc()
.UpdateSysFields()
Не работают они. Или у Вас они заработали?...

Родин Евгений

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

Повідомлення Родин Евгений » 12 січня 2013, 18:36

Судя по количеству обращений, необходимо доработать Медок так, чтобы можно было подключиться к нему, указав пользователя и пароль, в параметрах подключения. Логичная доработка? Нужна? Что еще необходимо (с технической стороны) для того, чтобы передавать документы в Медок автоматически?
- вход в предприятие с параметрами;
- переключение между предприятиями (если их несколько в базе);
- функция обновления;
- получение списка активных пользователей;
- возможность отключить пользователей;
- функция обновления программы;
- определения установки;
На текущий момент ко мне обращались с такими предложениями. Что добавить-убрать из списка, предлагайте.

Відповісти

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