ru5 @ Сегодня, 11:05
,
Функционал по просмотру xml добавления его в базу 1с
Процедура ДействияФормыXMLРаспечатать(ДанныеXML) экспорт
Если ПустаяСтрока(ДанныеXML) Тогда
Предупреждение(НСтр("ru='XML не был загружен!';uk='XML не був завантажений!'"));
Возврат;
КонецЕсли;
// Проверим файл на корректность
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(ДанныеXML);
ЧтениеXML.ИгнорироватьПробелы = Истина;
Попытка
ЧтениеXML.Прочитать();
Исключение
Предупреждение(НСТр("ru='Данный файл содерижит информацию в закодированном виде и не является стандартым текстовым XML-файлом."
"Необходимо воспользоваться специализированным программным обеспечением для его расшифровки.';uk='Зазначений файл містить інформацію в закодованому вигляді та не являє собою стандартний текстовий XML-файл."
"Необхідно скористатися спеціалізованим програмним забезбеченням для його розшифрування.'"));
Возврат;
КонецПопытки;
// определим номер схемы документа
C_DOC = "";
C_DOC_SUB = "";
C_DOC_VER = "";
Пока ЧтениеXML.Прочитать() Цикл
Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
ТекУзел = ВРЕГ(ЧтениеXML.Имя);
Если ТекУзел = "C_DOC" Тогда
ЧтениеXML.Прочитать();
C_DOC = ЧтениеXML.Значение;
Продолжить;
ИначеЕсли ТекУзел = "C_DOC_SUB" Тогда
ЧтениеXML.Прочитать();
C_DOC_SUB = ЧтениеXML.Значение;
C_DOC_SUB = Формат(Число(C_DOC_SUB), "ЧЦ=3; ЧВН=");
Продолжить;
ИначеЕсли ТекУзел = "C_DOC_VER" Тогда
ЧтениеXML.Прочитать();
C_DOC_VER = ЧтениеXML.Значение;
C_DOC_VER = Формат(Число(C_DOC_VER), "ЧЦ=2; ЧВН=");
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
ЧтениеXML.Закрыть();
ВерсияДокумента = "" + C_DOC + C_DOC_SUB + C_DOC_VER;
// найдем подходящую форму налоговой (регл. отчет)
Если (C_DOC = "J12" ИЛИ C_DOC = "F12")
И (C_DOC_SUB = "010" ИЛИ C_DOC_SUB = "012") Тогда
Если C_DOC_SUB = "010" Тогда
ИмяОтчета = "РегламентированныйОтчетНалоговаяНакладная";
ИначеЕсли C_DOC_SUB = "012" Тогда
ИмяОтчета = "РегламентированныйОтчетПриложение2КНалоговойНакладной";
КонецЕсли;
Иначе
// не тот XML подсунули
Предупреждение(НСТр("ru='Загруженный файл не является XML образом Налоговой накладной или Приложения 2 к налоговой накладной!';uk='Завантажений файл не є XML образом Податкової накладної або Додатка 2 до податкової накладної!'"));
Возврат;
КонецЕсли;
ТекОтчет = РегламентированнаяОтчетность.РеглОтчеты(ИмяОтчета);
Если ТекОтчет = Неопределено Тогда
ТекстОшибки = НСтр("ru='Не удалось открыть для просмотра отчет ';uk='Не вдалося відкрити для перегляду звіт '")+ИмяОтчета+"""";
Предупреждение(ТекстОшибки);
Возврат;
КонецЕсли;
Попытка
МакетПоказателейЗвит1С = ТекОтчет.ПолучитьМакет("ПоказателиЗвит1С");
Исключение
ТекстОшибки = НСтр("ru='Не удалось определить для просмотра требуемую форму отчета ';uk='Не вдалося визначити для перегляду необхідну форму звіту '")+ИмяОтчета+"""";
Предупреждение(ТекстОшибки);
Возврат;
КонецПопытки;
МакетПоказателейЗвит1С.КодЯзыкаМакета = "ru";
ИмяФормыПросмотра = "";
ОбластьСтруктура = МакетПоказателейЗвит1С.ПолучитьОбласть("Структура");
Для сч = 1 По ОбластьСтруктура.ВысотаТаблицы Цикл
ИмяСхемыЗвит1С = СокрЛП(ОбластьСтруктура.Область(сч, 1, сч, 1).Текст);
Если ВерсияДокумента = ИмяСхемыЗвит1С Тогда
ИмяФормыПросмотра = СокрЛП(ОбластьСтруктура.Область(сч, 3, сч, 3).Текст);
Прервать;
КонецЕсли;
КонецЦикла;
// откроем отчет и загрузим в него данные XML
Попытка
ФормаПросмотра = ТекОтчет.ПолучитьФорму(ИмяФормыПросмотра);
Исключение
ТекстОшибки = НСтр("ru='Не удалось открыть для просмотра требуемую форму отчета';uk='Не вдалося відкрити для перегляду необхідну форму звіту '")+ИмяОтчета+"""";
Предупреждение(ТекстОшибки);
Возврат;
КонецПопытки;
Попытка
ТабличныйДокумент = ФормаПросмотра.ЗагрузитьТекстXMLНаФорму(ДанныеXML);
УдалитьФайлы(ДанныеXML);
Исключение
ТекстОшибки = НСтр("ru='Не удалось открыть для просмотра требуемую форму отчета. Возможно не обновлены встроенные регламентированные отчеты';uk='Не вдалося відкрити для перегляду необхідну форму звіту. Можливе не оновлені вбудовані регламентовані звіти'")+ИмяОтчета+"""";
Предупреждение(ТекстОшибки);
Возврат;
КонецПопытки;
// откроем печатную форму на просмотр
ТабличныйДокумент.Показать(НСТР("ru='ОЗНАКОМИТЕЛЬНАЯ печатная форма входящего документа';uk='ОЗНАЙОМЛЮЮЧА друкована форма вхідного документа'"));
КонецПроцедуры
Функция НайтиКвитанцию(Квитан)Экспорт
Результат ="";
Попытка
Если Квитан.RecordCount()<1 тогда
Возврат Результат;
КонецЕсли
Исключение
КонецПопытки;
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ИгнорироватьПробелы = Истина;
Пока НЕ Квитан.EOF Цикл
Попытка
XML=Сокрлп(Квитан.Fields.Item("KVT_TEXT").value);
ЧтениеXML.УстановитьСтроку(XML);
// определим номер схемы документа
C_DOC = "";
C_DOC_SUB = "";
C_DOC_VER = "";
Пока ЧтениеXML.Прочитать() Цикл
Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
ТекУзел = ВРЕГ(ЧтениеXML.Имя);
Если ТекУзел = "C_DOC" Тогда
ЧтениеXML.Прочитать();
C_DOC = ЧтениеXML.Значение;
Продолжить;
ИначеЕсли ТекУзел = "C_DOC_SUB" Тогда
ЧтениеXML.Прочитать();
C_DOC_SUB = ЧтениеXML.Значение;
C_DOC_SUB = Формат(Число(C_DOC_SUB), "ЧЦ=3; ЧВН=");
Продолжить;
ИначеЕсли ТекУзел = "C_DOC_VER" Тогда
ЧтениеXML.Прочитать();
C_DOC_VER = ЧтениеXML.Значение;
C_DOC_VER = Формат(Число(C_DOC_VER), "ЧЦ=2; ЧВН=");
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
ЧтениеXML.Закрыть();
ВерсияДокумента = "" + C_DOC + C_DOC_SUB + C_DOC_VER;
// найдем подходящую форму налоговой (регл. отчет)
Если (C_DOC = "J12" ИЛИ C_DOC = "F12")
И (C_DOC_SUB = "010" ИЛИ C_DOC_SUB = "012") Тогда
ИмяВременногоФайла = ПолучитьИмяВременногоФайла();
Текст = Новый ТекстовыйДокумент;
Текст.УстановитьТекст(XML);
Текст.Записать(ИмяВременногоФайла, "windows-1251");
Результат =ИмяВременногоФайла;
Прервать;
КонецЕсли;
Исключение
КонецПопытки;
Квитан.Next();
КонецЦикла;
Возврат Результат;
КонецФункции
просмотр
ДействияФормыXMLРаспечатать(НайтиКвитанцию(Квитан));
Запись в базу
//******"
Попытка
//Если ЭлементыФормы.фЗагрузкаXML.Значение И (ИмяБазы="БУ" ИЛИ ИмяБазы="УТП" или ИмяБазы="УСХ") тогда
primДокументы = App.GetPrimaryDocs();
Квитан=primДокументы.getdockvt("",Отчет.Cardcode);
ИмяВременногоФайла=НайтиКвитанцию(Квитан);
Если Не ПустаяСтрока(ИмяВременногоФайла) тогда
ННВх.ДанныеXML = Новый ХранилищеЗначения(Новый ДвоичныеДанные(ИмяВременногоФайла), Новый СжатиеДанных(9));
ННВх.ЕстьXML = Истина;
УдалитьФайлы(ИмяВременногоФайла);
Конецесли;
//Конецесли;
Исключение
Сообщить(Нстр("ru = 'Не удалось загрузить XML!';uk = 'Не вдолося завантажити XML!'"));
КонецПопытки;
//******"