Как загрузить csv в 1с
Не редко возникает необходимость загрузить в справочники или документы 1С данные из текстового файла. Приведенный пример внешней обработки позволит преобразовать текстовый файл с известным разделителем данных в поле табличного документа для последующей обработки уже внутри 1С:Предприятия. Обработка содержит функцию разбора строки на массив данных, настраиваемый разделитель строки текста на "столбцы", процедуру чтения данных из текстового файла.
Разбор строки в массив с использованием функций из конфигурации 1С
Для разложения строки в массив в конфигурация 1С:Бухгалтерия, 1С:Торговля и 1С:УПП имеется замечательная функция - Функция РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = ",") Экспорт. Функция "расщепляет" строку на подстроки, используя заданный разделитель. Разделитель может иметь любую длину. Если в качестве разделителя задан пробел, рядом стоящие пробелы считаются одним разделителем, а ведущие и хвостовые пробелы параметра "Стр" игнорируются. Подробнее можно прочесть внутри конфигурации - "Общие модули" -> "Общего назначения". Функция возвращает массив значений, элементы которого - подстроки.
Чтение текстового файла (txt) в 1С
Операцию импорта - экспорта текстовых файлов (формат тхт или csv, а также htm, html) очень удобно реализовать при помощи конструкции следующего вида:
1. Функция ПолучитьПотокЧтенияСтрок(Файл) - Назначение: Проверить наличие файла (функция Файл()), Создать текстовый документ (Новый ТекстовыйДокумент()), вызвать метод "Прочитать" для открытия потока чтения файла. Возвращает поток, готовый для чтения.
2. Процедура ЧтениеТХТФайла(Элемент) - Назначение: В цикле произвести последовательное чтение строк файла текстового документа, разбирая на массив колонок данных и добавляя значения массива в табличное поле;
Исходный код 1С функции создания текстового потока чтения файла ТХТ:
Код 1C v 8.х
В данном примере была произведена загрузка из текстового файла в следующем формате:
Код
Похожие FAQ
Еще в этой же категории
Несмотря на то, что 1С является самой популярной, удобной и надежной информационной системой, имеющей в своей линейке комплекс решений для автоматизации и обработки абсолютно всех бизнес-процессов на предприятиях любого масштаба и области деятельности, все равно у пользователей ежедневно возникает необходимость выгрузить данные из 1С в сторонние программы или файлы. В данной статье рассмотрим, что такое выгрузка из 1С и покажем, как сделать выгрузку из 1С и какие проблемы могут возникать при этом. Забегая вперед, отметим, что если по прочтение статьи вам будет нужно задать вопрос по 1С, обратитесь к нашим специалистам по телефону или через заявку на сайте. Мы свяжемся с вами в кратчайшие сроки.
Данные, которые можно выгружать из 1С
1С любой конфигурации штатно поддерживает выгрузку таких данных как:
- Печатные формы;
- Отчеты;
- Таблицы и списки.
Выгрузка данных из 1С 8.3 возможна во многих популярных форматах:
- Microsoft Excel;
- Microsoft Word;
- PDF;
- Выгрузка в CSV;
- HTML и другие.
Выгрузка печатных форм и отчетов
Любую печатную форму или отчет в 1С можно сохранить в нужном формате. Для этого понадобится открыть форму или отчет, затем выбрать в Главном меню Файл - Сохранить как.
Рис.1 Сохранение печатной формы и отчета
После этого будет открыто окно сохранения файла, в котором указывается имя и тип файла:
Рис.2 Окно сохранения файла
Возможные проблемы при выгрузке из 1С
В некоторых случаях кнопка меню «Сохранить как» может быть недоступна для выбора:
Рис.3 Сохранение невозможно
Это связано с тем, что печатная форма или отчет не активизированы в данный момент. Чтобы печатная форма стала доступна для сохранения, требуется просто кликнуть мышкой в любое место на ней:
Рис.4 Активация печатной формы
Теперь пункт меню «Сохранить как» будет доступен. Если при выгрузке данных у вас возникли также и другие проблемы, обратитесь к нашим специалистам по сопровождению 1С 8.3, мы с радостью вам поможем.
Выгрузка в Excel
Обработка данных в самом популярном табличном формате требует соответствующей выгрузки. Для того чтобы сохранить нужные данные в формате Excel, необходимо в диалоге сохранения файла указать тип Лист Excel2007-. (*.xlsx). Реже необходимо сохранить данные в старом формате Лист Excel (*.xls):
Рис.5 Сохранение нужных данных в формате Excel
Аналогично, выбирая нужный формат, можно сделать выгрузку из 1С в PDF, из 1С в WORD, из 1С в CSV, а также в другие форматы.
Выгрузка произвольных таблиц из 1С
В данном разделе будет показано, как можно выгрузить любые данные, при условии, что у вас есть на это права.
В 1С разработан штатный механизм, который позволяет выгрузить любой список (например, список документов или элементы справочника). Для этого в командной панели любого списка, в группе «Еще» доступна команда «Вывести список»:
Рис.6 Выгрузка списков
Далее требуется указать нужные колонки и нажать кнопку ОК:
Рис.7 Выбор колонок
Информация будет выведена в специальный табличный документ. Этот документ выглядит так же, как любой другой отчет в 1С, и его можно выгрузить точно так же, используя команду Файл – Сохранить как:
Рис.8 Табличный документ
Как выгрузить данные, которые не видно в списке
Зачастую, возникшая задача по выгрузке какой-то список, сопровождается необходимостью добавления туда колонок, которые точно есть в документе (справочнике), но их по каким-то причинам не видно в текущем списке. Пример: в списке «Клиенты» добавить для выгрузки поле «Телефон», которое отображается только в дополнительной панели справа:
Рис.9 Выгрузка данных, не отображающихся в списке
Чтобы телефон можно было выгрузить из 1С, его все же сначала необходимо добавить в список. Для этого надо вызвать команду «Еще - Изменить форму». Далее нам понадобиться в списке колонок найти нужную. Тут есть одна хитрость: разработчики типовых конфигураций почти всегда добавляют поле «Ссылка». Если встать на него, а затем нажать кнопку «Добавить поля», то мы увидим все возможные поля этого справочника. Находим поле «Телефон» и ставим у него галочку использования.
Рис.10 Добавить поля
Рис.11 Выгрузить данные
После этого базу данных клиентов с телефонами можно выгрузить в файл через штатную команду «Вывести список».
Обмен данными с 1С
Гарантируем обмен без ошибок между любыми системами 1С. Условия гарантии прописываем в договоре!
Перенос данных 1С
Переходите на новую программу 1С? Проведем бесплатный анализ и перенесем только необходимые данные
Здравствуйте. Эта публикация является частью учебного процесса, так что не судите строго.
Задача - создать обработку для загрузки данных в учебную конфигурацию из файла с расширением CSV.
Учебная конфигурация - это простая база ведения домашней бухгалтерии.
Данные - это файл выгрузки из аналогичной андроид программы.
Итак приступим к решению.
Шаг 1. Прочитать файл с данными
Создаем обработку. В форме обработки создаем:
- реквизит - строку "Имя Файла"
- и команду "Прочитать".
Для команды "Прочитать" сразу сделаем процедуры ПрочитатьНаКлиенте и ПрочитатьНаСервере и пока отложим их.
Нам необходимо, чтобы строка "Имя Файла" позволяла выбрать файл. Для этого создадим дополнительную процедуру
Как видно, начало процедуры вполне стандартное, однако в процессе работы над основной процедурой "Прочитать" я столкнулся с небольшой проблемой - файл был в не той кодировке и не хотел восприниматься алгоритмом, поэтому я добавил сюда строки:
А также пришлось добавить на форму соответствующую функцию
Теперь вернемся к процедуре "Прочитать", а именно к процедуре "ПрочитатьНаСервере" которую мы создали выше. Код процедуры состоит из таких частей:
Здесь мы читаем данные с файла и добавляем их в таблицу значений. Хочу сразу предупредить, что таблица значений не предусматривает одинаковое название колонок. У меня как раз были такие, поэтому я не стал долго мучатся с этим и просто переименовал их. Однако подозреваю, что если чуть подумать и поднапрячься, то можно доработать код и решить эту проблему.
Захотелось немного покуражиться и программно добавить таблицу значений на форму. Хотя у этого была и рациональная причина - в дальнейшем не нужно будет каждый раз переделывать код, если файл с данными будет с другим количеством и названием колонок.
Итак, мы прочитали данные, переходим к следующему шагу.
Шаг 2. Загрузить данные в непосредственно в базу
Создаем на форме реквизит "ЧленСемьи", тип "СправочникСсылка.Семья" - если не забыли, у меня учебная база ведения домашней бухгалтерии.
А также команду "ЗагрузитьВБазу" и к ней соответствующие процедуры "ЗагрузитьВБазуНаКлиенте" и "ЗагрузитьВБазуНаСервере".
Рассмотрим код процедуры "ЗагрузитьВБазуНаСервере()".
Он также состоит из нескольких частей. Первая часть кода:
Здесь мы делаем запрос на чтение прочитанных данных на форме. Так как мы уже прочитали данные, то можем присвоить колонкам названия, используемые нами в базе.
Вторая часть кода
Здесь мы уже непосредственно загружаем прочитанные данные в базу (конечно, второй запрос можно было не делать, но мне так показалось удобнее).
Рассмотрим некоторые строки кода детальнее.
Так как, по сути, мы читали текстовый файл, то строки с суммами пришлось обработать - убрать лишние пробелы и заменить "." на ","
Данные, которые мы загружаем, имеют простую структуру: суммы + доходы суммы - расходы. Поэтому простое условие >0 позволило нам разделить данные для прихода и расхода.
Программно создаем документ, куда будем заносить данные
Здесь пришлось повозиться - до меня не сразу дошло, что если программно создаешь документ, то и дату туда надо заносить в формате "год.месяц.день час:мин:сек" пришлось добавить функцию для даты
Сразу скажу - спешил, поэтому функцию нашел здесь же на форуме. Сейчас пишу и думаю, что можно было сделать то же самое, используя "СтрРазделить", но код был бы длиннее.
База, по сути, - пустая, и мне не хотелось вручную наполнять справочники, поэтому добавил функцию:
Так как справочников много, сделал два параметра "СправочникСтатья" и "СтатьяНаименование".
Для больших файлов нужно использовать Microsoft.Jet.OLEDB, а не построчное чтение средствами платформы. Понимает даты, числа и многострочные поля. Скорость: ~3000 строк в секунду.
На msdn можно найти описание грамматики и Schema.ini.
Из минусов - нужны права на запись файла схемы в каталог с csv-файлом.
Специальные предложения
(1) Время чтения через ADO: 4 040 мс, время чтения через ADO(без схемы): 3 862 мс, время чтения стандартными средствами: 1 802 мс
Но учтите, что стандартными средствами через СтрРазделить() поля не могут быть многострочными или содержать символ разделителя
(2) Файл Schema.ini file необходим, чтобы драйвер правильно интерпретировал содержимое текстовых файлов.
Schema.ini File (Text File Driver)
When the Text driver is used, the format of the text file is determined by using a schema information file. The schema information file is always named Schema.ini and always kept in the same directory as the text data source. The schema information file provides the IISAM with information about the general format of the file, the column name and data type information, and several other data characteristics. A Schema.ini file is always required for accessing fixed-length data. You should use a Schema.ini file when your text table contains DateTime, Currency, or Decimal data, or any time that you want more control over the handling of the data in the table.
Пример Schema.ini для apache_access.csv:
Как только файл Schema.ini сохранён в папке, Microsoft Text драйвер может работать с файлами.
В 1С 8.3 CSV формат используется для упрощенной выгрузки таблицы. В основном для синхронизации информации с сайтом, выгрузкой/загрузкой документов, прайс-листов. Это универсальный текстовый формат, служащий для типизации данных таблицы. В качестве разделителей используются спец. символы: Символы.Таб или , (запятая) или ; (точка с запятой). Как правило, в первой строчке обозначены названия колонки, во второй и далее - соответсвенно данные. Встроенного функционала для работы с CSV и 1С 8.3 не существует. Однако есть универсальные вспомогательные модели (функции) которые помогают с обработкой данных из CSV файла - например, РазложитьСтрокуВМассивПодстрок . Для работы с CSV файлами больших размеров (более 10Mb) рекомендуется использовать ADO - COMОбъект("ADODB.Connection") .
&НаКлиенте
Процедура ЧтениеФайлаCSV ()
ФайлCSV = Новый ТекстовыйДокумент ;
ФайлCSV . Прочитать ( "D:\import_21092020.csv" );
ЗагрузитьCSV ( ФайлCSV );
&НаСервере
Процедура ЗагрузитьCSV ( ФайлCSV )
ТЗ = Новый ТаблицаЗначений ;
// Важно! Чтобы в значениях НЕ встречался используемый разделитель
ИспользуемыйРазделитель = ";" ;
//*** Если есть шапка таблицы ***
ШапкаCSV = ФайлCSV . ПолучитьСтроку ( 1 );
// Чтение и разделение на отдельные значения в массив (по разделителю)
МассивCSV = СтрРазделить ( ШапкаCSV , ИспользуемыйРазделитель );
//***************************
Для Каждого СтрокаНом Из МассивCSV Цикл
// Удаляем пробелы т.к. в названии столбцов они не допускаются
ИмяБП = СтрЗаменить ( СтрокаНом , " " , "" );
ТЗ . Колонки . Добавить ( ИмяБП ,, СтрокаНом );
Для НомерСтроки = 2 По ФайлCSV . КоличествоСтрок () Цикл // Если без шапки, то начинаем с первой строчки
// Получаем строку по-порядку
СтрокаCSV = ФайлCSV . ПолучитьСтроку ( НомерСтроки );
// Разделяем с помощью выбранного разделителя каждую строку на столбцы
МассивCSV = СтрРазделить ( СтрокаCSV , ИспользуемыйРазделитель );
НоваяСтрочка = ТЗ . Добавить (); // Добавляем строку в ТЗ
Для НомСтолбца = 1 По МассивCSV . Количество () Цикл
ТекЗначениеCSV = МассивCSV [ НомСтолбца - 1 ];
ИмяКолонкиCSV = ТЗ . Колонки [ НомСтолбца - 1 ]. Имя ;
НоваяСтрочка [ ИмяКолонкиCSV ] = ТекЗначениеCSV ;
ИспользуемыйРазделитель = ";" ;
ФайлCSV = "D:\import_21092020.csv" ;
//*** Получаем данные из запроса ***
Запрос = Новый Запрос ;
Запрос . Текст =
"ВЫБРАТЬ
| ВнутреннийПрайс.Код КАК Код,
| ВнутреннийПрайс.Наименование КАК Наименование,
| ВнутреннийПрайс.ЗакупочнаяЦена КАК ЗакупочнаяЦена,
| ВнутреннийПрайс.РозничнаяЦена КАК РозничнаяЦена,
| ВнутреннийПрайс.ОптоваяЦена КАК ОптоваяЦена
|ИЗ
| Справочник.Цены КАК ВнутреннийПрайс" ;
РезультатЗапроса = Запрос . Выполнить (). Выгрузить ();
ТЗ = РезультатЗапроса ;
//**********************************
ТекстCSV = "" ; // Текст с учетом заголовков, разделителей и переноса строк
Для Каждого СтрокаТЗ Из ТЗ Цикл
Если ТекстCSV = "" Тогда
СтрокаКол = "" ;
КолонкиТЗ = ТЗ . Колонки ;
Для Каждого Колонка Из КолонкиТЗ Цикл
СтрокаКол = "" + СтрокаКол + Колонка . Имя + ИспользуемыйРазделитель ;
КонецЦикла;
ТекстCSV = СтрокаКол + Символы . ПС ;
ТекстCSV = ТекстCSV + СтрокаТЗ . Код + ИспользуемыйРазделитель + СтрокаТЗ . Наименование
+ ИспользуемыйРазделитель + СтрокаТЗ . ЗакупочнаяЦена + ИспользуемыйРазделитель + СтрокаТЗ . РозничнаяЦена
+ ИспользуемыйРазделитель + СтрокаТЗ . ОптоваяЦена + Символы . ПС ;
КодANSI = КодировкаТекста . ANSI ;
ТекстовыйФайлЗапись = Новый ЗаписьТекста ( ФайлCSV , КодANSI ); // Создание файла CSV
ТекстовыйФайлЗапись . ЗаписатьСтроку ( ТекстCSV ); // Запись информации в файл
ТекстовыйФайлЗапись . Закрыть (); // Обязательно закрываем, иначе зависает в процессе
Читайте также: