1С Предприятие. Практика программирования на платформе v7

Загрузка и выгрузка через текстовый файл с помощью служебного объекта Текст


Текст модуля обработки выгрузки в текстовый файл справочника «Оборудование».

Метод ВыбратьФайл(<ТипДиалога>,<ИмяФайла>,<ИмяНачКаталога>,

<ЗаголовокОкна>,<Фильтр>,<Расширение>,<Таймаут>) открывает окно диалога выбора/сохранения файла.

Возвращает: 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);

Возврат;

КонецПроцедуры


Содержание раздела