Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: XDTO и регламентированная отчетность
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.3
Страницы: 1, 2
Veizdem
Кто-нибудь пробовал выгружать xml для регламентированной отчетсности при помощи фабрики xdto, формируя сами пакеты загрузкой xsd в xdto? Пробую сделать реестр налоговых накладных, скачал схему J1201507.xsd, делаю из нее объект XDTO, получается вот это:

В элементе DHead сложная структура вот такого вида:

Кто подскажет как это заполнять? Понимаю что LINKED_DOCS и DOC это строки стостоящие из данных, но как правильно создать эти строки? Как заполнять?
Знаю что строку нужно создать типа так:
СтрокаДок = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema", "anyType"));

Что в моем случае нужно вписывать вместо "http://www.w3.org/2001/XMLSchema" и "anyType"?
Например для заполнение DeclarContent я создаю такие строки:
СтрокаШапка = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("J1201507", "DHead"));

и
СтрокаТело = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("J1201507", "DBody"));

Сама структура DeclarContent такая:

Может чего поправить в пакете XDTO, тобы можно было все создать, а потом готовый xml уже подправить (поудалять то, что добавлялось для нормальной выгрузки)?

Понимаю что извращенство, но использовать COM-объекты не могу, как вариант, если с XDTO не получится, останется только формировать xml средствами 1С почти в ручном режиме...
Petre
Все есть в пакете, только надо читать свойства.
LINKED_DOCS это, скорее всего, список из DOC.
Если так, то создавайте объект DOC, заполняйте его и добавляйте в объект LINKED_DOCS.
Veizdem
Цитата(Petre @ 20.11.14, 10:06) необходимо зарегистрироваться для просмотра ссылки
Если так, то создавайте объект DOC, заполняйте его и добавляйте в объект LINKED_DOCS.

Вот это меня как раз и интересует, как создать объект DOC и как его потом добавить в LINKED_DOCS?

То что оно список объектов я понял, просто не могу понять как создать это все дело и слепить его в кучу... Может быть не так гугл мучаю, но почему-то не нашел за три дня нигде такого, чтоб вложенность была такая. Без примера как-то туго идет (
Petre
Например так:
LINKED_DOCS = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("J1201507", "LINKED_DOCS"));
Для . . . Цикл
    DOC = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("J1201507", "DOC"));
    //* заполняем DOC
    LINKED_DOCS.DOC.Добавить(DOC);
КонецЦикла;

Это если я правильно угадал свойства пакета.
Veizdem
Цитата(Petre @ 20.11.14, 10:30) необходимо зарегистрироваться для просмотра ссылки
Например так:
LINKED_DOCS = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("J1201507", "LINKED_DOCS"));
Для . . . Цикл
    DOC = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("J1201507", "DOC"));
    //* заполняем DOC
    LINKED_DOCS.DOC.Добавить(DOC);
КонецЦикла;

Это если я правильно угадал свойства пакета.

Не получилось, вылезла такая вот ошибка:
Цитата
{Отчет.РегламентированныйОтчетРеестрНалоговыхНакладных.Форма.ФормаОтчета2013Мес.Форма(3695)}: Ошибка при вызове метода контекста (Создать)
СтрокаДокументов = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("J1201507", "LINKED_DOCS"));
по причине:
Несоответствие типов (параметр номер '1')


Или нужно было все точно копировать?

Попробовал "копипаст" ошибка такая же.

В этом случае, я так понимаю, ошибка в названии пакета - J1201507.

Пробую делать так:
типСтрокаШапка = ФабрикаXDTO.Тип("J1201507", "DHead");
                типСтрокаДок = типСтрокаШапка.Свойства.Получить("LINKED_DOCS").Тип;
                типДок = типСтрокаДок.Свойства.Получить("DOC").Тип;
                СтрокаДок = ФабрикаXDTO.Создать(типСтрокаШапка.Свойства.Получить("LINKED_DOCS").Тип);
                Для каждого gw из СтрокаДокументов Цикл
                    Док = ФабрикаXDTO.Создать(типДок);

Проходит, но спотыкается на строчке
СтрокаШапка.LINKED_DOCS.Добавить(СтрокаДок);

С ошибкой
Цитата
{Отчет.РегламентированныйОтчетРеестрНалоговыхНакладных.Форма.ФормаОтчета2013Мес.Форма(3712)}: Значение не является значением объектного типа (Добавить)
СтрокаШапка.LINKED_DOCS.Добавить(СтрокаДок);
Petre
Мне сложно по скринам делать однозначные выводы.
Выложите схему.
Veizdem
Цитата(Petre @ 21.11.14, 10:36) необходимо зарегистрироваться для просмотра ссылки
Мне сложно по скринам делать однозначные выводы.
Выложите схему.

Вот схема J1201507.xsd необходимо зарегистрироваться для просмотра ссылки
А это common_types.xsd без которой первая не хочет загружаться необходимо зарегистрироваться для просмотра ссылки

Возможно оно и не будет работать без напильника, так как в обе схемы пришлось вписать строчку
targetNamespace="J1201507" xmlns="" elementFormDefault="qualified"
в самом начале. Без этой строки вообще грузиться в 1С отказывалось.

Ой, ошибся, в схему J1201507.xsd добавил строчку ту что указал, а в common_types.xsd указал вот такую:
targetNamespace="common_types" xmlns="" elementFormDefault="qualified"
Petre
Глянул схему, все верно, "LINKED_DOCS" и "DOC" это не отдельные объекты, поэтому на тип будет ругаться.
Общий принцип такой. Есть три типа объектов: "DHead", "DBody" и "DeclarContent". Их надо создать, заполнить свойства соответствующими типами значений (обращаясь через точку), причем свойствам последнего присвоить значения первых двух.
Veizdem
Цитата(Petre @ 21.11.14, 12:45) необходимо зарегистрироваться для просмотра ссылки
Глянул схему, все верно, "LINKED_DOCS" и "DOC" это не отдельные объекты, поэтому на тип будет ругаться.
Общий принцип такой. Есть три типа объектов: "DHead", "DBody" и "DeclarContent". Их надо создать, заполнить свойства соответствующими типами значений (обращаясь через точку), причем свойствам последнего присвоить значения первых двух.

Значит мне нужно писать LINKED_DOCS.DOC.NUM и т.д. при заполнении? Впервые встречаюсь с неименоваными типами тут и как-то с трудом в них вникаю.
alex040269
не знаю поможет или нет, но этот код у меня проходит:
типСтрокаШапка = ФабрикаXDTO.Тип("J1201507", "DHead");
типСтрокаДок = типСтрокаШапка.Свойства.Получить("LINKED_DOCS").Тип;
типДок = типСтрокаДок.Свойства.Получить("DOC").Тип;
СтрокаДок = ФабрикаXDTO.Создать(типСтрокаШапка.Свойства.Получить("LINKED_DOCS").Тип);
//Для каждого gw из СтрокаДокументов Цикл
//    Док = ФабрикаXDTO.Создать(типДок);
//КонецЦикла;
СтрокаШапка = ФабрикаXDTO.Создать(типСтрокаШапка);
LinkedDocs = ФабрикаXDTO.Создать(типСтрокаДок);
Doc = ФабрикаXDTO.Создать(типДок);

LinkedDocs.DOC.Добавить(Doc);

Сообщить(СтрокаДок);
Veizdem
Может знает кто ресурс какой толковый где можно почитать материал по теме в деталях, или название книжки какой, где это все есть... Поделитесь пожалуйста, буду задавать меньше глупых вопросов =)

Цитата(alex040269 @ 21.11.14, 13:30) необходимо зарегистрироваться для просмотра ссылки
не знаю поможет или нет, но этот код у меня проходит

Сейчас попробую
Petre
XDTO в СП плохо документирована и содержит ошибки. Статей написано не много и все хорошо гуглятся. Намного больше отдельных материалов на форумах, но они касаются каких-то конкретных ситуаций.
Veizdem
В общем настрогал такой код:
ЗаписьXML = Новый ЗаписьXML;
    ЗаписьXML.УстановитьСтроку();
    ЗаписьXML.ЗаписатьОбъявлениеXML();
    РегОтчет = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("J1201507", "DeclarContent"));

            СтрокаШапка = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("J1201507", "DHead"));
            СтрокаШапка.TIN = 123;
            СтрокаШапка.C_DOC = 11111;
            СтрокаШапка.C_DOC_SUB = 123132;
            СтрокаШапка.C_DOC_VER = 123132;
            СтрокаШапка.C_DOC_TYPE = 123132;
            СтрокаШапка.C_DOC_CNT = 123132;
            СтрокаШапка.C_REG = 123132;
            СтрокаШапка.C_RAJ = 123132;
            СтрокаШапка.PERIOD_MONTH = 123132;
            СтрокаШапка.PERIOD_TYPE = 123132;
            СтрокаШапка.PERIOD_YEAR = 123132;
            СтрокаШапка.C_STI_ORIG = 123132;
            СтрокаШапка.C_DOC_STAN = 123132;

            типСтрокаШапка = ФабрикаXDTO.Тип("J1201507", "DHead");
            типСтрокаДок = типСтрокаШапка.Свойства.Получить("LINKED_DOCS").Тип;
            типДок = типСтрокаДок.Свойства.Получить("DOC").Тип;
            СтрокаДок = ФабрикаXDTO.Создать(типСтрокаДок);

            Док = ФабрикаXDTO.Создать(типДок);
            Док.NUM = 123123123;
            Док.TYPE = 123123123;
            Док.C_DOC = 123123123;
            Док.C_DOC_SUB = 123123123;
            Док.C_DOC_VER = 123123123;
            Док.C_DOC_TYPE = 123123123;
            Док.C_DOC_CNT = 123123123;
            Док.C_DOC_STAN = 123123123;
            Док.FILENAME = 123123123;

            СтрокаДок.DOC.Добавить(Док);

            СтрокаШапка.LINKED_DOCS.Добавить(СтрокаДок);
                    СтрокаШапка.D_FILL = 123132;
            СтрокаШапка.SOFTWARE = 123132;
            
            РегОтчет.DECLARHEAD.Добавить(СтрокаШапка);
В итоге ругается благим матом следующего содержания:
Цитата
{Отчет.РегламентированныйОтчетРеестрНалоговыхНакладных.Форма.ФормаОтчета2013Мес.Форма(3712)}: Значение не является значением объектного типа (Добавить)
СтрокаШапка.LINKED_DOCS.Добавить(СтрокаДок);
alex040269
Цитата(Veizdem @ 21.11.14, 14:25) необходимо зарегистрироваться для просмотра ссылки
СтрокаШапка.LINKED_DOCS.Добавить(СтрокаДок);

СтрокаШапка.LINKED_DOCS.DOC.Добавить(СтрокаДок);
Veizdem
Да, пока что все параметры в шапке, кроме LONKED_DOCS и DOC, заменил на тип integer, чтоб можно было чем-нибудь быстро забить для проверки.

Цитата(alex040269 @ 21.11.14, 14:27) необходимо зарегистрироваться для просмотра ссылки
СтрокаШапка.LINKED_DOCS.DOC.Добавить(СтрокаДок);

Теперь иначе ругается
Цитата
{Отчет.РегламентированныйОтчетРеестрНалоговыхНакладных.Форма.ФормаОтчета2013Мес.Форма(3712)}: Значение не является значением объектного типа (DOC)
СтрокаШапка.LINKED_DOCS.DOC.Добавить(СтрокаДок);
alex040269
СтрокаШапка.LINKED_DOCS = ФабрикаXDTO.Создать(типСтрокаДок);
СтрокаШапка.LINKED_DOCS.DOC.Добавить(СтрокаДок);
Petre
Вместо
СтрокаШапка.LINKED_DOCS.Добавить(СтрокаДок);

надо
СтрокаШапка.LINKED_DOCS = СтрокаДок;
Veizdem
Шапка заработала! Вроде бы даже как положено. А теперь начало в теле ругаться, мол не найден параметр T1RXXXXG1. Эти параметры надо менять, знаю что вместо ХХХХ надо числа ставить типа 0001 и т.д. Поставляю, получается T1R0001G1 - ошибка не найден параметр. Вот код:
СтрокаТело = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("J1201507", "DBody"));
            СтрокаТело.HZ = 123123;
            СтрокаТело.HZN = 123123;
            СтрокаТело.HNP = 123123;
            СтрокаТело.HZY = 123123;
            СтрокаТело.HZM = 123123;
            СтрокаТело.HKV = 123123;
            СтрокаТело.HNAME = 123123;
            СтрокаТело.HNPDV = 123123;
            СтрокаТело.HNSPDV = 123123;
            СтрокаТело.T1R0001G1 = 123123;
            СтрокаТело.T1R0001G2D = 123123;
            СтрокаТело.T1R0001G3S = 123123;
            СтрокаТело.T1R0001G31 = 123123;
            СтрокаТело.T1R0001G41S = 123123;
            СтрокаТело.T1R0001G42S = 123123;
            СтрокаТело.T1R0001G43S = 123123;
            СтрокаТело.T1R0001G5S = 123123;
            СтрокаТело.T1R0001G6 = 123123;
            СтрокаТело.T1R0001G7 = 123123;
            СтрокаТело.T1R0001G8 = 123123;
            СтрокаТело.T1R0001G9 = 123123;
            СтрокаТело.T1R0001G10 = 123123;
            СтрокаТело.T1R0001G11 = 123123;
            СтрокаТело.T1R0001G12 = 123123;
            СтрокаТело.T1R0001G13 = 123123;
            СтрокаТело.R011G7 = 123123;
            СтрокаТело.R011G8 = 123123;
            СтрокаТело.R011G9 = 123123;
            СтрокаТело.R011G10 = 123123;
            СтрокаТело.R011G11 = 123123;
            СтрокаТело.R011G12 = 123123;
            СтрокаТело.R011G13 = 123123;
            СтрокаТело.R012G7 = 123123;
            СтрокаТело.R012G8 = 123123;
            СтрокаТело.R012G9 = 123123;
            СтрокаТело.R012G10 = 123123;
            СтрокаТело.R012G11 = 123123;
            СтрокаТело.R012G12 = 123123;
            СтрокаТело.R012G13 = 123123;
            СтрокаТело.T2R0001G1 = 123123;
            СтрокаТело.T2R0001G2D = 123123;
            СтрокаТело.T2R0001G3D = 123123;
            СтрокаТело.T2R0001G4S = 123123;
            СтрокаТело.T2R0001G41 = 123123;
            СтрокаТело.T2R0001G51S = 123123;
            СтрокаТело.T2R0001G52S = 123123;
            СтрокаТело.T2R0001G53S = 123123;
            СтрокаТело.T2R0001G6S = 123123;
            СтрокаТело.T2R0001G7 = 123123;
            СтрокаТело.T2R0001G8 = 123123;
            СтрокаТело.T2R0001G9 = 123123;
            СтрокаТело.T2R0001G10 = 123123;
            СтрокаТело.T2R0001G11 = 123123;
            СтрокаТело.T2R0001G12 = 123123;
            СтрокаТело.T2R0001G13 = 123123;
            СтрокаТело.T2R0001G14 = 123123;
            СтрокаТело.T2R0001G15 = 123123;
            СтрокаТело.T2R0001G16 = 123123;
            СтрокаТело.R021G8 = 123123;
            СтрокаТело.R021G9 = 123123;
            СтрокаТело.R021G10 = 123123;
            СтрокаТело.R021G11 = 123123;
            СтрокаТело.R021G12 = 123123;
            СтрокаТело.R021G13 = 123123;
            СтрокаТело.R021G14 = 123123;
            СтрокаТело.R021G15 = 123123;
            СтрокаТело.R021G16 = 123123;
            СтрокаТело.R022G8 = 123123;
            СтрокаТело.R022G9 = 123123;
            СтрокаТело.R022G10 = 123123;
            СтрокаТело.R022G11 = 123123;
            СтрокаТело.R022G12 = 123123;
            СтрокаТело.R022G13 = 123123;
            СтрокаТело.R022G14 = 123123;
            СтрокаТело.R022G15 = 123123;
            СтрокаТело.R022G16 = 123123;
            СтрокаТело.HFILL = 123123;
            СтрокаТело.HBOS = 123123;
            СтрокаТело.HKBOS = 123123;
            СтрокаТело.HBUH = 123123;
            СтрокаТело.HKBUH = 123123;
            
            РегОтчет.DECLARBODY = СтрокаТело;


Тут везде где вставил 0001 было ХХХХ, ни в том ни в другом варианте не работает =(
Petre
Если в схеме указано "XXXX", то "0001" не прокатит.
Посмотрел рабочий файл - там тоже стоят "XXXX". Откуда сведения, что надо менять?
Veizdem
Цитата(Petre @ 21.11.14, 15:07) необходимо зарегистрироваться для просмотра ссылки
Если в схеме указано "XXXX", то "0001" не прокатит.
Посмотрел рабочий файл - там тоже стоят "XXXX". Откуда сведения, что надо менять?

Ну это же реестр налоговых накладных, там они перечисляются так, когда XML открываешь они идут уже как 0001, 0002 и т.д. А в самой схеме ХХХХ, но суть в том что ни с 0001, ни с ХХХХ не работает, говорит
Цитата
{Отчет.РегламентированныйОтчетРеестрНалоговыхНакладных.Форма.ФормаОтчета2013Мес.Форма(3732)}: Поле объекта не обнаружено (T1R0001G1)
СтрокаТело.T1R0001G1 = 123123;
Цитата
{Отчет.РегламентированныйОтчетРеестрНалоговыхНакладных.Форма.ФормаОтчета2013Мес.Форма(3732)}: Поле объекта недоступно для записи (T1RXXXXG1)
СтрокаТело.T1RXXXXG1 = 123123;


Ну с 0001 ладно, он скорее всего его сам потом заменит, а вот почему ХХХХ записать нельзя?

А нет, туплю, оно их выводит вот так:
Цитата
<T1RXXXXG1 ROWNUM="1">1</T1RXXXXG1>
<T1RXXXXG1 ROWNUM="2">2</T1RXXXXG1>
Petre
Цитата(Veizdem @ 21.11.14, 16:29) необходимо зарегистрироваться для просмотра ссылки
когда XML открываешь они идут уже как 0001, 0002 и т.д.

Я как раз говорю о файле готового отчета, а не схеме. У меня именно там "хххх".
Veizdem
Цитата(Petre @ 21.11.14, 15:34) необходимо зарегистрироваться для просмотра ссылки
Я как раз говорю о файле готового отчета, а не схеме. У меня именно там "хххх".

У меня тоже, я перепутал, голова за день квадратная уже просто...
Veizdem
Кто-нибудь знает как лечить сию проблему? А то я что-то не пойму почему оно от записи закрыто.

Разобрался, я там присваивал значение через =, а нужно было через .Добавть(). Но теперь меня смущает полученный вывод вот такого кода:
ЗаписьXML = Новый ЗаписьXML;
    ЗаписьXML.УстановитьСтроку();
    ЗаписьXML.ЗаписатьОбъявлениеXML();
    РегОтчет = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("J1201507", "DeclarContent"));

            СтрокаШапка = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("J1201507", "DHead"));
            СтрокаШапка.TIN = 123;
            СтрокаШапка.C_DOC = 11111;
            СтрокаШапка.C_DOC_SUB = 123132;
            СтрокаШапка.C_DOC_VER = 123132;
            СтрокаШапка.C_DOC_TYPE = 123132;
            СтрокаШапка.C_DOC_CNT = 123132;
            СтрокаШапка.C_REG = 123132;
            СтрокаШапка.C_RAJ = 123132;
            СтрокаШапка.PERIOD_MONTH = 123132;
            СтрокаШапка.PERIOD_TYPE = 123132;
            СтрокаШапка.PERIOD_YEAR = 123132;
            СтрокаШапка.C_STI_ORIG = 123132;
            СтрокаШапка.C_DOC_STAN = 123132;
            

                типСтрокаШапка = ФабрикаXDTO.Тип("J1201507", "DHead");
                типСтрокаДок = типСтрокаШапка.Свойства.Получить("LINKED_DOCS").Тип;
                типДок = типСтрокаДок.Свойства.Получить("DOC").Тип;
                СтрокаДок = ФабрикаXDTO.Создать(типСтрокаДок);

                    Док = ФабрикаXDTO.Создать(типДок);
                    Док.NUM = 123123123;
                    Док.TYPE = 123123123;
                    Док.C_DOC = 123123123;
                    Док.C_DOC_SUB = 123123123;
                    Док.C_DOC_VER = 123123123;
                    Док.C_DOC_TYPE = 123123123;
                    Док.C_DOC_CNT = 123123123;
                    Док.C_DOC_STAN = 123123123;
                    Док.FILENAME = 123123123;
                    СтрокаДок.DOC.Добавить(Док);

                СтрокаШапка.LINKED_DOCS = СтрокаДок;

            СтрокаШапка.D_FILL = 123132;
            СтрокаШапка.SOFTWARE = 123132;
            
            РегОтчет.DECLARHEAD = СтрокаШапка;


            СтрокаТело = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("J1201507", "DBody"));
            СтрокаТело.HZ = 123123;
            СтрокаТело.HZN = 123123;
            СтрокаТело.HNP = 123123;
            СтрокаТело.HZY = 123123;
            СтрокаТело.HZM = 123123;
            СтрокаТело.HKV = 123123;
            СтрокаТело.HNAME = 123123;
            СтрокаТело.HNPDV = 123123;
            СтрокаТело.HNSPDV = 123123;
            СтрокаТело.T1RXXXXG1.Добавить(123123);
            СтрокаТело.T1RXXXXG2D.Добавить(123123);
            СтрокаТело.T1RXXXXG3S.Добавить(123123);
            СтрокаТело.T1RXXXXG31.Добавить(123123);
            СтрокаТело.T1RXXXXG41S.Добавить(123123);
            СтрокаТело.T1RXXXXG42S.Добавить(123123);
            СтрокаТело.T1RXXXXG43S.Добавить(123123);
            СтрокаТело.T1RXXXXG5S.Добавить(123123);
            СтрокаТело.T1RXXXXG6.Добавить(123123);
            СтрокаТело.T1RXXXXG7.Добавить(123123);
            СтрокаТело.T1RXXXXG8.Добавить(123123);
            СтрокаТело.T1RXXXXG9.Добавить(123123);
            СтрокаТело.T1RXXXXG10.Добавить(123123);
            СтрокаТело.T1RXXXXG11.Добавить(123123);
            СтрокаТело.T1RXXXXG12.Добавить(123123);
            СтрокаТело.T1RXXXXG13.Добавить(123123);
            СтрокаТело.R011G7 = 123123;
            СтрокаТело.R011G8 = 123123;
            СтрокаТело.R011G9 = 123123;
            СтрокаТело.R011G10 = 123123;
            СтрокаТело.R011G11 = 123123;
            СтрокаТело.R011G12 = 123123;
            СтрокаТело.R011G13 = 123123;
            СтрокаТело.R012G7 = 123123;
            СтрокаТело.R012G8 = 123123;
            СтрокаТело.R012G9 = 123123;
            СтрокаТело.R012G10 = 123123;
            СтрокаТело.R012G11 = 123123;
            СтрокаТело.R012G12 = 123123;
            СтрокаТело.R012G13 = 123123;
            СтрокаТело.T2RXXXXG1.Добавить(123123);
            СтрокаТело.T2RXXXXG2D.Добавить(123123);
            СтрокаТело.T2RXXXXG3D.Добавить(123123);
            СтрокаТело.T2RXXXXG4S.Добавить(123123);
            СтрокаТело.T2RXXXXG41.Добавить(123123);
            СтрокаТело.T2RXXXXG51S.Добавить(123123);
            СтрокаТело.T2RXXXXG52S.Добавить(123123);
            СтрокаТело.T2RXXXXG53S.Добавить(123123);
            СтрокаТело.T2RXXXXG6S.Добавить(123123);
            СтрокаТело.T2RXXXXG7.Добавить(123123);
            СтрокаТело.T2RXXXXG8.Добавить(123123);
            СтрокаТело.T2RXXXXG9.Добавить(123123);
            СтрокаТело.T2RXXXXG10.Добавить(123123);
            СтрокаТело.T2RXXXXG11.Добавить(123123);
            СтрокаТело.T2RXXXXG12.Добавить(123123);
            СтрокаТело.T2RXXXXG13.Добавить(123123);
            СтрокаТело.T2RXXXXG14.Добавить(123123);
            СтрокаТело.T2RXXXXG15.Добавить(123123);
            СтрокаТело.T2RXXXXG16.Добавить(123123);
            СтрокаТело.R021G8 = 123123;
            СтрокаТело.R021G9 = 123123;
            СтрокаТело.R021G10 = 123123;
            СтрокаТело.R021G11 = 123123;
            СтрокаТело.R021G12 = 123123;
            СтрокаТело.R021G13 = 123123;
            СтрокаТело.R021G14 = 123123;
            СтрокаТело.R021G15 = 123123;
            СтрокаТело.R021G16 = 123123;
            СтрокаТело.R022G8 = 123123;
            СтрокаТело.R022G9 = 123123;
            СтрокаТело.R022G10 = 123123;
            СтрокаТело.R022G11 = 123123;
            СтрокаТело.R022G12 = 123123;
            СтрокаТело.R022G13 = 123123;
            СтрокаТело.R022G14 = 123123;
            СтрокаТело.R022G15 = 123123;
            СтрокаТело.R022G16 = 123123;
            СтрокаТело.HFILL = 123123;
            СтрокаТело.HBOS = 123123;
            СтрокаТело.HKBOS = 123123;
            СтрокаТело.HBUH = 123123;
            СтрокаТело.HKBUH = 123123;
            
            РегОтчет.DECLARBODY = СтрокаТело;
            
            
            
            СтрокаТело.HZ = 123123;
            СтрокаТело.HZN = 123123;
            СтрокаТело.HNP = 123123;
            СтрокаТело.HZY = 123123;
            СтрокаТело.HZM = 123123;
            СтрокаТело.HKV = 123123;
            СтрокаТело.HNAME = 123123;
            СтрокаТело.HNPDV = 123123;
            СтрокаТело.HNSPDV = 123123;
            СтрокаТело.T1RXXXXG1.Добавить(123123);
            СтрокаТело.T1RXXXXG2D.Добавить(123123);
            СтрокаТело.T1RXXXXG3S.Добавить(123123);
            СтрокаТело.T1RXXXXG31.Добавить(123123);
            СтрокаТело.T1RXXXXG41S.Добавить(123123);
            СтрокаТело.T1RXXXXG42S.Добавить(123123);
            СтрокаТело.T1RXXXXG43S.Добавить(123123);
            СтрокаТело.T1RXXXXG5S.Добавить(123123);
            СтрокаТело.T1RXXXXG6.Добавить(123123);
            СтрокаТело.T1RXXXXG7.Добавить(123123);
            СтрокаТело.T1RXXXXG8.Добавить(123123);
            СтрокаТело.T1RXXXXG9.Добавить(123123);
            СтрокаТело.T1RXXXXG10.Добавить(123123);
            СтрокаТело.T1RXXXXG11.Добавить(123123);
            СтрокаТело.T1RXXXXG12.Добавить(123123);
            СтрокаТело.T1RXXXXG13.Добавить(123123);
            СтрокаТело.R011G7 = 123123;
            СтрокаТело.R011G8 = 123123;
            СтрокаТело.R011G9 = 123123;
            СтрокаТело.R011G10 = 123123;
            СтрокаТело.R011G11 = 123123;
            СтрокаТело.R011G12 = 123123;
            СтрокаТело.R011G13 = 123123;
            СтрокаТело.R012G7 = 123123;
            СтрокаТело.R012G8 = 123123;
            СтрокаТело.R012G9 = 123123;
            СтрокаТело.R012G10 = 123123;
            СтрокаТело.R012G11 = 123123;
            СтрокаТело.R012G12 = 123123;
            СтрокаТело.R012G13 = 123123;
            СтрокаТело.T2RXXXXG1.Добавить(123123);
            СтрокаТело.T2RXXXXG2D.Добавить(123123);
            СтрокаТело.T2RXXXXG3D.Добавить(123123);
            СтрокаТело.T2RXXXXG4S.Добавить(123123);
            СтрокаТело.T2RXXXXG41.Добавить(123123);
            СтрокаТело.T2RXXXXG51S.Добавить(123123);
            СтрокаТело.T2RXXXXG52S.Добавить(123123);
            СтрокаТело.T2RXXXXG53S.Добавить(123123);
            СтрокаТело.T2RXXXXG6S.Добавить(123123);
            СтрокаТело.T2RXXXXG7.Добавить(123123);
            СтрокаТело.T2RXXXXG8.Добавить(123123);
            СтрокаТело.T2RXXXXG9.Добавить(123123);
            СтрокаТело.T2RXXXXG10.Добавить(123123);
            СтрокаТело.T2RXXXXG11.Добавить(123123);
            СтрокаТело.T2RXXXXG12.Добавить(123123);
            СтрокаТело.T2RXXXXG13.Добавить(123123);
            СтрокаТело.T2RXXXXG14.Добавить(123123);
            СтрокаТело.T2RXXXXG15.Добавить(123123);
            СтрокаТело.T2RXXXXG16.Добавить(123123);
            СтрокаТело.R021G8 = 123123;
            СтрокаТело.R021G9 = 123123;
            СтрокаТело.R021G10 = 123123;
            СтрокаТело.R021G11 = 123123;
            СтрокаТело.R021G12 = 123123;
            СтрокаТело.R021G13 = 123123;
            СтрокаТело.R021G14 = 123123;
            СтрокаТело.R021G15 = 123123;
            СтрокаТело.R021G16 = 123123;
            СтрокаТело.R022G8 = 123123;
            СтрокаТело.R022G9 = 123123;
            СтрокаТело.R022G10 = 123123;
            СтрокаТело.R022G11 = 123123;
            СтрокаТело.R022G12 = 123123;
            СтрокаТело.R022G13 = 123123;
            СтрокаТело.R022G14 = 123123;
            СтрокаТело.R022G15 = 123123;
            СтрокаТело.R022G16 = 123123;
            СтрокаТело.HFILL = 123123;
            СтрокаТело.HBOS = 123123;
            СтрокаТело.HKBOS = 123123;
            СтрокаТело.HBUH = 123123;
            СтрокаТело.HKBUH = 123123;
            
            РегОтчет.DECLARBODY = СтрокаТело;    
        
        ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, РегОтчет);
        СтрокаОтчета = ЗаписьXML.Закрыть();
Он в итоге выводит немножко не тот XML, который хотелось бы, а именно вот такой у меня получается вывод:
Цитата
<?xml version="1.0"?>
<DeclarContent xmlns="J1201507" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<DECLARHEAD>
<TIN xsi:type="xs:decimal">123</TIN>
<C_DOC>11111</C_DOC>
<C_DOC_SUB>123132</C_DOC_SUB>
<C_DOC_VER>123132</C_DOC_VER>
<C_DOC_TYPE>123132</C_DOC_TYPE>
<C_DOC_CNT>123132</C_DOC_CNT>
<C_REG xsi:type="xs:decimal">123132</C_REG>
<C_RAJ xsi:type="xs:decimal">123132</C_RAJ>
<PERIOD_MONTH xsi:type="xs:decimal">123132</PERIOD_MONTH>
<PERIOD_TYPE xsi:type="xs:decimal">123132</PERIOD_TYPE>
<PERIOD_YEAR xsi:type="xs:decimal">123132</PERIOD_YEAR>
<C_STI_ORIG xsi:type="xs:decimal">123132</C_STI_ORIG>
<C_DOC_STAN xsi:type="xs:decimal">123132</C_DOC_STAN>
<LINKED_DOCS>
<DOC NUM="123123123" TYPE="123123123">
<C_DOC xsi:type="xs:decimal">123123123</C_DOC>
<C_DOC_SUB xsi:type="xs:decimal">123123123</C_DOC_SUB>
<C_DOC_VER xsi:type="xs:decimal">123123123</C_DOC_VER>
<C_DOC_TYPE>123123123</C_DOC_TYPE>
<C_DOC_CNT>123123123</C_DOC_CNT>
<C_DOC_STAN xsi:type="xs:decimal">123123123</C_DOC_STAN>
<FILENAME xsi:type="xs:decimal">123123123</FILENAME>
</DOC>
</LINKED_DOCS>
<D_FILL xsi:type="xs:decimal">123132</D_FILL>
<SOFTWARE>123132</SOFTWARE>
</DECLARHEAD>
<DECLARBODY>
<HZ xsi:type="xs:decimal">123123</HZ>
<HZN xsi:type="xs:decimal">123123</HZN>
<HNP xsi:type="xs:decimal">123123</HNP>
<HZY xsi:type="xs:decimal">123123</HZY>
<HZM xsi:type="xs:decimal">123123</HZM>
<HKV xsi:type="xs:decimal">123123</HKV>
<HNAME xsi:type="xs:decimal">123123</HNAME>
<HNPDV xsi:type="xs:decimal">123123</HNPDV>
<HNSPDV xsi:type="xs:decimal">123123</HNSPDV>
<T1RXXXXG1 xsi:type="xs:decimal">123123</T1RXXXXG1>
<T1RXXXXG2D xsi:type="xs:decimal">123123</T1RXXXXG2D>
<T1RXXXXG3S xsi:type="xs:decimal">123123</T1RXXXXG3S>
<T1RXXXXG31 xsi:type="xs:decimal">123123</T1RXXXXG31>
<T1RXXXXG41S xsi:type="xs:decimal">123123</T1RXXXXG41S>
<T1RXXXXG42S xsi:type="xs:decimal">123123</T1RXXXXG42S>
<T1RXXXXG43S xsi:type="xs:decimal">123123</T1RXXXXG43S>
<T1RXXXXG5S xsi:type="xs:decimal">123123</T1RXXXXG5S>
<T1RXXXXG6 xsi:type="xs:decimal">123123</T1RXXXXG6>
<T1RXXXXG7 xsi:type="xs:decimal">123123</T1RXXXXG7>
<T1RXXXXG8 xsi:type="xs:decimal">123123</T1RXXXXG8>
<T1RXXXXG9 xsi:type="xs:decimal">123123</T1RXXXXG9>
<T1RXXXXG10 xsi:type="xs:decimal">123123</T1RXXXXG10>
<T1RXXXXG11 xsi:type="xs:decimal">123123</T1RXXXXG11>
<T1RXXXXG12 xsi:type="xs:decimal">123123</T1RXXXXG12>
<T1RXXXXG13 xsi:type="xs:decimal">123123</T1RXXXXG13>
<R011G7 xsi:type="xs:decimal">123123</R011G7>
<R011G8 xsi:type="xs:decimal">123123</R011G8>
<R011G9 xsi:type="xs:decimal">123123</R011G9>
<R011G10 xsi:type="xs:decimal">123123</R011G10>
<R011G11 xsi:type="xs:decimal">123123</R011G11>
<R011G12 xsi:type="xs:decimal">123123</R011G12>
<R011G13 xsi:type="xs:decimal">123123</R011G13>
<R012G7 xsi:type="xs:decimal">123123</R012G7>
<R012G8 xsi:type="xs:decimal">123123</R012G8>
<R012G9 xsi:type="xs:decimal">123123</R012G9>
<R012G10 xsi:type="xs:decimal">123123</R012G10>
<R012G11 xsi:type="xs:decimal">123123</R012G11>
<R012G12 xsi:type="xs:decimal">123123</R012G12>
<R012G13 xsi:type="xs:decimal">123123</R012G13>
<T2RXXXXG1 xsi:type="xs:decimal">123123</T2RXXXXG1>
<T2RXXXXG2D xsi:type="xs:decimal">123123</T2RXXXXG2D>
<T2RXXXXG3D xsi:type="xs:decimal">123123</T2RXXXXG3D>
<T2RXXXXG4S xsi:type="xs:decimal">123123</T2RXXXXG4S>
<T2RXXXXG41 xsi:type="xs:decimal">123123</T2RXXXXG41>
<T2RXXXXG51S xsi:type="xs:decimal">123123</T2RXXXXG51S>
<T2RXXXXG52S xsi:type="xs:decimal">123123</T2RXXXXG52S>
<T2RXXXXG53S xsi:type="xs:decimal">123123</T2RXXXXG53S>
<T2RXXXXG6S xsi:type="xs:decimal">123123</T2RXXXXG6S>
<T2RXXXXG7 xsi:type="xs:decimal">123123</T2RXXXXG7>
<T2RXXXXG8 xsi:type="xs:decimal">123123</T2RXXXXG8>
<T2RXXXXG9 xsi:type="xs:decimal">123123</T2RXXXXG9>
<T2RXXXXG10 xsi:type="xs:decimal">123123</T2RXXXXG10>
<T2RXXXXG11 xsi:type="xs:decimal">123123</T2RXXXXG11>
<T2RXXXXG12 xsi:type="xs:decimal">123123</T2RXXXXG12>
<T2RXXXXG13 xsi:type="xs:decimal">123123</T2RXXXXG13>
<T2RXXXXG14 xsi:type="xs:decimal">123123</T2RXXXXG14>
<T2RXXXXG15 xsi:type="xs:decimal">123123</T2RXXXXG15>
<T2RXXXXG16 xsi:type="xs:decimal">123123</T2RXXXXG16>
<R021G8 xsi:type="xs:decimal">123123</R021G8>
<R021G9 xsi:type="xs:decimal">123123</R021G9>
<R021G10 xsi:type="xs:decimal">123123</R021G10>
<R021G11 xsi:type="xs:decimal">123123</R021G11>
<R021G12 xsi:type="xs:decimal">123123</R021G12>
<R021G13 xsi:type="xs:decimal">123123</R021G13>
<R021G14 xsi:type="xs:decimal">123123</R021G14>
<R021G15 xsi:type="xs:decimal">123123</R021G15>
<R021G16 xsi:type="xs:decimal">123123</R021G16>
<R022G8 xsi:type="xs:decimal">123123</R022G8>
<R022G9 xsi:type="xs:decimal">123123</R022G9>
<R022G10 xsi:type="xs:decimal">123123</R022G10>
<R022G11 xsi:type="xs:decimal">123123</R022G11>
<R022G12 xsi:type="xs:decimal">123123</R022G12>
<R022G13 xsi:type="xs:decimal">123123</R022G13>
<R022G14 xsi:type="xs:decimal">123123</R022G14>
<R022G15 xsi:type="xs:decimal">123123</R022G15>
<R022G16 xsi:type="xs:decimal">123123</R022G16>
<HFILL xsi:type="xs:decimal">123123</HFILL>
<HBOS xsi:type="xs:decimal">123123</HBOS>
<HKBOS xsi:type="xs:decimal">123123</HKBOS>
<HBUH xsi:type="xs:decimal">123123</HBUH>
<HKBUH xsi:type="xs:decimal">123123</HKBUH>
<T1RXXXXG1 xsi:type="xs:decimal">123123</T1RXXXXG1>
<T1RXXXXG2D xsi:type="xs:decimal">123123</T1RXXXXG2D>
<T1RXXXXG3S xsi:type="xs:decimal">123123</T1RXXXXG3S>
<T1RXXXXG31 xsi:type="xs:decimal">123123</T1RXXXXG31>
<T1RXXXXG41S xsi:type="xs:decimal">123123</T1RXXXXG41S>
<T1RXXXXG42S xsi:type="xs:decimal">123123</T1RXXXXG42S>
<T1RXXXXG43S xsi:type="xs:decimal">123123</T1RXXXXG43S>
<T1RXXXXG5S xsi:type="xs:decimal">123123</T1RXXXXG5S>
<T1RXXXXG6 xsi:type="xs:decimal">123123</T1RXXXXG6>
<T1RXXXXG7 xsi:type="xs:decimal">123123</T1RXXXXG7>
<T1RXXXXG8 xsi:type="xs:decimal">123123</T1RXXXXG8>
<T1RXXXXG9 xsi:type="xs:decimal">123123</T1RXXXXG9>
<T1RXXXXG10 xsi:type="xs:decimal">123123</T1RXXXXG10>
<T1RXXXXG11 xsi:type="xs:decimal">123123</T1RXXXXG11>
<T1RXXXXG12 xsi:type="xs:decimal">123123</T1RXXXXG12>
<T1RXXXXG13 xsi:type="xs:decimal">123123</T1RXXXXG13>
<T2RXXXXG1 xsi:type="xs:decimal">123123</T2RXXXXG1>
<T2RXXXXG2D xsi:type="xs:decimal">123123</T2RXXXXG2D>
<T2RXXXXG3D xsi:type="xs:decimal">123123</T2RXXXXG3D>
<T2RXXXXG4S xsi:type="xs:decimal">123123</T2RXXXXG4S>
<T2RXXXXG41 xsi:type="xs:decimal">123123</T2RXXXXG41>
<T2RXXXXG51S xsi:type="xs:decimal">123123</T2RXXXXG51S>
<T2RXXXXG52S xsi:type="xs:decimal">123123</T2RXXXXG52S>
<T2RXXXXG53S xsi:type="xs:decimal">123123</T2RXXXXG53S>
<T2RXXXXG6S xsi:type="xs:decimal">123123</T2RXXXXG6S>
<T2RXXXXG7 xsi:type="xs:decimal">123123</T2RXXXXG7>
<T2RXXXXG8 xsi:type="xs:decimal">123123</T2RXXXXG8>
<T2RXXXXG9 xsi:type="xs:decimal">123123</T2RXXXXG9>
<T2RXXXXG10 xsi:type="xs:decimal">123123</T2RXXXXG10>
<T2RXXXXG11 xsi:type="xs:decimal">123123</T2RXXXXG11>
<T2RXXXXG12 xsi:type="xs:decimal">123123</T2RXXXXG12>
<T2RXXXXG13 xsi:type="xs:decimal">123123</T2RXXXXG13>
<T2RXXXXG14 xsi:type="xs:decimal">123123</T2RXXXXG14>
<T2RXXXXG15 xsi:type="xs:decimal">123123</T2RXXXXG15>
<T2RXXXXG16 xsi:type="xs:decimal">123123</T2RXXXXG16>
</DECLARBODY>
</DeclarContent>


Это я что-то делаю не так или XDTO не тот формат выдает? help.gif
Petre
Пересмотрел схему. Нет в ней ссылок через префиксы имен на схему "common_types".
Т. е., например, вот этот фрагмент:
    <xs:complexType name="DHead">
        <xs:sequence>
. . .
            <xs:element name="C_REG" type="DGsti"/>


должен выглядеть примерно так:
    <xs:complexType name="DHead">
        <xs:sequence>
. . .
            <xs:element name="C_REG" type="ns1:DGsti"/>


И в заголовке должно быть:
xmlns:ns1="common_types"


Ну и понятно, что перед загрузкой схемы отчета надо иметь загруженную схему "common_types.xsd".
Veizdem
А если типы попробовать из common_types прямо в пакет и использовать их локально прямо из пакета... это должно сработать?

Ну в смысле если прописать namespace в схеме common_types такой же как и в схеме основной, импортировать в 1с, он предложит обновить текущий пакет. Обновляем и в нем есть и описания типов и структура данных.

С одной стороны геморрой с этим линуксом вылез, переделывать все давно отлаженное и стабильное, а с другой уже чисто так, интерес заедает доделать до ума... Да и распоряжение директора до нового года всех на линукс перевести тоже под зад пинает...
Petre
Можно попробовать. Если отчет один - не страшно. Если отчетов много, то в каждой схеме будут повторяться одни и те же типы - не оптимально, но тоже ничего криминального нет.
Veizdem
А если 1 раз просто такой пакет создать и к нему уже в самом XDTO типы писать? По сути будет голый пакет с типами в системе, для большого количества отчетов получится оптимально.
Petre
Цитата(Veizdem @ 24.11.14, 13:29) необходимо зарегистрироваться для просмотра ссылки
С одной стороны геморрой с этим линуксом вылез, переделывать все давно отлаженное и стабильное...

А что линукс? Типовые на нем разве не работают? Та же бухгалтерия...

Цитата(Veizdem @ 24.11.14, 13:33) необходимо зарегистрироваться для просмотра ссылки
А если 1 раз просто такой пакет создать и к нему уже в самом XDTO типы писать?

Можно загрузить коммон_тайпс, а потом подредактировать схему отчета и загрузить ее, как я и говорил.
Veizdem
Цитата(Petre @ 24.11.14, 12:35) необходимо зарегистрироваться для просмотра ссылки
Типовые на нем разве не работают? Та же бухгалтерия...

Не работают примерно на 1/5... Везде где есть отсылка COM - на линуксе попросту не запускается... А это и выгонялка юзверей и отчеты регламентированные и еще куча мелочей... Собственно говоря с XML проблема и вылезла, я почему через XDTO делать все пытаюсь, потому что стандартный разбор схемы xsd через тот же COM делается, а внутренние средства работы с XML этого сделать не позволяют.

У меня самописная тут тянется еще с 7.7, а вот типовые, так те при начальной установке так прямо и заявляют, после заполнения начального, что COM работает только на Windows (или как-то так), по сути сообщая что на линуксе не пойдет....
Petre
Цитата(Veizdem @ 24.11.14, 13:55) необходимо зарегистрироваться для просмотра ссылки
стандартный разбор схемы xsd через тот же COM делается

Хм. В типовой? А какая компонента используется?
Veizdem
Цитата(Petre @ 24.11.14, 13:07) необходимо зарегистрироваться для просмотра ссылки
Хм. В типовой? А какая компонента используется?

Ну вот как-то так копипастом из ЗУП (пересмотрел много типовых, все такие же)
Сообщить(НСтр("ru='- Начало выгрузки в файл ';uk='- Початок вивантаження у файл '")+ ИмяФайла);
    
    РасширеннаяПроверкаXML = Ложь;
    Попытка
        ДокЭкспорт = Новый COMОбъект("Msxml2.DOMDocument.6.0");
        РасширеннаяПроверкаXML = Истина;
    Исключение
        Попытка
            ДокЭкспорт = Новый COMОбъект("Msxml2.DOMDocument.4.0");
        Исключение
            Попытка
                ДокЭкспорт = Новый COMОбъект("Msxml2.DOMDocument.3.0");
            Исключение
                фОшибка = 1;
                Возврат;
            КонецПопытки;
        КонецПопытки;
    КонецПопытки;


Ну и дальше соответственно все отсюда пляшет.
Petre
ОМГ! Как хорошо, что я мало туда заглядываю. Понаделывали встроенных средств работы с xml, но все равно пользуются внешними...
Veizdem
Цитата(Petre @ 24.11.14, 13:22) необходимо зарегистрироваться для просмотра ссылки
ОМГ! Как хорошо, что я мало туда заглядываю. Понаделывали встроенных средств работы с xml, но все равно пользуются внешними...

Потому я уже третьей темой терроризирую форум 05071.gif , дабы собрать из Г** конфетку на линуксе ) А меня еще отъявленным линуксоидом обзывали и на форумы линукс отсюда слали... А потом самим гляди кому приспичит - уже будет все на форуме с Вашей же помощью решено...
pumbaE
Цитата(Veizdem @ 24.11.14, 14:25) необходимо зарегистрироваться для просмотра ссылки
Потому я уже третьей темой терроризирую форум 05071.gif , дабы собрать из Г** конфетку на линуксе

я бы проще вызвал бы ant с вызовом валидации файла по схеме и не мучался.
Можно попробовать объединить все xsd файлики в один, тогда в теории должна пройти валидация, но что первый варинат, что второй - костыль...
Veizdem
Цитата(pumbaE @ 24.11.14, 13:31) необходимо зарегистрироваться для просмотра ссылки
но что первый варинат, что второй - костыль...

Как по мне весь 1С это огромный сплошной костыль )
pumbaE
Это холиварный коммент.

Но вот что тебе мешает запустить какой либо скриптовый движок и проверить валидацию не понимаю, например вызвать python (который с вероятностью 90% стоит у тебя уже, конечно только если ты не в docker запускаешь) и проверить результат?

Или хочешь по xdto схеме формировать сразу файлик, а не ручками собирать его?
Veizdem
Цитата(pumbaE @ 24.11.14, 13:41) необходимо зарегистрироваться для просмотра ссылки
хочешь по xdto схеме формировать сразу файлик, а не ручками собирать его

В точку, так как отчет у меня даааалеко не один, они похожий механизм имеют, но начинка разная, соответственно руками я просто задолбусь это все добавлять, хочется все немного ускорить, создав обработку создания XML по сути выбрав нужный пакет XDTO и не париться больше. Да и, зачем изобретать велосипед, если в 1С это уже есть + гляди вдруг машина какая на винде появится (сомневаюсь, но теоретически возможно) туда тоже питон ставить?

Кросплатформенность все же хочется организовать по полной, а то буду потом обратно перепиливать все...
Petre
Я бы все-таки попытался переписать обработку выгрузки отчетов под встроенные методы. Ведь иначе при любом чихе налоговой придется опять куралесить схему измененного отчета.
Veizdem
Цитата(Petre @ 24.11.14, 14:09) необходимо зарегистрироваться для просмотра ссылки
Я бы все-таки попытался переписать обработку выгрузки отчетов под встроенные методы. Ведь иначе при любом чихе налоговой придется опять куралесить схему измененного отчета.

Вот я пытаюсь в XDTO это затолкать... Встроено и работает отлично, по карайней мере веб-сервисы работают на ура, остались только эти отчеты уже, остальное все давно сделано на средствах 1С.
Petre
Не, там бы заменить "Msxml2.DOMDocument.х.0" на встроенный DOM.
Veizdem
Цитата(Petre @ 24.11.14, 14:52) необходимо зарегистрироваться для просмотра ссылки
Не, там бы заменить "Msxml2.DOMDocument.х.0" на встроенный DOM.

Опа, а с этого места можно подробнее?

Это ПостроительDOM? Если да то погуглю ща, но и от помощи не откажусь.
Petre
В основном ПостроительDOM, ДокументDOM. Это как бы аналог "Msxml2.DOMDocument". И если уж минимизировать переписывание кода, то проще это делать в одной плоскости.
XDTO - это уже более высокий уровень работы 1с с xml, для которого существует достаточно много ограничений.
Veizdem
Цитата(Petre @ 24.11.14, 15:40) необходимо зарегистрироваться для просмотра ссылки
минимизировать переписывание кода

Это самое то, чего хочу, только вот глядя на код конфигурации, понимаю что менять придется 100% того что есть sad.gif
Процедура ВыгрузкаПоСхеме(ИмяСхемы, НужнаяСтруктура, тбПоказателиШапка,тбПоказателиТело, фОшибка, Схема, ИмяТабличногоПоля, ТаблицаОшибок)
    перем ИмяНужнойГруппы, СтруктураНужнойГруппы;
    
    // формируем имя файла
    //данные всегда берутся из служебной области
    Если Сред (ИмяСхемы,1,4) = "JFSS" Тогда
        КодВФонде = СокрЛП(спПараметры.ДанныеОтчета.ПолеТабличногоДокументаОтчетФССУтратаТрудосп.CSTRAX);
        ИмяФайла = "Z" + КодВФонде + ".xml";
    Иначе    
        КодНалоговой  = ДополнитьСтрокуСимволами(СокрЛП(Формат(спПараметры.ДанныеОтчета.ПолеТабличногоДокументаСлужебныеДанные.C_STI,"ЧЦ=4;ЧГ=0")),"0",4 ,1); // дополним нулями слева
        
        КодФирмы       = ДополнитьСтрокуСимволами(СокрЛП(спПараметры.ДанныеОтчета.ПолеТабличногоДокументаСлужебныеДанные.TIN),"0",10,1); // ЕДРПОУ
        
        МесяцПериода  = ДополнитьСтрокуСимволами(спПараметры.ДанныеОтчета.ПолеТабличногоДокументаСлужебныеДанные.PERIOD_MONTH,"0",2 ,1);
        
        ГодПериода    = Формат(спПараметры.ДанныеОтчета.ПолеТабличногоДокументаСлужебныеДанные.PERIOD_YEAR, "ЧЦ=4;ЧГ=;");
        
        Попытка
            СостояниеОтчета = ДополнитьСтрокуСимволами(НужнаяСтруктура.C_DOC_STAN,"0",1 ,1);
        Исключение
            СостояниеОтчета = ДополнитьСтрокуСимволами(спПараметры.ДанныеОтчета.ПолеТабличногоДокументаСлужебныеДанные.C_DOC_STAN,"0",1 ,1);
        КонецПопытки;
        Если СостояниеОтчета = "0" Тогда
            СостояниеОтчета = "1";
        КонецЕсли;
        
        ТипОтчета = ДополнитьСтрокуСимволами(спПараметры.ДанныеОтчета.ПолеТабличногоДокументаСлужебныеДанные.C_DOC_TYPE,"0",2 ,1);
        
        КодНалоговойОриг = "";
        Если НЕ спПараметры.ДанныеОтчета.ПолеТабличногоДокументаСлужебныеДанные.Свойство("C_STI_ORIG", КодНалоговойОриг) Тогда
            КодНалоговойОриг = КодНалоговой;
        КонецЕсли;
        КодНалоговойОриг = ДополнитьСтрокуСимволами(СокрЛП(Формат(КодНалоговойОриг,"ЧЦ=4;ЧГ=0")),"0",4 ,1);
        
        // поддержка выгрузки многостраничных отчетов
        текC_DOC_CNT = Неопределено;
        Если НужнаяСтруктура.Свойство("C_DOC_CNT", текC_DOC_CNT) Тогда
            НомерВПериоде = ДополнитьСтрокуСимволами(Строка(текC_DOC_CNT),"0",7 ,1);
        Иначе    
            НомерВПериоде = ДополнитьСтрокуСимволами(Строка(мC_DOC_CNT),"0",7 ,1);
        КонецЕсли;
        
        ТипПериода= "";
        Если НЕ спПараметры.ДанныеОтчета.ПолеТабличногоДокументаСлужебныеДанные.Свойство("PERIOD_TYPE", ТипПериода) Тогда
            ТипПериода = 1;
        КонецЕсли;
        ТипПериода = СОКРЛП(Лев(ТипПериода,1));
        
        // новый порядок формирования имени файла
        ИмяФайла = КодНалоговой + КодФирмы + ИмяСхемы+ СостояниеОтчета + ТипОтчета + НомерВПериоде + ТипПериода + МесяцПериода + ГодПериода + КодНалоговойОриг + ".xml";
        
    КонецЕсли;
    
    Сообщить(НСтр("ru='- Начало выгрузки в файл ';uk='- Початок вивантаження у файл '")+ ИмяФайла);
    
    Попытка
        ДокЭкспорт = Новый COMОбъект("Msxml2.DOMDocument.4.0");
    Исключение
        Попытка
            ДокЭкспорт = Новый COMОбъект("Msxml2.DOMDocument.3.0");
        Исключение
            фОшибка = 1;
            Возврат;
        КонецПопытки;
    КонецПопытки;
    
    pi =ДокЭкспорт.createProcessingInstruction("xml", "version=""1.0"" encoding=""windows-1251""");
    ДокЭкспорт.insertBefore(pi, ДокЭкспорт.childNodes.item(0));
    
    Если Сред (ИмяСхемы,1,4) = "JFSS" Тогда  //Если это РегламентированныйОтчетФСС тогда
        //    ДокЭкспорт.createProcessingInstruction("encoding", "'windows-1251'");
        //Если это не первый квартал, то открываем уже сформированный файл и дописываем в него
        //если открыть не удалось - ошибка.
        Если НЕ ЗначениеЗаполнено(ПолучитьИзСтруктуры("P1", НужнаяСтруктура)) Тогда
            Если НЕ ДокЭкспорт.Load(КаталогДанныхЭкспорта + "\" + ИмяФайла) Тогда
                Сообщить(НСтр("ru='Не удалось открыть файл отчета за первый квартал для добавления данных!"
                "Для экспорта нужно создать новый файл!';uk='Не вдалося відкрити файл звіту за перший квартал для додавання даних!"
                "Для експорту потрібно створити новий файл!'"), СтатусСообщения.Важное);
                //---------------------------
                Если Вопрос(НСтр("ru='Создать новый файл?';uk='Створити новий файл?'"), РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Нет Тогда
                    Возврат;
                КонецЕсли;
                // главный элемент F4
                элДокумента = ДокЭкспорт.createElement("F4");
                ДокЭкспорт.appendChild(элДокумента);
                
                Для Каждого СтрокаШапки из тбПоказателиШапка Цикл
                    ВыгрузитьПоказатель(элДокумента, СтрокаШапки.Имя,
                    ПреобразоватьТипXML(ПолучитьИзСтруктуры(СтрокаШапки.Имя, НужнаяСтруктура),СтрокаШапки.Тип,ИмяСхемы));
                    Если  (СтрокаШапки.Имя = "DATA") Тогда
                        НовыйЭлемент = ДокЭкспорт.createElement(СтрокаШапки.Имя);
                        элДокумента.appendChild(НовыйЭлемент);
                        ЭлементСДанными = НовыйЭлемент;
                        Для Каждого СтрокаТела Из  тбПоказателиТело Цикл
                            НовыйЭлемент = ДокЭкспорт.createElement(СтрокаТела.Имя);
                            ЭлементСДанными.appendChild(НовыйЭлемент);
                            
                            ЭлементНужногоКвартала = НовыйЭлемент;
                            тбПоказателиТаблицы = СтрокаТела.Таблица;
                            Если ПолучитьИзСтруктуры(СтрокаТела.Имя, НужнаяСтруктура) = "" Тогда
                                Для Каждого строка Из  тбПоказателиТаблицы Цикл
                                    ВыгрузитьПоказатель(ЭлементНужногоКвартала, строка.Имя,
                                    ПреобразоватьТипXML(Неопределено,строка.Тип,ИмяСхемы));
                                КонецЦикла;
                                ВыгрузитьПоказатель(ЭлементНужногоКвартала, строка.Имя, "0,");
                            Иначе
                                Для Каждого строка Из  тбПоказателиТаблицы Цикл
                                    ВыгрузитьПоказатель(ЭлементНужногоКвартала, строка.Имя,
                                    ПреобразоватьТипXML(ПолучитьИзСтруктуры(строка.Имя, НужнаяСтруктура),строка.Тип,ИмяСхемы));
                                КонецЦикла;
                            КонецЕсли;
                        КонецЦикла;    
                    КонецЕсли;
                КонецЦикла;
                
                ВыгрузитьПоказатель(элДокумента, "DATAF14",);
                //---------------------------
            Иначе    
                // Тут нужно разбирать загруженный файл, и писать в него необходимые данные
                УзКорень=ДокЭкспорт.DocumentElement;
                //УзОтношенияСписок=УзКорень.SelectNodes("//*[name()='Data']");
                Для ИндКор=1 По УзКорень.childNodes.Length Цикл
                    УзОтношение=УзКорень.childNodes.item(ИндКор-1);
                    Если ВРег(УзОтношение.BaseName)=ВРег("Data") Тогда
                        //Перебираем закладки P1-P4
                        Для ИндКор2 = 1 По УзОтношение.childNodes.length Цикл
                            УзелР = УзОтношение.childNodes.item(ИндКор2-1);
                            //Теперь мы "внутри" одного из разделов
                            //выбираем нужный, и пишем в него данные.
                            Если НЕ ЗначениеЗаполнено(ПолучитьИзСтруктуры(тбПоказателиТело[ИндКор2-1].Имя, НужнаяСтруктура)) Тогда
                                // сюда прописываем действия производимые с "другими периодами"
                            Иначе
                                Для Инд=1 По УзелР.childNodes.length Цикл
                                    УзелР.removechild(УзелР.childNodes.item(0));
                                КонецЦикла;
                                тбПоказателиТаблицы = тбПоказателиТело[ИндКор2-1].Таблица;
                                Для Каждого строка Из  тбПоказателиТаблицы Цикл
                                    ВыгрузитьПоказатель(УзелР, строка.Имя,
                                    ПреобразоватьТипXML(ПолучитьИзСтруктуры(строка.Имя, НужнаяСтруктура),строка.Тип,ИмяСхемы));
                                КонецЦикла
                            КонецЕсли;
                        КонецЦикла;
                    КонецЕсли;
                КонецЦикла;
            КонецЕсли;
        Иначе // Если это первый квартал, то создаём новый файл
            
            // главный элемент F4
            элДокумента = ДокЭкспорт.createElement("F4");
            ДокЭкспорт.appendChild(элДокумента);
            
            Для Каждого СтрокаШапки из тбПоказателиШапка Цикл
                ВыгрузитьПоказатель(элДокумента, СтрокаШапки.Имя,
                ПреобразоватьТипXML(ПолучитьИзСтруктуры(СтрокаШапки.Имя, НужнаяСтруктура),СтрокаШапки.Тип,ИмяСхемы));
                Если  (СтрокаШапки.Имя = "DATA") Тогда
                    НовыйЭлемент = ДокЭкспорт.createElement(СтрокаШапки.Имя);
                    элДокумента.appendChild(НовыйЭлемент);
                    ЭлементСДанными = НовыйЭлемент;
                    Для Каждого СтрокаТела Из  тбПоказателиТело Цикл
                        НовыйЭлемент = ДокЭкспорт.createElement(СтрокаТела.Имя);
                        ЭлементСДанными.appendChild(НовыйЭлемент);
                        ЭлементНужногоКвартала = НовыйЭлемент;
                        тбПоказателиТаблицы = СтрокаТела.Таблица;
                        Если ПолучитьИзСтруктуры(СтрокаТела.Имя, НужнаяСтруктура) = "" Тогда
                            Для Каждого строка Из  тбПоказателиТаблицы Цикл
                                ВыгрузитьПоказатель(ЭлементНужногоКвартала, строка.Имя,
                                ПреобразоватьТипXML(Неопределено,строка.Тип,ИмяСхемы));
                            КонецЦикла;
                            ВыгрузитьПоказатель(ЭлементНужногоКвартала, строка.Имя, "0,");
                        Иначе
                            Для Каждого строка Из  тбПоказателиТаблицы Цикл
                                ВыгрузитьПоказатель(ЭлементНужногоКвартала, строка.Имя,
                                ПреобразоватьТипXML(ПолучитьИзСтруктуры(строка.Имя, НужнаяСтруктура),строка.Тип,ИмяСхемы));
                            КонецЦикла;
                        КонецЕсли;
                    КонецЦикла;    
                КонецЕсли;
            КонецЦикла;
            
            ВыгрузитьПоказатель(элДокумента, "DATAF14",);
            
        КонецЕсли;
    Иначе
        
        //Если это не РегламентированныйОтчетФСС тогда
        // Данные, которые зависят от схемы
        СлужебнаяСтруктура.Вставить("C_DOC",    Сред(ИмяСхемы,1,3));
        СлужебнаяСтруктура.Вставить("C_DOC_SUB",Сред(ИмяСхемы,4,3));
        СлужебнаяСтруктура.Вставить("C_DOC_VER",Число(Сред(ИмяСхемы,7,2)));
        СлужебнаяСтруктура.Вставить("SOFTWARE", "SOFTWARE");
        
        // главный элемент DECLAR
        элДокумента = ДокЭкспорт.createElement("DECLAR");
        ДокЭкспорт.appendChild(элДокумента);
        
        элДокумента.setAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
        элДокумента.setAttribute("xsi:noNamespaceSchemaLocation",ИмяСхемы+".xsd");
        
        элШапка = ДокЭкспорт.createElement("DECLARHEAD");
        элДокумента.appendChild(элШапка);
        
        Для Каждого СтрокаШапки из тбПоказателиШапка Цикл
            
            ОписаниеОшибки = "";
            ВыгрузитьПоказатель(элШапка,
                                СтрокаШапки.Имя,
                                ПреобразоватьТипXML(ПолучитьИзСтруктуры(СтрокаШапки.Имя, НужнаяСтруктура),СтрокаШапки.Тип,ИмяСхемы,ОписаниеОшибки));
                                
            Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда
                СтрокаОшибки = ТаблицаОшибок.Добавить();
                СтрокаОшибки.ИмяТабличногоПоля     = ?(НужнаяСтруктура.Свойство(СтрокаШапки.Имя),ИмяТабличногоПоля,"ПолеТабличногоДокументаСлужебныеДанные");;
                СтрокаОшибки.ИмяПоказателя         = СтрокаШапки.Имя;
                СтрокаОшибки.ОписаниеОшибки     = ОписаниеОшибки;
            КонецЕсли;                                
            
        КонецЦикла;
        
        элТело = ДокЭкспорт.createElement("DECLARBODY");
        элДокумента.appendChild(элТело);
        
        СтруктураМногострочныхРазделов = спПараметры.ДанныеМногострочныхРазделов;
        
        Для Каждого СтрокаТела Из  тбПоказателиТело Цикл
            Если СтрокаТела.Тип = "Таблица" Тогда
                ИмяНужнойГруппы = "";
                
                тбПоказателиТаблицы = СтрокаТела.Таблица;
                Если Префикс = Неопределено Или Не ЗначениеЗаполнено(Префикс) Тогда
                    ИмяНужнойГруппы = ПолучитьИзСтруктурыГруппы(тбПоказателиТаблицы[0].Имя);
                Иначе
                    ИмяНужнойГруппы = ПолучитьИзСтруктурыГруппы(тбПоказателиТаблицы[0].Имя);
                    ИмяНужнойГруппы = Префикс + ИмяНужнойГруппы;
                КонецЕсли;

                СтруктураМногострочныхРазделов.Свойство(ИмяНужнойГруппы,СтруктураНужнойГруппы);
                
                //здесь будет получение из структуры "ДанныеМногостсрочных разделов"
                //строка тела соответствует таблице значений с элементами одной группы
                РеальныйИндСтроки = 1;
                
                спСтроки = Новый СписокЗначений;
                Для ИндСтроки = 0 По СтруктураНужнойГруппы.Количество() - 1   Цикл // Максимально допустимое число строк
                    
                    спЗначенияXML = Новый Соответствие;
                    Для Каждого строка Из  тбПоказателиТаблицы Цикл
                        ИмяПоказателя = ИмяПоказателяВТаблице(строка.Имя,РеальныйИндСтроки);
                        ИмяКолонки = СтрЗаменить(строка.Имя,"XXXX","");
                        Данные = СтруктураНужнойГруппы[ИндСтроки][ИмяКолонки];                
                        ОписаниеОшибки = "";
                        ЗначениеXML = ПреобразоватьТипXML(Данные,строка.Тип,ИмяСхемы,ОписаниеОшибки);
                        спЗначенияXML.Вставить(строка.Имя,ЗначениеXML);
                        Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда
                            СтрокаОшибки = ТаблицаОшибок.Добавить();
                            СтрокаОшибки.ИмяТабличногоПоля     = ИмяТабличногоПоля;
                            СтрокаОшибки.ИмяПоказателя         = ИмяПоказателя;
                            СтрокаОшибки.ОписаниеОшибки     = ОписаниеОшибки;
                        КонецЕсли;                                
                        
                    КонецЦикла;
                    
                    Если СтарыйТипВыгрузки Тогда
                        Для Инд = 0 По спЗначенияXML.Количество() - 1 Цикл
                            ИмяПоказателя = тбПоказателиТаблицы[Инд].Имя;
                            ЗначениеXML = спЗначенияXML[ИмяПоказателя];
                            ВыгрузитьПоказатель(элТело, ИмяПоказателя, ЗначениеXML, Новый Структура("ROWNUM", РеальныйИндСтроки));
                        КонецЦикла;
                        РеальныйИндСтроки = РеальныйИндСтроки + 1;
                    Иначе
                        // Записываем в список
                        спСтроки.Добавить(спЗначенияXML);
                        РеальныйИндСтроки = РеальныйИндСтроки + 1;
                    КонецЕсли;
                КонецЦикла;
                
                Если НЕ СтарыйТипВыгрузки Тогда
                    // Выгружаем
                    Для Каждого Показатель Из  тбПоказателиТаблицы Цикл
                        ИмяПоказателя = Показатель.Имя;
                        Для ИндС = 0 По спСтроки.Количество() - 1 Цикл
                            спЗначенияXML = спСтроки[ИндС].Значение;
                            // Выгружаем
                            ЗначениеXML = спЗначенияXML[ИмяПоказателя];
                            ВыгрузитьПоказатель(элТело, ИмяПоказателя, ЗначениеXML,  Новый Структура("ROWNUM",ИндС+1));
                        КонецЦикла;
                    КонецЦикла;
                КонецЕсли;
            Иначе
                Если НЕ (ИмяСхемы = "R1201501" И СтрокаТела.Имя = "INN") Тогда
                    
                    ОписаниеОшибки = "";
                    ВыгрузитьПоказатель(элТело, СтрокаТела.Имя,
                                        ПреобразоватьТипXML(ПолучитьИзСтруктуры(СтрокаТела.Имя, НужнаяСтруктура),
                                                            СтрокаТела.Тип,
                                                            ИмяСхемы,ОписаниеОшибки));
                    
                    Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда
                        СтрокаОшибки = ТаблицаОшибок.Добавить();
                        СтрокаОшибки.ИмяТабличногоПоля     = ?(НужнаяСтруктура.Свойство(СтрокаТела.Имя),ИмяТабличногоПоля,"ПолеТабличногоДокументаСлужебныеДанные");
                        СтрокаОшибки.ИмяПоказателя         = СтрокаТела.Имя;
                        СтрокаОшибки.ОписаниеОшибки     = ОписаниеОшибки;
                    КонецЕсли;                                
                    
                Иначе    
                    
                    ТаблицаЗапроса = ПолучитьИзСтруктуры(СтрокаТела.Имя, НужнаяСтруктура);
                
                    Если НЕ ТипЗнч(ТаблицаЗапроса) = Тип("ТаблицаЗначений")Тогда
                        Продолжить;        
                    КонецЕсли;
                    
                    Для каждого СтрокаТаблицы Из ТаблицаЗапроса Цикл
                        
                        ОписаниеОшибки = "";
                        
                        Значение = СтрокаТаблицы.T1ZINN;
                        QDATE = СтрокаТаблицы.T1ZQDATE;
                        QNUM  = СтрокаТаблицы.T1ZQNUM;
                        RNUM  = СтрокаТаблицы.T1ZRNUM;
                        ROWNUM = ТаблицаЗапроса.Индекс(СтрокаТаблицы) + 1;
                        
                        //<!--Загальний тип "Індивідуальний податковий номер "-->
                        Если НЕ ЗначениеЗаполнено(Значение) Тогда
                            Результат = 0;
                        ИначеЕсли ТипЗнч(Значение)=Тип("Строка") Тогда
                            Результат = СтрЗаменить(Значение, " ", "");
                            Результат = СтрЗаменить(Результат, ",", ".");
                        ИначеЕсли ТипЗнч(Значение)=Тип("Число") Тогда
                            Результат = Формат(Значение,"ЧДЦ=0; ЧГ=0");
                        Иначе
                            Результат = СокрЛП(Строка(Значение));
                        КонецЕсли;

                        Попытка
                            Контроль = Число(Результат);
                            Если    Найти(Результат, ".") > 0
                                ИЛИ Контроль < 1000
                                ИЛИ Контроль > 999999999999
                                ИЛИ Цел(Контроль) <> Контроль Тогда
                                ОписаниеОшибки = "Значение не является целым числом от 1000 до 999999999999";
                            КонецЕсли;
                        Исключение
                            ОписаниеОшибки = "Значение не является целым числом от 1000 до 999999999999";
                        КонецПопытки;
                        
                        Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда
                            СтрокаОшибки = ТаблицаОшибок.Добавить();
                            СтрокаОшибки.ИмяТабличногоПоля     = "ПолеТабличногоДокументаНалоговыйДокумент";
                            СтрокаОшибки.ИмяПоказателя         = "T1Z" + Формат(ТаблицаЗапроса.Индекс(СтрокаТаблицы) + 1,"ЧЦ=4;ЧВН=0;ЧГ=;") + "INN";
                            СтрокаОшибки.ОписаниеОшибки     = ОписаниеОшибки;
                        КонецЕсли;                
                        
                        // проверка аттрибутов
                        Если НЕ ЗначениеЗаполнено(QDATE) ИЛИ НЕ ТипЗнч(QDATE) = Тип("Дата") Тогда
                            СтрокаОшибки = ТаблицаОшибок.Добавить();
                            СтрокаОшибки.ИмяТабличногоПоля     = "ПолеТабличногоДокументаНалоговыйДокумент";
                            СтрокаОшибки.ИмяПоказателя         = "T1Z" + Формат(ROWNUM,"ЧЦ=4;ЧВН=0;ЧГ=;") + "QDATE";
                            СтрокаОшибки.ОписаниеОшибки     = "Не заполнена дата";
                        КонецЕсли;
                        
                        Если Не ЗначениеЗаполнено(QNUM) и НЕ ЗначениеЗаполнено(RNUM) Тогда
                            СтрокаОшибки = ТаблицаОшибок.Добавить();
                            СтрокаОшибки.ИмяТабличногоПоля     = "ПолеТабличногоДокументаНалоговыйДокумент";
                            СтрокаОшибки.ИмяПоказателя         = "T1Z" + Формат(ROWNUM,"ЧЦ=4;ЧВН=0;ЧГ=;") + "QNUM";
                            СтрокаОшибки.ОписаниеОшибки     = "Не указан ни номер налоговой накладной ни номер расчета корретировки";
                        КонецЕсли;
                        
                        ВыгрузитьПоказатель(элТело, СтрокаТела.Имя, Результат, Новый Структура("ROWNUM, QDATE, QNUM, RNUM", ROWNUM, QDATE, QNUM, RNUM));    
                    КонецЦикла;
                    
                КонецЕсли;                
                
            КонецЕсли;
        КонецЦикла;
    КонецЕсли;
    
    ДокЭкспорт.Save(КаталогДанныхЭкспорта +"\"+ИмяФайла);
    ГлобСтруктФайловВыгрузки.Вставить("FileName" + Лев(ИмяФайла, СтрДлина(ИмяФайла)-4), Новый ДвоичныеДанные(КаталогДанныхЭкспорта +"\" + ИмяФайла));
    
    ТекстВыгрузки = Строка(ТекстВыгрузки) + Символы.ПС + "------------------" + Символы.ПС + ДокЭкспорт.xml;
    Сообщить(НСтр("ru='- Отчет выгружен успешно!';uk='- Звіт вивантажений успішно!'"));
    
    Сообщить(НСтр("ru='-- Начало проверки отчета по xsd-схеме.';uk='-- Початок перевірки звіту по xsd-схемі.'"));
    
    Попытка
        фОшибка = 0;
        Попытка
            КэшСхем = Новый COMОбъект("Msxml2.XMLSchemaCache.4.0");
            КэшСхем.add("", Схема);
            ДокЭкспорт.Schemas = КэшСхем;
        Исключение        
        КонецПопытки;
        
        ДокЭкспорт.validateOnParse = Истина;
        ДокЭкспорт.async = Ложь;
        ДокЭкспорт.Load(КаталогДанныхЭкспорта +"\"+ИмяФайла);
        
        Error = ДокЭкспорт.parseError;
        Если Error.errorCode<>0 Тогда
            // есть ошибка
            фОшибка = 1;
            Сообщить(НСтр("ru = 'Ошибка:'; uk = 'Помилка:'"));
            Сообщить(Error.reason);
        КонецЕсли;
        
    Исключение
        фОшибка = 1;
        Сообщить(ОписаниеОшибки());
    КонецПопытки;
    
    Сообщить(НСтр("ru='-- Проверка завершена!';uk='-- Перевірка завершена!'"), ?(фОшибка = 1,СтатусСообщения.Важное, СтатусСообщения.Обычное));    
    
КонецПроцедуры


И это только один случай и то не весь, а только шапка (
Petre
Надо в конфе сделать поиск по "Новый COMОбъект("Msxml2.DOMDocument" и смотреть. Смотрел по Бухгалтерии - не так уж и много. Методы и свойства в основном аналогичные.
По поводу COMОбъект("Msxml2.XMLSchemaCache.4.0") ничего не скажу, т. к. не знаком с этим объектом, но в Бухгалтерии этот код закомментирован.
Veizdem
Цитата(Petre @ 24.11.14, 16:12) необходимо зарегистрироваться для просмотра ссылки
Надо в конфе сделать поиск по "Новый COMОбъект("Msxml2.DOMDocument" и смотреть. Смотрел по Бухгалтерии - не так уж и много. Методы и свойства в основном аналогичные.
По поводу COMОбъект("Msxml2.XMLSchemaCache.4.0") ничего не скажу, т. к. не знаком с этим объектом, но в Бухгалтерии этот код закомментирован.

Попробую выдрать из бухгалтерии тогда, чтоль... Может там сделано уже без этого как-то внутренними методами, пока туда еще не вникал.
Vofka
Я бы вашу проблему попробовал решить на организационном уровне: объяснить директору, что для нормальной выгрузки налоговой отчетности нужен комп с Windows. А остальные пусть себе в Linux-е работают.
Veizdem
Цитата(Vofka @ 24.11.14, 17:24) необходимо зарегистрироваться для просмотра ссылки
Я бы вашу проблему попробовал решить на организационном уровне: объяснить директору, что для нормальной выгрузки налоговой отчетности нужен комп с Windows. А остальные пусть себе в Linux-е работают.

А директор пошлет меня куда подальше, потому что надо как минимум 7 лицензий купить...

Потому что никто к 1 компу бегать ради отчета не будет, а отчеты шлют точно 3 человека на первом офисе, и по 2 на втором и третьем, да и офисы минимум час езды в одну сторону друг от друга...

А решить проблему еще более круто - всех в 1 офис загнать, точно никто не согласится.

В общем при попытке добавить common_types.xsd как объект XDTO вылезла вот такая ошибка:
Цитата
Ошибка проверки модели XDTO: xdto-valueType-6.1 тип: DGpercentAlloc пакет: common_types
Атомарная модель содержания не соответствует определению типа значения
Ошибка проверки модели XDTO: xdto-valueType-6.1 тип: DGDateEndKv пакет: common_types
Атомарная модель содержания не соответствует определению типа значения
Посмотрел - а там по сути тип и не указан... Что нужно выбрать и откуда как в поле тип для данных элементов?
Схема если что вот - необходимо зарегистрироваться для просмотра ссылки

По сути пакет придется в полуручном режиме делать, так как требует небольших модификаций, но хоть типы сразу все готовые будут, вроде бы все получается и вывод считай 1 в 1 как должен быть, только вот зараза эти два типа не принимает и сохранять пакет не хочет sad.gif

Разобрался, нужно было для DGDateEndKv указать тип из того же пакета DGDate, а для DGpercentAlloc указать тоже из того же пакета DGdecimal2. Все сохранилось нормально. Единственное теперь нужно разрулить структуру, например, для элемента T1RXXXXG1 нужно добавить два свойства: ROWNUM и __content, где в первый записывать номер строки, а во второй собственно говоря само значение.

Ну и читать колонки слева на право построчно (взял колонку, записал все строки), а не как по умолчанию - строку взял, все колонки записал и т.д.
Petre
Цитата(Veizdem @ 25.11.14, 10:41) необходимо зарегистрироваться для просмотра ссылки
Посмотрел - а там по сути тип и не указан... Что нужно выбрать и откуда как в поле тип для данных элементов?

Попробуйте для первого выбрать "DGdecimal2", для второго - "DGDate". Все из этого же пакета.
Veizdem
Цитата(Petre @ 25.11.14, 9:50) необходимо зарегистрироваться для просмотра ссылки
Попробуйте для первого выбрать "DGdecimal2", для второго - "DGDate". Все из этого же пакета.

Спасибо, я в схеме уже посмотрел, там было указано )
Veizdem
Итак, спустя неделю, я таки добился рабочего объекта XDTO. Он выглядит вот так - необходимо зарегистрироваться для просмотра ссылки. Сейчас доделаю код, который это все заполняет и так же выложу рядом. Что касается каких-либо изменений от налоговой и как их вносить:
  1. Находим что изменилось в оригинальном xsd в сравнении с предыдущей версией
  2. Измененные элементы находим и правим в нашем новом xsd
  3. Меняем пространство имен в нашем новом xsd на правильное
  4. Загружаем наш новый xsd в систему 1С
  5. По надобности подправляем обработку вывода, правим элементы и т.д.

Теоретически должно быть универсально.

Да, уточню, данный xsd - это рабочий объект XDTO для схемы J1201507.xsd которая находится в архиве налоговой и актуальна на данный момент.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.