Имя: Пароль:
1C
1С v8
Выгрузка в CSV
0 Nige1ist
 
04.01.17
14:31
Здравствуйте!

Может ли кто поделится обработкой которая может выгружать данные в CSV-файл? Чтобы выгружались данные в отдельные файлы. Т.е. указываешь каталог для выгрузки, выбираешь организацию, период выгрузки и жмешь кнопку выгрузить. На выходе получаешь несколько файлов. Например:
- Продажи
- Остаток
- Поступление

Пытаюсь сам сделать, но что-то не получается. Конфигурация "Бухгалтерия для Казахстана" 2.0.22.20. Совместимость с платформой 8.2.13

P.S. Можно ли в параметрах виртуальной таблицы (регистр накопления, остатки) как либо указать параметры реквизита Количество > 0?
1 quest
 
04.01.17
14:32
в интернете на каждом углу валяются. качни любую и прогни под себя.
2 Nige1ist
 
04.01.17
14:37
(1) в интернете или совсем сложные, которые я пока понять не могу или обрезанные. Может мне свое поделие выложить, правильно ли делаю вообще?
3 quest
 
04.01.17
14:40
да что там сложного????
1. Получаешь все данные, кладешь в какую нибудь коллекцию (наприме в ТЗ)
2. Каждую ТЗ обходишь и выгружаешь в файл
2.1 Выгрука строки ТЗ в файл - просто склейка значений из столбцов в строку через "," или Символы.Таб (не знаю что там у тебя разделителем назначено)
4 quest
 
04.01.17
14:41
ты сядь спокойно и на бумажке разрисуй как работать это все будет. Или текстом - как будто техзадание пишешь - сразу станет ясно что не получается и что надо подробнее проработать.
5 Живой Ископаемый
 
04.01.17
15:07
\u{202e}Нет, ничего не выйдет, 8ка еще слишком сырая
6 Cool_Profi
 
04.01.17
15:15
Это очень сложно. Это надо программиста звать.
И да, нужно заплатить ему денег. Причём достаточно многою.
7 Фрэнки
 
04.01.17
15:30
тс, а открыть и посмотреть внутрь CSV религия запрещает?!

там же, фактически, никакого формата нет
8 Torquader
 
04.01.17
15:30
(5) Всё зависит от кодировки, если взять двухбайтовую (Unicode), то проблемы будут только у того, кто читает.
Соответственно, согласно формату вывода CSV строки заключаются в кавычки, а кавычки, если в них встречаются - дублируются.
9 Nige1ist
 
05.01.17
08:36
Пытаюсь сделать обработку на основе:
http://j008.ru/ps/102_1c_ostatki_to_CSV

Есть затыки, посмотрите что не так делаю:
http://rgho.st/7syY2JCnp
10 Nige1ist
 
05.01.17
08:37
Период буду использовать для другой части обработки, пока пытаюсь сделать хотя бы выгрузку остатков.
11 Fedor-1971
 
05.01.17
08:53
(9) буквами пиши свои затыки, искать их в коде нет желания
12 Nige1ist
 
05.01.17
09:10
Ошибка:

РегистрНакопления.ТоварыОрганизацийБУ.Остатки(, Организация = <<?>>&Организация) КАК ТоварыОрганизацийБУОстатки
{ВнешняяОбработка.ВыгрузкаДанныхДляСайта.МодульОбъекта(13)}: Ошибка при вызове метода контекста (Выполнить)
    РезультатОстатки = ЗапросОстатка.Выполнить();
по причине:
{(7, 64)}: Не задано значение параметра "Организация"
РегистрНакопления.ТоварыОрганизацийБУ.Остатки(, Организация = <<?>>&Организация) КАК ТоварыОрганизацийБУОстатки

Код:
ЗапросОстатка = Новый Запрос;
    ЗапросОстатка.Текст =
        "ВЫБРАТЬ
        |    ТоварыОрганизацийБУОстатки.Организация,
        |    ТоварыОрганизацийБУОстатки.Товар КАК Номенклатура,
        |    ТоварыОрганизацийБУОстатки.НомерГТД,
        |    ТоварыОрганизацийБУОстатки.КоличествоОстаток КАК Количество
        |ИЗ
        |    РегистрНакопления.ТоварыОрганизацийБУ.Остатки(, Организация = &Организация) КАК ТоварыОрганизацийБУОстатки";
    ЗапросОстатка.УстановитьПараметр("Огранизация", Организация);
    РезультатОстатки = ЗапросОстатка.Выполнить();
    ТаблицаОстатков = РезультатОстатки.Выгрузить();
    Возврат ТаблицаОстатков;
13 bodri
 
05.01.17
09:10
(0) что не получается конкретно?
14 Cool_Profi
 
05.01.17
09:11
ЗапросОстатка.УстановитьПараметр("Огранизация", Организация);

Теперь внимательно прочитай. Попей кофе. Поспи. Протрезвей.
15 bodri
 
05.01.17
09:12
Функция ПолучитьОстатки()
    ЗапросОстатка = Новый Запрос;
    ЗапросОстатка.Текст =
        "ВЫБРАТЬ
        |    ТоварыОрганизацийБУОстатки.Организация,
        |    ТоварыОрганизацийБУОстатки.Товар КАК Номенклатура,
        |    ТоварыОрганизацийБУОстатки.НомерГТД,
        |    ТоварыОрганизацийБУОстатки.КоличествоОстаток КАК Количество
        |ИЗ
        |    РегистрНакопления.ТоварыОрганизацийБУ.Остатки(, Организация = &Организация) КАК ТоварыОрганизацийБУОстатки";
    ЗапросОстатка.УстановитьПараметр("Организация",Организация);
    Остатки = ЗапросОстатка.Выполнить();
    ТаблицаОстатков = Остатки.Выгрузить();
    Возврат ТаблицаОстатков;
КонецФункции
16 bodri
 
05.01.17
09:12
(15) к (12)
17 Nige1ist
 
05.01.17
09:15
(14) :) Да я просто новичок. Можно просто указать саму ошибку и как исправить?
18 Cool_Profi
 
05.01.17
09:16
(17) Уже указал.
Ты просто _внимательно_ не хочет прочитать то, что ты сам написал. ОЧЕНЬ внимательно
19 Nige1ist
 
05.01.17
09:23
(18) ой, тошна! Глупая ошибка конечно...
20 Nige1ist
 
05.01.17
12:35
Что то неудачный пример я взял. (9)
http://j008.ru/ps/102_1c_ostatki_to_CSV

Скачал обработку из примера, но в ней тоже выгружается пустой файл, подскажите что в примере или у меня не так?

http://rgho.st/7QMjwl2L8

Кроме того при выборе каталога показывает не полный путь.
https://snag.gy/MgchVr.jpg
Путь: D:\Users\nihi1ist\
21 Cool_Profi
 
05.01.17
12:37
(20) читай (11)
22 quest
 
05.01.17
13:03
(20) Установи длину строки у реквизита отвечающего за каталог больше 10 символов. И посмотри курсы по программированию. Помогает
23 Nige1ist
 
05.01.17
13:04
(21)

// Выполним запрос к регистру
// Результат Таблицазначений  
Функция ПолучитьДанные()
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ТоварыНаСкладахОстатки.Склад,
        |    ТоварыНаСкладахОстатки.Номенклатура,
        |    ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры,
        |    ТоварыНаСкладахОстатки.СерияНоменклатуры,        
        |    ТоварыНаСкладахОстатки.КоличествоОстаток
        |ИЗ
        |    РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки";
    Результат = Запрос.Выполнить();
    ТаблицаЗначений = Результат.Выгрузить();
    возврат ТаблицаЗначений;
КонецФункции //    


// Создаем строку заголвков для CSV-файла.
// Цикл по колонкам таблицы значений
Функция СоздатьЗаголовкиCSV(ТаблицаЗначений,разделитель)
    //разделитель = "|";
    колонкиТЗ=ТаблицаЗначений.колонки;
    Для каждого колонка Из колонкиТЗ Цикл
        стрКолонки = "" + стрКолонки + колонка.Имя + разделитель ;
    КонецЦикла;
    Возврат стрКолонки;
КонецФункции

// Создаем строку записи ТаблицыЗначений для CSV-файла
Функция СоздатьСтрокуCSV(записьТаблицаЗначений,разделитель)    
    стрЗапись = "";    
    Для каждого поле Из записьТаблицаЗначений Цикл
        стрЗапись = "" + стрЗапись + Строка(поле) + разделитель ;
    КонецЦикла;
    Возврат стрЗапись;
КонецФункции


// Создаем текст CSV:
// текст заголовков и
// текст данных
Функция СоздатьДанныеCSV(ТаблицаЗначений,разделитель)

    текстЗапись="";
    для каждого запись из ТаблицаЗначений Цикл

        // начало цикла по строкам таблицы значений
        // если не сформирована строка CSV с заголовками полей
        // контактной информации - создаем
        если текстЗапись="" тогда
            текстЗапись=СоздатьЗаголовкиCSV(ТаблицаЗначений,разделитель)
                + Символы.ПС;    
        КонецЕсли;    

        // для каждой записи создаем строку CSV
        стрЗапись = СоздатьСтрокуCSV(запись,разделитель);            

        // выводим сообщение в панель состояний
        Сообщить(запись[0]);
        Состояние(стрЗапись);

        текстЗапись = текстЗапись + стрЗапись + Символы.ПС;

    КонецЦикла;        

    Возврат текстЗапись;

КонецФункции //

// Запишем данные в файл
Функция ЗаписатьCSV(текст,имяФайла)              
    //кодировка = КодировкаТекста.ANSI;
    кодировка = КодировкаТекста.UTF8;

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

КонецФункции //

// Основная логика:
Функция ВыгрузитьОстаткиПоВсемСкладам_В_CSV(имяФайлаCSV);
    сообщить("Выгрузить Контактную Информацию Контрагентов в формате CSV в " +
        имяФайлаCSV);

    разделительCSV = "|";

    ТаблицаЗначений = ПолучитьДанные();
    текст = СоздатьДанныеCSV(ТаблицаЗначений,разделительCSV);
    ЗаписатьCSV(текст,имяФайлаCSV);
    сообщить(имяФайлаCSV + " -[OK!]" );
КонецФункции

штампДаты = Формат(ТекущаяДата(),"ДФ=ddMMyyyy_hhmm");
ВыгрузитьОстаткиПоВсемСкладам_В_CSV("C:\Temp\ostatki_" + штампДаты + ".csv");
24 Fedor-1971
 
05.01.17
13:33
(23) зачем нам код из примера?
пиши словами что не получается, что показывает отладчик, какой вопрос в связи с этим у тебя есть.
Пройдись отладчиком по коду и посмотри глазами на результат.
25 Nige1ist
 
05.01.17
13:36
(24) отладчик ничего не показывает. Просто сохраняет пустой файл.

Вот код из моего поделия.

//Запрос в регистр накопления ТоварыОрганизацийБУ
Функция ПолучитьОстатки()
    ЗапросОстатка = Новый Запрос;
    ЗапросОстатка.Текст =
        "ВЫБРАТЬ
        |    ТоварыОрганизацийБУОстатки.Организация,
        |    ТоварыОрганизацийБУОстатки.Товар КАК Номенклатура,
        |    ТоварыОрганизацийБУОстатки.НомерГТД,
        |    ТоварыОрганизацийБУОстатки.КоличествоОстаток КАК Количество
        |ИЗ
        |    РегистрНакопления.ТоварыОрганизацийБУ.Остатки(, Организация = &Организация) КАК ТоварыОрганизацийБУОстатки";
    ЗапросОстатка.УстановитьПараметр("Организация", Организация);
    РезультатОстатки = ЗапросОстатка.Выполнить();
    ТаблицаОстатков = РезультатОстатки.Выгрузить();
    Возврат ТаблицаОстатков;
КонецФункции

// Создаем заголовок для файла с остатками
// Цикл по колонкам ТаблицаОстатков
Функция СоздатьЗаголовокФайлаОстатков(ТаблицаОстатков,Разделитель)
    КолонкиТО = ТаблицаОстатков.Колонки;
    Для Каждого Колонка ИЗ КолонкиТО Цикл
        СтрКолонки = "" + СтрКолонки + Колонка.Имя + Разделитель;
    КонецЦикла;
    Возврат СтрКолонки;
КонецФункции

// Создаем строку записи для
Функция СоздатьСтрокуФайлаОстатков(ТаблицаОстатков,Разделитель)
    СтрОстатки = "";
    Для Каждого Поле ИЗ ТаблицаОстатков Цикл
        СтрОстатки = "" + СтрОстатки + Строка(Поле) + Разделитель;
    КонецЦикла;
    Возврат СтрОстатки;
КонецФункции

// Создаем текст CSV-файла: заголовок и сами данные
Функция СоздатьДанныеОстатки(ТаблицаОстатков,Разделитель)
    ТекстОст = "";
    Для Каждого Запись ИЗ ТаблицаОстатков Цикл
        // Начало цикла по строкам ТаблицаОстатков
        // если не сформирована строка CSV с заголовками полей
        // контактной информацией - создаем
        Если ТекстОст = "" Тогда
            ТекстОст = СоздатьЗаголовокФайлаОстатков(ТаблицаОстатков,Разделитель) + Символы.ПС;
        КонецЕсли;
            
        // Для каждой записи создаем строку
        СтрОстатки = СоздатьСтрокуФайлаОстатков(Запись,Разделитель);
        
        // Выводим сообщение в панель состояний
        ТекстОст = ТекстОст + СтрОстатки + Символы.ПС;
    КонецЦикла;
    
    Возврат ТекстОст;
КонецФункции

// Запись данных в файл
Функция ЗаписатьДанныеОстатокВФайл(ТекстФайлаОст,ИмяФайлаОстатки)
    Кодировка = КодировкаТекста.UTF8;
    ТекстФайлОстаток = Новый ЗаписьТекста(ИмяФайлаОстатки,Кодировка);
    ТекстФайлОстаток.ЗаписатьСтроку(ТекстФайлаОст);
    ТекстФайлОстаток.Закрыть();;
    Возврат 0;
КонецФункции

// Основная логика
Функция ВыгрузитьОстатки(ИмяФайлаОстатки) Экспорт
    Сообщить("Выгрузить Контактную Информацию Контрагентов в формате CSV в " + ИмяФайлаОстатки);
    Разделитель = "|";
    ТекДатаСтр = Формат(ТекущаяДата(),"ДФ = ddMMyyyy_hhmm");
    КаталогВыгрузки = КаталогВыгрузкиДанных;
    ИмяФайлаОстатки = КаталогВыгрузки + "\" + "Остаток" + ТекДатаСтр + ".csv";
    
    ТаблицаОстатков = ПолучитьОстатки();
    ТекстФайлаОст = СоздатьДанныеОстатки(ТаблицаОстатков,Разделитель);
    ЗаписатьДанныеОстатокВФайл(ТекстФайлаОст,ИмяФайлаОстатки);
КонецФункции
26 Cool_Profi
 
05.01.17
13:40
(25) Тайну великую открою тебе, о падаван юный...
Отладчик показывать не может ничего...

На этой строке ЗаписатьДанныеОстатокВФайл(ТекстФайлаОст,ИмяФайлаОстатки);
поставь точку останова и посмотри на ТекстФайлаОст.
Что находится там?

Не находится там ничего если, то в функцию СоздатьДанныеОстатки() смотри пошагово, почему не записывается результат...

ЗЫ. А ещё лучше - позови программиста... Он путь тебе истинный покажет, и дорогу на сторону светлую укажет...
27 takefive
 
05.01.17
14:10
если совсем просто - нужно добавить несколько строк в работающий отчет

Процедура Отчет() Экспорт
    //БС> bs 05.01.2017 12:27:43  
    ТекстЗапись Новый ЗаписьТекста(Путь,КодировкаТекста.UTF8);
    Разделитель = "|";
    //БС< 05.01.2017 12:27:47
    
    //{{КОНСТРУКТОР_ВЫХОДНЫХ_ФОРМ(Отчет)
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ТоварыНаСкладахОстатки.Склад,
    |    ТоварыНаСкладахОстатки.Номенклатура,
    |    ТоварыНаСкладахОстатки.КоличествоОстаток
    |ИЗ
    |    РегистрНакопления.ТоварыНаСкладах.Остатки(&Период, Склад = &Склад) КАК ТоварыНаСкладахОстатки";
    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();
    Пока Выборка.Следующий() Цикл
        //БС> bs 05.01.2017 12:28:36  
        СтрокаТекста = "" + Выборка.Склад + Разделитель
                        + Выборка.Номенклатура + Разделитель
                        + Выборка.КоличествоОстаток;
        ТекстЗапись.ЗаписатьСтроку(СтрокаТекста);
        //БС< 05.01.2017 12:28:37
    КонецЦикла;
    //}}КОНСТРУКТОР_ВЫХОДНЫХ_ФОРМ
    //БС> bs 05.01.2017 12:34:20  
    ТекстЗапись.Закрыть();
    //БС< 05.01.2017 12:34:25
КонецПроцедуры
28 Fedor-1971
 
05.01.17
14:58
(26) ТС "новичок" больше 4-х лет. Ему программист не укажет дорогу, ему больше нужны "двое из ларца одинаковы с лица"

(.. вы что, и за меня кодить будете?
- ДА!
- совсем ламеры о...)

или "что, хозяин, надо?" (кольцо Скарабеи там их, вроде, 3 шт. было)

(27) за 2 дня можно было уже накропать простую запись в CSV (дочке пендаля выдал, она мне за 2 часа сделала выгрузку в CSV при уровне знаний "Прочитала ЖКК", только показал как выбрать данные запросом - обход выборки и запись сама)
29 Serginio1
 
05.01.17
21:12