1. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление

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

Тема в разделе "1C и всё что с ней связано", создана пользователем Simon-Phoenix, 16 ноя 2007.

  1. Simon-Phoenix

    Simon-Phoenix Гость

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

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

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

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

    Код:
    Перем ВыборФайла, Exel;
    
    
    Процедура КнопкаВыполнитьНажатие(Элемент)
    
    Если ВыборФайла.Выбрать() Тогда
    
    Файл = Exel.Workbooks.Open(ВыборФайла.ПолноеИмяФайла);
    Табл = Файл.WorkSheets(1);
    
    ЗначенияСвойствОбъектов = РегистрыСведений.ЗначенияСвойствОбъектов;
    НаборСвойств = ЗначенияСвойствОбъектов.СоздатьНаборЗаписей();
    
    
    Для СчСтрок = 1 По КоличествоСтрок Цикл
    
    КодТовара = Табл.Cells(СчСтрок, 1).Text;
    Товар = Справочники.Номенклатура.НайтиПоНАИМЕНОВАНИЮ(КодТовара).Ссылка;
    
    Если Товар.Пустая() Тогда
    Сообщить("Не найден элемент справочника: Код - " + КодТовара + " Наименование - " + Табл.Cells(СчСтрок, 1).Text);
    
    Продолжить;
    
    КонецЕсли;
    
    НовоеСвойство = НаборСвойств.Добавить();
    НовоеСвойство.Объект = Товар;
    НовоеСвойство.Свойство = Свойство;
    НовоеСвойство.Значение = Значение;
    
    
    КонецЦикла;
    НаборСвойств.Записать();
    
    КонецЕсли;
    
    
    Файл.Close();
    Exel.Quit();
    КонецПроцедуры
    
    
    Exel = Новый COMОбъект("Excel.Application",);
    ВыборФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    ВыборФайла.МножественныйВыбор = Ложь;

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

    Zab Well-Known Member

    Репутация:
    0
    Регистрация:
    7 авг 2006
    Сообщения:
    583
    Симпатии:
    0
    при записи набора восьмерка перезаписывает все старые записи с таким-же отбором. Чтобы добавить, надо прочитать в набор то, что есть в регистре, потом дописать в него новые записи, и только потом записывать. Чтобы изменить - соответственно: читаем, изменяем то, что есть, записываем. Удачи.
     
  3. Simon-Phoenix

    Simon-Phoenix Гость

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

    Simon-Phoenix Гость

    Репутация:
    0
    все, разобрался
     
Загрузка...

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