- от автора admin
Простой обмен данными между различными учетными программами является одним из ключевых моментов их распространенности, на практике для этого достаточно загрузить XML в 1С или в другой продукт. Причем чаще всего легко обойтись без его конвертации: все базы данных поддерживают стандарт формата в полном объеме. На практике имеется масса способов, как использовать XML для переноса данных, все они реализованы в 1С и совместимых с ней продуктах.
Как загрузить файл XML в базу 1С?
Выгруженные базы, отдельно взятые документы могут передаваться от пользователей по любым каналам связи – на сменных носителях, по электронной почте или через облачные хранилища. Формат хорошо поддается сжатию с помощью архиваторов, что значительно ускоряет копирование и экономит место на диске.
Процедура загрузки данных из файла формата XML в общих чертах выглядит следующим образом:
-
Разрешить показ пункта меню «Все функции». Для этого надо поставить галочку в соответствующем пункте окна «Параметры» (вкладка находится в разделе меню «Сервис»).
-
В меню «Все функции» через плюс раскрыть перечень вариантов, где и выбрать пункт «Обработки».
-
В предложенном списке открыть пункт «Универсальный обмен данными в формате XML».
-
Перейти на вкладку «Загрузка данных» и указать путь к документу.
По нажатию кнопки «Загрузить данные» произойдет их считывание из файла, сохранение в базу данных с одновременной проверкой корректности. Если в документе обнаружатся ошибки, процедура будет прекращена с выдачей определенного текста, указывающего на причину.
Как используются файлы XML в 1С?
С помощью той же обработки пользователь может выгрузить в XML выбранный перечень данных или всю базу целиком, создав за счет этого ее резервную копию. Это необходимо делать перед внедрением серьезных корректировок глобального модуля 1С, если обойтись внешними обработками по каким-либо причинам не удается.
Формат используется на платформе 1С: Предприятие 8 по следующим направлениям:
-
Выгрузка прайс-листов, заказов, печатных форм документов.
-
Загрузка информации, переданной из филиалов/представительств организации, где используется локальное программное обеспечение.
-
Обмен данными с банками, налоговой службой, внебюджетными фондами.
-
Перенос расчетов по заработной плате из 1С: ЗУП и других «специализированных» конфигураций в «общую» 1С: Бухгалтерия 8.
Везде используется одна и та же реализация универсальной обработки. Если ее функций мало, то прибегают к разработке собственных вариантов этого модуля. Причем изменять стандартные файлы необходимости нет, достаточно потом подключить нужную обработку и запускать их на выбор — в зависимости от конкретной задачи.
Загрузка файлов XML в 1С: Налогоплательщик
Если в компании выбран раздельный способ ведения бухгалтерского и налогового учета, то обработка по выгрузке/загрузке финансовых данных через формат XML станет весьма востребованной. С ее помощью нужные для расчета налоговой базы цифры переносятся в программу 1С: Налогоплательщик или в подобный программный продукт. За счет того, что файлы этого формата легко редактируются, с помощью пакета Microsoft Office легко подкорректировать их содержимое перед отправкой в налоговую службу.
То же относится к КУДиР (книге учета доходов и расходов), журналу учета выданных или полученных счет-фактур. Все это передается через систему СБИС++ и, помимо процесса редактирования табличной части XML файла, выгрузка в этом формате необходима для последующей загрузки в сервис и передачи данных в ФНС.
Часто востребован обмен и с такой конфигурацией, как 1С: Управление торговлей, т. к. в бизнесе она используется для организации продаж, управленческого учета, а бухгалтерия на базе 1С: Бухгалтерия 8 функционирует автономно, получая лишь сводные данные обо всех движениях товара и денежных средств.
Загрузка банковских выписок в 1С
Если выгрузку заказов или прайсов настроить просто, так как здесь легко использовать «любой» формат данных, то те же выписки по банковским счетам приходится сохранять в XML (как общепринятом стандарте).
Чаще всего обмен происходит с программой Клиент-Банк. Процесс выгрузки выглядит здесь следующим образом:
-
Формируется выписка за нужный пользователю период.
-
В зависимости от версии программы нажимается кнопка либо «Экспортировать», либо «Экспорт».
-
В открывшемся окне выбирается нужная папка и имя файла.
После завершения процедуры документ можно переносить на сменных носителях или же через интернет (электронная почта, облачные хранилища с общим доступом и т. д.). Когда нужно загрузить выписку в конфигурацию 1С, то выбирают раздел «Банк и касса», затем переходят в журнал «Банковские выписки».
Перед табличной частью документа (в правом углу) нажимают кнопку «Еще», после чего появляется перечень функций, где выбирают пункт «Обмен с банком». Закладка «Загрузка выписки из банка» позволяет импортировать данные по указанному названию фирмы или по конкретному банковскому счету.
После загрузки выписки в базу 1С еще потребуется проведение платежных поручений, это происходит в ручном режиме. Бухгалтер может заказать разработку обработки, которая позволит автоматизировать процесс, но здесь понадобится обратиться к компетентному программисту.
Загрузка классификатора ОКОФ в базу 1С
Используется формат XML и для загрузки различных классификаторов (КЛАДР, ОКОФ, ЕНАОФ). Если в программе 1С они отсутствуют, надо избегать их ручного заполнения, т. к. легко допустить ошибку при указании кодов. Стоит один раз воспользоваться файлом XML, скачав классификатор из надежного источника.
Сделать это может как сам пользователь, так и приглашенный специалист:
-
В основном меню выбирают раздел «Справочники».
-
Нажимается кнопка «Настройка действий».
-
В открывшемся окне указывают пункт «Загрузить классификатор okof», после чего нажимают на кнопку «Добавить».
-
В появившемся разделе «Сервис» выбирают нужную команду и жмут «ОК».
Остается кликнуть по кнопке «Открыть и прочитать файл», указать нужный на диске или сменном носителе, открыть его соответствующей клавишей. Стандартные классификаторы автоматически копируются на жесткий диск при инсталляции платформы и конфигурации 1С. Причем при обновлении версии того или иного создаются папки с номером ревизии, где размещается актуальный файл, соответствующий текущим требованиям. В версии 7 7 тоже есть возможность загрузки XML файлов, но эта устаревшая платформа часто требует помощи специалистов.
Приветствую вас, друзья. Хочу поделиться опытом работы с файлами XML, возможно, пригодится начинающим в этом деле )
1 пример — запись\чтение XML, выгрузим документ в xml файл и загрузим его обратно
2 пример, выгрузка номенклатуры в идентичную конфигурацию по COM Соединению.
Для выгрузки документа в базу с другой конфигурацией будем объявлять элементы и пространства имен вручную.
&НаКлиенте Функция ПолучитьПутьКФайлу(Режим) ЗаписьXML = Новый ЗаписьXML; ///1 ВАРИАНТ, Прописываем путь к фалу, при записи — файл будет перезаписываться ПутьКФайлу = «d:\Temp\Test.XML»; ///2 ВАРИАНТ, Указываем путь при сохранении/открытии Диалог = Новый ДиалогВыбораФайла(Режим); Диалог.Заголовок = «Выбрать»; Диалог.Фильтр = «XML (*.xml)|*.xml»; Диалог.МножественныйВыбор = Ложь; Диалог.Каталог = «F:\»; //При желании, (Открывается этот диск по умолчанию) Если Диалог.Выбрать() Тогда ПутьКФайлу = Диалог.ПолноеИмяФайла; Иначе возврат Неопределено; КонецЕсли; Возврат ПутьКФайлу ; КонецФункции &НаКлиенте Процедура ЗаписьВРучную_XML() ПутьКФайлу = ПолучитьПутьКФайлу(РежимДиалогаВыбораФайла.Сохранение); Если ПутьКФайлу = Неопределено Тогда ///Если не выбран путь к фалу прерываем операцию возврат; КонецЕсли; Документ = СсылкаНаДокумент; /// СсылкаНаДокумент — реквизит со ссылкой на документ «ПоступлениеТоваров» ЗаписьXML.ОткрытьФайл(ПутьКФайлу, «UTF-8»); //Открываем файл для записи, указываем кодировку ЗаписьXML.ЗаписатьОбъявлениеXML(); // Записываем объявление XML ЗаписьXML.ЗаписатьНачалоЭлемента(«ПоступлениеТоваров»); // Начало элемента Документа «ПоступлениеТоваров» ЗаписьXML.ЗаписатьАтрибут(«Код»,Строка(Документ.Код)); ЗаписьXML.ЗаписатьАтрибут(«Дата»,Строка(Документ.Дата)); ЗаписьXML.ЗаписатьАтрибут(«Номер»,Строка(Документ.Номер)); ЗаписьXML.ЗаписатьАтрибут(«Ответственный»,Строка(Документ.Ответственный)); ЗаписьXML.ЗаписатьАтрибут(«Комментарии»,Строка(Документ.Комментарии)); ЗаписьXML.ЗаписатьАтрибут(«Склад»,Строка(Документ.Склад)); ///Запись табличной части «Товары» Для Каждого выборка из Документ.Товары Цикл // Начинаем выгружать табличную часть «Товары» ЗаписьXML.ЗаписатьНачалоЭлемента(«ТаблицаТовары»); // Начало элемента «ТаблицаТовары» ЗаписьXML.ЗаписатьАтрибут(«Номенклатура»,Строка(Выборка.Номенклатура)); //ЗаписьXML.ЗаписатьАтрибут(«КодНоменклатуры»,Строка(Выборка.Номенклатура.Код)); ///ЕСЛИ СОВПАДАЮТ КОДЫ В БАЗАХ, МОЖНО ПРОИЗВОДИТЬ ПОИСК ПО КОДУ ПРИ ЧТЕНИИ ЗаписьXML.ЗаписатьАтрибут(«Количество»,Строка(Выборка.Количество)); ЗаписьXML.ЗаписатьАтрибут(«Цена»,Строка(Выборка.Цена)); ЗаписьXML.ЗаписатьАтрибут(«Сумма»,Строка(Выборка.Сумма)); ЗаписьXML.ЗаписатьАтрибут(«ЕД»,Строка(Выборка.Номенклатура.ЕдиницаИзмерения)); ЗаписьXML.ЗаписатьКонецЭлемента(); // Конец элемента «ТаблицаТовары» КонецЦикла; ЗаписьXML.ЗаписатьКонецЭлемента(); // Конец элемента «ПоступлениеТоваров» Сообщить(«Файл успешно записан!»); КонецПроцедуры
Чтение файла:
&НаКлиенте Процедура ЧтениеВРучную_XML() ПутьКФайлу = ПолучитьПутьКФайлу(РежимДиалогаВыбораФайла.Открытие); Если ПутьКФайлу = Неопределено Тогда ///Если не выбран путь к фалу прерываем операцию возврат; КонецЕсли; ЧтениеXML = Новый ЧтениеXML; ЧтениеXML.ОткрытьФайл(ПутьКФайлу); //Открываем файл ///Запись документа должна быть на сервере ЧтениеXMLНаСервере(ЧтениеXML); ПоказатьОповещениеПользователя(«Уведомление»,,»Документ записан!»,БиблиотекаКартинок.Успешно32); КонецПроцедуры &НаСервере Процедура ЧтениеXMLНаСервере(ЧтениеXML) Документ = Документы.ПоступлениеТоваров.СоздатьДокумент(); ///НОВЫЙ ДОКУМЕНТ Товары = Документ.Товары; ///ТАБЛИЧНАЯ ЧАСТЬ «Товары» Пока ЧтениеXML.Прочитать() Цикл //Цикл по структуре Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда //Определяем начало элемента Если ЧтениеXML.Имя = «ПоступлениеТоваров» Тогда Документ.Код = ЧтениеXML.ЗначениеАтрибута(«Код»); Документ.Дата = Дата(ЧтениеXML.ЗначениеАтрибута(«Дата»)); ///Преобразовываем обратно в дату Документ.Номер = ЧтениеXML.ЗначениеАтрибута(«Номер»); Документ.Ответственный = Справочники.Пользователи.НайтиПоНаименованию(ЧтениеXML.ЗначениеАтрибута(«Ответственный»)); Документ.Комментарии = ЧтениеXML.ЗначениеАтрибута(«Комментарии»); Документ.Склад = Справочники.Склады.НайтиПоНаименованию(ЧтениеXML.ЗначениеАтрибута(«Склад»)); КонецЕсли; Если ЧтениеXML.Имя = «ТаблицаТовары» Тогда ///Чтение элемента «ТаблицаТовары» НоваяСтрока = Товары.Добавить(); НоваяСтрока.Номенклатура = Справочники.Пользователи.НайтиПоНаименованию(ЧтениеXML.ЗначениеАтрибута(«Номенклатура»)); //НоваяСтрока.КодНоменклатуры = Справочники.Пользователи.НайтиПоКоду(ЧтениеXML.ЗначениеАтрибута(«КодНоменклатуры»)); НоваяСтрока.Количество = Число(ЧтениеXML.ЗначениеАтрибута(«Количество»)); НоваяСтрока.Цена = Число(ЧтениеXML.ЗначениеАтрибута(«Цена»)); НоваяСтрока.Сумма = Число(ЧтениеXML.ЗначениеАтрибута(«Сумма»)); НоваяСтрока.ЕД = НоваяСтрока.Номенклатура.ЕденицаИзмерения; КонецЕсли; КонецЕсли ; КонецЦикла; Документ.Записать(РежимЗаписиДокумента.Проведение); КонецПроцедуры
Такой метод не всегда эффективен, так как наименования реквизитов могут отличаться, и запись осуществится с ошибками (Например с пустыми реквизитами), вполне подойдет для выгрузки и загрузки определенных элементов между не типовыми конфигурациями. Для более сложных задач (Выгрузка\Загрузка документов и справочников со структурой подчиненности) между не типовыми конфигурациями рекомендуется использовать Конвертацию данных и универсальный обмен данными в формате XML .
Пример Выгрузки и загрузки данных между одинаковыми базами средствами XDTO.
&НаКлиенте Процедура ЗаписьСредствамиXDTO_XML() ПутьКФайлу = ПолучитьПутьКФайлу(РежимДиалогаВыбораФайла.Сохранение); Если ПутьКФайлу = Неопределено Тогда ///Если не выбран путь к фалу прерываем операцию возврат; КонецЕсли; Документ = СсылкаНаДокумент; /// СсылкаНаДокумент — реквизит со ссылкой на документ «ПоступлениеТоваров» ///////////////////////////////////////////////////////////////////////// //Выгрузка Запись = Новый ЗаписьXML; ЗаписьXML.ОткрытьФайл(ПутьКФайлу, «UTF-8″); //Открываем файл для записи, указываем кодировку //записываем объявление xml файла: <?xml version=»1.0»?> Запись.ЗаписатьОбъявлениеXML(); //записываем корневой элемент, по спецификации xml он может быть только один, назовем его «Данные» Запись.ЗаписатьНачалоЭлемента(«ПоступлениеТоваров»); //для того чтобы пространства имен не объявлялись сериализатором в кажом элементе, пишем их в корневой элемент //они будут работать на все вложеные элементы //пространство имен по-умолчанию Запись.ЗаписатьСоответствиеПространстваИмен(«», «http://v8.1c.ru/8.1/data/enterprise/current-config»); //пространства имен остальные префиксы Запись.ЗаписатьСоответствиеПространстваИмен(«xsd», «http://www.w3.org/2001/XMLSchema»); Запись.ЗаписатьСоответствиеПространстваИмен(«xsi», «http://www.w3.org/2001/XMLSchema-instance»); //вместо этого кода в боевой реализации выгрузки будет создание ОбъектаXDTO и его сериализация //через ФабрикуXDTO и загруженные в нее схемы конфигурации приемника СериализаторXDTO.ЗаписатьXML(Запись, Документ.ПолучитьОбъект()); /////ПРИМЕР ЗАПИСИ НЕСКОЛЬКИХ ДОКУМЕНТОВ //Выборка = Справочники.ПоступлениеТоваров.Выбрать(); //Пока Выборка.Следующий() Цикл // СериализаторXDTO.ЗаписатьXML(Запись, Выборка.ПолучитьОбъект()); //КонецЦикла; //записываем конец корневого элемента Запись.ЗаписатьКонецЭлемента(); Сообщить(«Файл успешно записан!»); //// посмотреть содержимое xml //Текст = Запись.Закрыть(); //Сообщить(«Содержимое файла:»); //Сообщить(Текст); КонецПроцедуры /////////////////////////////////ЗАГРУЗИМ ОБРАТНО //////////////////////////////////////////////////// &НаКлиенте Процедура ЧтениеСредствамиXDTO_XML() ПутьКФайлу = ПолучитьПутьКФайлу(РежимДиалогаВыбораФайла.Открытие); Если ПутьКФайлу = Неопределено Тогда ///Если не выбран путь к фалу прерываем операцию возврат; КонецЕсли; ///////////////////////////////////////////////////////////////////////// //Загрузка Чтение = Новый ЧтениеXML; Чтение.ОткрытьФайл(ПутьКФайлу); //Открываем файл ///Запись документа должна быть на сервере ЧтениеXMLНаСервереЧасть2(Чтение); КонецПроцедуры &НаСервере Процедура ЧтениеXMLНаСервереЧасть2(Чтение) //прочитаем начало xml файла Чтение.ПерейтиКСодержимому(); //прочитаем начало корневого элемента Чтение.Прочитать(); //читаем содержимое пока текущим не станет конец корневого элемента, т.к. мы писали туда только целые элементы справочника, //а сериализатор читает каждый из их полностью, то мы упремся именно в конец корневого Пока Чтение.ТипУзла<>ТипУзлаXML.КонецЭлемента Цикл //читаем очередной элемент справочника Объект = СериализаторXDTO.ПрочитатьXML(Чтение); //покажем что прочитали, осталось только записать объект Сообщить(«»+ТипЗнч(Объект)+» — «+Объект); Объект.Записать(РежимЗаписиДокумента.Проведение); КонецЦикла; Чтение.Закрыть(); КонецПроцедуры
Пример выгрузки номенклатуры в одинаковую базу, без сохранения файла XML на диске:
&НаСервере Функция ПодключениеПоCOM() //КаталогБазыДанных=»C:\ЗУП3″; ///ФАЙЛОВАЯ БАЗА БазаДанных =»ZUP3″; ///СЕРВЕР Сервер =»Server1″; Пользователь =»Admin»; Пароль =»Admin»; V8 = Новый COMОбъект(«V83.ComConnector»); //Открытие = «file='» + КаталогБазыДанных + «‘; usr='» + Пользователь + «‘; pwd='» + Пароль + «‘;»; /// ФАЙЛОВОЕ Открытие= «srvr='» + Сервер + «‘; ref='» + БазаДанных + «‘; usr='» + Пользователь + «‘; pwd='» + Пароль + «‘;»; /// СЕРВЕРНОЕ Соединение = V8.Connect(Открытие); Возврат Соединение; КонецФункции &НаСервере Процедура ПодключитьсяИЗаписать() Соединение = ПодключениеПоCOM(); ///////////////////////////////////////////////////////////////////////// //Выгрузка Запись = Новый ЗаписьXML; Запись.УстановитьСтроку(); //записываем объявление xml файла: <?xml version=»1.0″?> Запись.ЗаписатьОбъявлениеXML(); //записываем корневой элемент, по спецификации xml он может быть только один, назовем его «Данные» Запись.ЗаписатьНачалоЭлемента(«Данные»); //для того чтобы пространства имен не объявлялись сериализатором в кажом элементе, пишем их в корневой элемент //они будут работать на все вложеные элементы //пространство имен по-умолчанию Запись.ЗаписатьСоответствиеПространстваИмен(«», «http://v8.1c.ru/8.1/data/enterprise/current-config»); //пространства имен остальные префиксы Запись.ЗаписатьСоответствиеПространстваИмен(«xsd», «http://www.w3.org/2001/XMLSchema»); Запись.ЗаписатьСоответствиеПространстваИмен(«xsi», «http://www.w3.org/2001/XMLSchema-instance»); //ограничение количества выгружаемых элементов для примера Кол = 4; Выборка = Справочники.Номенклатура.Выбрать(); Пока Выборка.Следующий() Цикл //вместо этого кода в боевой реализации выгрузки будет создание ОбъектаXDTO и его сериализация //через ФабрикуXDTO и загруженные в нее схемы конфигурации приемника СериализаторXDTO.ЗаписатьXML(Запись, Выборка.ПолучитьОбъект()); // Кол = Кол — 1; Если Кол=0 Тогда Прервать; КонецЕсли; КонецЦикла; //записываем конец корневого элемента Запись.ЗаписатьКонецЭлемента(); Текст = Запись.Закрыть(); //а теперь загрузим это в новую базу ///////////////////////////////////////////////////////////////////////// //Загрузка Чтение = Соединение.NewObject(«ЧтениеXML»); Чтение.УстановитьСтроку(Текст); //прочитаем начало xml файла Чтение.ПерейтиКСодержимому(); //прочитаем начало корневого элемента Чтение.Прочитать(); //читаем содержимое пока текущим не станет конец корневого элемента, т.к. мы писали туда только целые элементы справочника, //а сериализатор читает каждый из их полностью, то мы упремся именно в конец корневого Пока Чтение.ТипУзла<>ТипУзлаXML.КонецЭлемента Цикл //читаем очередной элемент справочника Объект = Соединение.СериализаторXDTO.ПрочитатьXML(Чтение); //покажем что прочитали, осталось только записать объект // Сообщить(«»+ТипЗнч(Объект)+» — «+Объект); //Запишем.. Объект.Записать(); КонецЦикла; Чтение.Закрыть(); Сообщить(«Операция завершена!»); КонецПроцедуры
Кстати, можно использовать данный метод между не типовыми конфигурациями, без использования «СериализаторXDTO» как в первом примере )
Спасибо за внимания! Прошу строго не судить ) возможно данный пример поможет именно для решение вашей задачи !) Удачи (=
Буду рад услышать более эффективные решения для подобных задач ! Спасибо !)
Обработка «Выгрузка и загрузка данных XML» (ИТС, 1С 8.3)
2018-11-15T19:32:35+00:00
Источник ИТС
Универсальная обработка «Выгрузка и загрузка данных XML» производит полную или частичную выгрузку данных информационной базы в файл в формате XML. Впоследствии этот файл может быть загружен в информационную базу с помощью этой же обработки. Формат файла выгрузки отличается от формата файла, создаваемого при выгрузке по плану обмена, заголовочной частью.
Обработка может использоваться только в тех случаях, когда информационная база, в которой осуществлялась выгрузка данных, и та, в которой данные загружаются, являются однородными (конфигурации идентичны, данные могут различаться), либо все выгружаемые объекты практически полностью идентичны по составу и типам реквизитов и табличных частей, свойствам «ведущего» объекта метаданных и так далее.
Использование этой обработки возможно, например, для создания полной или частичной резервной копии данных, осуществления обмена данными между информационными базами, а также как вспомогательный инструмент при восстановлении сбойных информационных баз.
Обработка поддерживает выгрузку данных с возможностью задания отбора по периоду. Также реализована проверка объектов на наличие недопустимых символов при обмене через XML.
Я скачал обработку, как мне её открыть в 1C?
С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).
Вступайте в мою группу ВКонтакте, Одноклассниках, Facebook или Google+ — самые последние обработки, исправления ошибок в 1С, всё выкладываю там в первую очередь.
Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.
Нажмите одну из кнопок, чтобы поделиться:
Интересные материалы:
- 1С разблокировать документ
Учетные записи. Защита базы или как поставить пароль на 1С.Зачем нужны учетные записи 1СДействительно, многие…
- 1С скопировать табличный документ в другой
Метод табличного документа ВставитьОбласть() предназначен для копирования некоторой области ячеек табличного документа в другой или…
- 1С где кэш
Кэш пользователя 1С – это автоматически создаваемый программой буфер, в котором хранится наиболее часто запрашиваемая…
- Как в 1С зуп изменить МРОТ?
Отправить эту статью на мою почту В этой статье мы поговорим о том, что означает…
- 1С FTP удалить
Описание ошибки: При обмене через ftp-соединение возникает ошибка и обмен не выполняется: Ошибка при копировании…