8.х Экспорт данных из отчета 1С в документ .txt.

Тема в разделе "Отчеты и обработки для "1С:Предприятие 8"", создана пользователем bandit541, 4 апр 2013.

  1. TopicStarter Overlay
    bandit541
    Offline

    bandit541

    Регистрация:
    30 май 2011
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    1
    Здравствуйте. Сделал 11 отчетов, готовых, который формируют данные.
    Помогите пожалуйста в следующем:
    Все эти отчеты объединить в один файл (обработку), чтобы экспорт (выгрузка) данных происходила в файлы с расширением .txt в количестве 11 штук с определенным наименованием (наименования тоже есть).
    Не получается домыслить куда и как прилепить код.
    Находил примеры готовых процедур типа: но что то неполучилось
    Помогите пожалуйста [​IMG]
    Код:
    v8.x: Пример выгрузки данных в Текстовый файл, документ
    Код 1C v 8.х
    Режим = РежимДиалогаВыбораФайла.Сохранение;
    ДиалогСохраненияФайла = Новый ДиалогВыбораФайла(Режим);
    ДиалогСохраненияФайла.ПолноеИмяФайла = "Выгрузка_"+Формат(ПериодРегистрации,"ДФ=M_yy");
    Фильтр = "Текст(*.txt)|*.txt";				
    ДиалогСохраненияФайла.Фильтр = Фильтр;
    ДиалогСохраненияФайла.МножественныйВыбор = Ложь;
    ДиалогСохраненияФайла.Заголовок = "Выберите файл";
    Если ДиалогСохраненияФайла.Выбрать() Тогда
    ПутьКФайлу = ДиалогСохраненияФайла.ПолноеИмяФайла;
    // выбрали файл, сохраняем в него Проводки
    ТекДок = Новый ТекстовыйДокумент;
    Для Каждого Стр Из Проводки Цикл
    Состояние("Выгружаю строку: "+Строка(Стр.НомерСтроки));
    ТекДок.ДобавитьСтроку(Строка(стр.СчетДт)+"~"+Строка(стр.СчетКт)+"~"+Строка(стр.Физлицо.Код)+"~"+Формат(стр.СуммаВыгр,"ЧГ=0"));
    КонецЦикла;  
    КонецЕсли;  
    ТекДок.Записать(ПутьКФайлу);   
    ____________________________________________________________________________________________
    Пример кода одного из отчетов:

    Код:
    Процедура КнопкаСформироватьНажатие(Кнопка)
    //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
    Макет = ПолучитьМакет("Макет");
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |   ТоварыНаСкладахОстатки.Номенклатура.Код КАК code,
    |   ТоварыНаСкладахОстатки.Номенклатура.Артикул КАК art,
    |   Штрихкоды.Штрихкод КАК barcode,
    |   ТоварыНаСкладахОстатки.Номенклатура КАК name,
    |   ТоварыНаСкладахОстатки.Номенклатура.ЕдиницаИзмеренияМест.Коэффициент КАК pack,
    |   ЦеныНоменклатурыКонтрагентов.Цена КАК price,
    |   88 КАК manfid
    |ИЗ
    |   РегистрСведений.Штрихкоды КАК Штрихкоды
    |	  ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(, Номенклатура.ОсновнойПоставщик = &Поставщик) КАК ТоварыНаСкладахОстатки
    |	  ПО Штрихкоды.Владелец = ТоварыНаСкладахОстатки.Номенклатура,
    |   РегистрСведений.ЦеныНоменклатурыКонтрагентов КАК ЦеныНоменклатурыКонтрагентов";
    Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);
    Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания);
    Запрос.УстановитьПараметр("Поставщик", Поставщик);
    
    Результат = Запрос.Выполнить();
    ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
    ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
    ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
    ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы");
    ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали");
    ТабДок = ЭлементыФормы.ТабДок ;
    ТабДок.Очистить();
    ТабДок.Вывести(ОбластьЗаголовок);
    ТабДок.Вывести(ОбластьШапкаТаблицы);
    ТабДок.НачатьАвтогруппировкуСтрок();
    ВыборкаДетальныеЗаписи = Результат.Выбрать();
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетальныеЗаписи);
    ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетальныеЗаписи.Уровень());
    КонецЦикла;
    ТабДок.ЗакончитьАвтогруппировкуСтрок();
    ТабДок.Вывести(ОбластьПодвалТаблицы);
    ТабДок.Вывести(ОбластьПодвал);
    //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    
    КонецПроцедуры	 
    В этом отчете вывод данных происходит в ТабДок, сейчас нужно это убрать и сделать просто экспорт данных.
  2. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    в каком виде данные должны быть в текстовом файле? dtf, csv или в каком другом?
  3. TopicStarter Overlay
    bandit541
    Offline

    bandit541

    Регистрация:
    30 май 2011
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    1
    Да, в файле txt . Пример: наименование одного из файлов mhcatal.txt
  4. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    вопрос в том, как данные должны быть представлены в тексте - разделение tab, запятыми, равноширинное забивание пробелами, json, xml?
  5. TopicStarter Overlay
    bandit541
    Offline

    bandit541

    Регистрация:
    30 май 2011
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    1
    Какдолжны быть в файле, пример:
    колонка1 колонка2 колонка 3 колонка4
    данные данные данные данные

    вот таким образом. На счет характиристик которые вы спрашиваете, я не знаю что ответить!
  6. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    примерно так
    Код:
    ТекстДок = Новый ТекстовыйДокумент;
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    СтрокаДок = ""+ВыборкаДетальныеЗаписи.code+" "++ВыборкаДетальныеЗаписи.art+" "+ВыборкаДетальныеЗаписи.barcode+" "; //добавить свои поля
    ТекстДок.ДобавитьСтроку(СтрокаДок);
    КонецЦикла;
    ТекстДок.Записать(ИмяФайла);
    кстати, у вас в отчете запрос кривой - полное соединение с регистром цен поставщиков даст мало того, что чушь в результате, так еще и убить сервер бд может
  7. TopicStarter Overlay
    bandit541
    Offline

    bandit541

    Регистрация:
    30 май 2011
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    1
    На счет запросы, порекомендуйте как правильнее будет. Я с радостью исправлю и на ус себе наматаю :smile:. В своем запросе я вообще убираю? :
    Код:
    ТабДок = ЭлементыФормы.ТабДок;
    ТабДок.Очистить();
    ТабДок.Вывести(ОбластьЗаголовок);
    ТабДок.Вывести(ОбластьШапкаТаблицы);
    ТабДок.НачатьАвтогруппировкуСтрок();
    ВыборкаДетальныеЗаписи = Результат.Выбрать();
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетальныеЗаписи);
    ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетальныеЗаписи.Уровень());
    КонецЦикла;
    ТабДок.ЗакончитьАвтогруппировкуСтрок();
    ТабДок.Вывести(ОбластьПодвалТаблицы);
    ТабДок.Вывести(ОбластьПодвал);

    И получается вот этот ставлю:
    Код:
    ТекстДок = Новый ТекстовыйДокумент;
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    СтрокаДок = ""+ВыборкаДетальныеЗаписи.code+" "++ВыборкаДетальныеЗаписи.art+" "+ВыборкаДетальныеЗаписи.barcode+" "; //добавить свои поля
    ТекстДок.ДобавитьСтроку(СтрокаДок);
    КонецЦикла;
    ТекстДок.Записать(ИмяФайла);
  8. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    да, заменяете вывод в табдок на вывод в текстовый документ

    в запросе - левое соединение, по регистру срез последних, в параметрах среза - отбор по типу цен. ну и проверку на NULL
    Код:
       Запрос.Текст =
    "ВЫБРАТЬ
    |   ТоварыНаСкладахОстатки.Номенклатура.Код КАК code,
    |   ТоварыНаСкладахОстатки.Номенклатура.Артикул КАК art,
    |   Штрихкоды.Штрихкод КАК barcode,
    |   ТоварыНаСкладахОстатки.Номенклатура КАК name,
    |   ТоварыНаСкладахОстатки.Номенклатура.ЕдиницаИзмеренияМест.Коэффициент КАК pack,
    |   ЕСТЬNULL(ЦеныНоменклатурыКонтрагентов.Цена,0) КАК price,
    |   88 КАК manfid
    |ИЗ
    |   РегистрСведений.Штрихкоды КАК Штрихкоды
    |   ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(, Номенклатура.ОсновнойПоставщик = &Поставщик) КАК ТоварыНаСкладахОстатки
    |   ПО Штрихкоды.Владелец = ТоварыНаСкладахОстатки.Номенклатура,
    |   ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатурыКонтрагентов.СрезПоследних(,ТипЦен=&ТипЦенКонтрагента) КАК ЦеныНоменклатурыКонтрагентов
    |   ПО Штрихкоды.Владелец=ЦеныНоменклатурыКонтрагентов .Номенклатура";
    
  9. TopicStarter Overlay
    bandit541
    Offline

    bandit541

    Регистрация:
    30 май 2011
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    1
    Есть самокритику у меня "Лось " я что ли, не получается :angry2: . Вот такой запрос делаю:
    Код:
    Процедура КнопкаСформироватьНажатие(Кнопка)
    //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
    Макет = ПолучитьМакет("Макет");
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ТоварыНаСкладахОстатки.Номенклатура.Код КАК code,
    | ТоварыНаСкладахОстатки.Номенклатура.Артикул КАК art,
    | Штрихкоды.Штрихкод КАК barcode,
    | ТоварыНаСкладахОстатки.Номенклатура КАК name,
    | ТоварыНаСкладахОстатки.Номенклатура.ЕдиницаИзмеренияМест.Коэффициент КАК pack,
    | ЦеныНоменклатурыКонтрагентов.Цена КАК price,
    | 88 КАК manfid
    |ИЗ
    | РегистрСведений.Штрихкоды КАК Штрихкоды
    |  ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(, Номенклатура.ОсновнойПоставщик = &Поставщик) КАК ТоварыНаСкладахОстатки
    |  ПО Штрихкоды.Владелец = ТоварыНаСкладахОстатки.Номенклатура,
    | РегистрСведений.ЦеныНоменклатурыКонтрагентов КАК ЦеныНоменклатурыКонтрагентов";
    Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);
    Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания);
    Запрос.УстановитьПараметр("Поставщик", Поставщик);
    
    Результат = Запрос.Выполнить();
    ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
    ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
    ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
    ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы");
    ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали");
    ТекстДок = Новый ТекстовыйДокумент;
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    СтрокаДок =" "+ВыборкаДетальныеЗаписи.code+" "+ВыборкаДетальныеЗаписи.art+" "+ВыборкаДетальныеЗаписи.barcode+" "; //добавить свои поля
    ТекстДок.ДобавитьСтроку(СтрокаДок);
    КонецЦикла;
    ТекстДок.Записать(ИмяФайла);
    //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    
    КонецПроцедуры	 
    {Форма.ФормаОтчета.Форма(37,6)}: Переменная не определена (ВыборкаДетальныеЗаписи)
    Пока <<?>>ВыборкаДетальныеЗаписи.Следующий() Цикл (Проверка: Толстый клиент (обычное приложение))
    {Форма.ФормаОтчета.Форма(38,18)}: Переменная не определена (ВыборкаДетальныеЗаписи)
    СтрокаДок =" "+<<?>>ВыборкаДетальныеЗаписи.code+" "+ВыборкаДетальныеЗаписи.art+" "+ВыборкаДетальныеЗаписи.barcode+" "; //добавить свои поля (Проверка: Толстый клиент (обычное приложение))
    {Форма.ФормаОтчета.Форма(38,50)}: Переменная не определена (ВыборкаДетальныеЗаписи)
    СтрокаДок =" "+ВыборкаДетальныеЗаписи.code+" "+<<?>>ВыборкаДетальныеЗаписи.art+" "+ВыборкаДетальныеЗаписи.barcode+" "; //добавить свои поля (Проверка: Толстый клиент (обычное приложение))
    {Форма.ФормаОтчета.Форма(38,81)}: Переменная не определена (ВыборкаДетальныеЗаписи)
    СтрокаДок =" "+ВыборкаДетальныеЗаписи.code+" "+ВыборкаДетальныеЗаписи.art+" "+<<?>>ВыборкаДетальныеЗаписи.barcode+" "; //добавить свои поля (Проверка: Толстый клиент (обычное приложение))
    {Форма.ФормаОтчета.Форма(41,19)}: Переменная не определена (ИмяФайла)
    ТекстДок.Записать(<<?>>ИмяФайла); (Проверка: Толстый клиент (обычное приложение))
  10. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    Что касается запроса: посмотрите внимательно на запрос, что вам предложили и на запрос, который у вас получился. Разницу видите?
    Что касается ВыборкаДетальныеЗаписи: внимательно посмотрите на обработку результата запроса в вашем первом посте и в вашем последнем посте. Не хватает вот этой конструкции
    Код:
    ВыборкаДетальныеЗаписи = Результат.Выбрать();
    Что касается ИмяФайла: так вы определите сначала эту переменную, присвойте ей значение какое-либо

Поделиться этой страницей