7.7 обработка справочника, не пойму где ошибка

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

  1. TopicStarter Overlay
    djonbox
    Offline

    djonbox

    Регистрация:
    9 авг 2012
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    1
    Здравствуйте, написал обработку, но никак не получается изменить значение элемента справочника. ТекЭл.ПодкатегорияТовара.Код=рез; спрН.Записать(); присвоил элемент и записал. Вроде правильно, но почему то не присваивается.
    [CODE1C]
    //*******************************************
    Процедура Сформировать()
    стр1=100;
    Стр2=1000;
    уд=2;
    спрН=СоздатьОбъект("Справочник.Номенклатура");
    СпрПодк=СоздатьОбъект("Справочник.ПодкатегорииТовара");
    СпрПодк.ИспользоватьВладельца(спрН);
    спрН.ВыбратьЭлементы();
    Пока спрН.ПолучитьЭлемент() = 1 Цикл
    ТекЭл=спрН.ТекущийЭлемент();
    СтрКод=ТекЭл.ПодкатегорияТовара.Код;
    СтрКод=Число(СтрКод);
    Если (СтрКод >стр1) и (СтрКод <Стр2) Тогда

    Сообщить(ТекЭл.Наименование+"///"+ ТекЭл.ПодкатегорияТовара.Код);
    теккод=ТекЭл.ПодкатегорияТовара.Код;
    /////////
    теккоддл=СтрДлина(теккод);
    Скудалить=теккоддл-уд;
    Сообщить(Скудалить);
    /////////////
    рез=Сред(теккод,Скудалить,теккоддл-1);
    ТекЭл.ПодкатегорияТовара.Код=рез;
    спрН.Записать();
    //Если СпрПодк.НайтиПоКоду(рез)=1 Тогда
    // ТекЭл.ПодкатегорияТовара.Код=СпрПодк.
    // Сообщить(рез);
    // спрН.Записать();
    //КонецЕсли;

    КонецЕсли;
    КонецЦикла;
    КонецПроцедуры
    [/CODE1C]
  2. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    Не присваивается, потому что нарушены типы данных:
    Код:
    ТекЭл=спрН.ТекущийЭлемент(); // Переменная ТекЭл содержит в себе объект метаданных, его изменить сам по себе нельзя
    спрН.Записать(); // По сути содержит ссылку на объект, его как раз и нужно изменять и сохранять,
    // но по коду нет изменений данной ссылки
    
    Для корректной работы достаточно все "ТекЭл" заменить на "спрН", а определение "ТекЭл" убрать.
  3. TopicStarter Overlay
    djonbox
    Offline

    djonbox

    Регистрация:
    9 авг 2012
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    1
    Переделал, всеравно не присваивает другой код в номенклатуре. Элемент находит не получается просто перевыбрать элемент с другим кодом.
    Код:
    //*******************************************
    Процедура Сформировать()   
    стр1=100;
    Стр2=1000;
    уд=2;
    спрН=СоздатьОбъект("Справочник.Номенклатура");
    СпрПодк=СоздатьОбъект("Справочник.ПодкатегорииТовара");
    СпрПодк.ИспользоватьВладельца(спрН);
    спрН.ВыбратьЭлементы();
    Пока спрН.ПолучитьЭлемент() = 1 Цикл
    
    СтрКод=спрН.ПодкатегорияТовара.код;
    СтрКод=Число(СтрКод);
    Если (СтрКод >стр1) и (СтрКод <Стр2)   Тогда 
    
    Сообщить(спрН.Наименование+"///"+спрН.ПодкатегорияТовара.Код);
    
    теккод=спрН.ПодкатегорияТовара.Код; 
    /////////
    теккоддл=СтрДлина(теккод);
    Скудалить=теккоддл-уд;
    Сообщить(Скудалить);
    /////////////
    рез=Сред(теккод,Скудалить,теккоддл-1);
    Если СпрПодк.НайтиПоКоду(рез)=1 Тогда
    Сообщить("Код найден");
    спрН.ПодкатегорияТовара.Код=рез; 
    спрН.Записать();
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
    КонецПроцедуры
    Внимание! Пользуйтесь тегами, уважайте коллег.
  4. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    Сначала разберитесь со структурой метаданных.

    Как я понимаю, есть справочник "Номенклатура", у него есть реквизит "ПодкатегорияТовара".
    Тип этого реквизита "Справочник.ПодкатегорииТовара". Ну так нужно менять код и сохранять именно справочник подкатегорий, а не номенклатуры.

    Код:
    	  Если СпрПодк.НайтиПоКоду(рез)=1 Тогда
    Сообщить("Код найден");
    СпрПодк.Код=рез;
    СпрПодк.Записать();
    КонецЕсли;
    
    Да и вообще смысл данного кода не понятен...
    Открываем отладчик, и смотрим, что куда передается.
    Конкретно по данному коду (без описания поставленной задачи, описания структуры метаданных и т.д.) дальше говорить смысла нет
  5. TopicStarter Overlay
    djonbox
    Offline

    djonbox

    Регистрация:
    9 авг 2012
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    1
    Вроде нашел проблему, справочник ПодкатегорияТовара привязан к справочнику(является владельцем) ук_категории_товаровKIP, и как бы прописать для номенклатыры кто для кого является владельцем.
    спрН=СоздатьОбъект("Справочник.Номенклатура");
    спрУк=СоздатьОбъект("Справочник.ук_категории_товаровKIP");
    СпрПодк=СоздатьОбъект("Справочник.ПодкатегорииТовара");
    СпрПодк.ИспользоватьВладельца(спрУк);

    И как в этом случае в оменклатуре переприсвоить другой код
  6. TopicStarter Overlay
    djonbox
    Offline

    djonbox

    Регистрация:
    9 авг 2012
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    1
    Задача простая, есть Спрвочник Номенклатура, в нем есть Справочник.ук_категории_товаровKIP которому подчинен Справочник.ПодкатегорииТовара. В справочнике Номенклатура мы заполняем соответственно ук_категории_товаровKIP и ПодкатегорииТовара. В справочнике ук_категории_товаровKIP данные занесены корректно, но вот в Справочник.ПодкатегорииТовара данные не корректные: наименования задвоились и создались с новым кодом который на разряд выше нормального кода (это наследие от предыдущих программистов).
    Необходимо в справочнике Номенклатура перевыбрать элементы с нормальными кодами из справочника Справочник.ПодкатегорииТовара.
  7. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    Ну так вот, есть уже алгоритм. Теперь его просто нужно описать словами 1С.
    Со стороны это сделать не возможно, нужно видеть структуру.

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