Загрузка и выгрузка через текстовый файл с помощью служебного объекта Текст
Текст модуля обработки выгрузки в текстовый файл справочника «Оборудование».
Метод ВыбратьФайл(<ТипДиалога>,<ИмяФайла>,<ИмяНачКаталога>,
<ЗаголовокОкна>,<Фильтр>,<Расширение>,<Таймаут>) открывает окно диалога выбора/сохранения файла.
Возвращает: 0 - если в окне диалога нажата кнопка 'Отмена', 1 - если нажата кнопка 'ОК'. <ТипДиалога> : 0 - диалог типа <открыть>, 1 - диалог типа <сохранить>;
<Имяфайла> - переменная, содержащая на входе строку с именем файла, а на выходе - имя выбранного файла;
<ИмяНачКаталога> - переменная, содержащая на входе строку с начальным каталогом, а на выходе -имя выбранного каталога; <ЗаголовокОкна> - строка с заголовком окна;
<фильтр> - строка с фильтром отбора файлов (например: 'Все файлы (*.*) [*.*'); <Расширение> - строка с расширением файла по умолчанию;
<Таймаут> - время ожидания отклика пользователя в секундах (необязателен).
Процедура Сформировать()
Перем ИмяФайла,ИмяКаталога;
Спр=СоздатьОбъект("Справочник.Оброрудование");
ТекстВыгрузки=Создать0бъект("Текст");
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент()=1 Цикл
Если Спр.ЭтоГруппа()=1 Тогда
ТекстВыгрузки.ДобавитьСтроку("Г"+
Спр.Наименование+"#"+Спр.ГрЦека+"#");
Иначе
ТекстВыгрузки.ДобавитьСтроку(""+Спр.Уровень()+Спр.Наименование+
"#"+Спр.Цена.Получить(РабочаяДата())+"#"+Спр.КоэффАморт+"#");
КонецЕсли;
КонецЦикла;
ФС.ВыбратьФайл(1,ИмяФайла,ИмяКаталога,"Файл выгрузки",
"Файлы выгрузки(*.txt) | *.txt","*.txt") ;
ТекстВыгрузки.Записать(ИмяКаталога+ИмяФайла); КонецПроцедуры
Процедура ПриОткрытии()
198______________________ 1С:Предприятие. Практика программирования на платформе V7
Сформировать();
// Чтобы интерактивная форма не открывалась СтатусВозврата(0);
Возврат;
КонецПроцедуры
Текст модуля обработки загрузки из текстового файла. Справочник «Загрузка» должен иметь реквизиты «ГрЦена», «Цена», «КоэффАморт» такие же, как в справочнике «Оборудование».
Обратите внимание на алгоритм загрузки элемента справочника в определенную группу (используется переменная модуля «Группа») и на алгоритм последовательного «обрезания» строк текстового файла.
Метод Лев(<Строка>,<Число>) возвращает строку, содержащую первые (самые левые) символы текстовой строки.
<Строка> - строка, содержащая извлекаемые символы;
<Число> - количество символов, которое должна вернуть функция.
Метод Прав(<Строка>,<Число>) возвращает строку, содержащую последние (самые правые) символы текстовой строки.
<Строка> - строка, содержащая извлекаемые символы;
<Число> - количество символов, которое должна вернуть функция.
Метод Сред(<Строка>,<Число1>,<Число2>) возвращает подстроку исходной строки, заданную номером позиции и числом символов. <Строка> - строка, содержащая извлекаемые символы;
<Число1> - определяет позицию первого символа, извлекаемого из строки (начиная с 1);
<Число2> - количество символов, которое должна вернуть функция (если опущен, то до конца строки).
Метод НаЙти(<Строка1>,<Строка2>) возвращает позицию первого вхождения в строку поиска заданной подстроки.
<Строка1> - строка в которой ищем (место поиска);
<Строка2> - строка которую ищем (шаблон поиска). Если не находит - возвращает число 0. Первая позиция имеет индекс 1.
Метод СтрДлина(<Строка>) возвращает длину строки.
<Строка> - строковое выражение.
Метод ИспользоватьДату(<Дата>,<УстСразу>) позволяет установить дату выборки периодических реквизитов справочника. Возвращает текущее значение используемой даты (на момент до исполнения метода). <Дата> - значение типа дата.
<УстСразу> - необязательный параметр. Число: если 1, то дата, переданная в качестве параметра, будет установлена уже в текущей выборке; если 0 - то дата, переданная в качестве параметра, будет установлена при следующем открытии выборки. Значение по умолчанию - 0.
Если к объекту применен метод ИспользоватьДату, то нельзя применять к этому же объекту метод Получить. Метод нельзя использовать через две точки.
Перем Группа; //__________________________________________________________________________
Функция Проверка(Пар)
Пров=Создать0бъект("Справочник.Загрузка");
Возврат Пров.НайтиПоНаименованию(пар,0,1);
КонецФункции //Проверка //___________________________________________________________________________
XII. Связь с другими базами данных_____________________________________________ 199
Функция Обрез(С,Ф)
С=Прав (С,СтрДлина (С)-Ф) ;
Ф=Найти(С,"#");
Возврат Лев(С,Ф-1) ;
КонецФункции //Обрез
Процедура Сформировать()
Перем ИмяФайла,ИмяКаталога; спр=СоздатьОбъект("Справочник.Загрузка");
// Назначить дату записи периодических реквизитов
Спр.ИспользоватьДату(РабочаяДата());
ТекстЗагрузки=Создать0бъект("Текст");
ФС.ВыбратьФайл(0,ИмяФайла,ИмяКаталога,"Файл выгрузки",
"Файлы выгрузки(*.txt) | *.txt","*.txt");
ТекстЗагрузки.Открыть(ИмяКаталога+ИмяФайла);
Для н=1 по ТекстЗагрузки.КоличествоСтрок() Цикл
Стр= ТекстЗагрузки.ПолучитьСтроку(Н);
Если Лев(Стр,1)="Г" Тогда
Спр.НоваяГруппа();
Фл=Найти(Стр,"#");
Спр.Наименование=Сред(Стр,2,Фл-2);
Стр=Прав(Стр,СтрДлина(Стр)-Фл);
Фл=Найти(Стр,"#");
Спр.ГрЦена=0брез(Стр,Фл);
Если Проверка(Спр.Наименование)=0 Тогда
Спр.Записать();
КонецЕсли;
Группа=Спр.ТекущийЭлемент();
Иначе
Если Число(Лев(Стр,1))>1 Тогда
Спр. ИспользоватьРодителя (Группа);
Иначе
Спр.ИспользоватьРодителя
(ПолучитьПустоеЗначение("Справочник.Загрузка"));
200______________________ 1С:Предприятие. Практика программирования на платформе V7
КонецЕсли;
Спр.Новый();
Фл =Найти(Стр,"#");
Спр.Наименование=Сред(Стр,2,Фл-2);
Стр=Прав(Стр,СтрДлина(Стр)-Фл);
Фл=Найти(Стр,"#");
Спр.Цена=Число(Обрез(Стр,Фл));
Спр.КоэффАморт=Число(Обрез(Стр.Фл));
Если Проверка(Спр.Наименование)=0 Тогда
Спр.Записать();
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура ПриОткрытии()
Сформировать();
СтатусВозврата(0);
Возврат;
КонецПроцедуры