1с как загрузить данные в 1с

Обновлено: 04.07.2024

📝 Data_dump — файл с данными из базы 1С. Содержит документы, справочники, отчеты и т.п. Единственное «но» — в нём отсутствует конфигурация 1С, в отличие от привычного dt-файла.

К примеру — сервис 1С:Fresh предоставляет выгрузку именно в этом формате. Один из способов защиты от нелицензионного использования 1С. Так как для установки содержимого файла потребуется купить или взять в аренду соответствующую конфигурацию 1С.

Выходим на условие : релиз конфигурации перед загрузкой должен совпадать с тем, из которого сделана выгрузка.

📌 Как определить номер релиза?

  • Откройте файл с помощью доступной программы-архиватора.
  • Выберите файл DumpInfo.xml в корне архива, двойным кликом открыв в стандартном браузере IE или вручную через Блокнот.
  • В полях « Presentation » и « Version » увидите название и версию конфигурации.

📌 Загрузка файла

Допустим, что у вас уже подготовлена новая база 1С требуемой конфигурации. Как загрузить данные data_dump:

  • Запустите 1С в режиме Предприятия.
  • Откройте раздел « Администрирование — Сервис — Загрузка данных из сервиса ».
  • Выберите в стандартном Проводнике файл data_dump.
  • Дождитесь окончания загрузки данных.
Далее все документы, справочники и отчеты загрузятся в новую базу.

📌 Что делать, если возникает ошибка?

Как правило, варианта два.

  1. Файл data_dump был выгружен из более старой конфигурации и не может быть загружен в новую. Выход — «откатиться» до требуемого релиза.
  2. Обратная ситуация: когда data_dump из более новой конфигурации 1С. Тогда вам необходимо обновить свою 1С до такого же релиза.

✅ Вся сложность данной операции — не загрузка файла, а поиск и подготовка соответствующей конфигурации под базу. На это уходит больше времени. Пробуйте и всё получится.

⚡ Подписывайтесь на канал или задавайте вопрос на сайте — постараемся помочь всеми техническими силами. Безопасной и производительной работы в Windows и 1С.

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

Какие данные можно выгружать из 1С

В 1С любой конфигурации доступна выгрузка следующей информации:

  • Печатные формы;
  • Отчеты;
  • Таблицы и списки.

Форматы для выгрузки поддерживаются следующие:

  • Microsoft Excel;
  • Microsoft Word;
  • PDF;
  • Выгрузка в CSV;
  • HTML и другие.

Процесс выгрузки печатных форм и отчетов

Сохранение в требуемом формате можно сделать для любой печатной формы или отчета в 1С. Открываем форму или отчет и выбираем в Главном меню Файл – Сохранить как.



Затем мы увидим окно сохранения документа, где нужно присвоить имя и тип файла.



Потенциальные сложности во время выгрузки

Опция «Сохранить как» не всегда может функционировать.



Объясняется это неактивизированной печатной формой или отчетом в настоящий момент. Кликаем мышкой в любом месте и печатная форма становится активной для сохранения.



Можно увидеть, что опция «Сохранить как» уже доступна. Напомним, по любым вопросам касаемо выгрузки и не только вы можете обращаться к нашим консультантам по сопровождению 1С 8.3.

Особенности выгрузки в Excel

Чаще всего требуется произвести выгрузку в табличном формате Excel. Для сохранения данных указываем тип Лист Excel2007 -…(*.xlsx), реже используется старый формат Лист Excel (*.xls):



Выгрузка из 1С в другие форматы (PDF, Word, CSV и др) проводится таким же образом.

Как выгружать произвольные таблицы из 1С

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

Используя штатный механизм в 1С, позволяющий выгружать любые списки (к примеру, список документов или элементы справочника), пользователь может получать комплексные данные удобным способом. Так, в командной панели любого списка выбираем группу «Еще» и затем команду «Вывести список»:



После этого нужно определить требуемые колонки и нажать кнопку ОК:



Мы получим данные в виде специального табличного документа, имеющего аналогичный вид, как и у всех отчетов в 1С. Выгрузка проводится также с помощью опции Файл – Сохранить как:



Выгрузка невидимых в перечне данных

Часто пользователи сталкиваются с необходимостью добавить в список колонки, присутствующие в документе, но отсутствующие по каким-то причинам в текущем перечне. Например, в перечне «Клиенты» отсутствует поле «Телефон», которое видно только в дополнительной панели с правой стороны.



Для возможности выгрузить телефон из 1С необходимо эти данные сначала внести в список. Нажимаем «Еще – Изменить форму». Из перечня колонок выбираем нужную нам. Стоит отметить, что почти во всех конфигурациях программы имеется поле «Ссылка». При переходе на это поле и нажав кнопку «Добавить поля» нам отобразятся все доступные поля этого справочника. Тут мы и делаем выбор поля «Телефон» и присваиваем ему галочку использования.





После проведения этих этапов база данных клиентов с телефонами готова к выгрузке в файл используя команду «Вывести список».

Перед Вами возникла задача загрузки, выгрузки метаданных (документы, справочники, регистры. ).

Возникнуть такая задача может по разным причинам. Как правило — это бэкап и перенос из базы в базу. Сейчас нас не интересует причина, просто примем как данность: потребовалась выгрузка, а затем последующая загрузка. Ее мы и будем сегодня выполнять.

Для более тонкой настройки выгрузки/загрузки можно использовать конфигурацию «Конвертация». Выгружать /загружать тут можно что угодно и как угодно, но изучение данного продукта потребует не одной недели практики.

А у Вас ситуация: нужно срочно что-то выгрузить / загрузить и некогда разбираться c существующими инструментами, а конфигуратор открывать Вы умеете, или нужно доработать уже существующий механизм, или разработать свой для пользователя, который не хочет разбираться в Конвертации, а хочет иметь «волшебную» кнопку, которая сделает все за него.

Для начала выполнения кода по загрузке или выгрузке нам нужно 2 кнопки: по нажатии на одну будет происходить выгрузка, а по нажатии на другую будет происходить загрузка. Где они будут расположены не важно, для примера, создадим обработку, в которую добавим форму, а на форму закинем эти 2 кнопки.

Формат выгрузки выберем xml, это стандарт и будем ему следовать, да и обрабатывать такой файл легче, чем, допустим, текстовой.

Для примера, добавим возможность выгрузки за период. Так как в выгрузке у нас выгружается только то что нам нужно, то загружать будем все подряд (хотя дело Ваше, можете добавить условия и в загрузку).

В результате у Вас должна получиться форма похожая на:


Переходим в модуль формы и вставляем следующий текст:

Возвращаемся в форму. Переходим во вкладку команд формы. И указываем для команды выгрузить действие выгрузить, для команды загрузить действие загрузить:


В принципе, для моей конфигурации обработка уже рабочая. Но под Ваши задачи ее нужно переделать. А для этого разберем код.

Процедура ПриОткрытии устанавливает по умолчанию даты периода. Чтобы процедура срабатывала при открытии формы, ее следует указать в соответствующем событии формы.


Делать это не обязательно. Просто для удобства пользования.

Небольшое отступление.

Прежде всего, нам нужно понять, что наш персональный компьютер и сервер в большинстве случаев — это разные компьютеры. По крайней мере так рекомендовано. 1С и я вместе с ними будем исходить из того, что вы работаете за клиентским ПК, а исполняемый код и база данных находятся на другом — сервере.

Продолжаем исходить из того, что сервер — это отдельный компьютер (даже если это не так, но для универсальности кода придется так считать - Ваш ПК будет сервером для самого себя).

Так вот 1С решила, что добавлять/читать документы или записи в справочнике можно только на сервере.

Соответственно, код по добавлению, изменению, чтению, будет выполняться на ДРУГОМ ПК. Не на Вашем!

А так как файлы сервера — это не Ваши файлы, а Ваши файлы — это не файлы сервера. То нам нужно какое-то общее и для Вас и для сервера хранилище файлов. Вот в нем и будут происходить все операции. Такое хранилище называется временным.

Разбираем код выгрузки.

Команду выгрузки я подглядел в обработке ВыгрузкаЗагрузкаДанныхXML83.epf, о которой я говорил выше. Так что выгрузка у нас будет вполне себе типовая (правда я выкинул кучу строк ненужного кода, чем облегчил Вам труд)

Первым делом на клиенте создаем общее хранилище:

АдресФайлаВоВременномХранилище, так как мы не знаем ничего про него, то присваиваем ему пустой адрес.

Затем строчкой ВыгрузитьНаСервере(АдресФайлаВоВременномХранилище); мы заполняем наше временное хранилище данными которые хотим сохранить в виде файла.

Строкой ПолучитьФайл(АдресФайлаВоВременномХранилище, "Выгрузка.xml"); мы забираем из временного хранилища на свой компьютер данные, которые можно или посмотреть или сохранить в виде файла с названием Выгрузка.xml. Это стандартная процедура. Работает везде одинаково и разбору не подлежит.

А вот процедуру ВыгрузитьНаСервере(АдресФайлаВоВременномХранилище) разберем подробнее. Именно в ней происходит создание и заполнение временного файла обмена.

На сервере еще нет нужного нам файла, а потому первыми двумя строками мы определяем временный файл на сервере. Код выполняется на сервере, а потому временный файл тоже будет на сервере. Его мы заполним и поместим во временное хранилище из которого уже заберем себе на клиента.

Далее запросом получаем данные, которые необходимо выгружать в файл. Для примера, взят абстрактый документ, который называется ФП_Месячный, у него есть реквизиты: Дата, Номер, Период и табличная часть: Статьи.

Далее идет блок заполнения временного файла данными из запроса.

Первым делом мы объявляем новую ЗаписьXML. С помощью нее будет производиться запись во временный файл: ЗаписьXML.ОткрытьФайл(ИмяВременногоФайла,"UTF-8");

UTF-8 — это кодировка текста. Ее можно принять как стандарт для большинства случаев.

ЗаписьXML.ЗаписатьОбъявлениеXML() - записываем во временный файл служебную информацию, например, информацию о кодировке. Тут думать не надо. Метод стандартный, все что нужно сделает сам.

Далее запись информации идет по принципу скобок в тексте. Есть открывающая, есть закрывающая и что-то в середине. Можно вкладывать одни элементы в другие:

Открываем элемент: ЗаписьXML.ЗаписатьНачалоЭлемента("НазваниеЭлемента");

//что-то делаем, конкретно в нашем случае, мы делаем запись о реквизите документа либо о самом документе

Закрываем элемент: ЗаписьXML.ЗаписатьКонецЭлемента()

Во время записи активно пользуемся функцией XMLСтрока(), которая преобразует метаданные в строковой тип, понятный для записи/чтения XML.

Так как сохранять данные мы можем только простые (число, дата, строка, булево…). То ссылочный тип данных Вид (это справочник с видами статей) мы сохранить не можем. Но мы можем сохранить Код Вида из справочника видов — это строка. Когда мы будем наоборот загружать данные из ХML, то мы будем получать Код. По коду искать ссылку в справочнике. И уже эту ссылку записывать в документ.

После того как документ xml сформирован (а именно это мы и делали). Мы ЗаписьXML помещаем в файл, хотя по сути, он и так временный файл, проверяем всели у нас получилось, и если да, то помещаем данные во временное хранилище. Почему это так сделано, я не знаю, механизм типовой.

Ну и последним делом, мы удаляем на сервере временный файл. Если это не сделать, то сервер быстро переполниться временными файлами.

Вообще ситуация с временными файлами мне не нравится. Если загрузка/выгрузка будет идти постоянно, то накопитель сервера быстро выйдет из строя. Но так сделано разработчиками 1С. Этот код я подсмотрел у них в стандартной обработке.

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

Разбираем код загрузки.

Тут уж я не поленился не стал брать типовой механизм, обшарил все форумы и нашел как провести загрузку без использования временных файлов.

Вообще варианта 2:

1. Простой. Считать xml файл в переменную (массив) на клиенте. А после передав эту переменную на сервер, читая данные из массива записывать новые документы.

2. Интересный. Передать xml файл на сервер и читать строки из него в оперативной памяти, не используя файлы вообще.

Оба этих метода требуют значительного количества памяти на сервере, а потому рекомендуется делать проверку на количество передаваемой информации. И если ее много, то всеже использовать файловый вариант и читать из файла блоками.

Рассмотрим вариант 2.

Помещать файл выгрузки на сервер во временное хранилище мы будем стандартной процедурой НачатьПомещениеФайла(). Так как механизм типовой, я просто скопировал код из примера 1С.

Для всех он будет одинаков. Единственно что я поменял, это фильтр (сделал xml). Стоит еще обратить внимание на размер. В моем случае он равен 4Гб. В Вашем, можете сделать меньше (больше нельзя).

Процедуру ПоместитьФайлКомандаЗавершение() переписал полностью. В ней я смотрю был ли выбран файл. Если файл был выбран, если он удовлетворяет размеру и расширению, тогда будет происходить чтение из данных указного файла в процедуре ОбработатьНаСервере(Адрес), где Адрес — это адрес временного хранилища. Ну а после того, как мы добавим данные, следует попросить систему перечитать базу, так как данные изменились. Это мы делаем процедурой ОповеститьОбИзменении(Тип("ДокументСсылка.ФП_Месячный")). Делать это не обязательно, но тогда чтобы увидеть результат нам придется закрыть и снова открыть список документов ФП_Месячный.

Рассмотрим процедуру ОбработатьНаСервере(Адрес)

Первым делом на сервере из временного хранилища нужно получить то, что мы помещали на клиенте: Данные = ПолучитьИзВременногоХранилища(Адрес);

Объявляем новую переменную с типом ЧтениеXML. В ней будет храниться весь документ XML.

Хитрая строка Парсер.УстановитьСтроку(ПолучитьСтрокуИзДвоичныхДанных(Данные,КодировкаТекста.UTF8)) преобразует двоичные данные в строку xml, которую затем записывает в объявленную ранее переменную с типом ЧтениеXML.

А далее читаем каждую строчку из XML и, в зависимости от данных, заполняем документ.

Ссылочные данные документа заполняются через их поиск по коду из xml.

Отступление.

Да возможность передачи ссылки имеется. Но я не рекомендую ее использовать, дабы данные не задвоились. То есть Документы с одинаковыми Кодами по сути будут разные так как у них разные ссылки (GUID). А если вести запись по коду документа, то документов с одинаковыми кодами Вы не получите. Будет сформировано исключительное событие и перенос данных в базу будет приостановлен. Поэтому я использую оператор попытка при записи документа. Если документ с таким кодом и датой уже есть, то запись произведена не будет, а будет переход к следующей записи.

PS. Благодаря подсказке Сергея, код преобразования данных в XML можно серьезно сократить. Просто замените функцию и процедуру. Будет менее понятно, что такое XML, как он должен заполняться и читаться, но ведь и не всем это надо:

При написании публикации использовалась версия платформы 8.3.6 .1760.
Модифицирована на версии платформы 8.3.10 .2168.

Одним из полезных нововведений на платформе 8.3.6 стала возможность возможность импорта содержимого из файлов в форматах XLS (Microsoft Excel 97), Microsoft Office OpenXML (Microsoft Excel 2007- 2010) и ODS (OpenDocument) в табличный документ.
На платформе 8.3.10 появилась возможность считывания данных с отдельных листов книги EXCEL.
Данная возможность доступна как в интерактивном режиме, так и из встроенного языка.
Реализована поддержка вставки из буфера обмена областей, скопированных из Microsoft Excel и OpenOffice Calc.
Реализация импорта из EXCEL на встроенном языке стала возможна в результате нововведений в функционал объекта "ТабличныйДокумент":
Для метода "Прочитать" объекта "ТабличныйДокумент" реализован параметр "СпособЧтенияЗначений" (Новое системное перечисление "СпособЧтенияЗначенийТабличногоДокумента").

В данной публикации приводится пример реализации функционала импорта из файлов EXCEL (xlsx, xls, ods) в таблицу значений в режиме 1С:Предприятие на платформе 8.3.6.

О файле EXCEL:
В общем случае файл EXCEL содержит несколько листов с данными.
Метод табличного документа "Прочитать" читает все листы в 1 (один) табличный документ на платформах 8.3.6-8.3.9, а на платформе 8.3.10 можно считать отдельные листы файла EXCEL.
Поэтому для использования данного функционала на версиях платформы 8.3.6-8.3.9 необходимо использовать файлы EXCEL, содержащие 1 (один) лист с данными, для платформы 8.3.10, такого ограничения нет.
О листе файла EXCEL:
Содержимое на листе должно быть разнесено по соответствующим колонкам по назначению.
В качестве примера содержимого листа может служить обычный прайс.
Рекомендутся ячейки таблицы на листе файла оформлять рамкой "Все границы" .
Колонки результирующей таблицы значений формируются по количеству, определяемому свойством "ШиринаТаблицы" табличного документа.
В последствии для удобства пустые колонки удаляются из результирующей таблицы значений.
О типах значений файла EXCEL:
Числа - как "число", даты - как "дата", Стоки - как "строка", Булево - как "строка" вида "ИСТИНА" ("TRUE") или "ЛОЖЬ" ("FALSE") .
В результирующую таблицу значений записываются типизованные значения.
О картинках файла EXCEL:
В исходном файле EXCEL это могут быть как ссылки на файлы, разделенные между собой символом "Перевод строки" в пределах одной ячейки, так и собственно картинки .
Картинки должны находиться в пределах ячейки. В одной ячейке может быть несколько картинок.
В результирующую таблицу значений записываются ссылки на файлы картинок.
Каждая ячейка колонки может, в общем случае, содержать несколько ссылок на файлы, разделенные между собой символом "Перевод строки".

Читайте также: