Как выгрузить товары из 1с в csv
Перейти к содержимому

Как выгрузить товары из 1с в csv

  • автор:

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

А ненужный (закомментированный) код перед публикацией религия не позволила удалить?

(1) Little Friend, а чем он мешает?

См. также

sale

fastcode_tg

courses_fastcode

courses_fastcode

  • © 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 при уровне знаний "Прочитала ЖКК", только показал как выбрать данные запросом — обход выборки и запись сама)

Добавить комментарий

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