внешняя обработка для изменения свойств номенклатуры

  • Автор темы Simon-Phoenix
  • Дата начала
S

Simon-Phoenix

#1
1С восьмерка
занимаюсь совсем недавно, так что может вопрос и простой, но для меня сложный )

ситуация: нужно изменить одно из свойств товара, в часности Основной производитель

есть форма, в которой указывается изменяемое свойство и какое значение ему присваивать, подгрузка списка номенклатуры, у которой нужно изменить указанное свойство, осуществляется из экселевского файла

модуль формы:

Код:
Перем ВыборФайла, Exel;


Процедура КнопкаВыполнитьНажатие(Элемент)

Если ВыборФайла.Выбрать() Тогда

Файл = Exel.Workbooks.Open(ВыборФайла.ПолноеИмяФайла);
Табл = Файл.WorkSheets(1);

ЗначенияСвойствОбъектов = РегистрыСведений.ЗначенияСвойствОбъектов;
НаборСвойств = ЗначенияСвойствОбъектов.СоздатьНаборЗаписей();


Для СчСтрок = 1 По КоличествоСтрок Цикл

КодТовара = Табл.Cells(СчСтрок, 1).Text;
Товар = Справочники.Номенклатура.НайтиПоНАИМЕНОВАНИЮ(КодТовара).Ссылка;

Если Товар.Пустая() Тогда
Сообщить("Не найден элемент справочника: Код - " + КодТовара + " Наименование - " + Табл.Cells(СчСтрок, 1).Text);

Продолжить;

КонецЕсли;

НовоеСвойство = НаборСвойств.Добавить();
НовоеСвойство.Объект = Товар;
НовоеСвойство.Свойство = Свойство;
НовоеСвойство.Значение = Значение;


КонецЦикла;
НаборСвойств.Записать();

КонецЕсли;


Файл.Close();
Exel.Quit();
КонецПроцедуры


Exel = Новый COMОбъект("Excel.Application",);
ВыборФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ВыборФайла.МножественныйВыбор = Ложь;

проблема в том, что фактически создается новый РегистрыСведений.ЗначенияСвойствОбъектов, затирая уже имеющийся, а мне же надо, чтобы он добавлял запись, если таковой не присутствует, либо изменял уже существующую, меняя в ней свойство...третий день сижу, зарывшись в пособия разработчика 1С )...поможите плз )
 

Zab

Well-known member
07.08.2006
583
0
#2
при записи набора восьмерка перезаписывает все старые записи с таким-же отбором. Чтобы добавить, надо прочитать в набор то, что есть в регистре, потом дописать в него новые записи, и только потом записывать. Чтобы изменить - соответственно: читаем, изменяем то, что есть, записываем. Удачи.
 
S

Simon-Phoenix

#3
а можно поподробнее?
попытался добавить в код
НаборСвойств.Отбор.Объект.Установить(Товар);
НаборСвойств.Отбор.Свойство.Установить(Свойство);
НаборСвойств.Прочитать();
если ставлю перед
НовоеСвойство = НаборСвойств.Добавить();
НовоеСвойство.Объект = Товар;
НовоеСвойство.Свойство = Свойство;
НовоеСвойство.Значение = Значение;
то новые записи добавляет, но старые не редактирует, ругаясь, что запись уже существует в списке...т.е. ведет себя так, будто Запись=Ложь
если ставлю перед
НаборСвойств.Записать(Истина);
то вообще никакой реакции не получаю, будто обработка и не выполнялась )