Имя: Пароль:
1C
1С v8
Загрузка в спр Номенклатура УТ11
, ,
0 anisa8310
 
09.10.13
13:17
1С:Предприятие 8.2 (8.2.18.104)
Управление торговлей, редакция 11.1 (11.1.2.9)

Дело такое. пишу загрузку в элементы справочника "Номенклатура", добавила реквизит "себестоимость"(строка, 10 длина) -так надо попросили меня так аналитическое поле..из старых запасов-не суть.
ВВобщем такая загрузка простая...но ошибку дает : Форма.Форма.Форма(23)}: Значение не является значением объектного типа (Номенклатура)
         ТекСсыл=    Стр.Номенклатура.Ссылка;

Вот код загрузки:
Процедура КнопкаВыполнитьНажатие(Кнопка)
//////////////////Выбор документов "Реализация"    для сравнения транзакций
        
/////////////открытие xls-документа    
    Док = ПолучитьCOMОбъект(Путь);
    счСтроки = 1;

/////////////////////////Перебор строк    

Пока Док.Sheets(1).Cells(счСтроки,1).Value <>Неопределено Цикл
    Стр=Док.Sheets(1).Cells(счСтроки,1).Value;    
    //////////////Формирование массива услуги    
    Массив = Новый Массив(3);
           Для Сч=1 По 3 Цикл
            Позиция = Найти(Стр, ",");
            Массив.Вставить(сч,Сред(Стр, 1, Позиция-1));
            стр = Сред(Стр, Позиция + 1);
           КонецЦикла;
          

          
         Справочники.Номенклатура.НайтиПоНаименованию(Строка(Массив[1]));
         ТекСсыл=    Стр.Номенклатура.Ссылка;
              Номенклатура=ТекСсыл.ПолучитьОбъект();
              Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(Строка(Массив[1])).Ссылка;
              Номенклатура.ВариантОформленияПродажи=Перечисления.ВариантыОформленияПродажи.РеализацияТоваровУслуг;
              Номенклатура.Себестоимость=Строка(Массив[2]);
              Номенклатура.ЕдиницаИзмерения=Справочники.ЕдиницыИзмерения.НайтиПоКоду("796");
            счСтроки = счСтроки + 1;
    
КонецЦикла;

//////////закрываем документ
Док.Application.Quit();
    
КонецПроцедуры

Помогите пожалуйта!!
А если закомментить эту строку тогда будет говорить: поле объекта недоступно для записи
1 ProProg
 
09.10.13
13:17
Номенклатура=ТекСсыл.ПолучитьОбъект();
              Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(Строка(Массив[1])).Ссылка;
2 anisa8310
 
09.10.13
13:19
(1) это моя ошибка?
3 ProProg
 
09.10.13
13:20
да вообще весь код - жесть.
Проверки нет на найден или не найден.
В конце вообще записи нет.

Массив какой то чекнутый.
4 anisa8310
 
09.10.13
13:22
(2) я только начала его делать..записи ещё нет-массив простой один реквизит нужно заполнить"себестоимость"- -наименование-ищем, себестоимость-данные . проверка будет это первый вариант если найдет-если не найдет-создаст по такому же принципу
5 ProProg
 
09.10.13
13:24
(4) ок.
6 anisa8310
 
10.10.13
12:30
вот код загрузки:
Процедура КнопкаВыполнитьНажатие(Кнопка)
//////////////////Выбор документов "Реализация"    для сравнения транзакций
        
/////////////открытие csv-документа    
    Док = ПолучитьCOMОбъект(Путь);
    счСтроки = 1;

/////////////////////////Перебор строк    

Пока Док.Sheets(1).Cells(счСтроки,1).Value <>Неопределено Цикл
    Стр=Док.Sheets(1).Cells(счСтроки,1).Value;    
    //////////////Формирование массива услуги    
    Массив = Новый Массив(2);
           Для Сч=1 По 2 Цикл
            Позиция = Найти(Стр, "|");
            Массив.Вставить(сч,Сред(Стр, 1, Позиция-1));
            стр = Сред(Стр, Позиция + 1);
           КонецЦикла;
          
          Если Справочники.Номенклатура.НайтиПоНаименованию(Строка(Массив[1])).Пустая()=Ложь тогда
          
           Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(Строка(Массив[1])).Ссылка;
              ТекСсылка=Номенклатура.ПолучитьОбъект();
              ТекСсылка.ВариантОформленияПродажи=Перечисления.ВариантыОформленияПродажи.РеализацияТоваровУслуг;
              ТекСсылка.Себестоимость=Строка(Массив[2]);
              ТекСсылка.ЕдиницаИзмерения=Справочники.ЕдиницыИзмерения.НайтиПоКоду("796");
              ТекСсылка.ИспользованиеХарактеристик=Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.НеИспользовать;
        ТекСсылка.Записать();
      
          Иначе
              
              Номенклатура = Справочники.Номенклатура.СоздатьЭлемент();
              ТекСсылка=Номенклатура.ПолучитьОбъект();
              ТекСсылка.Наименование=Строка(Массив[1]);
              ТекСсылка.ВариантОформленияПродажи=Перечисления.ВариантыОформленияПродажи.РеализацияТоваровУслуг;
              ТекСсылка.Себестоимость=Строка(Массив[2]);
              ТекСсылка.ЕдиницаИзмерения=Справочники.ЕдиницыИзмерения.НайтиПоКоду("796");
              ТекСсылка.ИспользованиеХарактеристик=Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.НеИспользовать;
              ТекСсылка.ВидНоменклатуры=Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Ввод начальных остатков");
              ТекСсылка.СтавкаНДС=Перечисления.СтавкиНДС.НДС18;
              ТекСсылка.ТипНоменклатуры=Перечисления.ТипыНоменклатуры.Товар;
            
              
              ТекСсылка.Записать();
              КонецЕсли;
            счСтроки = счСтроки + 1;
    
КонецЦикла;

//////////закрываем документ
Док.Application.Quit();
    
КонецПроцедуры

Процедура ВыбФайл(Путь)
    
    ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    ДиалогВыбораФайла.Фильтр                  = "Текстовые файлы (*.csv)|*.csv";
    ДиалогВыбораФайла.Заголовок               = "Выберите файл для загрузки данных";
    ДиалогВыбораФайла.ПредварительныйПросмотр = Ложь;
    ДиалогВыбораФайла.Расширение              ="csv";
    ДиалогВыбораФайла.ИндексФильтра           = 0;
    ДиалогВыбораФайла.ПолноеИмяФайла          = Путь;
    Если ДиалогВыбораФайла.Выбрать() Тогда
        Путь = ДиалогВыбораФайла.ПолноеИмяФайла;
    КонецЕсли;

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

Процедура Кнопка1Нажатие(Элемент)
    ВыбФайл(ЭлементыФормы.Путь.Значение);
КонецПроцедуры
7 anisa8310
 
10.10.13
12:32
Но екарный бабай-реквизиты- ВидНоменклатуры
ТипНоменклатуры, СтавкаНДС-они заблокированы как то и не дает устанавливать значение!! помогите что делать???
8 Eugeneer
 
10.10.13
12:32
И снова куча ошибок. методических.
9 Eugeneer
 
10.10.13
12:35
Вид номенклатуры - Ввод начальных остатков - повеселил.

В остальном все есть пара грубейших ошибок.

Опять двойной поиск.
Использование Пустая()
10 Eugeneer
 
10.10.13
12:36
Вот это вообще ВЕСЕЛО

Номенклатура = Справочники.Номенклатура.СоздатьЭлемент();
              ТекСсылка=Номенклатура.ПолучитьОбъект();
11 Eugeneer
 
10.10.13
12:36
И это тоже!

Если Справочники.Номенклатура.НайтиПоНаименованию(Строка(Массив[1])).Пустая()=Ложь тогда
          
           Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(Строка(Массив[1])).Ссылка;
12 Eugeneer
 
10.10.13
12:38
Я так понял ты в 1С научилась только ставить знак равно.
В остальном всем код нерабочий. И видно что нет понимания что такое ссылки, объекты и новые элементы.
13 Eugeneer
 
10.10.13
12:41
НайденаНоменклатура = Справочники.Номенклатура.НайтиПоНаименованию(Строка(Массив[1]));
Если НЕ НайденаНоменклатура = Справочник.Номенклатура.ПустаяСсылка() тогда
          
              ТекСсылка = НайденаНоменклатура.ПолучитьОбъект();
              ТекСсылка.ВариантОформленияПродажи=Перечисления.ВариантыОформленияПродажи.РеализацияТоваровУслуг;
              ТекСсылка.Себестоимость=Строка(Массив[2]);
              ТекСсылка.ЕдиницаИзмерения=Справочники.ЕдиницыИзмерения.НайтиПоКоду("796");
              ТекСсылка.ИспользованиеХарактеристик=Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.НеИспользовать;
        ТекСсылка.Записать();
      
          Иначе
14 Eugeneer
 
10.10.13
12:42
Иначе
              
              НоваяНоменклатура = Справочники.Номенклатура.СоздатьЭлемент();
              НоваяНоменклатура.Наименование=Строка(Массив[1]);
              НоваяНоменклатура.ВариантОформленияПродажи=Перечисления.ВариантыОформленияПродажи.РеализацияТоваровУслуг;
              НоваяНоменклатура.Себестоимость=Строка(Массив[2]);
              НоваяНоменклатура.ЕдиницаИзмерения=Справочники.ЕдиницыИзмерения.НайтиПоКоду("796");
              НоваяНоменклатура.ИспользованиеХарактеристик=Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.НеИспользовать;
              НоваяНоменклатура.ВидНоменклатуры=Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Ввод начальных остатков");
              НоваяНоменклатура.СтавкаНДС=Перечисления.СтавкиНДС.НДС18;
              НоваяНоменклатура.ТипНоменклатуры=Перечисления.ТипыНоменклатуры.Товар;

НоваяНоменклатура.Записать();
15 Жан Пердежон
 
10.10.13
12:44
и запрос в цикле
16 Eugeneer
 
10.10.13
12:46
Но ты еще к тому же мало реквизитов у новой создаешь.
Там еще есть полное название - тоже нужно. И остальное.

Плюс еще на многих вещах оптимизацию пожсно сделать чтобы не вызывать много раз одно.

Например один раз в переменную передать вначале

СпрНоменклатура = Справочник.Номенклатура;
ПустаяСсылка = СпрНоменклатура.пустаяСсылка;
НаименованиеЗагрузка = Строка(Массив[1]);

и далее везде использовать эти переменные.И не писать пять раз Строка(Массив[1]);
17 Eugeneer
 
10.10.13
12:46
Да и вообще надо быть уверенным что номенклатура в базе точно по наименованиям имеет четкий критерий поиска.
18 Eugeneer
 
10.10.13
12:47
Вот это тоже можно объявить переменной 1 раз еще в самом начале процедуры

Справочники.ЕдиницыИзмерения.НайтиПоКоду("796");
Либо сделать реквизит для выбора в обработке.
19 anisa8310
 
10.10.13
13:04
(17) да точно есть..она добавила новых немного ...из 496 -110 создала.остальные были и только добавили себестоимость..
20 anisa8310
 
10.10.13
13:05
(15) запрос? в цикл запрос добавить? на проверку "себестоимости"?
21 anisa8310
 
10.10.13
13:05
(9) ай поставила-так для теста- не знаю что ставить пока..
22 anisa8310
 
10.10.13
13:08
Спасибо за отклик! исправлю разберусь что такое ссылки и объекты)) Но ведь вопрос то так и остался-эти реквизиты тип вид НДС-не дает менять или дополнять. только через обработку изменить реквизиты элемента-в режиме предприятия..в УТ11
23 Eugeneer
 
10.10.13
13:30
Надо решение - http://subsystems.ru/catalog/27/159/
Остальное чем смог тем помог. Остальное сама решай.
24 anisa8310
 
10.10.13
13:49
(23) спасибо!!
Независимо от того, куда вы едете — это в гору и против ветра!