Имя: Пароль:
1C
1С v8
Ошибка при вызове метода контекста (Записать)
,
0 AnyBaz
 
12.09.13
13:07
Полное описание ошибки:
{Форма.Загрузка.Форма(102)}: Ошибка при вызове метода контекста (Записать)
    СтрСпр.Записать();
по причине:
Ошибка при выполнении обработчика - 'ПередЗаписью'
по причине:
{Справочник.Номенклатура.МодульОбъекта(123)}: Поле "Рабочее наименование" не заполнено
    СтрСпр.Записать();

по причине:
Ошибка при выполнении обработчика - 'ПередЗаписью'
по причине:
{Справочник.Номенклатура.МодульОбъекта(123)}: Поле "Рабочее наименование" не заполнено

{Справочник.Номенклатура.МодульОбъекта(123)}: Поле "Рабочее наименование" не заполнено
            ВызватьИсключение ТекстИсключения;

Задача: Необходимо записать Excel-файл в справочник НОМЕНКЛАТУРА.

Код:  
&НаКлиенте
  Процедура ВыбратьФайл(Команда)
        // ОТКРЫВАЕМ ФАЙЛ    
    ДиалогВыбораФайла                                =    Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    ДиалогВыбораФайла.Фильтр                        =    "Файлы Microsoft Office Excel 97-2003 (*.xls)|*.xls";
    ДиалогВыбораФайла.Заголовок                        =    "Выберите файл";
    ДиалогВыбораФайла.ПредварительныйПросмотр        =    Ложь;
    ДиалогВыбораФайла.ИндексФильтра                    =    0;
    ДиалогВыбораФайла.ПолноеИмяФайла                =    "";

    Если ДиалогВыбораФайла.Выбрать() Тогда
        ЗагружаемыйФайл = ДиалогВыбораФайла.ПолноеИмяФайла;
    КонецЕсли;
    
    Объект.ЗагружаемыйФайл=ЗагружаемыйФайл;
    Сообщить ("Файл выбран");
     КонецПроцедуры
    
&НаКлиенте
Процедура ЗагрузитьВыбранныйФайл(Команда,ЗагружаемыйФайл,стр)  
    
СтруктураКолонок = Новый Структура;
СтруктураКолонок.Вставить("Код",2);
СтруктураКолонок.Вставить("Артикул",3);
СтруктураКолонок.Вставить("Наименование",4);
СтруктураКолонок.Вставить("ПолноеНаименование",5);
СтруктураКолонок.Вставить("ВидНоменклатуры",6);
СтруктураКолонок.Вставить("БазоваяЕдиницаИзмерения",7);
СтруктураКолонок.Вставить("ЕдиницаХраненияОстатков",8);
СтруктураКолонок.Вставить("НомерГТД",9);
СтруктураКолонок.Вставить("СтранаПроисхождения",10);
СтруктураКолонок.Вставить("СтавкаНДС",11);
СтруктураКолонок.Вставить("НоменклатурнаяГруппа",12);
СтруктураКолонок.Вставить("ЦеноваяГруппа",13);
СтруктураКолонок.Вставить("Комментарий",14);
      
    СозданиеПодключения(стр,ЗагружаемыйФайл,СтруктураКолонок);     
    КонецПроцедуры


&НаСервере
Процедура СозданиеПодключения(стр,ЗагружаемыйФайл,СтруктураКолонок,Знач НачСтрока = 0, Знач КонСтрока = 0)    
    ЗагружаемыйФайл = Объект.ЗагружаемыйФайл;
    
// ЗАПОЛНЯЕМ ГРУППУ МАТЕРИАЛОВ    
    Если НЕ ЗначениеЗаполнено(Объект.ГруппаМатериалов) Тогда
        Сообщить ("не заполнено наименование группы справочника");
    КонецЕсли;
    
    Лист = Объект.ЛистExcel;    
// УСТАНОВКА СОЕДИНЕНИЯ    
    Connection = Новый COMОбъект("ADODB.Connection");
    Попытка
         Connection.Open ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+ЗагружаемыйФайл+";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1""");
        Сообщить ("Соединение установлено");    
     Исключение
        Сообщить("Не удалось открыть файл->"+ЗагружаемыйФайл+" Проверьте путь и тип файла");
        возврат;
    КонецПопытки;
    
// СОЗДАНИЕ КАТАЛОГА    
    CATL=Новый COMОбъект ("ADOX.Catalog");
    CATL.ActiveConnection = Connection;
    ИмяПервойСтраницы=CATL.Tables.Item(0).Name;
    Сообщить ("Каталог организован");

    //ИмяПервойСтраницы="ОБ ДР$";
          
// РЕЖИМ ЗАПИСИ    
    RecSet = Новый COMОбъект ("ADODB.Recordset");
    RecSetSTR = "select * from ["+ИмяПервойСтраницы+"]";
    RecSet.Open (RecSetSTR, Connection, 2, 3);//adOpenDynamic(определяет динамический курсор), adLockOptimistic(оптимистическая блокировка)
    Сообщить ("Объект готов к записи");
    
// СПРАВОЧНИК
НовыйОбъектСправочника = Справочники.Номенклатура.СоздатьГруппу();
НовыйОбъектСправочника.Наименование = Объект.ГруппаМатериалов;
НовыйОбъектСправочника.Записать();
СтрСпр = Справочники.Номенклатура.СоздатьЭлемент();
СтрСпр.Родитель = НовыйОбъектСправочника.Ссылка;
//НовыйОбъектСправочника.Записать();

// ЗАПИСЬ
    Пока НЕ RecSet.EOF() Цикл
        Если СокрЛП(Строка(RecSet.Fields(RecSet.Fields.Item(0).Name).Value))<>"" Тогда
            //СтрСпр = Справочники.Номенклатура.СоздатьЭлемент();
            СтрСпр.Код=СокрЛП(Строка(RecSet.Fields(RecSet.Fields.Item(2).Name).Value));
            СтрСпр.Артикул=Строка(RecSet.Fields(RecSet.Fields.Item(3).Name).Value);
            СтрСпр.Наименование = Справочники.Номенклатура.НайтиПоНаименованию(Строка(RecSet.Fields(RecSet.Fields.Item(4).Name).Value));
            СтрСпр.НаименованиеПолное = Строка(RecSet.Fields(RecSet.Fields.Item(4).Name).Value);
            СтрСпр.ВидНоменклатуры = Справочники.ВидыНоменклатуры.СоздатьЭлемент();
            СтрСпр.ВидНоменклатуры.Наименование = Строка(RecSet.Fields(RecSet.Fields.Item(5).Name).Value);
            
        КонецЕсли;
        RecSet.MoveNext();
        КонецЦикла;

    RecSet.Close();
    Connection.Close();
    НовыйОбъектСправочника.Записать();
    СтрСпр.Записать();

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


P.S. Помогите пожалуйста, я новичок. Долблюсь уже 2ю неделю...
1 Галахад
 
гуру
12.09.13
13:09
Вроде по русски:

Поле "Рабочее наименование" не заполнено
2 Fish
 
12.09.13
13:09
(0) Так заполни поле "Рабочее наименование"
3 Тролль главный
 
12.09.13
13:10
наверное потому что "Рабочее наименование" не заполнено ))
4 an_str
 
12.09.13
13:10
как минимум надо "рабочее наименование" заполнить)
СтрСпр.РабочееНаименование = ...
5 le_
 
12.09.13
13:10
(0) Вторую неделю пытаешься осознать суть ошибки, о которой говорится? )
6 AnyBaz
 
12.09.13
13:11
Как? Рабочее наименование это всего лишь заголовок в форме это просто Наименование, я его вроде заполняю. или вручную заполнить надо?
7 Тролль главный
 
12.09.13
13:11
и где фото?
8 AnyBaz
 
12.09.13
13:11
нет, 2ю неделю, пишу загрузку файла в справочник.
9 Тролль главный
 
12.09.13
13:11
отсюда конечно не видно что там происходит в модуле объекта ПередЗаписью
10 le_
 
12.09.13
13:13
(6) Справочник.Номенклатура.МодульОбъекта, строка 123 - что там?
11 AnyBaz
 
12.09.13
13:14
вот 123 строка
            ВызватьИсключение ТекстИсключения;
12 Euguln
 
12.09.13
13:14
(0) СтрСпр.ВидНоменклатуры = Справочники.ВидыНоменклатуры.СоздатьЭлемент();
Это что???

Попробуй СтрСпр.ОбменДанными.Загрузка = Истина; перед записью.
Ну или СтрСпр.РабочееНаименование = СтрСпр.Наименование;
13 AnyBaz
 
12.09.13
13:14
Если НЕ ЗначениеЗаполнено(Наименование) Тогда
            
            ТекстИсключения = НСтр("ru='Поле ""Рабочее наименование"" не заполнено'");
            ВызватьИсключение ТекстИсключения;
            Отказ = Истина;
            
        КонецЕсли;
        
        КонтролироватьРабочееНаименование = Константы.КонтролироватьУникальностьРабочегоНаименованияНоменклатурыИХарактеристик.Получить()
                                            И НЕ (ДополнительныеСвойства.Свойство("РабочееНаименованиеПроверено"));
14 le_
 
12.09.13
13:15
(11) При выполнении какого условия вызывается это исключение?
15 Fish
 
12.09.13
13:15
(13) Ошибка в строке:
СтрСпр.Наименование = Справочники.Номенклатура.НайтиПоНаименованию(Строка(RecSet.Fields(RecSet.Fields.Item(4).Name).Value));
16 an_str
 
12.09.13
13:16
СтрСпр.Наименование = Справочники.Номенклатура.НайтиПоНаименованию(Строка(RecSet.Fields(RecSet.Fields.Item(4).Name).....
зачем "НайтиПоНаименованию"???
17 Тролль главный
 
12.09.13
13:17
+(15) согласен, что это бред
18 an_str
 
12.09.13
13:18
+(17)
19 Euguln
 
12.09.13
13:18
(17) там половина кода - бред
20 le_
 
12.09.13
13:18
+(15) Это тоже как-то не айс: СтрСпр.ВидНоменклатуры = Справочники.ВидыНоменклатуры.СоздатьЭлемент();
21 Fish
 
12.09.13
13:23
(20) Да и то, если это исправить, то при таком цикле запишется всего один элемент справочника. Тут без (7) явно не обойтись :)
22 Euguln
 
12.09.13
13:28
(7) (21) Да, присоединяюсь

// ЗАПИСЬ

    Пока НЕ RecSet.EOF() Цикл
        Если СокрЛП(Строка(RecSet.Fields(RecSet.Fields.Item(0).Name).Value))<>"" Тогда
        
            Наименование =Строка(RecSet.Fields(RecSet.Fields.Item(4).Name).Value);
            НайденныйЭлемент    = Справочники.Номенклатура.НайтиПоНаименованию(Наименование);
        
            Если НайденныйЭлемент.Пустая() Тогда
                СтрСпр = Справочники.Номенклатура.СоздатьЭлемент();
            Иначе
                СтрСпр = НайденныйЭлемент.ПолучитьОбъект();
            КонецЕсли;
                    
            СтрСпр.Родитель = НовыйОбъектСправочника.Ссылка;

            //СтрСпр = Справочники.Номенклатура.СоздатьЭлемент();

            СтрСпр.Код=СокрЛП(Строка(RecSet.Fields(RecSet.Fields.Item(2).Name).Value));
            СтрСпр.Артикул=Строка(RecSet.Fields(RecSet.Fields.Item(3).Name).Value);
            СтрСпр.Наименование = Наименование;
            СтрСпр.НаименованиеПолное = Строка(RecSet.Fields(RecSet.Fields.Item(4).Name).Value);
            
            НайденныйВидНоменклатуры    = Справочники.ВидыНоменклатуры.НайтиПоНаименованию(Строка(RecSet.Fields(RecSet.Fields.Item(5).Name).Value));
            
            Если НайденныйВидНоменклатуры.Пустая() Тогда
                НайденныйВидНоменклатуры = Справочники.ВидыНоменклатуры.СоздатьЭлемент();
                НайденныйВидНоменклатуры.Наименование = Строка(RecSet.Fields(RecSet.Fields.Item(5).Name).Value);
                НайденныйВидНоменклатуры.Записать();
            КонецЕсли;
            СтрСпр.ВидНоменклатуры = НайденныйВидНоменклатуры.Ссылка;
            Попытка
                СтрСпр.Записать();
            Исключение
                Сообщить("Не удалось записать элемент справочника. " + ОписаниеОшибки());
            КонецПопытки;    
        КонецЕсли;
        RecSet.MoveNext();
    КонецЦикла;

    RecSet.Close();
    Connection.Close();
23 AnyBaz
 
12.09.13
13:33
Euguln спасибо!
24 Euguln
 
12.09.13
13:46
(23) фотка где?
25 AnyBaz
 
12.09.13
13:47
фотка чего?
26 Fish
 
12.09.13
13:49
(25) Теперь, после того, как тебе помогли, участникам форума хотелось бы увидеть твоё фото в личной карточке.
27 ДенисЧ
 
12.09.13
13:49
(25) Народ так думает, что им интересна ваша внешность. И они желают видеть её в стиле ню :-)
28 AnyBaz
 
12.09.13
13:50
вечером загружу, завтра увидите. щас не могу - на работе
29 AnyBaz
 
12.09.13
13:51
ага, щас