Имя: Пароль:
1C
1С v8
Процедура или функция с указанным именем не определена
0 iiwanc
 
07.09.24
13:53
Здравствуйте!
Учусь.
Делаю задание, но не могу найти ошибку.
Цель: Создание механизма импорта данных. Задача заключается в импорте данных для справочников
Пишу:
&НаСервере
Процедура ПрочитатьФайлНаСервере()
    ТекстовыйДокумент = Новый ТекстовыйДокумент; //1.Путь к файлу
    ТекстовыйДокумент.Прочитать(ПутьКФайлу);
    ВсегоСтрок = ТекстовыйДокумент.КоличествоСтрок(); //2. Подсчет количества строк
    Счетчик =2;
    ТЗ = Новый ТаблицаЗначений; //4.Заголовки таблицы значений
    ТЗ.Колонки.Добавить("Код");
    ТЗ.Колонки.Добавить("Товар");
    ТЗ.Колонки.Добавить("Описание");
    ТЗ.Колонки.Добавить("Категория");
    ТЗ.Колонки.Добавить("Поставщик");
    ТЗ.Колонки.Добавить("Город");
    Пока Счетчик <= ВсегоСтрок Цикл //5.Разделитель данных и массива в цикле
        Строка = ТекстовыйДокумент.ПолучитьСтроку(Счетчик);
        Массив = СтрРазделить(Строка, ";");
        НоваяСтрокаТЗ=ТЗ.Добавить();
        НоваяСтрокаТЗ.Код = Массив(0);
        НоваяСтрокаТЗ.Товар = Массив (1);
        НоваяСтрокаТЗ.Описание = Массив (2);
        НоваяСтрокаТЗ.Категория = Массив (3);
        НоваяСтрокаТЗ.Поставщик = Массив (4);
        НоваяСтрокаТЗ.Город = Массив (5);
        Счетчик=Счетчик+1;
    КонецЦикла;
    
    НоваяТЗ=ТЗ.Скопировать(); //6.Импорт данных
    НоваяТЗ.Свернуть("Код, Товар, Описание, Категория, Поставщик, Город");
    Для каждого Стр Из НоваяТЗ Цикл
        НайденныйГород=Справочники.Города.НайтиПоНаименованию(Стр.Город);
        Если НайденныйГород=Справочники.Города.ПустаяСсылка() Тогда
            НовыйГород=Справочники.Города.СоздатьЭлемент();
            НовыйГород.Наименование=Стр.Город;
            НовыйГород.Записать();
            НайденныйГород=НовыйГород.Ссылка;
        КонецЕсли;
        НайденнаяФирма=Справочники.Фирмы.НайтиПоНаименованию(Стр.Поставщик);
        Если НайденнаяФирма = Справочники.Фирмы.ПустаяСсылка() тогда
            НоваяФирма=Справочники.Фирмы.СоздатьЭлемент();
            НоваяФирма.Наименование=Стр.Поставщик;
            НоваяФирма.Записать();;
            НайденнаяФирма=новаяФирма.Ссылка;
        КонецЕсли;
        НайденныйТовар=Справочники.Товары.НайтиПоНаименованию(Стр.Товар);
        Если НайденныйТовар=Справочники.Товары.ПустаяСсылка() тогда
            НовыйТовар=Справочники.Товары.СоздатьЭлемент();
            НовыйТовар.Код=Стр.Код;
            НовыйТовар.Наименование=Стр.Товар;
            НовыйТовар.Описание=Стр.Описание;
            Попытка //Если Значения перечисления нет, выдаем ошибку
                НовыйТовар.Категория=Перечисления.Категории[Стр.категория];
            Исключение
                Сообщить("Категория " +Стр.Категория+" не найдена");
            КонецПопытки;
            НовыйТовар.ОсновнойПоставщик=НайденнаяФирма;
            НовыйТовар.Записать();
            найденныйТовар=новыйТовар.Ссылка;
        КонецЕсли;
    КонецЦикла;
    Сообщить ("Импорт в справочник Товары выполнен");
КонецПроцедуры

Получаю:
{Обработка.ИмпортИзФайлаТовары.Форма.Форма.Форма(27,28)}: Процедура или функция с указанным именем не определена (Массив)
        НоваяСтрокаТЗ.Описание = <<?>>Массив (2); (Проверка: Сервер)


В чем моя ошибка? Подскажите, пожалуйста.
Буду благодарен за советы.
1 ЕRPe
 
07.09.24
13:59
аккуратнее - () в 1с это вызов метода, потому либо Массив[2], Массив.Получить(2)
2 Волшебник
 
07.09.24
14:04
(0) Как Вы дошли до пункта 6, если в пункте 5 у вас синтаксические ошибки?

тупой бот
3 craxx
 
07.09.24
14:58
(2) Так ему про эту ошибку как раз и орет система. Хотя странно, система должна была ругнуться двумя строками выше.
(0) обращение к элементу массива через квадратные скобки идет.
4 iiwanc
 
07.09.24
15:39
(1) , (3) спасибо.
До этого правильно писал в квадратные скобки. Были другие ошибки, исправлял их и попутно в круглые скобки обращение к элементу массива переписал.
5 Волшебник
 
07.09.24
15:52
(4) это грибы...