Назад | Начало урока | Вперед
Содержание

Глава 2

Ниже приведена программа, которая построчно считывает из текстового файла,
разбивает строку на слова и инициирует этими данными справочник.

Все процедуры и функции, указанные в этом файле действуют.
В 1с они вызываются тремя кнопками: Вставить, Вставить01, Удалить.

//*******************************************
Функция НеКонецПредложения(Буфер)

Если 1=ПустаяСтрока(Буфер) Тогда
Возврат 0;
Иначе
Возврат 1;
КонецЕсли;
КонецФункции

//-------------------------------------------
Функция ВзятьСлово(Буфер)

Буфер=СокрЛ(Буфер);
Пробел=Найти(Буфер," ");
Если 0=Пробел Тогда
Слово=Буфер; Буфер="";
return Слово;
Иначе
Слово=Лев(Буфер,Пробел-1);
Буфер=Сред(Буфер,Пробел+1);
return Слово;
КонецЕсли;
КонецФункции

//-----------------------
Процедура Вставить()

Перем Буфер;
НовСотр = СоздатьОбъект("Справочник.НовыеСотрудники");
Текст = СоздатьОбъект("Текст");
Текст.Открыть("ТекстДляВставки.txt");

Если Текст.КоличествоСтрок() = 0 Тогда
Предупреждение("Текст пустой!");
Возврат;
КонецЕсли;

//Считываем построчно из файла
Для Ном = 1 По Текст.КоличествоСтрок() Цикл

НовСотр.Новый();
Буфер = Текст.ПолучитьСтроку(Ном);
//
Пока (1=НеКонецПредложения(Буфер)) Цикл
НовСотр.Наименование = ВзятьСлово(Буфер);
НовСотр.АдресПрописка = ВзятьСлово(Буфер);
НовСотр.Документ = ВзятьСлово(Буфер);
НовСотр.Должность = ВзятьСлово(Буфер);
НовСотр.Оклад = ВзятьСлово(Буфер);
КонецЦикла;

НовСотр.Записать();

КонецЦикла;
КонецПроцедуры

//---------------------
Процедура Вставить01()

НовСотр = СоздатьОбъект("Справочник.НовыеСотрудники");

Текст = СоздатьОбъект("Текст");
Текст.Открыть("ТекстДляВставки.txt");

Если Текст.КоличествоСтрок() = 0 Тогда

Предупреждение("Текст пустой!");
Возврат;
КонецЕсли;

//Считываем построчно из файла
Для Ном = 1 По Текст.КоличествоСтрок() Цикл

НовСотр.Новый();
// Сообщить("Цикл №" + Ном);
// Сообщить(Стр);
Стр = Текст.ПолучитьСтроку(Ном);
Индекс = 0;
Слово = "";
Буфер=СокрЛП(Стр);//убрали пробелы по краям

//начнем поиск
Если(0 < Найти(Буфер," "))Тогда //пробел есть
Индекс=Найти(Буфер," "); //найти пробел
НовСотр.Наименование=Лев(Буфер,Индекс); //строка до пробела
Иначе
НовСотр.Наименование=Буфер; //Пробела нет. Выведем фамилию.
Индекс=СтрДлина(Буфер);//Найти конец слова
КонецЕсли;

// сохраним в Темп строку без первого слева слова
Темп=Прав(Буфер,(СтрДлина(Буфер)-Индекс));
Буфер=СокрЛ(Темп);//уберем пробелы слева

//новый поиск
Если(0 < Найти(Буфер," "))Тогда //пробел есть

Индекс=Найти(Буфер," ");//найти пробел
НовСотр.АдресПрописка=Лев(Буфер,Индекс); //строка до пробела
Иначе
НовСотр.АдресПрописка=Буфер;//Пробела нет. Выведем имя.
Индекс=СтрДлина(Буфер);//Найти конец слова

КонецЕсли; НовСотр.Записать();

Темп=Прав(Буфер,(СтрДлина(Буфер)-Индекс));
Буфер=СокрЛ(Темп);

//новый поиск
Если(0 < Найти(Буфер," "))Тогда //пробел есть

Индекс=Найти(Буфер," "); //найти пробел
НовСотр.Документ=Лев(Буфер,Индекс); //строка до пробела
Иначе
НовСотр.Документ=Буфер;//Пробела нет. Выведем отчество.
КонецЕсли;
НовСотр.Записать();
КонецЦикла;
КонецПроцедуры

-----------------------
Процедура Удалить()

НовСотр = СоздатьОбъект("Справочник.НовыеСотрудники");
ф=1;
Пока (ф<10) Цикл
НовСотр.НайтиПоКоду(ф);
НовСотр.Удалить(0); //пометка на удаление
НовСотр.Удалить(1); //непосредственное удаление
ф=ф+1;
КонецЦикла;
КонецПроцедуры

Анализ:

Процедура Вставить() предпочтительней процедуры Вставить01().
Хотя результат их работы одинаков, но первая функция компактнее и более
универсальна благодаря тому, что использует вызовы служебных функций
НеКонецПредложения() и ВзятьСлово.

Процедуру Удалить() желательно переписать так, чтобы она работала, пока есть
элементы в справочнике.


Назад | Начало урока | Вверх | Вперед
Содержание

Hosted by uCoz