Имя: Пароль:
1C
1C 7.7
v7: Ошибка при проведении накладной
0 Aldnepr
 
17.01.21
15:07
Необходимо записать в ТЗ реквизит Категория из Спр.КатегорииТоваров, который подчинен спр.Номенклатура. При проведении вручную все прописывается правильно. А если проводить через Операции-ПроведениеДокументов ругается
{Документ.РасходнаяНакладная.Модуль Документа(633)}: Значение не представляет агрегатный объект (Категория)
тбБренды.Категория =Эл.Категория;
Реквизит "Категория" обычный (не периодический), но у него стоят галки на вкладке Дополнительные "Сортировка" и "Отбор По Реквизиту".

Процедура ДвижениеОборотыБрендыМенеджеры()  
    Спр=СоздатьОбъект("Справочник.КатегорииТоваров");
    тбБренды = СоздатьОбъект("ТаблицаЗначений");
    тбБренды.НоваяКолонка("Категория","Справочник.Категории");
    тбБренды.НоваяКолонка("Бренд","Справочник.ТорговыеМарки");
    тбБренды.НоваяКолонка("СуммаБезНДС","Число",15,2);
    тбБренды.НоваяКолонка("НДС","Число",15,2);
    тбБренды.НоваяКолонка("СуммаСНДС","Число",15,2);
    
    
    ВыбратьСтроки();
    Пока ПолучитьСтроку() = 1 Цикл
        Если Товар.Уровень() > 1 Тогда
            тбБренды.НоваяСтрока();
            тбБренды.Бренд = Товар.ТорговаяМарка;    //.Родитель;
            Спр.ИспользоватьВладельца(Товар);
            Спр.ВыбратьЭлементы();
            Пока Спр.ПолучитьЭлемент()=1 цикл
            Если Спр.ЭтоГруппа()=1 тогда
                продолжить;
            КонецЕсли;    
            Эл=Спр.ТекущийЭлемент();
            КонецЦикла;
            тбБренды.Категория =Эл.Категория;
1 acht
 
17.01.21
15:12
(0) Что будет в переменной Эл, если Спр.ПолучитьЭлемент() сразу вернет ноль?
2 Lazy Stranger
 
17.01.21
15:17
+ в чем смысл перебирать все элементы и записывать в таблицу последний из них?
3 Aldnepr
 
17.01.21
15:21
(2) Там всего один элемент. Если ноль вернет ноль, вопрос же в другом. Чего программно спотыкается??
4 Cthulhu
 
17.01.21
15:55
(3):
там может быть не один элемент.
вопрос именно в этом.
5 Lazy Stranger
 
17.01.21
17:34
Если ПустоеЗначение(Эл)=0 тогда
тбБренды.Категория =Эл.Категория;
иначе
Сообщить("не найдена категория для товара "+Товар);
КонецЕсли;
6 acht
 
17.01.21
17:42
(3) >  вопрос же в другом. Чего программно спотыкается
Ну, что написал, то в точности и получил. Или, думаешь, оно тебя спецально ненавидит?
7 victuan1
 
18.01.21
04:38
(0)
Эл=Спр.ТекущийЭлемент();
            КонецЦикла;

Если нашел элемент, то разве не нужно ПРЕРВАТЬ выполнение цикла? Иначе он переберет все элементы в выборке до конца и в итоге остановится на элементе "после последнего", т.е на "не выбранном".
8 Aldnepr
 
18.01.21
10:30
(5) Спасибо друг, именно в этом просер был. Я заполнил все категории программно, но бух втихаря внесла новую номенклатуру не присвоив категорию. Там еще надо допилить условие при записи нового.
(7) Беру последнюю позицию из списка на случай, если категорию изменят путём внесения новой позиции в этот подчиненный справочник.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший