Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Выгрузка содержимого файла в справочник
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.1 (8.0)
feitosa
Есть файл test.csv в нем 3 строки :

1;Kill agency;Kill mad dog;600;22.11.2011 0:00:00;Ivanov;1
2;Clean service;Clean home;100;24.11.2011 0:00:00;Sidorov;2
3;Transport ink;Odessa kiev;7 000;24.11.2011 0:00:00;Petrov;3

Ну собственно код :

Текст = Новый ТекстовыйДокумент;
// открытие файла
Текст.Прочитать("D:/test.csv");
// перебор строк текстового документа
Для НомерСтроки=1 по Текст.КоличествоСтрок() Цикл
// получить строку файла с указанным номером
Стр = Текст.ПолучитьСтроку(НомерСтроки);
// «распарсивание» строки
// ищем позицию символа-разделителя
Позиция = Найти (Стр,";");
// создаем новый элемент справочника
Спр=Справочники.Accounts.СоздатьЭлемент();
// в код записывается подстрока от первого символа до позиции
// символа-разделителя
Спр.Код = Сред(Стр,1,Позиция-1);
// за символом-резделителем – наименование клиента
Спр.Наименование = Сред (Стр, Позиция+1);
Спр.Записать();
КонецЦикла;


Так вот проблема в том что чтение строки происходит до первой ; (точки с запятой) и в итоги зиписывается только 1 2 3.
Что не так с кодом???
_
sava1
А отладчик-то что говорит ?
feitosa
Нет !
sava1
Для начала я бы все-таки распарсил полностью строку ( список/массив/структура....)
для примера функция - (автор E_Migachev)

глРазложить(Стр,Разделитель)

Параметры:
Стр - строка, которую необходимо разложить на подстроки.
Параметр передается по значению.
Разделитель - строка-разделитель, по умолчанию - запятая.

Возвращаемое значение:
список значений, элементы которого - подстроки

Описание:
Функция "расщепляет" строку на подстроки, используя заданный разделитель.
Разделитель может иметь любую длину.
Если в качестве разделителя задан пробел, рядом стоящие пробелы
считаются одним разделителем, а ведущие и хвостовые пробелы параметра Стр
игнорируются.

Пример:
глРазложить(",ку,,,му", ",")
возвратит список значений из пяти элементов,
три из которых - пустые строки, а
глРазложить(" ку му", " ")
возвратит список значений из двух элементов

Функция глРазложить(Знач Стр, Разделитель = ",") Экспорт
    СЗ = Новый СписокЗначений;
    Если Разделитель = " " Тогда
        Стр = СокрЛП(Стр);
        Пока 1=1 Цикл
            Поз = Найти(Стр,Разделитель);
            Если Поз=0 Тогда
                СЗ.Добавить(Стр);
                Возврат СЗ;
            КонецЕсли;
            СЗ.Добавить(Лев(Стр,Поз-1));
            Стр = СокрЛ(Сред(Стр,Поз));
        КонецЦикла;
    Иначе
        ДлинаРазделителя = СтрДлина(Разделитель);
        Пока 1=1 Цикл
            Поз = Найти(Стр,Разделитель);
            Если Поз=0 Тогда
                СЗ.Добавить(Стр);
                Возврат СЗ;
            КонецЕсли;
            СЗ.Добавить(Лев(Стр,Поз-1));
            Стр = Сред(Стр,Поз+ДлинаРазделителя);
        КонецЦикла;
    КонецЕсли;
КонецФункции
Vofka
Люди, необходимо зарегистрироваться для просмотра ссылки в конце то концов!
feitosa
написал что-то типа :

Текст = Новый ТекстовыйДокумент;
// открытие файла
Текст.Прочитать("D:/test.csv");
// перебор строк текстового документа
Для НомерСтроки=1 по Текст.КоличествоСтрок() Цикл
// получить строку файла с указанным номером
Стр = Текст.ПолучитьСтроку(НомерСтроки);
// «распарсивание» строки
// ищем позицию символа-разделителя
Позиция = Найти (Стр,";");
// создаем новый элемент справочника
Спр=Справочники.Accounts.СоздатьЭлемент();

Спр.Код = Лев(Стр, Найти(Стр, ";")-1);
Стр = Прав(Стр, СтрДлина(Стр) - Найти(Стр, ";"));

Спр.id = Лев(Стр, Найти(Стр, ";")-1);
Стр = Прав(Стр, СтрДлина(Стр) - Найти(Стр, ";"));

Спр.firm_id = Лев(Стр, Найти(Стр, ";")-1);
Стр = Прав(Стр, СтрДлина(Стр) - Найти(Стр, ";"));

Спр.servise_id = Лев(Стр, Найти(Стр, ";")-1);
Стр = Прав(Стр, СтрДлина(Стр) - Найти(Стр, ";"));

Спр.summ = Лев(Стр, Найти(Стр, ";")-1);
Стр = Прав(Стр, СтрДлина(Стр) - Найти(Стр, ";"));

Спр.date_of = Лев(Стр, Найти(Стр, ";")-1);
Стр = Прав(Стр, СтрДлина(Стр) - Найти(Стр, ";"));

Спр.user_id = Лев(Стр, Найти(Стр, ";")-1);
Стр = Прав(Стр, СтрДлина(Стр) - Найти(Стр, ";"));

Спр.doc_no = Лев(Стр, Найти(Стр, ";")-1);
Стр = Прав(Стр, СтрДлина(Стр) - Найти(Стр, ";"));

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


Вписывает только значения ЧИСЛО (id, сумму, код), а вот вполя где СТРОКА пусто sad.gif
sava1
А дальше проходим отладчиком по коду, который в цикле - смотрим значения, присваемые реквизитам справочника.
Если они заполнены - смотреть на типы, если нет - искать в строке....
feitosa
Цитата(sava1 @ 22.11.11, 15:45) необходимо зарегистрироваться для просмотра ссылки
А дальше проходим отладчиком по коду, который в цикле - смотрим значения, присваемые реквизитам справочника.
Если они заполнены - смотреть на типы, если нет - искать в строке....


Я новичек в 1С поэтому мало что понял =(
pablo
Тогда почитайте про преобразование типов данных в 1с.
feitosa
Ну а все-таки, прошу, напишите как это должнол выглядеть!
pablo
Как-то так:
Спр.servise_id = Функция_Преобразования_Типа(Лев(Стр, Найти(Стр, ";")-1));
feitosa
Цитата(pablo @ 22.11.11, 16:12) необходимо зарегистрироваться для просмотра ссылки
Как-то так:
Спр.servise_id = Функция_Преобразования_Типа(Лев(Стр, Найти(Стр, ";")-1));


Чето я немогу догнать icon_cuss.gif =) как все это должно быть ? =)
feitosa
Цитата(feitosa @ 29.11.11, 15:55) необходимо зарегистрироваться для просмотра ссылки
Чето я немогу догнать icon_cuss.gif =) как все это должно быть ? =)



Ну... Я про функцию =)
Домовик
имя функции такое. красным просто выделелось. это не синтаксиз.
pablo
Точного имени функции Вы тут не дождетесь. Просто знание этих функций - основа любого языка программирования. И уж если Вы про такие основы читать отказываетесь...
Домовик
та така червоненько-синенька функція, можна і заплутатись )). В синтакс-помічнику функции встренного языка для простих типів.

Для складних типів (довідник, документ, регистрСведений ....) треба створити або знайти елемент, документ.... по коду чи по найменуванню, записати. Лише потім його присвоювати реквізиту його поточне значення.
feitosa
Попытка номер два =)

Текст = Новый ТекстовыйДокумент;
// открытие файла
Текст.Прочитать("D:/test.csv");
// перебор строк текстового документа
Для НомерСтроки=1 по Текст.КоличествоСтрок() Цикл
// получить строку файла с указанным номером
Стр = Текст.ПолучитьСтроку(НомерСтроки);
// «распарсивание» строки
// ищем позицию символа-разделителя
Позиция = Найти (Стр,";");
// создаем новый элемент справочника
//Спр = Справочники.Accounts.СоздатьЭлемент();
Спр = Справочники.Accounts.Выбрать().ПолучитьОбъект();

Спр.Код = Лев(Стр, Найти(Стр, ";")-1);
Стр = Прав(Стр, СтрДлина(Стр) - Найти(Стр, ";"));

Спр.id = Лев(Стр, Найти(Стр, ";")-1);
Стр = Прав(Стр, СтрДлина(Стр) - Найти(Стр, ";"));

пр = Лев(Стр, Найти(Стр, ";")-1);
Сообщить(пр);
Спр.firm_id = пр;
Стр = Прав(Стр, СтрДлина(Стр) - Найти(Стр, ";"));

Спр.servise_id = Лев(Стр, Найти(Стр, ";")-1);
Стр = Прав(Стр, СтрДлина(Стр) - Найти(Стр, ";"));

Спр.summ = Лев(Стр, Найти(Стр, ";")-1);
Стр = Прав(Стр, СтрДлина(Стр) - Найти(Стр, ";"));

Спр.date_of = Лев(Стр, Найти(Стр, ";")-1);
Стр = Прав(Стр, СтрДлина(Стр) - Найти(Стр, ";"));

Спр.user_id = Лев(Стр, Найти(Стр, ";")-1);
Стр = Прав(Стр, СтрДлина(Стр) - Найти(Стр, ";"));

Спр.doc_no = Стр;

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


Пишет "Элемент не выбран!"
Слушаю Вас что тут не так.......

Ну и КонецЦикла . Просто забыл дописать
Zaval
Спр = Справочники.Accounts.Выбрать().ПолучитьОбъект();


Не слушать надо, а посмотреть в Отладчике результат выполнения этого действа.
feitosa
Пля.... icon_cuss.gif Сделайти КНОПКУ Редактировать

Цитата(Zaval @ 30.11.11, 16:14) необходимо зарегистрироваться для просмотра ссылки
Спр = Справочники.Accounts.Выбрать().ПолучитьОбъект();


Не слушать надо, а посмотреть в Отладчике результат выполнения этого действа.


блин! РаскАжиТЕ как пользоваться этим Отладчиком! Куда нажимать и что смотреть?

Товарищ Vofka не сочтите это за нарушение правил =)
Zaval
Цитата(feitosa @ 30.11.11, 16:15) необходимо зарегистрироваться для просмотра ссылки
Пля.... icon_cuss.gif Сделайти КНОПКУ Редактировать


Ппц, приехали. "Изменить" - выбрать вид редактирования... чем не устраивает?
feitosa
Ппц icon_cuss.gif icon_cuss.gif icon_cuss.gif Все лагает
Vofka
Цитата
Сделайти КНОПКУ Редактировать

А может сразу админские права дать?

Цитата
блин! РаскАжиТЕ как пользоваться этим Отладчиком! Куда нажимать и что смотреть?

faceoff.gif

Цитата
Товарищ Vofka не сочтите это за нарушение правил =)

В следующий раз удалю пост!
Zaval
Цитата(feitosa @ 30.11.11, 16:20) необходимо зарегистрироваться для просмотра ссылки
блин! РаскАжиТЕ как пользоваться этим Отладчиком! Куда нажимать и что смотреть?


В Справку программы, блин!!!
Пытаетесь доказать, что все можно сделать "придя с морозу", ничего не зная, ни в чем не разбираясь и ничему не учась? "И чего эти одинэсники выпендриваются? там жа делать нечего"?
Ну-ну, удачи!
mister-x
Цитата(feitosa @ 30.11.11, 16:21) необходимо зарегистрироваться для просмотра ссылки
Ппц icon_cuss.gif icon_cuss.gif icon_cuss.gif Все лагает

рекомендую заглянути необходимо зарегистрироваться для просмотра ссылки, всі ми з чогось починали
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.