Универсальная выгрузка данных в формате CSV














Универсальная обработка для выгрузки данных из 1С в файл формата CSV.

Общие сведения.

Обработка имеет гибкие настройки и позволяет выгружать практически любые данных из информационной базы (ИБ) во внешний файл формата .CSV. Имеется возможность выгрузки данных из таких объектов ИБ как справочники, документы и их табличных частей, регистры сведений, накопления и бухгалтерии. Так же можно создать свой произвольный запрос для выборки выгружаемых данных с использованием системы компоновки данных (СКД). А наличие возможности задавать произвольный алгоритм для отдельных реквизитов добавляет обработке ещё большую универсальность.

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

Обработка работает как в режиме обычного приложения, так и в режиме управляемого приложения. Подходит для любой конфигурации и версии платформы от 8.1 и выше. Тестирование и реальная работа обработки производились на платформах 1С 8.1, 8.2 и 8.3 в конфигурациях УТ 10.3, УТ 11, ERP, КА 2.

Описание использования обработки.

Примечание. Информацию о работе с обработкой также можно найти во встроенной справке.

Для выгрузки указывается имя файла, в который будут выгружены данные, кодировка файла, разделитель и выбирается объект для выгрузки.

После чего, при необходимости, задаются параметры и/или отбор.

Далее необходимо указать состав реквизитов:
Приемник — имя реквизита в файла CSV;
Источник — имя реквизиты выборки данных: выбирается из списка на основании объекта для выгрузки

Также в поле Алгоритм возможно указать дополнительный произвольный алгоритм для определения выгружаемого значения. Например для наименования.

Если Источник.Номенклатура.ПометкаУдаления Тогда

    Значение = Источник.Номенклатура.Наименование + " (пометка удаления)";

КонецЕсли;

Ниже приведен пример настройки выгрузки.

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

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

Ниже приведен пример запроса выгрузки данных о номенклатуре, её цене и количестве на складе для конфигурации "1С:Управление торговлей 11".
Для этого в поле "Объект для выгрузки" выбираем регистр накопления "Товары на складах.Остатки".

Нажимаем кнопку "Редактировать" и изменяем текст запроса таким образом, чтобы в выборку попадали еще и цены.

Добавим новый набор данных.

Установим связи.

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

И нажмем "ОК" для сохранения настроек.

После окончания редактирования схемы компоновки данных зададим нужные параметры и, если это необходимо, отбор.

И, наконец, зададим состав реквизитов.

Использование обработки из внешнего кода.

Обработка может использоваться из внешнего кода. Например, из процедуры регламентного задания. При этом рекомендуется добавить обработку в состав конфигурации.

Примеры использования.

Пример 1. Выгрузка текущих цен.

ОбработкаВыгрузки = Обработки.УниверсальнаяВыгрузкаДанныхВФорматеCSV.Создать();
ОбработкаВыгрузки.ИмяФайлаВыгрузки = "d:обмен_даннымипрайс_лист.csv";
ОбработкаВыгрузки.Кодировка = "windows-1251";
ОбработкаВыгрузки.Разделитель = ";";
ОбработкаВыгрузки.ОбъектДляВыгрузки = "РегистрСведений.ЦеныНоменклатуры.СрезПоследних";

СтрокаРеквизита = ОбработкаВыгрузки.СоставРеквизитов.Добавить();
СтрокаРеквизита.Приемник = "product_id";
СтрокаРеквизита.Источник = "Номенклатура.Код";

СтрокаРеквизита = ОбработкаВыгрузки.СоставРеквизитов.Добавить();
СтрокаРеквизита.Приемник = "product_name";
СтрокаРеквизита.Источник = "Номенклатура.Наименование";

СтрокаРеквизита = ОбработкаВыгрузки.СоставРеквизитов.Добавить();
СтрокаРеквизита.Приемник = "price";
СтрокаРеквизита.Источник = "Цена";

ОбработкаВыгрузки.ВыгрузитьДанные(); 

Пример 2. Выгрузка остатков на заданную дату с отбором по складу.

ОбработкаВыгрузки = Обработки.УниверсальнаяВыгрузкаДанныхВФорматеCSV.Создать();
ОбработкаВыгрузки.ИмяФайлаВыгрузки = "d:обмен_даннымиостатки_на_складах.csv";
ОбработкаВыгрузки.Кодировка = "windows-1251";
ОбработкаВыгрузки.Разделитель = ";";
ОбработкаВыгрузки.ОбъектДляВыгрузки = "РегистрНакопления.ТоварыНаСкладах.Остатки";

СхемаКомпоновкиДанных = ОбработкаВыгрузки.ИнициализироватьСхемуКомпоновкиДанных();
АдресСхемы = ПоместитьВоВременноеХранилище(СхемаКомпоновкиДанных);

КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных;
КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы));

ПараметрПериод = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Период"));
ПараметрПериод.Использование = Истина;
ПараметрПериод.Значение = Дата('20140801000000');

ОтборСклад = КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборСклад.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Склад");
ОтборСклад.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборСклад.ПравоеЗначение = Справочники.Склады.НайтиПоНаименованию("Центральный склад");
ОтборСклад.Использование = Истина;

СтрокаРеквизита = ОбработкаВыгрузки.СоставРеквизитов.Добавить();
СтрокаРеквизита.Приемник = "product_id";
СтрокаРеквизита.Источник = "Номенклатура.Код";

СтрокаРеквизита = ОбработкаВыгрузки.СоставРеквизитов.Добавить();
СтрокаРеквизита.Приемник = "product_name";
СтрокаРеквизита.Источник = "Номенклатура.Наименование";

СтрокаРеквизита = ОбработкаВыгрузки.СоставРеквизитов.Добавить();
СтрокаРеквизита.Приемник = "date";
СтрокаРеквизита.Алгоритм = "Значение = ТекущаяДата()";

СтрокаРеквизита = ОбработкаВыгрузки.СоставРеквизитов.Добавить();
СтрокаРеквизита.Приемник = "count";
СтрокаРеквизита.Источник = "ВНаличииОстаток";

ОбработкаВыгрузки.ВыгрузитьДанные(СхемаКомпоновкиДанных, КомпоновщикНастроек);

Пример 3. Выгрузка по созданным ранее настройкам.

ОбработкаВыгрузки = Обработки.УниверсальнаяВыгрузкаДанныхВФорматеCSV.Создать();
ОбработкаВыгрузки.ЗагрузитьНастройкиИзФайла("d:обмен_даннымиостатки_настройки.xml");
ОбработкаВыгрузки.ВыгрузитьДанные();

Внимание!

Для настройки сложной выборки данных потребуется знание языка запросов 1С и навыки использования системы компоновки данных (СКД)! Если у вас этих знаний нет, то вы можете обратится к своему программисту 1С за дополнительной помощью.

18 Comments

  1. evn-zorin

    Класс! Для УТ 10.3 есть такая?

    Reply
  2. rhtr

    Универсальная, качай 8.2

    Reply
  3. ZLENKO

    В версии для 8.3 используются функции: СтрРазделить(), СтрСоединить() ?

    Reply
  4. ltfriend

    (3) Основное отличие версии для 8.3 от 8.2 — это НЕиспользование модальных окон в управляемых формах.

    Reply
  5. apostal86

    Класс. Возьму на заметку.

    Reply
  6. user897830

    А можно ли выгружать штрих-код вместе с остатками?

    Reply
  7. ltfriend

    (6) Можно, нужно просто изменить текст запроса в СКД, чтобы в выборку попадал и штрихкод (кнопка «Редактировать» рядом с полем «Объект для выгрузки»).

    Reply
  8. yden31

    Добрый день.

    Спасибо за обработку, но я не могу разобраться как сделать вывод остатков номенклатуры на розничном складе (1с 8.2 УТ 10.3) — код, наименование, характеристика (может быть несколько), количество, цена1, цена2. Но только той номенкл, которая была в документах (Поступление ТМЦ или Реализация тов и усл) на определенную дату (т.е выбор даты).

    Большая просьба подробнее расписать где что как заполнять в обработке т.к. в программировании не очень…

    Reply
  9. lvictor58

    что-то пытался свой запрос создать: виснет наглухо.

    Reply
  10. lvictor58

    похоже это косяс с самой конфой при работе в режиме толстого клиента. А сама обработка классная.

    Reply
  11. olezhe

    Супер! Всё работает, даже на FTP выгружает. Есть ошибка при встраивании в конфигурацию: В модуле Формы, строка 230: переменная не определена ИспользуемоеИмяФайла. Не проходит проверку на ошибки модуля. Когда обработка внешняя – ошибки нет.

    Reply
  12. olezhe

    Использование СКД и выгрузка всех настроек в XML это гениально. Универсальность полная.

    Reply
  13. olezhe

    Записывает файл в кодировке UTF-8 с BOM. Чтобы убрать BOM, надо в модуле объекта исправить строку 951:

    ФайлВыгрузки = Новый ЗаписьТекста(_ИмяФайлаВыгрузки, Кодировка, Символы.ПС, Истина, Символы.ПС);

    Reply
  14. user1086933

    Здравствуйте. Не подскажите, пытаюсь сохранить в файл выгрузку и пишет: ошибка доступа к файлу ‘222’ (это тот файл в который хочу выгрузить)

    Reply
  15. user1086933

    (7) Здравствуйте. А можете за вознаграждения для вашей обработки шаблон выгрузки сделать?

    Reply
  16. quert

    отличная обработка

    можете мини-инструкцию добавить как выгружать картинки и присоединенные фалы ?

    Reply
  17. ddromz

    Здравствуйте.

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

    Пример: обилие текста в столбце комментарий (9ый). Часть текста переносится в первый столбец.

    Reply
  18. user1019649

    В клиент-серверном режиме 3 пример не работает, настройки не подгружаются. Обработка реально классная.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *