|
Выгрузка в 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
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |