|
v7: Групповая обработка выводит сообщение Значение не представляет агрегатный объект | ☑ | ||
---|---|---|---|---|
0
tolstikroot
14.10.12
✎
22:55
|
Доброго времени суток!
Я только начинаю своё общение с 1с77. Раньше был небольшой опыт общения с 8.2. Досталась мне в наследство одна база. Среди существующих конфигураций ничего подобного я не нашел. И по своему содержимому похожа она на самописную с элементами различных конфигураций. Поставлена была задача добавить одну единицу измерения ко всем товарам определенной группе номенклатуры. Нашел в базе групповую обработку, раскомментировал некоторые строки, так как обработка вообще ничего не делала из того что было мне необходимо. В итоге при попытке добавить определенную единицу измерения к отобранным товарам, получаю следующую ошибку Единица.ИспользоватьВладельца(Товар.ТекущийЭлемент()); {Обработка.ГрупповаяОбработкаСправочникаНоменклатуры.Форма.Модуль(550)}: Значение не представляет агрегатный объект (ИспользоватьВладельца) В групповой обработке этому сообщению предшествует следующий код ИначеЕсли Действие.ТекущаяСтрока()=10 Тогда // ("Добавить единицу измерения"); ВыбЗначение2 = СоздатьОбъект("Справочник.Номенклатура"); ВыбЗначение2.ВыборГруппы(0); Если ВыбЗначение2.Выбрать("Выбор товара",)=1 Тогда Если (ВыбЗначение2.Выбран()>0)И(ВыбЗначение2.ЭтоГруппа()=0) Тогда ВыбЗначение = СоздатьОбъект("Справочник.Единицы"); ВыбЗначение.ИспользоватьВладельца(ВыбЗначение2.ТекущийЭлемент()); Если ВыбЗначение.Выбрать("Выбор единицы измерения",)=1 Тогда ЗначениеВВидеСтроки = ВыбЗначение.Наименование; Значение= ВыбЗначение.ТекущийЭлемент(); КонецЕсли; КонецЕсли; КонецЕсли; Пока копался в конфигурации выяснил, что в справочнике Номенклатура, из реквизитов есть только БазоваяЕдиницаИзмерения. А в форме где в карточке указан список возможных единиц, он так и называется СписокЕдиниц. Но как связать его с групповой обработкой я пока не понимаю. Поэтому прошу помощи у гуру! |
|||
1
kimi_mm
14.10.12
✎
23:04
|
Вышлите фрагмент кода, который вызывает ошибку, из указанного фрагмента непонятно что скрывается за переменной "Единица"
|
|||
2
Remark
14.10.12
✎
23:06
|
Является ли справочник "Единицы" подчиненным справочнику "Номенклатура"?
|
|||
3
Злопчинский
14.10.12
✎
23:16
|
(0) Дайте весь код, в диапазоне плюс/минус 30 строк от 550 строки, а то у вас ошибка в строке
Единица.ИспользоватьВладельца(Товар.ТекущийЭлемент()); а в приведенном коде - такой нет откуда мы занм что вы там за фуйню написали перед 550 строкой |
|||
4
Cthulhu
14.10.12
✎
23:27
|
вернитесь обратно на 82
и вызовите специальста. потому что фрагмент кода, который Вы продемонстрировали, не касается "групповой обработки" и не решает описанной Вами проблемы НИКАК. в заданные Вами вопросы свидетельствуют о том, что вызвать специалиста будет в результате дешевле (в том числе и учитывая возможные последствия), нежели решать эту задачу Вашими, простите за выражение, силами. |
|||
5
Remark
14.10.12
✎
23:31
|
(4) Как бы да... Я думаю, что ТС больше не появится.
|
|||
6
tolstikroot
14.10.12
✎
23:31
|
Процедура ВыборЗначения()
Перем ВыбЗначение; ИначеЕсли Действие.ТекущаяСтрока()=10 Тогда // ("Добавить единицу измерения"); ВыбЗначение2 = СоздатьОбъект("Справочник.Номенклатура"); ВыбЗначение2.ВыборГруппы(0); Если ВыбЗначение2.Выбрать("Выбор товара",)=1 Тогда Если (ВыбЗначение2.Выбран()>0)И(ВыбЗначение2.ЭтоГруппа()=0) Тогда ВыбЗначение = СоздатьОбъект("Справочник.Единицы"); ВыбЗначение.ИспользоватьВладельца(ВыбЗначение2.ТекущийЭлемент()); Если ВыбЗначение.Выбрать("Выбор единицы измерения",)=1 Тогда ЗначениеВВидеСтроки = ВыбЗначение.Наименование; Значение= ВыбЗначение.ТекущийЭлемент(); КонецЕсли; КонецЕсли; КонецЕсли; (эта процедура отрабатывает нормально) Процедура Выполнить() Перем НомерСтроки; Перем Док; Перем ТипДок; Перем Товар,ТовДляПоиска; Перем Категория,Единица; Перем ЧислоОбработанныхПозиций; Если (ПустоеЗначение(Значение)=1) Тогда // пустое значение Если (Действие.ТекущаяСтрока()=4)ИЛИ (Действие.ТекущаяСтрока()=5)ИЛИ(Действие.ТекущаяСтрока()=6)ИЛИ (Действие.ТекущаяСтрока()=7)ИЛИ(Действие.ТекущаяСтрока()=8)ИЛИ (Действие.ТекущаяСтрока()=10)ИЛИ(Действие.ТекущаяСтрока()=11) Тогда Предупреждение("Не задано значение"); Возврат; КонецЕсли; КонецЕсли; ИначеЕсли Действие.ТекущаяСтрока()=10 Тогда // ("Добавить единицу"); Единица.ИспользоватьВладельца(Товар.ТекущийЭлемент()); Если Единица.НайтиПоРеквизиту("ТипЕдиницы",Значение.ТипЕдиницы.ТекущийЭлемент(),0)<=0 Тогда Единица.Новый(); Единица.ТипЕдиницы = Значение.ТипЕдиницы; Единица.Наименование = Значение.Наименование; Единица.Коэффициент = Значение.Коэффициент; Единица.Вес = Значение.Вес; Единица.Записать(); Иначе Если Единица.ПометкаУдаления()=1 Тогда Единица.СнятьПометкуУдаления(); КонецЕсли; КонецЕсли; (вот здесь и выпадает ошибка) ЧислоОбработанныхПозиций = ЧислоОбработанныхПозиций + 1; КонецЦикла; вся групповая обработка представлена по следующей ссылке https://dl.dropbox.com/u/6086754/групобр.rar |
|||
7
tolstikroot
14.10.12
✎
23:32
|
Справочник "Единицы" подчинен справочнику "Номенклатура"
|
|||
8
tolstikroot
14.10.12
✎
23:33
|
ссылка на обработку https://dl.dropbox.com/u/6086754/grupob.rar
|
|||
9
Remark
14.10.12
✎
23:36
|
(6)Ошибся...
Так и что скрывается за переменной "Единица"? |
|||
10
tolstikroot
14.10.12
✎
23:43
|
Насколько я понимаю Единица является одним из элементом справочника Единицы, владельцем которого является отдельный товар.
|
|||
11
tolstikroot
14.10.12
✎
23:52
|
В форме справочника Единицы, если я не ошибаюсь это описано так
Процедура ВводНового(); Наименование=Строка(Владелец.БазоваяЕдиницаИзмерения); Единица=Владелец.БазоваяЕдиницаИзмерения; ШтрихКод=?(ПустоеЗначение(Владелец.ШтрихКод)=1,"",Владелец.ШтрихКод); Коэффициент=1; ВводНового = 1; КонецПроцедуры //----------------------- Процедура ПриЗаписи() Записали = 1; КонецПроцедуры //----------------------- Процедура ПриЗакрытии() Если ТипЗначенияСтр(ВнКонтекст)="ГрупповойКонтекст" Тогда Если Записали = 1 Тогда Если ВводНового=1 Тогда ВнКонтекст.СписокЕдиниц.ДобавитьЗначение(ТекущийЭлемент(),СокрЛП(Наименование)+"; "+Коэффициент+"; "+ШтрихКод); ВнКонтекст.СписокЕдиниц.ТекущаяСтрока(ВнКонтекст.СписокЕдиниц.РазмерСписка()); ВнКонтекст.Форма.КнИзменить1.Доступность(1); ВнКонтекст.Форма.КнУдалить1.Доступность(1); Иначе Поз=ВнКонтекст.СписокЕдиниц.НайтиЗначение(ТекущийЭлемент()); ВнКонтекст.СписокЕдиниц.УдалитьЗначение(Поз); ВнКонтекст.СписокЕдиниц.ВставитьЗначение(Поз,ТекущийЭлемент(),СокрЛП(Наименование)+"; "+Коэффициент+"; "+ШтрихКод); ВнКонтекст.СписокЕдиниц.ТекущаяСтрока(Поз); КонецЕсли; ВнКонтекст.Форма.Обновить(); КонецЕсли; КонецЕсли; КонецПроцедуры //----------------------- Процедура ПриОткрытии() Если ТипЗначенияСтр(Форма.Параметр)="ГрупповойКонтекст" Тогда ВнКонтекст=Форма.Параметр; КонецЕсли; КонецПроцедуры |
|||
12
Remark
14.10.12
✎
23:59
|
А вот эту строчку куда дели:
//Единица = СоздатьОбъект("Справочники.Единицы"); |
|||
13
tolstikroot
15.10.12
✎
00:04
|
добавил строчку
ИначеЕсли Действие.ТекущаяСтрока()=10 Тогда // ("Добавить единицу"); Единица = СоздатьОбъект("Справочники.Единицы"); Единица.ИспользоватьВладельца(Товар.ТекущийЭлемент()); Но результат тот же Единица = СоздатьОбъект("Справочники.Единицы"); {Обработка.ГрупповаяОбработкаСправочникаНоменклатуры.Форма.Модуль(550)}: Неудачная попытка создания объекта (Справочники.Единицы) |
|||
14
Злопчинский
15.10.12
✎
00:05
|
(13) СПРАВОЧНИК - В ЕДИНСТВЕННОМ ЧИСЛЕ
|
|||
15
Remark
15.10.12
✎
00:07
|
(14) Сорри, это я попутался. 8ка что ли под руку влезла...
|
|||
16
tolstikroot
15.10.12
✎
00:11
|
Исправил Справочники на Справочник, но получил ошибку
Если Единица.НайтиПоРеквизиту("Единица",Значение.Единица.ТекущийЭлемент(),0)<=0 Тогда {Обработка.ГрупповаяОбработкаСправочникаНоменклатуры.Форма.Модуль(552)}: Поле агрегатного объекта не обнаружено (ТекущийЭлемент) |
|||
17
tolstikroot
15.10.12
✎
00:18
|
Насколько я понимаю данная ошибка говорит о том что происходит попытка найти реквизит единица у текущего элемента, кем является товар, но у номенклатуры нету реквизита единица. Сами единицы хранятся пока мне не известным образом(слишком мало опыта), но насколько я понимаю это описано здесь
Процедура ДобавитьЕдиницу() Перем ФормаЗаписи; ФормаЗаписи=ВзятьКонтекст(Контекст); ОткрытьФормуМодально("Элемент.Единицы",ФормаЗаписи,,,ТекущийЭлемент()); КонецПроцедуры //----------------------- Процедура ИзменитьЕдиницу() Перем ФормаЗаписи; Эл=СписокЕдиниц.ПолучитьЗначение(СписокЕдиниц.ТекущаяСтрока()); ФормаЗаписи=ВзятьКонтекст(Контекст); ОткрытьФормуМодально(Эл,ФормаЗаписи); КонецПроцедуры //----------------------- Процедура УдалитьЕдиницу() Если Вопрос("Вы действительно хотите удалить единицу измерения товара? (будет помечена на удаление)",1)=2 Тогда Возврат; КонецЕсли; Поз=СписокЕдиниц.ТекущаяСтрока(); Эл=СписокЕдиниц.ПолучитьЗначение(Поз); Спр=СоздатьОбъект("Справочник.Единицы"); Спр.ИспользоватьВладельца(ТекущийЭлемент()); Если Спр.НайтиЭлемент(Эл)=1 Тогда Спр.Удалить(0); СписокЕдиниц.УдалитьЗначение(Поз); СписокЕдиниц.ТекущаяСтрока(?(Поз>1,Поз-1,1)); Если СписокЕдиниц.РазмерСписка()=0 Тогда Форма.КнИзменить1.Доступность(0); Форма.КнУдалить1.Доступность(0); КонецЕсли; Форма.Обновить(); КонецЕсли; КонецПроцедуры |
|||
18
Remark
15.10.12
✎
00:27
|
Единица.НайтиПоРеквизиту("Единица",Значение.Единица.ТекущийЭлемент(),0)
Вы ищете Единицу в реквизите "Единица" справочника "Единицы". Там ее точно нет. Сами Единица хранятся в справочнике "Единицы", который подчинен справочнику "Номенклатура". |
|||
19
Remark
15.10.12
✎
00:31
|
|
|||
20
Cthulhu
15.10.12
✎
00:45
|
а за использование ключевых слов встроенного языка в названиях переменных и объектов руки надо откусывать и семерочникам, и восьмерочникам...
|
|||
21
Remark
15.10.12
✎
00:48
|
(20) Сорри?
|
|||
22
tolstikroot
15.10.12
✎
00:52
|
Ошибка уже другая. Хотя проблема еще не решена, но её решение понемногу начинает проясняться.
Если Номенклатура.НАйтиПоРеквизиту("БазоваяЕдиницаИзмерения", Единица,0) > 0 Тогда {Обработка.ГрупповаяОбработкаСправочникаНоменклатуры.Форма.Модуль(553)}: Неверное имя реквизита! Всем спасибо за участие и терпение(все мы когда то только начинали). Завтра продолжу решать. |
|||
23
Злопчинский
15.10.12
✎
03:12
|
мдя.. и эти люди что-то будут писать на снеговике...
я - точно без хлеба с икрйо не сотанусь! |
|||
24
Злопчинский
15.10.12
✎
03:14
|
(22) реквизит БазоваяЕдиница в спр.номенклатура - не имеет признака "сортировка" - то бишь не индексируется и поиском не найдется!! привыкай уже не галочки расставлять по снеговиковски, а мозг включать
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |