Функции сохранения таблицы значений в файл и чтения из файла В данном примере хочу привести несколько универсальных функций по выгрузке таблицы значений в файл и дальнейшего чтения из файла:
П орядок программных действий при выгрузке в файл выглядит так:
Подготавливаем таблицу значений (выгружаем из табличной части, выбираем колонки); Конвертируем таблицу значений в табличный документ; Сохраняем табличный документ в MXL.
При загрузке таблицы порядок действий такой:
Читаем из файла табличный документ; Конвертируем табличный документ в таблицу значений; Используем эту таблицу значений в своих целях (загружаем в табличную часть).
Соответственно файл для хранения данных таблицы имеет расширение *.mxl.
Основные функции для реализации поставленной задачи следующие:
ПреобразоватьТДвТЗ – Функция преобразования табличного документа в таблицу значений.
ПреобразоватьТЗвТД – Функция обратного преобразования таблицы значений в табличный документ.
ПрочитатьТЗИзMXL – Читает из файла данные, определяет колонки таблицы и преобразует эти данные в таблицу значений.
ЗаписатьТЗВMXL – Преобразует таблицу значений в табличный документ и записывает его в файл.
Код 1C v 8.3
Функция ПреобразоватьТДвТЗ(ТабДок, СтруктураКолонок, Знач НачалоСтрока = Неопределено, Знач НачалоСтолбец = Неопределено, Знач КонецСтрока = Неопределено, Знач КонецСтолбец = Неопределено) Экспорт
Если НачалоСтрока = Неопределено И НачалоСтолбец = Неопределено Тогда
НачалоСтрока = 1 ;
НачалоСтолбец = 1 ;
КонецЕсли ;
Если НачалоСтрока = Неопределено Тогда
НачалоСтрока = 1 ;
Пока НЕ ТабДок. Область( НачалоСтрока, НачалоСтолбец) . СодержитЗначение
И НачалоСтрока < ТабДок. ВысотаТаблицы
Цикл
НачалоСтрока = НачалоСтрока + 1 ;
КонецЦикла ;
ИначеЕсли НачалоСтолбец = Неопределено Тогда
НачалоСтолбец = 1 ;
Пока НЕ ТабДок. Область( НачалоСтрока, НачалоСтолбец) . СодержитЗначение
И НачалоСтолбец < ТабДок. ШиринаТаблицы
Цикл
НачалоСтолбец = НачалоСтолбец + 1 ;
КонецЦикла ;
КонецЕсли ;
КонецСтрока = ? ( КонецСтрока = Неопределено , ТабДок. ВысотаТаблицы, КонецСтрока) ;
КонецСтолбец = ? ( КонецСтолбец = Неопределено , ТабДок. ШиринаТаблицы, КонецСтолбец) ;
ЭтоТаблица = ( ТипЗнч( СтруктураКолонок) = Тип( "ТаблицаЗначений" ) ) ;
ТабЗначений = ПолучитьТаблицуВывода( СтруктураКолонок) ;
Для ИндексСтроки = НачалоСтрока По КонецСтрока Цикл
СтрокаТЗ = ТабЗначений. Добавить( ) ;
ИндексКолонки = НачалоСтолбец;
Для Каждого Колонка Из СтруктураКолонок Цикл
НаименованиеКолонки = ? ( ЭтоТаблица, Колонка. Наименование, Колонка. Ключ) ;
пИндексКолонки = ? ( ЭтоТаблица, Колонка. СтолбецОтчёт, ИндексКолонки) ;
Если ТабДок. Область( ИндексСтроки, пИндексКолонки) . СодержитЗначение Тогда
СтрокаТЗ[НаименованиеКолонки] = ТабДок. Область( ИндексСтроки, пИндексКолонки) . Значение;
Иначе
СтрокаТЗ[НаименованиеКолонки] = ТабДок. Область( ИндексСтроки, пИндексКолонки) . Текст;
КонецЕсли ;
ИндексКолонки = ИндексКолонки + 1 ;
КонецЦикла ;
КонецЦикла ;
Возврат ТабЗначений;
КонецФункции ;
Функция ПреобразоватьТЗвТД(ТабЗначений, ТабДок = Неопределено, Знач НачалоСтрока = Неопределено, Знач НачалоСтолбец = Неопределено, ВыводитьЗаголовки = Ложь) Экспорт
Если ТабДок = Неопределено Тогда
ТабДок = Новый ТабличныйДокумент;
КонецЕсли ;
НачалоСтрока = ? ( НачалоСтрока = Неопределено , 1 , НачалоСтрока) ;
НачалоСтолбец = ? ( НачалоСтолбец = Неопределено , 1 , НачалоСтолбец) ;
ИндексСтроки = НачалоСтрока;
Если ВыводитьЗаголовки Тогда
ИндексКолонки = НачалоСтолбец;
Для Каждого Колонка Из ТабЗначений. Колонки Цикл
ТабДок. Область( ИндексСтроки, ИндексКолонки) . Текст = ? ( ПустаяСтрока( Колонка. Заголовок) , Колонка. Имя, Колонка. Заголовок) ;
ИндексКолонки = ИндексКолонки + 1 ;
КонецЦикла ;
ИндексСтроки = ИндексСтроки + 1 ;
КонецЕсли ;
Для Каждого Элемент Из ТабЗначений Цикл
ИндексКолонки = НачалоСтолбец;
Для Каждого Колонка Из ТабЗначений. Колонки Цикл
ТабДок. Область( ИндексСтроки, ИндексКолонки) . СодержитЗначение = Истина ;
ТабДок. Область( ИндексСтроки, ИндексКолонки) . ТипЗначения = Новый ОписаниеТипов( Колонка. ТипЗначения) ;
ТабДок. Область( ИндексСтроки, ИндексКолонки) . Значение = Элемент[Колонка. Имя];
ИндексКолонки = ИндексКолонки + 1 ;
КонецЦикла ;
ИндексСтроки = ИндексСтроки + 1 ;
КонецЦикла ;
Возврат ТабДок;
КонецФункции ;
Функция ПрочитатьТЗИзMXL(ИмяФайла, СтруктураКолонок = Неопределено, ЕстьЗаголовок = Истина) Экспорт
ТабДок = Новый ТабличныйДокумент;
ТабДок. Прочитать( ИмяФайла) ;
Если СтруктураКолонок = Неопределено И ЕстьЗаголовок Тогда
СтруктураКолонок = Новый Структура;
Для ИндексКолонки = 1 По ТабДок. ШиринаТаблицы Цикл
Обл1 = ТабДок. Область( 1 , ИндексКолонки) ;
Обл2 = ТабДок. Область( 2 , ИндексКолонки) ;
ИмяКолонки = СокрЛП( Обл1 . Текст) ;
ИмяКолонки = ? ( Найти( ИмяКолонки, " " ) > 0 , СтрЗаменить( ТРег( ИмяКолонки) , " " , "" ) , ИмяКолонки) ;
СтруктураКолонок. Вставить( ИмяКолонки, ? ( Обл2 . СодержитЗначение, Обл2 . ТипЗначения, Новый ОписаниеТипов) ) ;
КонецЦикла ;
ИначеЕсли СтруктураКолонок = Неопределено И НЕ ЕстьЗаголовок Тогда
СтруктураКолонок = Новый Структура;
Для ИндексКолонки = 1 По ТабДок. ШиринаТаблицы Цикл
Обл2 = ТабДок. Область( 1 , ИндексКолонки) ;
ИмяКолонки = "К" + Формат( ИндексКолонки, "ЧДЦ=0; ЧН=0; ЧГ=0" ) ;
СтруктураКолонок. Вставить( ИмяКолонки, ? ( Обл2 . СодержитЗначение, Обл2 . ТипЗначения, Новый ОписаниеТипов) ) ;
КонецЦикла ;
КонецЕсли ;
Таблица = ПреобразоватьТДвТЗ( ТабДок, СтруктураКолонок, ? ( ЕстьЗаголовок, 2 , 1 ) , 1 ) ;
Возврат Таблица;
КонецФункции ;
Процедура ЗаписатьТЗВMXL(ИмяФайла, ТабЗначений, ЕстьЗаголовок = Истина) Экспорт
ТабДок = ПреобразоватьТЗвТД( ТабЗначений, Неопределено , 1 , 1 , ЕстьЗаголовок) ;
ТабДок. Записать( ИмяФайла, ТипФайлаТабличногоДокумента. MXL) ;
КонецПроцедуры ;
Еще небольшой набор функций для вывода таблицы значений в табличный документ. После формирования табличного документа, - сохраняем его в файл mxl.
Табличный документ можно сохранить a файлы следующих типов:
ANSITXT - Текстовый документ DOCX - документ MS Word HTML HTML3 HTML4 HTML5 MXL MXL7 ODS - Файл Open Office PDF - файл Acrobat Readr TXT - Текстовый документ XLS - файл Excel XLS95 - файл Excel95 XLS97 - файл Excel97 XLSX - файл Excel2010
Код 1C v 8.3
Функция ЗагрузитьТЗизФайла(ИмяФайла)
Путь = КаталогВременныхФайлов( ) + ИмяФайла;
Текст = Новый ЧтениеТекста( Путь, КодировкаТекста. UTF8) ;
стрТЗ = Текст. Прочитать( ) ;
Текст. Закрыть( ) ;
ТЗ = ЗначениеИзСтрокиВнутр( стрТЗ) ;
Возврат ТЗ;
КонецФункции
Функция ЗаписьТЗ2ТабДок(записьТЗ,НомерСтроки,ТабличныйДокумент)
НомерКолонки = 1 ;
Символ160 = Символ( 160 ) ;
Для каждого полеТЗ из ЗаписьТЗ цикл
типПоляТЗ = ТипЗнч( полеТЗ) ;
если типПоляТЗ = Тип( "Число" ) тогда
полеТЗ= Строка( полеТЗ) ;
полеТЗ= СтрЗаменить( полеТЗ, Символ160 , "" ) ;
полеТЗ= СтрЗаменить( полеТЗ, "," , "." ) ;
иначеесли типПоляТЗ = Тип( "Строка" ) тогда
иначе
полеТЗ = строка( полеТЗ) ;
КонецЕсли ;
имяОбласти = "R" + номерСтроки + "C" + НомерКолонки;
имяОбласти = СтрЗаменить( имяОбласти, Символ( 160 ) , "" ) ;
Ячейка = ТабличныйДокумент. Область( имяОбласти) ;
Ячейка. Текст = полеТЗ;
НомерКолонки = НомерКолонки + 1 ;
КонецЦикла ;
КонецФункции
Функция НаимКолонок2Mxl(ТаблицаЗначений,ТабличныйДокумент)
номерСтроки= 1 ;
номКолонки= 1 ;
ТабличныйДокумент = новый ТабличныйДокумент;
Для НомКол= 0 по ТаблицаЗначений. Колонки. Количество( ) - 1 Цикл
имяКолонки= ТаблицаЗначений. Колонки[НомКол]. Имя;
имяОбласти = "R" + номерСтроки + "C" + номКолонки;
имяОбласти = СтрЗаменить( имяОбласти, Символ( 160 ) , "" ) ;
Ячейка = ТабличныйДокумент. Область( имяОбласти) ;
Ячейка. Текст = имяКолонки;
ЖирныйШрифт = ? ( ЖирныйШрифт = Неопределено , Новый Шрифт( Ячейка. Шрифт, , , Истина ) , ЖирныйШрифт) ;
Ячейка. Шрифт = ЖирныйШрифт;
номКолонки = номКолонки + 1 ;
КонецЦикла ;
КонецФункции
Функция Таблица2Mxl(ТаблицаЗначений,ТабличныйДокумент)
НомСтр= 1 ;
Для каждого записьТЗ из ТаблицаЗначений Цикл
НомСтр = НомСтр + 1 ;
ЗаписьТЗ2 ТабДок( записьТЗ, НомСтр, ТабличныйДокумент) ;
КонецЦикла ;
КонецФункции
Функция ТаблицаЗначений2Mxl(ТаблицаЗначений,ФайлMxl)
ТабличныйДокумент = новый ТабличныйДокумент;
НаимКолонок2 Mxl( ТаблицаЗначений, ТабличныйДокумент) ;
Таблица2 Mxl( ТаблицаЗначений, ТабличныйДокумент) ;
ТабличныйДокумент. Записать( ФайлMxl, ТипФайлаТабличногоДокумента. MXL) ;
ТабличныйДокумент. Показать( ФайлMxl, ФайлMxl) ;
Возврат 0 ;
КонецФункции
Функция Тест_ВыгрузитьТЗвMxl() ;
файл_мТЗИсходныеДанные = "мТЗИсходныеДанные.dat" ;
ТЗ = ЗагрузитьТЗизФайла( файл_мТЗИсходныеДанные) ;
ФайлMxl = КаталогВременныхФайлов( ) + СтрЗаменить( файл_мТЗИсходныеДанные, ".dat" , ".mxl" ) ;
ТаблицаЗначений2 Mxl( ТЗ, ФайлMxl) ;
КонецФункции
Тест_ВыгрузитьТЗвMxl( ) ;
Пример выгруженной таблицы значений в файл:
Категория:
Работа с Таблицей Значений Как изменить кодировку файла из UTF-8 в ANSI Код 1C v 8.х
Функция ПерекодироватьФайлUTF8_ANSI(каталогФайла, файлUTF8)
исходныйФайл = каталогФайла + "\" + файлUTF8;
файлЧтение = Новый ЧтениеТекста( исходныйФайл, КодировкаТекста. UTF8) ;
txt= файлЧтение. Прочитать( ) ;
файлЧтение. Закрыть( ) ;
ФайлANSI = СтрЗаменить( файлUTF8, "." , "_ansi." ) ;
результатФайл = каталогФайла + "\" + ФайлANSI;
файлЗапись = Новый ЗаписьТекста( результатФайл, КодировкаТекста. ANSI) ;
файлЗапись. Записать( txt) ;
файлЗапись. Закрыть( ) ;
Возврат ФайлANSI;
КонецФункции
каталогCSV = "d:\csv" ;
файлCSV = "export_file_.csv" ;
файлCSV_ansi = ПерекодироватьФайлUTF8_ANSI( каталогCSV, файлCSV) ;
Категория:
JSON, XML, TXT, CSV, DBF Выбор оптимального алгоритма для разбора строки в массив Столкнулся с проблемой: ПолучитьСтрокуПоНомеру() медленно отрабатывает на входных данных >100 000 строк. Как сделать бытсрее?
Код 1C v 8.х
ВремяНачала = ТекущаяДата( ) ;
Сообщить( "Обработка начата: " + ВремяНачала) ;
ТЗ = Новый ТаблицаЗначений;
Текст = ПолучитьМакет( "Макет" ) . ПолучитьТекст( ) ;
RE = New COMObject( "VBScript.RegExp" ) ;
RE. Global = Истина ;
RE. IgnoreCase = Истина ;
RE. Multiline = Истина ;
RE. Pattern = "^.*$" ;
Строки = RE. Execute( Текст) ;
RE. Pattern = "([^\|]+?|\|)(?=\|)" ;
ДобавитьКолонки = Истина ;
Для Каждого СтрокаТекста из Строки Цикл
СтрокаДляРазбора = СтрокаТекста. Value;
Результат = RE. Execute( СтрокаДляРазбора) ;
Если ДобавитьКолонки Тогда
НомерКолонки = 0 ;
Для Каждого Совпадение Из Результат Цикл
НомерКолонки = НомерКолонки + 1 ;
ТЗ. Колонки. Добавить( "Колонка" + НомерКолонки) ;
КонецЦикла ;
ДобавитьКолонки = Ложь ;
КонецЕсли ;
НоваяСтрока = ТЗ. Добавить( ) ;
НомерКолонки = 0 ;
Для Каждого Совпадение Из Результат Цикл
Значение = Совпадение. Value;
НоваяСтрока[НомерКолонки] = ? ( Значение = "|" , "" , Значение) ;
НомерКолонки = НомерКолонки + 1 ;
КонецЦикла ;
КонецЦикла ;
ВремяОкончания = ТекущаяДата( ) ;
Сообщить( "Обработка завершена: " + ВремяОкончания + ", время обработки: " + Формат( '00010101 ' + ( ВремяОкончания- ВремяНачала) , "ДФ=мм:сс" ) ) ;
Сообщить( "Количество строк: " + ТЗ. Количество( ) ) ;
Код 1C v 8.х
Функция InitRegExp(Разделитель = "|" )
RegExp = Новый COMОбъект( "VBScript.RegExp" ) ;
RegExp. MultiLine = Истина ;
RegExp. Global = Истина ;
RegExp. IgnoreCase = Ложь ;
RegExp. Pattern = "[^\" + Разделитель + "]+" ;
Возврат RegExp;
КонецФункции
Функция РазложитьСтрокуВМассив(RegExp, Строка)
Matches = RegExp. Execute ( Строка) ;
Массив = Новый Массив;
Для Сч = 0 По Matches. Count - 1 Цикл
Массив. Добавить( Matches. Item( Сч) . Value) ;
КонецЦикла ;
Возврат Массив;
КонецФункции
Процедура КнопкаВыполнитьНажатие(Кнопка)
Текст = Новый ЧтениеТекста( "C:\aktivy.txt" , КодировкаТекста. ANSI) ;
RegExp = InitRegExp( ) ;
Стр = Текст. ПрочитатьСтроку( ) ;
Пока Стр < > Неопределено Цикл
масс = РазложитьСтрокуВМассив( RegExp, Стр) ;
Стр = Текст. ПрочитатьСтроку( ) ;
КонецЦикла ;
RegExp = Неопределено ;
КонецПроцедуры
Категория:
Регулярные выражения Как Запустить, Выполнить код из внешнего файла? В файле
модуль.txt - содержится некий код и его нужно выполнить в обработке:
Код 1C v 8.х Документ = Новый Файл( "G:\модуль.txt" ) ;
Если Документ. Существует( ) Тогда
ФайлСТекстом = "G:\модуль.txt" ;
Док = Новый ЧтениеТекста( ФайлСТекстом) ;
ВыбФайл = Док. Прочитать( ) ;
Выполнить( ВыбФайл) ;
Иначе
Предупреждение( "Файла с модулем НЕТ !" ) ;
КонецЕсли ;
Категория:
Встроенные Функции Открыть диалог множественного выбора файлов и чтение выбранных файлов Код 1C v 8.х Диалог = Новый ДиалогВыбораФайла( РежимДиалогаВыбораФайла. Открытие) ;
Диалог. Заголовок = "Выберите файл" ;
Диалог. ПолноеИмяФайла = "" ;
Фильтр = "Все файлы (*.*)|*.*" ;
Диалог. Фильтр = Фильтр;
Диалог. МножественныйВыбор = Истина ;
Диалог. Каталог = "F:\" ;
Если Диалог. Выбрать( ) Тогда
Для Каждого ТекФайл из Диалог. ВыбранныеФайлы Цикл
Текст = Новый ЧтениеТекста( ТекФайл) ;
Стр = Текст. ПрочитатьСтроку( ) ;
Пока Стр < > Неопределено Цикл
Сообщить( Стр) ;
Стр = Текст. ПрочитатьСтроку( ) ;
КонецЦикла ;
КонецЦикла ;
КонецЕсли ;
Категория:
Работа с Файлами и Каталогами Выгрузка / Загрузка данных посредством текстовых (TXT) файлов Для работы с текстовыми документами существуют три типа данных –
ТекстовыйДокумент, ЗаписьТекста и ЧтениеТекста . Разница двух подходов состоит в способе загрузки документа:
ТекстовыйДокумент загружает файл целиком и далее построчно обрабатывает его;
ЗаписьТекста и ЧтениеТекста загружают файл построчно.
ПРИМЕР 1:
Запись данных справочника в текстовый файл:
Код 1C v 8.х Текст = Новый ТекстовыйДокумент;
Выборка = Справочники. Клиенты. Выбрать( ) ;
Пока Выборка. Следующий( ) Цикл
Текст. ДобавитьСтроку( "" + Выборка. Код+ ";" + Выборка. Наименование) ;
КонецЦикла ;
Текст. Записать( "C://1.txt" ) ;
С помощью типа ЗаписьТекста этот код будет таким:
Код 1C v 8.х
Текст = Новый ЗаписьТекста( "C://1.txt" , КодировкаТекста. UTF8) ;
Выборка = Справочники. Клиенты. Выбрать( ) ;
Пока Выборка. Следующий( ) Цикл
Текст. ЗаписатьСтроку( "" + Выборка. Код+ ";" + Выборка. Наименование) ;
КонецЦикла ;
Текст. Закрыть( ) ;
Чтение данных из текстового файла в справочник:
Код 1C v 8.х Текст = Новый ТекстовыйДокумент;
Текст. Прочитать( "C://1.txt" ) ;
Для НомерСтроки= 1 по Текст. КоличествоСтрок( ) Цикл
Стр = Текст. ПолучитьСтроку( НомерСтроки) ;
Позиция = Найти ( Стр, ‘; ’) ;
Спр= Справочники. Клиенты. СоздатьЭлемент( ) ;
Спр. Код = Сред( Стр, 1 , Позиция- 1 ) ;
Спр. Наименование = Сред ( Стр, Позиция+ 1 ) ;
Спр. Записать( ) ;
КонецЦикла ;
С помощью типа ЗаписьТекста этот код будет таким:
Код 1C v 8.х
Текст = Новый ЧтениеТекста( "C://1.txt" , КодировкаТекста. UTF8) ;
Стр= "" ;
Пока Стр< > Неопределено Цикл
Стр = Текст. ПрочитатьСтроку( ) ;
Позиция = Найти ( Стр, ‘; ’) ;
Спр= Справочники. Клиенты. СоздатьЭлемент( ) ;
Спр. Код = Число( Сред( Стр, 1 , Позиция- 1 ) ) ;
Спр. Наименование = Сред ( Стр, Позиция+ 1 ) ;
Спр. Записать( ) ;
КонецЦикла ;
ПРИМЕР 2:
В строке текста значения реквизитов справочника разделяются символом кавычка. Его можно получить, например, используя функцию Символ(34).
В случае если символ разделителя (в данном случае – кавычка) может встречаться в выгружаемых данных,
перед помещением в строку меняем этот символ на заранее определенную комбинацию символов.
В нашем случае это %квч%.
Код 1C v 8.х
Текст = Новый ТекстовыйДокумент;
Выборка = Справочники. Номенклатура. Выбрать( ) ;
Пока Выборка. Следующий( ) Цикл
Стр = СтрЗаменить( Выборка. Наименование, Символ( 34 ) , "%квч%" ) ;
Код = Строка( Выборка. Код) + Символ( 34 ) ;
Текст. ДобавитьСтроку( Код + Стр) ;
КонецЦикла ;
Текст. Записать( "c:\temp\text.txt" ) ;
Текст = Новый ТекстовыйДокумент;
Текст. Прочитать( "c:\temp\text.txt" ) ;
Для НомерСтроки = 1 По Текст. КоличествоСтрок( ) Цикл
Стр = Текст. ПолучитьСтроку( НомерСтроки) ;
Позиция = Найти( Стр, Символ( 34 ) ) ;
Код = Сред( Стр, 1 , Позиция- 1 ) ;
прНаименование = Сред( Стр, Позиция + 1 ) ;
Наименование = СтрЗаменить( прНаименование, "%квч%" , Символ( 34 ) ) ;
Сообщить( Код + "–" + Наименование) ;
КонецЦикла ;
"В предыдущем примере файл ЗАГРУЖАЛСЯ ПОЛНОСТЬЮ, а в следующем примере ЗАГРУЖАЕТСЯ ПОСТРОЧНО."
"Это позволяет при работе с файлами больших размеров значительно уменьшить время выполнения задачи."
Путь = "c:\temp\text.txt" ;
Текст = Новый ЗаписьТекста( Путь, КодировкаТекста. UTF8) ;
Выборка = Справочники. Номенклатура. Выбрать( ) ;
Пока Выборка. Следующий( ) Цикл
Текст. ЗаписатьСтроку( Выборка. Наименование) ;
КонецЦикла ;
Текст. Закрыть( ) ;
Путь = "c:\temp\text.txt" ;
Текст = Новый ЧтениеТекста( Путь, КодировкаТекста. UTF8) ;
Стр = Текст. ПрочитатьСтроку( ) ;
Пока Стр < > Неопределено Цикл
Стр = Текст. ПрочитатьСтроку( ) ;
Сообщить( Стр) ;
КонецЦикла ;
Код 1C v 7.x
Данные = СоздатьОбъект( "Текст" ) ;
Данные. КодоваяСтраница( 0 ) ;
НачВремя = _GetPerformanceCounter( ) ;
ТЗ. ВыбратьСтроки( ) ;
Пока ТЗ. ПолучитьСтроку( ) = 1 Цикл
Стр = "" + ТЗ. ЭтоГруппа+ ";" + ТЗ. Уровень+ ";" + ТЗ. КодРодителя+ ";" + ТЗ. Код+ ";" + ТЗ. Наименование;
Данные. ДобавитьСтроку( Стр) ;
КонецЦикла ;
Данные. Записать( "c:\export.txt" ) ;
КонВремя = _GetPerformanceCounter( ) ;
Длительность = Окр( ( КонВремя- НачВремя) / 1000 , 3 ) ;
Сообщить( "Время выгрузки в TXT файл: " + Длительность+ " с" ) ;
НачВремя = _GetPerformanceCounter( ) ;
Данные = СоздатьОбъект( "Текст" ) ;
Данные. КодоваяСтраница( 0 ) ;
Данные. Открыть( "c:\export.txt" ) ;
КолСтр = Данные. КоличествоСтрок( ) ;
Для н= 1 по КолСтр Цикл
ТекСтр = Данные. ПолучитьСтроку( н) ;
Состояние( "В файле прочитано строк " + н+ " из " + КолСтр) ;
КонецЦикла ;
КонВремя = _GetPerformanceCounter( ) ;
Длительность = Окр( ( КонВремя- НачВремя) / 1000 , 3 ) ;
Сообщить( "Время чтения TXT файла: " + Длительность+ " с" ) ;
Категория:
JSON, XML, TXT, CSV, DBF Формирование списка зарегистрированных информационных баз системы 1Cv8 В отличие от 1Cv7 (
где список зарегистрированных информационных баз хранится в системном реестре (Щелкните для просмотра примеров) ):
в 1C v 8 :
список зарегистрированных информационных баз хранится в текстовом файле v8ib.lst (кодировка UTF-8)
в каталоге \Application Data\1C\1Cv8 текущего пользователя на локальном компьютере (где запускается программа 1С:Предприятие v 8).
т.е. C:\Documents and Settings\%CurrentUser%\Application Data\1C\1Cv8\v8ib.lst
в 1C v 8.1 :
список зарегистрированных информационных баз хранится в текстовом файле ibases.v8i (кодировка UTF-8)
в каталоге \Application Data\1C\1Cv81 текущего пользователя на локальном компьютере (где запускается программа 1С:Предприятие v 8).
т.е. C:\Documents and Settings\%CurrentUser%\Application Data\1C\1Cv81\ibases.v8i
Если открыть этот файл в NotePad.exe, то видно, что он имеет структуру, схожую со стандартным INI-файлом :
[База Разработки]
Connect=File="F:\1C\1Cv8\DBRaz";
ID=1cd97bfa-4e57-4a23-9ee1-073a0a28e01c
OrderInList=16384
Folder=/
OrderInTree=16384
[Enterprise]
Connect=File="F:\1C\1Cv8\1cv8.db\Enterprise";
ID=647840fa-65e0-44e8-ad40-12476f178b92
OrderInList=20480
Folder=/
OrderInTree=32768
в 1C v 8.2 :
список зарегистрированных информационных баз хранится в текстовом файле ibases.v8i (кодировка UTF-8)
в каталоге \Application Data\1C\1Cv8 текущего пользователя на локальном компьютере (где запускается программа 1С:Предприятие v 8).
т.е. C:\Documents and Settings\%CurrentUser%\Application Data\1C\1CEStart\ibases.v8i
Если открыть этот файл в NotePad.exe, то там:
[1C:Документооборот 8 (демо)]
Connect=File="C:\Documents and Settings\E.S.Migachev\Мои документы\1C\DemoDoc8";
ID=b3b46c21-bd2a-481e-b100-e6cbdcba3e3d
OrderInList=16384
Folder=/
OrderInTree=256
External=0
ClientConnectionSpeed=Normal
App=Auto
WA=1
Version=8.2
Структура хранения информации по каждой информационной базе :
<Наименование информационной базы>
<ID>
<Connect>
<Folder>
<OrderInList>
<OrderInTree>
Где:
Connect - строка соединения с информационной базой,
ID - внутренний идентификатор информационной базы,
OrderInList - порядок в списке при представлении списком
Folder - наименование ветви в дереве информационных баз,
OrderInTree - порядок в ветви при представлении деревом.
В 1С 8.1 еще добавили External - но он всегда равен 0, для чего он пока не известно.
В 1С 8.2 добавлено:
ClientConnectionSpeed=Normal - скорость соединения
App=Auto - тип соединения - толстый, тонкий клиент.
WA=1
Version=8.2
Вот код получения получения списка баз из файла 1С 8.0 8.1 8.2
Код 1C v 8.х
Функция ПолучимСписокБаз1СИзФайла(Версия)
App = Новый COMОбъект( "Shell.Application" ) ;
AppData= App. Namespace( 26 ) . Self. Path;
ТЗБаз= Новый ТаблицаЗначений;
ТЗБаз. Колонки. Добавить( "Название" , , "Название" , 25 ) ;
ТЗБаз. Колонки. Добавить( "СтрокаСоединения" , , "СтрокаСоединения" , 30 ) ;
Если Версия = "v80" Тогда
СписокБаз= AppData+ "\1C\1Cv8\v8ib.lst" ;
ИначеЕсли Версия = "v81" Тогда
СписокБаз= AppData+ "\1C\1Cv81\ibases.v8i" ;
ИначеЕсли Версия = "v82" Тогда
СписокБаз= AppData+ "\1C\1CEStart\ibases.v8i" ;
КонецЕсли ;
Сообщить( "Файл со списком баз: " + Строка( СписокБаз) ) ;
ФайлБаз= Новый ЧтениеТекста;
ФайлБаз. Открыть( СписокБаз, КодировкаТекста. UTF8) ;
Стр = ФайлБаз. ПрочитатьСтроку( ) ;
Пока НЕ Стр = Неопределено Цикл
Если СтрДлина( СокрЛП( Стр) ) Тогда
ТекущаяСтрока = СокрЛП( Стр) ;
Если Лев( ТекущаяСтрока, 1 ) = "[" Тогда
НоваяСтрока = ТЗБаз. Добавить( ) ;
НоваяСтрока. Название = ТекущаяСтрока;
КонецЕсли ;
Если Лев( ТекущаяСтрока, 8 ) = "Connect=" Тогда
Попытка
НоваяСтрока. СтрокаСоединения = Прав( ТекущаяСтрока, СтрДлина( ТекущаяСтрока) - 8 ) ;
Исключение
НоваяСтрока. СтрокаСоединения = "" ;
КонецПопытки ;
КонецЕсли ;
КонецЕсли ;
Стр = ФайлБаз. ПрочитатьСтроку( ) ;
КонецЦикла ;
ПустыеСтроки = ТЗБаз. НайтиСтроки( Новый Структура( "СтрокаСоединения" , ) ) ;
Для каждого СтрокаТаблицы Из ПустыеСтроки Цикл
ТЗБаз. Удалить( СтрокаТаблицы)
КонецЦикла ;
Возврат ТЗБаз;
КонецФункции
Процедура ПолучимИзФайла(Кнопка)
ТЗБаз = ПолучимСписокБаз1 СИзФайла( Кнопка. Имя) ;
Список= ТЗБаз;
ЭлементыФормы. Список. СоздатьКолонки( ) ;
КонецПроцедуры
Пример обработки для 1С 8.1 "Получения списка баз 1С 8.0 8.1 8.2 E_Migachev"
Скачивать файлы может только зарегистрированный пользователь!
Обработка для 1С 8.1 "Чтение списка информационных баз 1С 8.1"(формирует дерево баз) Fisca
Скачивать файлы может только зарегистрированный пользователь! Категория:
Полезные, Универсальные Функции