Имя: Пароль:
1C
1С v8
8.2 Как обратиться к наименованию выбранного товара?
,
0 ssstop
 
06.01.12
13:07
Доброго времени суток, подскажите пожалуйста,
в приходной накладной нужно описать условие, которое зависит от наименования выбранного товара из справочника Номенклатура, как к нему обратиться?
1 andrewks
 
06.01.12
13:09
Уважаемое Наименование справочника Номенклатура, разрешите к Вам обратиться!
2 Kreont
 
06.01.12
13:09
Товары.Наименование
Номенкладутра.Наименование
Как то так, нету баз под рукой )
3 H A D G E H O G s
 
06.01.12
13:15
<<в приходной накладной нужно описать условие, которое зависит от наименования выбранного товара из справочника>>

Анальные кары за такое обычно следуют.
4 Бубр
 
06.01.12
13:16
(3) )))))
5 Иешуа
 
06.01.12
13:21
Флаг в справочник добавь и по этому флагу анализируй чего тебе там надо.
Анализировать наименование... анальная кара это меньшее что могут сделать за такое
6 Kreont
 
06.01.12
13:22
100% уж лучше тогда код сверять, а его запретить всем изменять
7 ssstop
 
06.01.12
13:23
на 8.1 и так ясно, на 8.2 выдает ошибку отображения типов: отсутствует отображение для типа "ПолеФормы"
8 andrewks
 
06.01.12
13:24
лучше не анализировать ни код, ни наименование.
либо РС, либо реквизит, либо подч.спр, ну любой механизм, чтобы его контролировал и менял ЮЗЕР, а не программист.
9 marvak
 
06.01.12
13:24
(0)
СтрокаТЧ = ЭтотОбъект.Товары[0];
НаименованиеДляАнальнойКары = СтрокаТЧ.Номенклатура.Наименование;
10 ssstop
 
06.01.12
13:26
это для конфы с нуля, пример с номенклатурой приводится для наглядности
11 marvak
 
06.01.12
13:28
делай обработчик поля табличной части Номенклатура ПриИзменении() и там проверяй
12 marvak
 
06.01.12
13:29
(11) ну в смысле поля ввода табличного поля, соответствующего табличной части документа
13 andrewks
 
06.01.12
13:31
(0) автор, озвучь задачу
14 ssstop
 
06.01.12
13:44
(13)нужно чтобы при выборе элемента "Ferrum" в колонке табличной части ХимЭлемент, в колонке HTM подставлялось значение 10
&наСервере
Процедура РассчитатьHTM (СтрокаТЧ)
Если СтрокаТЧ.ХимЭлемент.Наименование = "Ferrum" Тогда
    СтрокаТЧ.HTM = 10
КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ТаблицаХимЭлементПриИзменении (СтрокаТЧ)
РассчитатьHTM (СтрокаТЧ)
КонецПРоцедуры

при таком варианте выдает ошибку отображения типов: отсутствует отображение для типа "ПолеФормы"?
15 H A D G E H O G s
 
06.01.12
13:48
УТ11?
16 ssstop
 
06.01.12
13:54
(15) см (10) пример с ут приводился в надежде быстрее получить ответ на вопрос, но аншлаговцев тут оказалось больше чем программистов
17 H A D G E H O G s
 
06.01.12
13:56
(16) Просто в УТ есть рассово верная функция ОМ ОбщегоНазначения
18 H A D G E H O G s
 
06.01.12
13:56
// Функция ПолучитьЗначениеРеквизита возвращает значение
// реквизита, прочитанного из информационной базы по ссылке на объект.
//
//  Если доступа к реквизиту нет, возникнет исключение прав доступа.
//  Если необходимо зачитать реквизит независимо от прав текущего пользователя,
//  то следует использовать предварительный переход в привилегированный режим.
//
// Параметры:
//  Ссылка       - ссылка на объект, - элемент справочника, документ, ...
//  ИмяРеквизита - Строка, например, "Код".
//
// Возвращаемое значение:
//  Произвольный    - зависит от типа значения прочитанного реквизита.
//
Функция ПолучитьЗначениеРеквизита(Ссылка, ИмяРеквизита) Экспорт
19 H A D G E H O G s
 
06.01.12
13:57
Вот ее можно реализовать в самописке.
20 H A D G E H O G s
 
06.01.12
13:58
Либо вот я для себя сделал для цепочки реквизитов.

Функция ПолучитьВложенноеЗначениеРеквизита(ТекущаяСсылка, МассивВложенныхРеквизитов, УровеньВложенности, ЕстьТабличныеЧасти=Ложь,Результат)
   ИмяРеквизита=МассивВложенныхРеквизитов[УровеньВложенности-1];
   МетаданныеСсылки=ТекущаяСсылка.Метаданные();
   ЭтоТоЧтоНужно=Ложь;
   ИмяБазовогоТипа=ОбщегоНазначения.ВидОбъектаПоСсылке(ТекущаяСсылка);
   ЭтоРеквизитШапки=МетаданныеСсылки.Реквизиты.Найти(ИмяРеквизита) <> Неопределено;
   Если Не ЭтоРеквизитШапки Тогда
       Для Каждого СтандартныйРеквизит Из МетаданныеСсылки.СтандартныеРеквизиты Цикл
           Если ВРЕГ(СтандартныйРеквизит.Имя)=ИмяРеквизита Тогда
               ЭтоРеквизитШапки=Истина;
               Прервать;
           КонецЕсли;
       КонецЦикла;
   КонецЕсли;
   Если ЭтоРеквизитШапки=Истина Тогда
       ЭтоРеквизит=Истина;
       Источник=ИмяБазовогоТипа+"."+МетаданныеСсылки.Имя;
       ЭтоТоЧтоНужно=МассивВложенныхРеквизитов.Количество()=УровеньВложенности;
   ИначеЕсли ЕстьТабличныеЧасти=Истина И МетаданныеСсылки.ТабличныеЧасти.Найти(ИмяРеквизита)<>Неопределено Тогда
       ИмяТЧ=ИмяРеквизита;
       ЭтоРеквизит=Ложь;
       ИмяРеквизита=МассивВложенныхРеквизитов[УровеньВложенности];
       Если МетаданныеСсылки.ТабличныеЧасти[ИмяТЧ].Реквизиты.Найти(ИмяРеквизита)=Неопределено Тогда
           Возврат Ложь;
       КонецЕсли;
       Источник=ИмяБазовогоТипа+"."+МетаданныеСсылки.Имя+"."+ИмяТЧ;
       ЭтоТоЧтоНужно=МассивВложенныхРеквизитов.Количество()=УровеньВложенности+1;
   Иначе
       Возврат Ложь;
   КонецЕсли;
   Запрос=Новый Запрос;
   Запрос.Текст=
   "ВЫБРАТЬ
   |    Источник."+ИмяРеквизита+" КАК Реквизит
   |ИЗ
   |    "+Источник+" КАК Источник
   |ГДЕ
   |    Источник.Ссылка = &Ссылка";
   Запрос.УстановитьПараметр("Ссылка",ТекущаяСсылка);
   Выборка=Запрос.Выполнить().Выбрать();
   Пока Выборка.Следующий() Цикл
       Если ЭтоТоЧтоНужно=Истина Тогда
           Результат.Добавить(Выборка.Реквизит);
       Иначе
           Если ОбщегоНазначения.ЭтоСсылка(Выборка.Реквизит) Тогда
               Если ПолучитьВложенноеЗначениеРеквизита(Выборка.Реквизит, МассивВложенныхРеквизитов, УровеньВложенности+1, ЕстьТабличныеЧасти,Результат)<>Истина Тогда
                   Возврат Ложь;
               КонецЕсли;
           КонецЕсли;
       КонецЕсли;
   КонецЦикла;
   Возврат Истина;
КонецФункции

Функция ПолучитьЗначенияЦепочкиРеквизита(Ссылка, Знач ИмяРеквизита, ЕстьТабличныеЧасти=Ложь) Экспорт
   Если Не ЗначениеЗаполнено(ИмяРеквизита) Тогда
       Возврат Неопределено;
   КонецЕсли;
   ИмяРеквизита=ВРЕГ(ИмяРеквизита);
   ИмяРеквизита=СтрЗаменить(ИмяРеквизита,"ССЫЛКА.","");
   МассивВложенныхРеквизитов=СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИмяРеквизита,".");
   УровеньВложенности=1;
   Результат = Новый Массив;
   Если ПолучитьВложенноеЗначениеРеквизита(Ссылка, МассивВложенныхРеквизитов, УровеньВложенности, ЕстьТабличныеЧасти,Результат)=Истина Тогда
       Возврат Результат;
   Иначе
       Возврат Неопределено;
   КонецЕсли;
КонецФункции
21 marvak
 
06.01.12
13:58
ТаблицаХимЭлементПриИзменении (СтрокаТЧ) это обработчик чего?

ту видимо управляемые формы?

попробуй вместо

РассчитатьHTM (СтрокаТЧ)

передалать вызов на

СтрокаТЧ.НТМ = РассчитатьHTM(СтрокаТЧ.ХимЭлемент);

ну и причесать саму РассчитатьHTM()
22 andrewks
 
06.01.12
14:00
(14) используй Элементы.Товары.ТекущиеДанные

ЗЫ привет тебе от Петросяна
23 H A D G E H O G s
 
06.01.12
14:00
(22) Ему просто перетащить код (17) из типовой нужно.
24 andrewks
 
06.01.12
14:24
(23) да, честно говоря, из-за такой фигни даже не хочется в типовую лезть. тут делов-то на 2 мин


&НаСервереБезКонтекста
Функция ПолучитьНаименованиеТовара(Товар)
   Возврат Товар.Наименование;
КонецФункции

&НаКлиенте
Процедура ТоварыТоварПриИзменении(Элемент)

   ТекСтр=Элементы.Товары.ТекущиеДанные;
   Если ПолучитьНаименованиеТовара(ТекСтр.Товар)="Ferrum" Тогда
       ТекСтр.HTM=10;
   КонецЕсли;
   
КонецПроцедуры
25 andrewks
 
06.01.12
14:24
только всё равно неправильно это
26 ssstop
 
12.01.12
12:05
(25) но работает, спасибо. подскажите еще, как вставить на форму документа табличную часть и переключатель?
27 V_V_V
 
12.01.12
12:17
(26) Перетащи на форму из реквизитов
Про переключатели недавно обсуждали, поиск не работает?
v8: Куда делись переключатели в УФ?