7.7 Загрузка спр.Номенклатура и док прих.Накладная из Excel

Тема в разделе "Отчеты и обработки для "1С:Предприятие 7.7"", создана пользователем Igor1_777, 20 дек 2009.

  1. TopicStarter Overlay
    Igor1_777
    Offline

    Igor1_777

    Регистрация:
    20 дек 2009
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    1
    Народ помогите пож...
    Задача загрузить из excelа приходную накладную, создать номенклатуру если такой еще нет. В номенклатуре нужно заполнить закупочную цену(спр.Цены подчиненный справочнику номенклатура ).

    При загрузке выдает ошибку
    ЦенаТов.ИспользоватьВладельца(Таб1.ТекущаяСтрока());
    {D:\EXCEL_2.ERT(143)}: Поле агрегатного объекта не обнаружено (ТекущаяСтрока)

    Что я делаю не правильно? Любые советы приветствуются. Только пожалуйста по подробней.

    вот блок
    Код:
    Таб 	        = СоздатьОбъект("Таблица");
    Таб1 	= СоздатьОбъект("Справочник.Номенклатура");
    Вал		= СоздатьОбъект("Справочник.Валюты");
    ЕдИзм	= СоздатьОбъект("Справочник.КлассификаторЕдИзм");
    НП1		= СоздатьОбъект("Справочник.СтавкиНП");
    Док 	        = СоздатьОбъект("Документ.ПриходнаяНакладная");
    ЦенаТов = СоздатьОбъект("Справочник.Цены");
    ЦенаТов.ИспользоватьДату(РабочаяДата());
    
    Док.Новый();            
    Док.ДатаДок   		= РабочаяДата();
    Док.ПризнакНакладной=Перечисление.ПризнПрихНакл.Закупка;
    
    Таб.ИсходнаяТаблица("Форма");
    Таб.ВывестиСекцию("Шапка");
    нс=1;
    
    Пока нс<=к_стр Цикл
    
    Наименование1	=ТЗ.ПолучитьЗначение(нс,2);
    Модель1			=ТЗ.ПолучитьЗначение(нс,3);
    Ткань1			=ТЗ.ПолучитьЗначение(нс,4);
    Цвет1			=ТЗ.ПолучитьЗначение(нс,5);
    Размер1			=ТЗ.ПолучитьЗначение(нс,6);
    Количество1		=ТЗ.ПолучитьЗначение(нс,7);
    Цена1			=ТЗ.ПолучитьЗначение(нс,8);
    ПНаименование1  =Наименование1+"_"+Модель1+"_"+Ткань1+"_"+Цвет1+"_"+Размер1;
    
    Если Таб1.НайтиПоНаименованию(Наименование1,0,1) =1 <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/тогда')">Тогда			</span>
    Родитель = Таб1.ТекущийЭлемент();
    Таб1.ИспользоватьРодителя(Родитель);
    Если Таб1.НайтиПоНаименованию(Модель1,,1) =1 Тогда
    Родитель = Таб1.ТекущийЭлемент();
    Таб1.ИспользоватьРодителя(Родитель);
    Если Таб1.НайтиПоНаименованию(Цвет1,,1) =1 Тогда
    Родитель = Таб1.ТекущийЭлемент();
    Таб1.ИспользоватьРодителя(Родитель);
    Если Таб1.НайтиПоНаименованию(ПНаименование1,,1) =1 Тогда
    //Таб.ВывестиСекцию("Строка");
    
    
    
    Док.НоваяСтрока();
    Док.Товар 		= Таб1.ТекущийЭлемент();
    Док.Количество 	= Количество1;
    Док.Единица		= ЕдИзм.ТекущийЭлемент();
    Док.Цена		= Цена1;
    Док.Сумма		= Док.Цена * Док.Количество;
    Док.Всего		= Док.Сумма;
    нс=нс+1;
    
    
    ЦенаТов.ИспользоватьВладельца(Таб1.ТекущаяСтрока());
    
    Иначе
    Таб1.Новый();
    Таб1.Наименование		=ПНаименование1;
    Таб1.ПолнНаименование	=ПНаименование1;
    Таб1.ВидТовара 			=Перечисление.ВидыТоваров.Товар;
    Таб1.ТипТовара 			=Перечисление.ТипыТоваров.Штучный;
    Вал.НайтиПоНаименованию("руб");
    Таб1.ВалютаУчета		=Вал.ТекущийЭлемент();
    ЕдИзм.НайтиПоНаименованию("шт");
    Таб1.БазоваяЕдиница		=ЕдИзм.ТекущийЭлемент();
    Таб1.СтавкаНДС			=Перечисление.ЗначенияНДС.безНДС;
    Таб1.ИспользоватьДату(ТекущаяДата());
    НП1.НайтиПоНаименованию("без налога");
    Таб1.СтавкаНП			=НП1.ТекущийЭлемент();
    Таб1.УчетнаяЦена		=Цена1;
    Таб1.Записать();
    //Таб.ВывестиСекцию("Строка");
    
    Док.НоваяСтрока();
    
    Док.Товар 		= Таб1.ТекущийЭлемент();
    Док.Количество 	= Количество1;
    Док.Единица		= ЕдИзм.ТекущийЭлемент();
    Док.Цена		= Цена1;
    Док.Сумма		= Док.Цена * Док.Количество;
    Док.Всего		= Док.Сумма;
    нс=нс+1;
    КонецЕсли;
    Иначе
    Таб1.НоваяГруппа();
    Таб1.Наименование=Цвет1;
    Таб1.Записать();
    КонецЕсли;
    Иначе
    Таб1.НоваяГруппа();
    Таб1.Наименование=Модель1;
    Таб1.Записать();
    КонецЕсли;	
    Иначе
    Таб1.НоваяГруппа();
    Таб1.Наименование=Наименование1;
    Таб1.Записать();
    КонецЕсли;
    КонецЦикла;
    
    
    [warn="Внимание"]
    Пользуемся тегами
    [/warn]
  2. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Таб1 это же не ТаблицаЗначений, а Справочник. Используйте ТекущийЭлемент()
  3. TopicStarter Overlay
    Igor1_777
    Offline

    Igor1_777

    Регистрация:
    20 дек 2009
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    1
    Да помогло Спасибо.
    Теперь другая проблема. Когда загружаешь документ, если в перво столбике одно и тоже наименование то все нормально, создает подгруппы проверяет есть ли похожие слова в общем все хорошо, но как только в первом столбике появляется другое наименование доходит до второго сова создает "Наименование1" а "Модель1" неограниченно дублирует. Вопрос все тот же что не так, где то с "ИспользоватьРодителя" напутал ?
    P.S. И очень долго получается может что лучше посоветуете.
    Код:
    Таб 	= СоздатьОбъект("Таблица");
    Таб1 	= СоздатьОбъект("Справочник.Номенклатура");
    Вал		= СоздатьОбъект("Справочник.Валюты");
    ЕдИзм	= СоздатьОбъект("Справочник.КлассификаторЕдИзм");
    Единицы1= СоздатьОбъект("Справочник.Единицы");
    НП1		= СоздатьОбъект("Справочник.СтавкиНП");
    Док 	= СоздатьОбъект("Документ.ПриходнаяНакладная");
    ТипыЦен1= СоздатьОбъект("Справочник.ТипыЦен");
    ЦенаТов = СоздатьОбъект("Справочник.Цены");
    ЦенаТов.ИспользоватьДату(РабочаяДата());
    
    Док.Новый();            
    Док.ДатаДок   		= РабочаяДата();
    Док.ПризнакНакладной=Перечисление.ПризнПрихНакл.Закупка;
    
    Таб.ИсходнаяТаблица("Форма");
    Таб.ВывестиСекцию("Шапка");
    нс=1;
    
    Пока нс<=к_стр Цикл
    
    Наименование1	=ТЗ.ПолучитьЗначение(нс,2);
    Модель1			=ТЗ.ПолучитьЗначение(нс,3);
    Ткань1			=ТЗ.ПолучитьЗначение(нс,4);
    Цвет1			=ТЗ.ПолучитьЗначение(нс,5);
    Размер1			=ТЗ.ПолучитьЗначение(нс,6);
    Количество1		=ТЗ.ПолучитьЗначение(нс,7);
    Цена1			=ТЗ.ПолучитьЗначение(нс,8);
    ПНаименование1  =Наименование1+"_"+Модель1+"_"+Ткань1+"_"+Цвет1+"_"+Размер1;
    
    Сообщить(Наименование1 +" "+ Модель1+" "+Ткань1+" "+Цвет1+" "+Размер1);   
    //нс=нс+1;
    
    Если Таб1.НайтиПоНаименованию(Наименование1,0,1) =1 <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/тогда')">Тогда			</span>
    НайденыйТовар = Таб1.ТекущийЭлемент(); 
    Родитель = Таб1.ТекущийЭлемент();
    Таб1.ИспользоватьРодителя(Родитель);
    Сообщить(Родитель.Уровень()+"1");
    Если Таб1.НайтиПоНаименованию(Модель1,0,1) =1 Тогда
    Родитель = Таб1.ТекущийЭлемент();
    Таб1.ИспользоватьРодителя(Родитель);
    Сообщить(Родитель.Уровень()+"2");
    //Сообщить(Таб1.ТекущийЭлемент());
    Если Таб1.НайтиПоНаименованию(Цвет1,0,1) =1 Тогда
    Родитель = Таб1.ТекущийЭлемент();
    Таб1.ИспользоватьРодителя(Родитель);
    Сообщить(Родитель.Уровень()+"3");
    //Сообщить(Таб1.ТекущийЭлемент());
    Если Таб1.НайтиПоНаименованию(ПНаименование1,,1) =1 Тогда
    //Таб.ВывестиСекцию("Строка");
    
    
    
    Док.НоваяСтрока();
    Док.Товар 		= Таб1.ТекущийЭлемент();
    Док.Количество 	= Количество1;
    Док.Единица		= ЕдИзм.ТекущийЭлемент();
    Док.Цена		= Цена1;
    Док.Сумма		= Док.Цена * Док.Количество;
    Док.Всего		= Док.Сумма;
    нс=нс+1;
    
    //если ТипыЦен1.НайтиПоНаименованию("Закупочная") =0 Тогда
    ТипыЦен1.НайтиПоНаименованию("Закупочная");
    Вал.НайтиПоНаименованию("руб");
    Если Единицы1.НайтиПоНаименованию("шт") =0 Тогда
    Единицы1.ИспользоватьВладельца(Таб1.ТекущийЭлемент());
    Единицы1.Новый();
    ЕдИзм.НайтиПоНаименованию("шт");
    Единицы1.Наименование	= ЕдИзм.ТекущийЭлемент();
    Единицы1.ТипЕдиницы		= ЕдИзм.ТекущийЭлемент();
    Единицы1.Коэффициент	= 1;
    Единицы1.Записать();
    Иначе
    Единицы1.НайтиПоНаименованию("шт");
    КонецЕсли;
    
    ЦенаТов.ИспользоватьВладельца(Таб1.ТекущийЭлемент());
    ЦенаТов.Новый();
    ЦенаТов.Цена			= Цена1;
    ЦенаТов.КатегорияЦены	= ТипыЦен1.ТекущийЭлемент();
    ЦенаТов.Валюта			= Вал.ТекущийЭлемент();
    ЦенаТов.Единица			= Единицы1.ТекущийЭлемент();
    ЦенаТов.Записать();
    //Иначе
    Таб1.ИспользоватьРодителя(Таб1.Родитель);
    Иначе
    Таб1.Новый();
    Таб1.Наименование		=ПНаименование1;
    Таб1.ПолнНаименование	=ПНаименование1;
    Таб1.ВидТовара 			=Перечисление.ВидыТоваров.Товар;
    Таб1.ТипТовара 			=Перечисление.ТипыТоваров.Штучный;
    Вал.НайтиПоНаименованию("руб");
    Таб1.ВалютаУчета		=Вал.ТекущийЭлемент();
    ЕдИзм.НайтиПоНаименованию("шт");
    Таб1.БазоваяЕдиница		=ЕдИзм.ТекущийЭлемент();
    Таб1.СтавкаНДС			=Перечисление.ЗначенияНДС.безНДС;
    Таб1.ИспользоватьДату(ТекущаяДата());
    НП1.НайтиПоНаименованию("без налога");
    Таб1.СтавкаНП			=НП1.ТекущийЭлемент();
    Таб1.УчетнаяЦена		=Цена1;
    Таб1.Записать();
    //Таб.ВывестиСекцию("Строка");
    
    ТипыЦен1.НайтиПоНаименованию("Закупочная");
    Вал.НайтиПоНаименованию("руб");
    Если Единицы1.НайтиПоНаименованию("шт") =0 Тогда
    Единицы1.ИспользоватьВладельца(Таб1.ТекущийЭлемент());
    Единицы1.Новый();
    ЕдИзм.НайтиПоНаименованию("шт");
    Единицы1.Наименование	= ЕдИзм.ТекущийЭлемент();
    Единицы1.ТипЕдиницы		= ЕдИзм.ТекущийЭлемент();
    Единицы1.Коэффициент	= 1;
    Единицы1.Записать();
    Иначе
    Единицы1.НайтиПоНаименованию("шт");
    КонецЕсли;
    
    ЦенаТов.ИспользоватьВладельца(Таб1.ТекущийЭлемент());
    ЦенаТов.Новый();
    ЦенаТов.Цена			= Цена1;
    ЦенаТов.КатегорияЦены	= ТипыЦен1.ТекущийЭлемент();
    ЦенаТов.Валюта			= Вал.ТекущийЭлемент();
    ЦенаТов.Единица			= Единицы1.ТекущийЭлемент();
    ЦенаТов.Записать();
    
    Док.НоваяСтрока();
    
    Док.Товар 		= Таб1.ТекущийЭлемент();
    Док.Количество 	= Количество1;
    Док.Единица		= ЕдИзм.ТекущийЭлемент();
    Док.Цена		= Цена1;
    Док.Сумма		= Док.Цена * Док.Количество;
    Док.Всего		= Док.Сумма;
    Таб1.ИспользоватьРодителя(Таб1.Родитель);
    нс=нс+1;
    КонецЕсли;
    Иначе
    Таб1.НоваяГруппа();
    Таб1.Наименование=Цвет1;
    Таб1.Записать();
    КонецЕсли;
    Иначе
    Таб1.НоваяГруппа();
    Таб1.Наименование=Модель1;
    Таб1.Записать();
    КонецЕсли;	
    Иначе
    Таб1.ИспользоватьРодителя(Таб1.Родитель);	
    Таб1.НоваяГруппа();
    Таб1.Наименование=Наименование1;
    Таб1.Записать();
    КонецЕсли;
    КонецЦикла;
    
    
    [warn="Внимание"]
    Убедительная просьба пользоваться тегами. Уважайте коллег по форуму.
    [/warn]
  4. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Ошибка в том что счетчик цикла
    Код:
    нс=нс+1;
    
    
    Нужно вынести в конец цикла

    Код:
    нс=нс+1;
    КонецЦикла;
    
    
    т.к. если нет такой модели счетчик не увеличивается и вы постоянно "гоняете" по одному и тому же значению.....
  5. TopicStarter Overlay
    Igor1_777
    Offline

    Igor1_777

    Регистрация:
    20 дек 2009
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    1
    Проблемы продолжаются.
    1)нс=нс+1 перенесенная в конец цикла полностью проблему не решила. Не вся номенклатура попадает в справочник за один проход цикла, приходится второй раз загружать документ чтобы все загрузить. (Пока смирюсь с этим)
    2)Загрузка цены. Каждая загрузка документа создает новую "закупочная". Не могу разобраться как сделать чтобы вел историю.

    Код:
    //*******************************************
    Процедура ПриОткрытии()
    н_стр=1;
    н_стлб=1;
    к_стлб=9;	
    КонецПроцедуры
    
    Процедура Сформировать() 
    Если (н_стр<1) или (к_стр<1) или (н_стлб<1) или (к_стлб<1) Тогда Предупреждение("Заданы не все параметры!!!"); 
    Возврат;	
    КонецЕсли;
    
    ТЗ=СоздатьОбъект("ТаблицаЗначений"); 
    кол=1; 
    стр=1; 
    
    
    
    кол_стр=к_стр;
    кол_стлб=к_стлб;
    
    Пока стр<=кол_стр Цикл ТЗ.НоваяСтрока(); 
    стр=стр+1;
    КонецЦикла;
    
    Пока кол<=кол_стлб Цикл	ТЗ.НоваяКолонка(); 
    кол=кол+1; 
    КонецЦикла;
    
    фл=СоздатьОбъект("Excel.Application");//КП=КаталогПользователя();
    //КП="C:/";
    Файл="";
    
    Для а=1 По фл.Workbooks.Count Цикл б=фл.Workbooks(а);
    Если б.Name=Файл Тогда Эксель=б;
    Прервать;
    КонецЕсли;
    КонецЦикла;
    
    Если ПустоеЗначение(Эксель)=1 Тогда	Эксель=фл.Workbooks.Open(СокрЛП(ИмяФ));
    КонецЕсли;
    
    фл.Visible=1;
    Если Эксель.Worksheets.Count=1 Тогда у=1;
    Иначе сз=СоздатьОбъект("СписокЗначений");
    Для а=1 По Эксель.Worksheets.Count Цикл сз.ДобавитьЗначение(а,Эксель.Worksheets(а).Name);
    КонецЦикла;
    
    Если сз.ВыбратьЗначение(у,"Выбор листа - "+Эксель.Name)=0 Тогда	Возврат	
    КонецЕсли; 
    КонецЕсли;
    
    пер1=Эксель.Worksheets(у);
    пер1.Activate();
    пер2=Эксель.Worksheets(у).Cells.CurrentRegion;
    пер3=6;
    стр=1;
    строки=н_стр+к_стр;
    колонки=н_стлб+к_стлб;
    РезТ="";
    Пока стр<=к_стр Цикл кол=1;
    Пока кол<=к_стлб Цикл яч=пер2.Cells(стр+н_стр-1,кол+н_стлб-1).Value;ТЗ.УстановитьЗначение(стр,кол,яч);
    кол=кол+1;	
    КонецЦикла;
    стр=стр+1;
    КонецЦикла;
    
    Эксель.Close();
    Таб 	= СоздатьОбъект("Таблица");
    Таб1 	= СоздатьОбъект("Справочник.Номенклатура");
    Вал		= СоздатьОбъект("Справочник.Валюты");
    ЕдИзм	= СоздатьОбъект("Справочник.КлассификаторЕдИзм");
    Единицы1= СоздатьОбъект("Справочник.Единицы");
    НП1		= СоздатьОбъект("Справочник.СтавкиНП");
    Док 	= СоздатьОбъект("Документ.ПриходнаяНакладная");
    ТипыЦен1= СоздатьОбъект("Справочник.ТипыЦен");
    ЦенаТов = СоздатьОбъект("Справочник.Цены");
    ЦенаТов.ИспользоватьДату(РабочаяДата());
    
    Док.Новый();            
    Док.ДатаДок   		= РабочаяДата();
    Док.ПризнакНакладной=Перечисление.ПризнПрихНакл.Закупка;
    
    Таб.ИсходнаяТаблица("Форма");
    Таб.ВывестиСекцию("Шапка");
    нс=1;
    
    Пока нс<=к_стр Цикл
    пр=0;	
    Наименование1	=СокрЛ(ТЗ.ПолучитьЗначение(нс,2));
    Модель1			=СокрЛ(ТЗ.ПолучитьЗначение(нс,3));
    Ткань1			=СокрЛ(ТЗ.ПолучитьЗначение(нс,4));
    Цвет1			=СокрЛ(ТЗ.ПолучитьЗначение(нс,5));
    Размер1			=СокрЛ(ТЗ.ПолучитьЗначение(нс,6));
    Количество1		=ТЗ.ПолучитьЗначение(нс,7);
    Цена1			=ТЗ.ПолучитьЗначение(нс,8);
    ПНаименование1  =Наименование1+"_"+Модель1+"_"+Ткань1+"_"+Цвет1+"_"+Размер1;
    
    Сообщить(Наименование1 +" "+ Модель1+" "+Ткань1+" "+Цвет1+" "+Размер1);   
    
    Родитель = Таб1.ТекущийЭлемент();
    Если Таб1.НайтиПоНаименованию(Наименование1,0,1) =1 <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/тогда')">Тогда			</span>
    Таб1.ИспользоватьРодителя(Таб1.ТекущийЭлемент());
    Если Таб1.НайтиПоНаименованию(Модель1,,1) =1 Тогда
    Таб1.ИспользоватьРодителя(Таб1.ТекущийЭлемент());
    Если Таб1.НайтиПоНаименованию(Цвет1,,1) =1 Тогда
    Таб1.ИспользоватьРодителя(Таб1.ТекущийЭлемент());
    Если Таб1.НайтиПоНаименованию(ПНаименование1,,1) =1 Тогда
    //Таб.ВывестиСекцию("Строка");
    
    Док.НоваяСтрока();
    Док.Товар 		= Таб1.ТекущийЭлемент();
    Док.Количество 	= Количество1;
    Док.Единица		= Единицы1.ТекущийЭлемент();
    Док.Коэффициент	= 1;
    Док.Цена		= Цена1;
    Док.Сумма		= Док.Цена * Док.Количество;
    Док.Всего		= Док.Сумма;
    
    
    //Если ТипыЦен1.НайтиПоНаименованию("Закупочная") =1 Тогда
    //	ТипыЦен1.НайтиПоНаименованию("Закупочная");
    //	Если ЦенаТов.ИспользоватьДату(ЦенаТов.ТекущийЭлемент()) = РабочаяДата() Тогда
    //    	Сообщить("Для "+ПНаименование1+" цена неможет изменятся более одного раза в день." );
    //	Иначе
    //	    ЦенаТов.ИспользоватьДату(НачГода());
    //		ЦенаТов.ИспользоватьВладельца(Таб1.ТекущийЭлемент())
    //		ЦенаТов.ВыбратьЭлементы();
    //			Пока ЦенаТов.ИспользоватьВладельца(Таб1.ТекущийЭлемент()).ПолучитьЭлемент() = 1 Цикл
    //				Сообщить(ЦенаТов);
    //				Если ЦенаТов.КатегорияЦены = "Закупочная" Тогда
    //				//ЦенаТов.НайтиПоНаименованию("Закупочная");
    //				//ЦенаТов.ИспользоватьВладельца(Таб1.ТекущийЭлемент());
    //				ЦенаТов.ИспользоватьДату(РабочаяДата());
    //				ЦенаТов.Цена			= Цена1;
    //				Иначе
    //				КонецЕсли;
    //			КонецЦикла;
    //	КонецЕсли;
    //Иначе
    
    //ВыборкаЦен.ВыбратьЭлементы();
    //Пока ВыборкаЦен.ПолучитьЭлемент()=1 Цикл
    //	
    //		Если Выбран()=0 Тогда
    //			// для новой цена сравниваем только совпадение категории
    //			ФлагОшибки = 0;
    //			Прервать;
    //		Иначе
    //			// для сохраненного элемента проверить несовпадение категорий
    //			// недостаточно, т.к. из выборки можно получить редактируемый элемент
    //			// дублирование категорий может произойти только если совпадают
    //			// категории у разных элементов
    //			Если ТекущийЭлемент() <> ВыборкаЦен.ТекущийЭлемент() Тогда
    //				ФлагОшибки = 0;
    //				Прервать;
    //			КонецЕсли;
    //		КонецЕсли;
    //	
    //КонецЦикла;
    //
    //Если ФлагОшибки = 0 Тогда
    //	Предупреждение("У товара уже есть '"+КатегорияЦены+"' цена"+
    //	              ?(ВыборкаЦен.ПометкаУдаления()=1," (помечена на удаление).",""));
    //	СтатусВозврата(0);
    //	Возврат;
    //КонецЕсли;
    
    ТипыЦен1.НайтиПоНаименованию("Закупочная");
    Вал.НайтиПоНаименованию("руб");
    Если Единицы1.НайтиПоНаименованию("шт") =0 Тогда
    Единицы1.ИспользоватьВладельца(Таб1.ТекущийЭлемент());
    Единицы1.Новый();
    ЕдИзм.НайтиПоНаименованию("шт");
    Единицы1.Наименование	= ЕдИзм.ТекущийЭлемент();
    Единицы1.ТипЕдиницы		= ЕдИзм.ТекущийЭлемент();
    Единицы1.Коэффициент	= 1;
    Единицы1.Записать();
    Иначе
    Единицы1.НайтиПоНаименованию("шт");
    КонецЕсли;
    
    //ЦенаТов.ИспользоватьДату(ТекущаяДата());
    ЦенаТов.ИспользоватьВладельца(Таб1.ТекущийЭлемент());
    ЦенаТов.ВыбратьЭлементы();
    Пока ЦенаТов.ПолучитьЭлемент()=1 Цикл
    Если Строка(ЦенаТов.КатегорияЦены) = "Закупочная" Тогда
    пр=пр+1;
    Если ЦенаТов.ИспользоватьДату(ЦенаТов.ТекущийЭлемент()) = РабочаяДата() Тогда
    //Сообщить("Для "+ПНаименование1+" цена неможет изменятся более одного раза в день." );
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
    
    Если пр = 0 Тогда
    
    ЦенаТов.Новый();
    ЦенаТов.Цена			= Цена1;
    ЦенаТов.КатегорияЦены	= ТипыЦен1.ТекущийЭлемент();
    ЦенаТов.Валюта			= Вал.ТекущийЭлемент();
    ЦенаТов.Единица			= Единицы1.ТекущийЭлемент();
    ЦенаТов.Записать();
    КонецЕсли;
    Таб1.ИспользоватьРодителя(Таб1.Родитель);
    //КонецЕсли
    Иначе
    Таб1.Новый();
    Таб1.Наименование		=ПНаименование1;
    Таб1.ПолнНаименование	=ПНаименование1;
    Таб1.ВидТовара 			=Перечисление.ВидыТоваров.Товар;
    Таб1.ТипТовара 			=Перечисление.ТипыТоваров.Штучный;
    Вал.НайтиПоНаименованию("руб");
    Таб1.ВалютаУчета		=Вал.ТекущийЭлемент();
    ЕдИзм.НайтиПоНаименованию("шт");
    Таб1.БазоваяЕдиница		=ЕдИзм.ТекущийЭлемент();
    Таб1.СтавкаНДС			=Перечисление.ЗначенияНДС.безНДС;
    Таб1.ИспользоватьДату(ТекущаяДата());
    НП1.НайтиПоНаименованию("без налога");
    Таб1.СтавкаНП			=НП1.ТекущийЭлемент();
    Таб1.УчетнаяЦена		=Цена1;
    Таб1.Записать();
    //Таб.ВывестиСекцию("Строка");
    
    ТипыЦен1.НайтиПоНаименованию("Закупочная");
    Вал.НайтиПоНаименованию("руб");
    Если Единицы1.НайтиПоНаименованию("шт") =0 Тогда
    Единицы1.ИспользоватьВладельца(Таб1.ТекущийЭлемент());
    Единицы1.Новый();
    ЕдИзм.НайтиПоНаименованию("шт");
    Единицы1.Наименование	= ЕдИзм.ТекущийЭлемент();
    Единицы1.ТипЕдиницы		= ЕдИзм.ТекущийЭлемент();
    Единицы1.Коэффициент	= 1;
    Единицы1.Записать();
    Иначе
    Единицы1.НайтиПоНаименованию("шт");
    КонецЕсли;
    
    ЦенаТов.ИспользоватьВладельца(Таб1.ТекущийЭлемент());
    ЦенаТов.Новый();
    ЦенаТов.Цена			= Цена1;
    ЦенаТов.КатегорияЦены	= ТипыЦен1.ТекущийЭлемент();
    ЦенаТов.Валюта			= Вал.ТекущийЭлемент();
    ЦенаТов.Единица			= Единицы1.ТекущийЭлемент();
    ЦенаТов.Записать();
    
    Док.НоваяСтрока();
    
    Док.Товар 		= Таб1.ТекущийЭлемент();
    Док.Количество 	= Количество1;
    Док.Единица		= Единицы1.ТекущийЭлемент();
    Док.Коэффициент	= 1;
    Док.Цена		= Цена1;
    Док.Сумма		= Док.Цена * Док.Количество;
    Док.Всего		= Док.Сумма;
    Таб1.ИспользоватьРодителя(Таб1.Родитель);
    
    КонецЕсли;
    Иначе
    Таб1.НоваяГруппа();
    Таб1.Наименование=Цвет1;
    Таб1.Записать();
    КонецЕсли;
    Иначе
    Таб1.НоваяГруппа();
    Таб1.Наименование=Модель1;
    Таб1.Записать();
    КонецЕсли;	
    Иначе
    Таб1.ИспользоватьРодителя(Таб1.Родитель);	
    Таб1.НоваяГруппа();
    Таб1.Наименование=Наименование1;
    Таб1.Записать();
    КонецЕсли;
    нс=нс+1;
    КонецЦикла;
    
    //	Док.Записать();	
    //Таб.Опции(0,0,0,0);
    //Таб.ТолькоПросмотр(1);
    //Таб.Показать("Выходная Форма","");
    КонецПроцедуры
    
    
  6. TopicStarter Overlay
    Igor1_777
    Offline

    Igor1_777

    Регистрация:
    20 дек 2009
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    1
    Значение не представляет агрегатный объект (Получить)
    В чем проблема? ЦенаТов.ИспользоватьДату(РабочаяДата()) если в этом то где именно?

    Код:
     
    Периодический = СоздатьОбъект("Периодический");
    Таб     = СоздатьОбъект("Таблица");
    Таб1     = СоздатьОбъект("Справочник.Номенклатура");
    Вал        = СоздатьОбъект("Справочник.Валюты");
    ЕдИзм    = СоздатьОбъект("Справочник.КлассификаторЕдИзм");
    Единицы1= СоздатьОбъект("Справочник.Единицы");
    НП1        = СоздатьОбъект("Справочник.СтавкиНП");
    Док     = СоздатьОбъект("Документ.ПриходнаяНакладная");
    ТипыЦен1= СоздатьОбъект("Справочник.ТипыЦен");
    ЦенаТов = СоздатьОбъект("Справочник.Цены");
    //ЦенаТов.ИспользоватьДату(РабочаяДата());
    
    Док.Новый();            
    Док.ДатаДок           = РабочаяДата();
    Док.ПризнакНакладной=Перечисление.ПризнПрихНакл.Закупка;
    
    Таб.ИсходнаяТаблица("Форма");
    Таб.ВывестиСекцию("Шапка");
    нс=1;
    
    Пока нс<=к_стр Цикл
    пр=0;    
    Наименование1    =СокрЛ(ТЗ.ПолучитьЗначение(нс,2));
    Модель1            =СокрЛ(ТЗ.ПолучитьЗначение(нс,3));
    Ткань1            =СокрЛ(ТЗ.ПолучитьЗначение(нс,4));
    Цвет1            =СокрЛ(ТЗ.ПолучитьЗначение(нс,5));
    Размер1            =СокрЛ(ТЗ.ПолучитьЗначение(нс,6));
    Количество1        =ТЗ.ПолучитьЗначение(нс,7);
    Цена1            =ТЗ.ПолучитьЗначение(нс,8);
    ПНаименование1  =Наименование1+"_"+Модель1+"_"+Ткань1+"_"+Цвет1+"_"+Размер1;
    
    Сообщить(Наименование1 +" "+ Модель1+" "+Ткань1+" "+Цвет1+" "+Размер1);   
    
    Родитель = Таб1.ТекущийЭлемент();
    Если Таб1.НайтиПоНаименованию(Наименование1,0,1) =1 Тогда            
    Таб1.ИспользоватьРодителя(Таб1.ТекущийЭлемент());
    Если Таб1.НайтиПоНаименованию(Модель1,,1) =1 Тогда
    Таб1.ИспользоватьРодителя(Таб1.ТекущийЭлемент());
    Если Таб1.НайтиПоНаименованию(Цвет1,,1) =1 Тогда
    Таб1.ИспользоватьРодителя(Таб1.ТекущийЭлемент());
    Если Таб1.НайтиПоНаименованию(ПНаименование1,,1) =1 Тогда
    //Таб.ВывестиСекцию("Строка");
    
    Док.НоваяСтрока();
    Док.Товар         = Таб1.ТекущийЭлемент();
    Док.Количество     = Количество1;
    Док.Единица        = Единицы1.ТекущийЭлемент();
    Док.Коэффициент    = 1;
    Док.Цена        = Цена1;
    Док.Сумма        = Док.Цена * Док.Количество;
    Док.Всего        = Док.Сумма;
    
    ТипыЦен1.НайтиПоНаименованию("Закупочная");
    Вал.НайтиПоНаименованию("руб");
    Если Единицы1.НайтиПоНаименованию("шт") =0 Тогда
    Единицы1.ИспользоватьВладельца(Таб1.ТекущийЭлемент());
    Единицы1.Новый();
    ЕдИзм.НайтиПоНаименованию("шт");
    Единицы1.Наименование    = ЕдИзм.ТекущийЭлемент();
    Единицы1.ТипЕдиницы        = ЕдИзм.ТекущийЭлемент();
    Единицы1.Коэффициент    = 1;
    Единицы1.Записать();
    Иначе
    Единицы1.НайтиПоНаименованию("шт");
    КонецЕсли;
    
    //ЦенаТов.ИспользоватьДату(ТекущаяДата());
    ЦенаТов.ИспользоватьВладельца(Таб1.ТекущийЭлемент());
    ЦенаТов.ВыбратьЭлементы();
    Пока ЦенаТов.ПолучитьЭлемент()=1 Цикл
    Если Строка(ЦенаТов.КатегорияЦены) = "Закупочная" Тогда
    пр=пр+1;    
    
    Если ЦенаТов.Цена.Получить(РабочаяДата())  0 Тогда
    Сообщить("Для "+ПНаименование1+" цена неможет изменятся более одного раза в день." );
    ЦенаТов.Цена.Установить(РабочаяДата(),Цена1);
    КонецЕсли;
    //  ЦенаТов.КатегорияЦены.Установить(РабочаяДата(),ТипыЦен1.ТекущийЭлемент());
    //  ЦенаТов.Валюта.Установить(РабочаяДата(),Вал.ТекущийЭлемент());
    //  ЦенаТов.Единица.Установить(РабочаяДата(),Единицы1.ТекущийЭлемент());
    
    КонецЕсли;
    КонецЦикла;
    
    Если пр >= 2 Тогда
    Сообщить("Для "+ПНаименование1+" зарегестрированно более одной закупочной цены");
    КонецЕсли;
    
    Если пр = 0 Тогда
    ЦенаТов.ИспользоватьДату(РабочаяДата());
    ЦенаТов.Новый();
    ЦенаТов.Цена            = Цена1;
    ЦенаТов.КатегорияЦены    = ТипыЦен1.ТекущийЭлемент();
    ЦенаТов.Валюта            = Вал.ТекущийЭлемент();
    ЦенаТов.Единица            = Единицы1.ТекущийЭлемент();
    ЦенаТов.Записать();
    КонецЕсли;
    Таб1.ИспользоватьРодителя(Таб1.Родитель);
    //КонецЕсли
    Иначе
    Таб1.Новый();
    Таб1.Наименование        =ПНаименование1;
    Таб1.ПолнНаименование    =ПНаименование1;
    Таб1.ВидТовара             =Перечисление.ВидыТоваров.Товар;
    Таб1.ТипТовара             =Перечисление.ТипыТоваров.Штучный;
    Вал.НайтиПоНаименованию("руб");
    Таб1.ВалютаУчета        =Вал.ТекущийЭлемент();
    ЕдИзм.НайтиПоНаименованию("шт");
    Таб1.БазоваяЕдиница        =ЕдИзм.ТекущийЭлемент();
    Таб1.СтавкаНДС            =Перечисление.ЗначенияНДС.безНДС;
    Таб1.ИспользоватьДату(ТекущаяДата());
    НП1.НайтиПоНаименованию("без налога");
    Таб1.СтавкаНП            =НП1.ТекущийЭлемент();
    Таб1.УчетнаяЦена        =Цена1;
    Таб1.Записать();
    //Таб.ВывестиСекцию("Строка");
    
    ТипыЦен1.НайтиПоНаименованию("Закупочная");
    Вал.НайтиПоНаименованию("руб");
    Если Единицы1.НайтиПоНаименованию("шт") =0 Тогда
    Единицы1.ИспользоватьВладельца(Таб1.ТекущийЭлемент());
    Единицы1.Новый();
    ЕдИзм.НайтиПоНаименованию("шт");
    Единицы1.Наименование    = ЕдИзм.ТекущийЭлемент();
    Единицы1.ТипЕдиницы        = ЕдИзм.ТекущийЭлемент();
    Единицы1.Коэффициент    = 1;
    Единицы1.Записать();
    Иначе
    Единицы1.НайтиПоНаименованию("шт");
    КонецЕсли;
    
    ЦенаТов.ИспользоватьВладельца(Таб1.ТекущийЭлемент());
    ЦенаТов.ИспользоватьДату(РабочаяДата());
    ЦенаТов.Новый();
    ЦенаТов.Цена            = Цена1;
    ЦенаТов.КатегорияЦены    = ТипыЦен1.ТекущийЭлемент();
    ЦенаТов.Валюта            = Вал.ТекущийЭлемент();
    ЦенаТов.Единица            = Единицы1.ТекущийЭлемент();
    ЦенаТов.Записать();
    
    Док.НоваяСтрока();
    
    Док.Товар         = Таб1.ТекущийЭлемент();
    Док.Количество     = Количество1;
    Док.Единица        = Единицы1.ТекущийЭлемент();
    Док.Коэффициент    = 1;
    Док.Цена        = Цена1;
    Док.Сумма        = Док.Цена * Док.Количество;
    Док.Всего        = Док.Сумма;
    Таб1.ИспользоватьРодителя(Таб1.Родитель);
    
    КонецЕсли;
    Иначе
    Таб1.НоваяГруппа();
    Таб1.Наименование=Цвет1;
    Таб1.Записать();
    КонецЕсли;
    Иначе
    Таб1.НоваяГруппа();
    Таб1.Наименование=Модель1;
    Таб1.Записать();
    КонецЕсли;    
    Иначе
    Таб1.ИспользоватьРодителя(Таб1.Родитель);    
    Таб1.НоваяГруппа();
    Таб1.Наименование=Наименование1;
    Таб1.Записать();
    КонецЕсли;
    нс=нс+1;
    КонецЦикла;
    
    
    
    p.s. Ура научился использовать теги :smile: :unsure:
  7. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    ИспользоватьДату - не влияет.
    Скорее всего вы пытаетесь получить цену у ГРУППЫ товара, а это не допустимо.

Поделиться этой страницей