Имя: Пароль:
1C
 
как программно добавить характеристику номенклатуры при...
0 Непоседа
 
23.11.04
11:58
...загрузке элемента номенклатуры из файла?
подскажите, где можно посмотреть?
1 Rovan
 
гуру
23.11.04
12:03
(0) Речь идет о заполнении ПВХ СвойстваОбъектов ?
2 Непоседа
 
23.11.04
12:05
да. об этом
3 Rovan
 
гуру
23.11.04
12:20
(2) У тебя типовая конфа ? Вот например у меня УТ, там есть процедура
Процедура ПроверитьДобавитьНовоеСвойство(Свойство, ТабличноеПоле) Экспорт
4 Непоседа
 
23.11.04
12:25
у меня типовая УПП, но наверное и тут есть что-то такое... сейчас посмотрю... спасибо :-)
5 Непоседа
 
23.11.04
12:53
нет, это не совсем то, эта процедура, цитирую, проверяет, должно ли новое свойство попасть в табличную часть обработки,
если да - добавляет свойство и активизирует соответствующую строку в табличном поле.
она уже созданное свойсво при необходимости добавляет в таблицу...

у меня есть файл dbf, в котором мне поставщик передает приходную накладную... так вот я проверяю есть ли у меня переданная номенклатура и если ее еще не было, то надо создавать... при этом в отдельных полях файла для каждой номенклатуры передаются рост, размер, цвет, цвет рисунка - это характеристика номенклатуры... как мне это добавить, чтобы потом в подчиненном справочнике "Характеристики номенклатуры" отобразилось добавленная характеристика??? знаю, что должно быть не сложно.. но сижу туплю :-(
6 Rovan
 
гуру
23.11.04
12:57
в УПП точно также - при записи элемента номенклатуры
Процедура ОбработкаЗаписиНовогоОбъекта(Объект, Источник)
   Если ТипЗнч(Объект) = Тип("ПланВидовХарактеристикОбъект.СвойстваОбъектов") Тогда
       ОбработкаОбъектЗначенияСвойств.ПроверитьДобавитьНовоеСвойство(Объект.Ссылка, ЭлементыФормы.СвойстваИЗначения);
   КонецЕсли;

   Если ТипЗнч(Объект) = Тип("СправочникОбъект.КатегорииОбъектов") Тогда
       ОбработкаОбъектКатегорииОбъекта.ПроверитьДобавитьНовуюКатегорию(Объект.Ссылка, ЭлементыФормы.Категории);
   КонецЕсли;
КонецПроцедуры
7 Непоседа
 
23.11.04
13:17
(6)то, что то привел, действительно есть...но (чуствую себя полнейшей тупицей :-( и может чуства меня не обманывают) у меня нет ЭлементовФормы, ввиду отсутствия формы и нет соответственно табличной части с введенными значениями...
в общем что-то я совсем , окончательно и бесповоротно запуталась :-(((
8 Непоседа
 
24.11.04
11:33
в общем, все действительно оказалось предельно просто... наверное просто был вчера не мой день.
со стандартными обработками и процедурами я пока до конца не разобралась. но записывать нужные мне значения и создавать характеристику номенклатуры при загрузке данных из файла я научилась...я думаю, что в очередной раз "изобрела велосипед", но хочу выложить кусочек кода, может кому и пригодится, наверняка ему можно придать и более божеский вид, но для меня в данной ситуации важна была предельная прозрачночность и читаемость кода.

   Характеристика          = Справочники.ХарактеристикиНоменклатуры.СоздатьЭлемент();
   Характеристика.Владелец = Товар.Ссылка;
   
   Размер      = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Размер");    
   Рост        = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Рост");    
   Цвет        = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Цвет",истина);    
   
   ЗначениеРазмер  = Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию(СокрЛП(ФайлОбмена.RAZM),Истина,,Размер);
   Если ЗначениеРазмер.Пустая() Тогда
       НовоеЗначение = Справочники.ЗначенияСвойствОбъектов.СоздатьЭлемент();
       НовоеЗначение.Владелец     = Размер.Ссылка;
       НовоеЗначение.Наименование = ФайлОбмена.RAZM;
       НовоеЗначение.Записать();
       ЗначениеРазмер = НовоеЗначение.Ссылка;
   КонецЕсли;
   
   ЗначениеРост    = Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию(СокрЛП(ФайлОбмена.ROST),Истина,,Рост);
   Если ЗначениеРост.Пустая() Тогда
       НовоеЗначение = Справочники.ЗначенияСвойствОбъектов.СоздатьЭлемент();
       НовоеЗначение.Владелец     = Рост.Ссылка;
       НовоеЗначение.Наименование = ФайлОбмена.ROST;
       НовоеЗначение.Записать();
       ЗначениеРост = НовоеЗначение.Ссылка;
   КонецЕсли;
   
   ЗначениеЦвет  = Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию(СокрЛП(ФайлОбмена.COL),Истина,,Цвет);
   Если ЗначениеЦвет.Пустая() Тогда
       НовоеЗначение = Справочники.ЗначенияСвойствОбъектов.СоздатьЭлемент();
       НовоеЗначение.Владелец     = Цвет.Ссылка;
       НовоеЗначение.Наименование = ФайлОбмена.COL;
       НовоеЗначение.Записать();
       ЗначениеРазмер = НовоеЗначение.Ссылка;
   КонецЕсли;

   КоллекцияЗначений = Новый СписокЗначений();
   КоллекцияЗначений.Добавить(ЗначениеРазмер);
   КоллекцияЗначений.Добавить(ЗначениеРост);
   КоллекцияЗначений.Добавить(ЗначениеЦвет);
   
   Наим = Характеристика.СформироватьНаименование(КоллекцияЗначений);
   Характеристика.Наименование = Наим;
   Характеристика.Записать();
   
   ТаблицаДляЗаписиВРегистр = Новый ТаблицаЗначений;
   ТаблицаДляЗаписиВРегистр.Колонки.Добавить("Свойство");
   ТаблицаДляЗаписиВРегистр.Колонки.Добавить("Значение");
   
   НоваяСтрока = ТаблицаДляЗаписиВРегистр.Добавить();
   НоваяСтрока.Свойство = Размер;
   НоваяСтрока.Значение = ЗначениеРазмер;
   
   НоваяСтрока = ТаблицаДляЗаписиВРегистр.Добавить();
   НоваяСтрока.Свойство = Рост;
   НоваяСтрока.Значение = ЗначениеРост;
   
   НоваяСтрока = ТаблицаДляЗаписиВРегистр.Добавить();
   НоваяСтрока.Свойство = Цвет;
   НоваяСтрока.Значение = ЗначениеЦвет;

   ЗаписьЗначенияВРегистр=РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьМенеджерЗаписи();
   
   НаборЗаписейЗначенияСвойств = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьНаборЗаписей();
   
   Для каждого Строка Из ТаблицаДляЗаписиВРегистр Цикл
       Если НЕ ЗначениеНеЗаполнено(Строка.Значение) Тогда
           Запись = НаборЗаписейЗначенияСвойств.Добавить();
           
           Запись.Объект   = Характеристика.Ссылка;
           Запись.Свойство = Строка.Свойство;
           Запись.Значение = Строка.Значение;
       КонецЕсли;
   КонецЦикла;
   НаборЗаписейЗначенияСвойств.Записать();
9 Atma
 
24.11.04
11:59
Ничего так велосипед получился, почти мотоцикл. Спасибо за код.