Выгрузка данных в формате CSV

А ненужный (закомментированный) код перед публикацией религия не позволила удалить?
(1) Little Friend, а чем он мешает?
См. также




- © 2013-2023 FastCode
×
Канал FastCode 1C в Телеграм! Шаблоны кода, статьи, полезные советы, курсы по 1С (6К участников)
Присоединиться
Выгрузка из 1С в csv Номенклатуры

Данная обработка позволяет производить выгрузку файлов 1С на FTP в формате csv.
Очень полезная штука для загрузки номенклатуры на сайты, а также есть выгрузка на ПК.
Для выгрузки нужной информации указываем в столбце (Значение параметра), откуда брать данные, и жмем выгрузку.
Исправил ошибку при (назначении имя файла картинок по штрихкоду) если больше одного штрихкода у номенклатуры.
Обработка стабильно работает на Управление торговлей, редакция 11 (11.3.3.231) и более поздних версиях.
Related Posts
16 Comments
Надеюсь, через ADO?
(1) Yashazz, нет, не через ADO.
Даже интересно. CSV — это же просто текст, с полями разделенными запятушками. Что сложного любые данные выгрузить в текст ?
Кстати, а как выгружаются табличные части справочников и документов?
А в БП 3.0 она не будет работать да?
(4) electrosoul, Конечно нет. Если подправите под свою базу тогда будет=)
Здравствуйте! При попытке открыть в УТ 10.3 обработка не запускается, ошибки не выдаются. В чем может быть проблема?
УТ 11 — выгружает только картинки, файл с номенклатурой пустой,
в файл на компьютере не выгружал пока не удалил выбор — FTP
Любой отчет/табличный документ сохраняется в эксель и далее там кнопка конвертера в csv, для тех у кого не работает)
1. условия отбора в запросе вашей обработки, выводят пустой файл в типовой УТ11.
2. не лучший вариант назначать имя файла картинок по штрихкоду, они могут быть одинаковые и их может не быть
обычно для этого используют ID номенклатуры.
3. не убирает большие пробелы в описании товара, из-за этого в ехел таблица разрывается, получается криво…
и будте поскромнее 1 стартмани более чем….
получается криво (сдвигается) потому у товара нет штрихкода.
Когда качал думал немного подправлю и все
в итоге потратил 3 мани и пол дня, пришлось почти все переписать,
Она заточена под конкретную задачу, (канализацию) зачем недоделки выкладывать ?
я файла картинок по штрихкоду, они могут быть одинаковые и их может не быть
обычно для этого используют ID номенклату
Файл не может быть пустой, значит что-то не указали.Изначально не было рассчитано что может быть более 1-го штрихкода. Теперь при наличии нескольких штрихкодов или более будет браться меньший из них для выгрузки.
выгружает товар с описанием не более 1 024 символа без разрыва (протестированно) да и какой разрыв если это .csv а у вас открыт excel или что-то подобное. Cтранно выводит штрихкод также потому что у вас открыто в excel и он автоматически сокращает наименование из цифр если не влезает в ячейку.
К тому же файл .csv у вас не правильно преобразован в .xls поэтому всё так криво в excel получается.
1С 8.3 CSV — Программист 1С Минск. Автоматизация бизнеса.

//*** Если есть шапка таблицы ***
ШапкаCSV = ФайлCSV . ПолучитьСтроку ( 1 );
// Чтение и разделение на отдельные значения в массив (по разделителю)
МассивCSV = СтрРазделить ( ШапкаCSV , ИспользуемыйРазделитель );
//***************************
Для Каждого СтрокаНом Из МассивCSV Цикл
// Удаляем пробелы т.к. в названии столбцов они не допускаются
ИмяБП = СтрЗаменить ( СтрокаНом , » » , «» );
ТЗ . Колонки . Добавить ( ИмяБП ,, СтрокаНом );
Для НомерСтроки = 2 По ФайлCSV . КоличествоСтрок () Цикл // Если без шапки, то начинаем с первой строчки
// Получаем строку по-порядку
СтрокаCSV = ФайлCSV . ПолучитьСтроку ( НомерСтроки );
// Разделяем с помощью выбранного разделителя каждую строку на столбцы
МассивCSV = СтрРазделить ( СтрокаCSV , ИспользуемыйРазделитель );
НоваяСтрочка = ТЗ . Добавить (); // Добавляем строку в ТЗ
Для НомСтолбца = 1 По МассивCSV . Количество () Цикл
ТекЗначениеCSV = МассивCSV [ НомСтолбца — 1 ];
ИмяКолонкиCSV = ТЗ . Колонки [ НомСтолбца — 1 ]. Имя ;
НоваяСтрочка [ ИмяКолонкиCSV ] = ТекЗначениеCSV ;
&НаСервере
Процедура ВыгрузкаВФайлCSVСоздание ();
ИспользуемыйРазделитель = «;» ;
ФайлCSV = «D:\import_21092020.csv» ;
//*** Получаем данные из запроса ***
Запрос = Новый Запрос ;
Запрос . Текст =
«ВЫБРАТЬ
| ВнутреннийПрайс.Код КАК Код,
| ВнутреннийПрайс.Наименование КАК Наименование,
| ВнутреннийПрайс.ЗакупочнаяЦена КАК ЗакупочнаяЦена,
| ВнутреннийПрайс.РозничнаяЦена КАК РозничнаяЦена,
| ВнутреннийПрайс.ОптоваяЦена КАК ОптоваяЦена
|ИЗ
| Справочник.Цены КАК ВнутреннийПрайс» ;
РезультатЗапроса = Запрос . Выполнить (). Выгрузить ();
ТЗ = РезультатЗапроса ;
//**********************************
ТекстCSV = «» ; // Текст с учетом заголовков, разделителей и переноса строк
Для Каждого СтрокаТЗ Из ТЗ Цикл
Если ТекстCSV = «» Тогда
СтрокаКол = «» ;
КолонкиТЗ = ТЗ . Колонки ;
Для Каждого Колонка Из КолонкиТЗ Цикл
СтрокаКол = «» + СтрокаКол + Колонка . Имя + ИспользуемыйРазделитель ;
КонецЦикла;
ТекстCSV = СтрокаКол + Символы . ПС ;
ТекстCSV = ТекстCSV + СтрокаТЗ . Код + ИспользуемыйРазделитель + СтрокаТЗ . Наименование
+ ИспользуемыйРазделитель + СтрокаТЗ . ЗакупочнаяЦена + ИспользуемыйРазделитель + СтрокаТЗ . РозничнаяЦена
+ ИспользуемыйРазделитель + СтрокаТЗ . ОптоваяЦена + Символы . ПС ;
КодANSI = КодировкаТекста . ANSI ;
ТекстовыйФайлЗапись = Новый ЗаписьТекста ( ФайлCSV , КодANSI ); // Создание файла CSV
ТекстовыйФайлЗапись . ЗаписатьСтроку ( ТекстCSV ); // Запись информации в файл
ТекстовыйФайлЗапись . Закрыть (); // Обязательно закрываем, иначе зависает в процессе
Выгрузка в CSV
Может ли кто поделится обработкой которая может выгружать данные в CSV-файл? Чтобы выгружались данные в отдельные файлы. Т.е. указываешь каталог для выгрузки, выбираешь организацию, период выгрузки и жмешь кнопку выгрузить. На выходе получаешь несколько файлов. Например:
— Продажи
— Остаток
— Поступление
Пытаюсь сам сделать, но что-то не получается. Конфигурация "Бухгалтерия для Казахстана" 2.0.22.20. Совместимость с платформой 8.2.13
P.S. Можно ли в параметрах виртуальной таблицы (регистр накопления, остатки) как либо указать параметры реквизита Количество > 0?
тс, а открыть и посмотреть внутрь CSV религия запрещает?!
там же, фактически, никакого формата нет
Есть затыки, посмотрите что не так делаю:
http://rgho.st/7syY2JCnp
РегистрНакопления.ТоварыОрганизацийБУ.Остатки(, Организация = <<?>>&Организация) КАК ТоварыОрганизацийБУОстатки
<ВнешняяОбработка.ВыгрузкаДанныхДляСайта.МодульОбъекта(13)>: Ошибка при вызове метода контекста (Выполнить)
РезультатОстатки = ЗапросОстатка.Выполнить();
по причине:
<(7, 64)>: Не задано значение параметра "Организация"
РегистрНакопления.ТоварыОрганизацийБУ.Остатки(, Организация = <<?>>&Организация) КАК ТоварыОрганизацийБУОстатки
Код:
ЗапросОстатка = Новый Запрос;
ЗапросОстатка.Текст =
"ВЫБРАТЬ
| ТоварыОрганизацийБУОстатки.Организация,
| ТоварыОрганизацийБУОстатки.Товар КАК Номенклатура,
| ТоварыОрганизацийБУОстатки.НомерГТД,
| ТоварыОрганизацийБУОстатки.КоличествоОстаток КАК Количество
|ИЗ
| РегистрНакопления.ТоварыОрганизацийБУ.Остатки(, Организация = &Организация) КАК ТоварыОрганизацийБУОстатки";
ЗапросОстатка.УстановитьПараметр("Огранизация", Организация);
РезультатОстатки = ЗапросОстатка.Выполнить();
ТаблицаОстатков = РезультатОстатки.Выгрузить();
Возврат ТаблицаОстатков;
Теперь внимательно прочитай. Попей кофе. Поспи. Протрезвей.
Скачал обработку из примера, но в ней тоже выгружается пустой файл, подскажите что в примере или у меня не так?
Кроме того при выборе каталога показывает не полный путь.
https://snag.gy/MgchVr.jpg
Путь: D:\Users\nihi1ist\
// Выполним запрос к регистру
// Результат Таблицазначений
Функция ПолучитьДанные()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТоварыНаСкладахОстатки.Склад,
| ТоварыНаСкладахОстатки.Номенклатура,
| ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры,
| ТоварыНаСкладахОстатки.СерияНоменклатуры,
| ТоварыНаСкладахОстатки.КоличествоОстаток
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки";
Результат = Запрос.Выполнить();
ТаблицаЗначений = Результат.Выгрузить();
возврат ТаблицаЗначений;
КонецФункции //
// Создаем строку заголвков для CSV-файла.
// Цикл по колонкам таблицы значений
Функция СоздатьЗаголовкиCSV(ТаблицаЗначений,разделитель)
//разделитель = "|";
колонкиТЗ=ТаблицаЗначений.колонки;
Для каждого колонка Из колонкиТЗ Цикл
стрКолонки = "" + стрКолонки + колонка.Имя + разделитель ;
КонецЦикла;
Возврат стрКолонки;
КонецФункции
// Создаем строку записи ТаблицыЗначений для CSV-файла
Функция СоздатьСтрокуCSV(записьТаблицаЗначений,разделитель)
стрЗапись = "";
Для каждого поле Из записьТаблицаЗначений Цикл
стрЗапись = "" + стрЗапись + Строка(поле) + разделитель ;
КонецЦикла;
Возврат стрЗапись;
КонецФункции
// Создаем текст CSV:
// текст заголовков и
// текст данных
Функция СоздатьДанныеCSV(ТаблицаЗначений,разделитель)
текстЗапись="";
для каждого запись из ТаблицаЗначений Цикл
// начало цикла по строкам таблицы значений
// если не сформирована строка CSV с заголовками полей
// контактной информации — создаем
если текстЗапись="" тогда
текстЗапись=СоздатьЗаголовкиCSV(ТаблицаЗначений,разделитель)
+ Символы.ПС;
КонецЕсли;
// для каждой записи создаем строку CSV
стрЗапись = СоздатьСтрокуCSV(запись,разделитель);
// выводим сообщение в панель состояний
Сообщить(запись[0]);
Состояние(стрЗапись);
текстЗапись = текстЗапись + стрЗапись + Символы.ПС;
// Запишем данные в файл
Функция ЗаписатьCSV(текст,имяФайла)
//кодировка = КодировкаТекста.ANSI;
кодировка = КодировкаТекста.UTF8;
ТекстовыйФайлЗапись = Новый ЗаписьТекста(имяФайла,Кодировка);
ТекстовыйФайлЗапись.ЗаписатьСтроку(текст);
ТекстовыйФайлЗапись.Закрыть();
Возврат 0;
// Основная логика:
Функция ВыгрузитьОстаткиПоВсемСкладам_В_CSV(имяФайлаCSV);
сообщить("Выгрузить Контактную Информацию Контрагентов в формате CSV в " +
имяФайлаCSV);
ТаблицаЗначений = ПолучитьДанные();
текст = СоздатьДанныеCSV(ТаблицаЗначений,разделительCSV);
ЗаписатьCSV(текст,имяФайлаCSV);
сообщить(имяФайлаCSV + " -[OK!]" );
КонецФункции
штампДаты = Формат(ТекущаяДата(),"ДФ=ddMMyyyy_hhmm");
ВыгрузитьОстаткиПоВсемСкладам_В_CSV("C:\Temp\ostatki_" + штампДаты + ".csv");
(24) отладчик ничего не показывает. Просто сохраняет пустой файл.
Вот код из моего поделия.
//Запрос в регистр накопления ТоварыОрганизацийБУ
Функция ПолучитьОстатки()
ЗапросОстатка = Новый Запрос;
ЗапросОстатка.Текст =
"ВЫБРАТЬ
| ТоварыОрганизацийБУОстатки.Организация,
| ТоварыОрганизацийБУОстатки.Товар КАК Номенклатура,
| ТоварыОрганизацийБУОстатки.НомерГТД,
| ТоварыОрганизацийБУОстатки.КоличествоОстаток КАК Количество
|ИЗ
| РегистрНакопления.ТоварыОрганизацийБУ.Остатки(, Организация = &Организация) КАК ТоварыОрганизацийБУОстатки";
ЗапросОстатка.УстановитьПараметр("Организация", Организация);
РезультатОстатки = ЗапросОстатка.Выполнить();
ТаблицаОстатков = РезультатОстатки.Выгрузить();
Возврат ТаблицаОстатков;
КонецФункции
// Создаем заголовок для файла с остатками
// Цикл по колонкам ТаблицаОстатков
Функция СоздатьЗаголовокФайлаОстатков(ТаблицаОстатков,Разделитель)
КолонкиТО = ТаблицаОстатков.Колонки;
Для Каждого Колонка ИЗ КолонкиТО Цикл
СтрКолонки = "" + СтрКолонки + Колонка.Имя + Разделитель;
КонецЦикла;
Возврат СтрКолонки;
КонецФункции
// Создаем строку записи для
Функция СоздатьСтрокуФайлаОстатков(ТаблицаОстатков,Разделитель)
СтрОстатки = "";
Для Каждого Поле ИЗ ТаблицаОстатков Цикл
СтрОстатки = "" + СтрОстатки + Строка(Поле) + Разделитель;
КонецЦикла;
Возврат СтрОстатки;
КонецФункции
// Создаем текст CSV-файла: заголовок и сами данные
Функция СоздатьДанныеОстатки(ТаблицаОстатков,Разделитель)
ТекстОст = "";
Для Каждого Запись ИЗ ТаблицаОстатков Цикл
// Начало цикла по строкам ТаблицаОстатков
// если не сформирована строка CSV с заголовками полей
// контактной информацией — создаем
Если ТекстОст = "" Тогда
ТекстОст = СоздатьЗаголовокФайлаОстатков(ТаблицаОстатков,Разделитель) + Символы.ПС;
КонецЕсли;
// Для каждой записи создаем строку
СтрОстатки = СоздатьСтрокуФайлаОстатков(Запись,Разделитель);
// Выводим сообщение в панель состояний
ТекстОст = ТекстОст + СтрОстатки + Символы.ПС;
КонецЦикла;
Возврат ТекстОст;
КонецФункции
// Запись данных в файл
Функция ЗаписатьДанныеОстатокВФайл(ТекстФайлаОст,ИмяФайлаОстатки)
Кодировка = КодировкаТекста.UTF8;
ТекстФайлОстаток = Новый ЗаписьТекста(ИмяФайлаОстатки,Кодировка);
ТекстФайлОстаток.ЗаписатьСтроку(ТекстФайлаОст);
ТекстФайлОстаток.Закрыть();;
Возврат 0;
КонецФункции
// Основная логика
Функция ВыгрузитьОстатки(ИмяФайлаОстатки) Экспорт
Сообщить("Выгрузить Контактную Информацию Контрагентов в формате CSV в " + ИмяФайлаОстатки);
Разделитель = "|";
ТекДатаСтр = Формат(ТекущаяДата(),"ДФ = ddMMyyyy_hhmm");
КаталогВыгрузки = КаталогВыгрузкиДанных;
ИмяФайлаОстатки = КаталогВыгрузки + "\" + "Остаток" + ТекДатаСтр + ".csv";
ТаблицаОстатков = ПолучитьОстатки();
ТекстФайлаОст = СоздатьДанныеОстатки(ТаблицаОстатков,Разделитель);
ЗаписатьДанныеОстатокВФайл(ТекстФайлаОст,ИмяФайлаОстатки);
КонецФункции
(25) Тайну великую открою тебе, о падаван юный.
Отладчик показывать не может ничего.
На этой строке ЗаписатьДанныеОстатокВФайл(ТекстФайлаОст,ИмяФайлаОстатки);
поставь точку останова и посмотри на ТекстФайлаОст.
Что находится там?
Не находится там ничего если, то в функцию СоздатьДанныеОстатки() смотри пошагово, почему не записывается результат.
ЗЫ. А ещё лучше — позови программиста. Он путь тебе истинный покажет, и дорогу на сторону светлую укажет.
если совсем просто — нужно добавить несколько строк в работающий отчет
Процедура Отчет() Экспорт
//БС> 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
КонецПроцедуры
(26) ТС "новичок" больше 4-х лет. Ему программист не укажет дорогу, ему больше нужны "двое из ларца одинаковы с лица"
(.. вы что, и за меня кодить будете?
— ДА!
— совсем ламеры о. )
или "что, хозяин, надо?" (кольцо Скарабеи там их, вроде, 3 шт. было)
(27) за 2 дня можно было уже накропать простую запись в CSV (дочке пендаля выдал, она мне за 2 часа сделала выгрузку в CSV при уровне знаний "Прочитала ЖКК", только показал как выбрать данные запросом — обход выборки и запись сама)