Привет всем!
Уважаемые форумчане. Столкнулся с одной проблемой. Касательно метода НайтиПоИдентификатору().
Дело в том, что в синтаксис помощнике дает сухие характеристики. Хоть и на примерах, но не все.
проблема в том, что с этот метод в процедуре клиента работает нормально.
Т.е. если на пример нужно выдать значение строки табличной части по указанному индексу, на клиенте.
Но есть нужда получить значение строки табличной части по указанному индексу из другого справочника.
Поэтому проблема в том, следующий вид кода на КЛИЕНТЕ:
Строка = Объект.ТабличнаяЧасть1.НайтиПоИдентификатору(2);
Строка = Строка.Реквизит1;
Сообщить(Строка);
СтрокаОбъект = РезультПойска.ПолучитьОбъект();
СтрокаТЧ = СтрокаОбъект[ТЧ].НайтиПоИдентификатору(1);
//СтрокаТЧ = СтрокаОбъект[ТЧ].НайтиПоИдентификатору[1];
значСтрокиТЧ = СтрокаТЧ[ТЧ_реквизит];
Возврат значСтрокиТЧ;
Gigi @ Сегодня, 17:58
,
Посмотрите в отладчике какой у Вас тип переменной СтрокаОбъект[ТЧ], функция которую вы ищете есть только у: ДанныеФормыКоллекция, ДанныеФормыСтруктураСКоллекцией, ДанныеФормыДерево, СписокЗначений
Bernet @ Сегодня, 17:02
,
Спасибо понял! Посмотрю!
Но если че, опять буду мусолить, и просить помощи..
)))))
Тут и смотреть не надо, у вашей переменной нет такого метода.
&НаСервере
Процедура Тест_ПолучитьЗначениеТЧпоИндексу()
ЭлементСправочника = Справочники.ТОЧКА.НайтиПоКоду("000000001");
ОбъектСправочника = ЭлементСправочника.ПолучитьОбъект();
Строка = ОбъектСправочника.ТЧ_Субабоненты.НайтиПоИдентификатору(1);
//{Справочник.Тест_РаботаСколлекциями.Форма.ФормаЭлемента.Форма(19)}: Метод объекта не обнаружен (НайтиПоИдентификатору)
//Строка = ОбъектСправочника.ТЧ_Субабоненты.НайтиПоИдентификатору(1);
Строка = Строка.Субабоненты;
Сообщить(Строка);
КонецПроцедуры
НаборЗначений= Новый Структура;
и т.д.! | http://pro1c.org.ua/index.php?act=announce&id=2: 3 |
СтрокаТабличнойЧасти = ТабличнаяЧасть[ИндексСтроки];
СтрокаТабличнойЧасти = ТабличнаяЧасть.Получить(ИндексСтроки);
Petre @ Сегодня, 12:38
,
Ничего не понимаю. Тема про программирование 1С 7.7, а вы о
Семен Семеныч! А главного не заметил...
&НаСервере
Процедура Тест_ПолучитьЗначениеТЧпоИндексу()
// ======= Вариант 1 - не работает!
//РезультПойска = Справочники.ТОЧКА.НайтиПоКоду("000000001");
//ОбъектСправочника = РезультПойска.ПолучитьОбъект();
//Строка = ОбъектСправочника.ТЧ_Субабоненты.НайтиПоИдентификатору(1);
//Строка = Строка.Субабоненты;
//Сообщить(Строка);
// ====== Вариант 2 - работает!
РезультПойска = Справочники.ТОЧКА.НайтиПоКоду("000000001");
номер=1;
n=0;
ОбъектСправочника = РезультПойска.ПолучитьОбъект();
Для каждого Строка Из ОбъектСправочника.ТЧ_Субабоненты Цикл
n=n+1;
Если n=номер тогда
Сообщить(Строка.Субабоненты);
Перейти ~ПроцедураВыход;
КонецЕсли;
КонецЦикла;
~ПроцедураВыход:;
КонецПроцедуры
&НаСервереБезКонтекста
Процедура Тест_ПолучитьЗначениеТЧпоИндексу(Индекс)
Запрос = Новый Запрос("ВЫБРАТЬ
| Спр.Субабоненты
|ИЗ
| Справочник.ТОЧКА.ТЧ_Субабоненты КАК Спр
|ГДЕ
| Спр.Ссылка = &Ссылка
| И Спр.НомерСтроки = &НомерСтроки")
Запрос.УстановитьПараметр("Ссылка", Справочники.ТОЧКА.НайтиПоКоду("000000001"));
Запрос.УстановитьПараметр("НомерСтроки", Индекс);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Сообщить(Выборка.Субабоненты);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ТестФункции_ПолучитьЗначПоляТЧпоИдексу()
//===========================================
Конфиг = "Справочники";
КонфигИмя="ТОЧКА";
АдреОбъекта=Конфиг+"."+КонфигИмя;
//===========================================
знКодаПойска="000000001";
//------------------------------------------
знТЧ="ТЧ_Субабоненты";
знТЧреквизит="Субабоненты";
номерИндекса=1;
//===========================================
// Команада: НайтиПоИдентификатору(2) для табличной части родной ФормыЭлемента нормально работает!
//Пример команды: НайтиПоИдентификатору(2)для табличной части родной ФормыЭлемента
//СтрокаТЧ = Объект.ТабличнаяЧасть1.НайтиПоИдентификатору(2);
//ТЧреквЗнач = Строка.Реквизит1;
//Сообщить(ТЧреквЗнач);
//Тут нужно, получить значение ЧТ из другой ФормыЭлемента по указанному индексу.
НужноеЗначение=ПолучитьЗначПоляТЧпоИдексу(Конфиг,КонфигИмя, знКодаПойска, знТЧ,знТЧреквизит,номерИндекса);
Сообщить(НужноеЗначение);
//===========================================
КонецПроцедуры
&НаСервере
Функция ПолучитьЗначПоляТЧпоИдексу(Конфигурат,КонфигуратЭлемент, КодПойска, ТЧ, ТЧ_реквизит,Индекс)
//==========================================================================
Если Конфигурат = "Справочники" Тогда
Попытка
РезультПойска = Справочники[КонфигуратЭлемент].НайтиПоКоду(КодПойска);
Исключение
Возврат "Указанный адрес: «"+Конфигурат+"."+КонфигуратЭлемент+"» не существует!";
КонецПопытки
ИначеЕсли Конфигурат = "Документы" Тогда
Попытка
РезультПойска = Документы[КонфигуратЭлемент].НайтиПоКоду(КодПойска);
Исключение
Возврат "Указанный адрес: «"+Конфигурат+"."+КонфигуратЭлемент+"» не существует!";
КонецПопытки
Иначе
Возврат "Не корректное указание объекта конфирурации!";
КонецЕсли;
//==========================================================================
Если РезультПойска.Пустая() Тогда
Сообщить("В Списке: «"+Конфигурат+"."+КонфигуратЭлемент+"» КодПойска: «" + КодПойска + "» не найден!");
Иначе
// ====ВОТ ГДЕ ЗАЦЫКЛИЛСЯ И НИКАК НЕ СМОГ НАЙТИ ПРИЕМЛЕМОЕ РЕШЕНИЕ!
// ТУТ МНЕ ПРОСТО НУЖНО ПОЛУЧИТЬ ЗАЧЕНИЕ РЕКВИЗИТА ТАБЛИЧНОЙ ЧАСТИ ПО ИНДЕКСУ!
//И ПРИЧИНА ТОГО, ПОЧЕМУ Я ПРИЦЕПИЛСЯ К КОМАНДЕ: "НайтиПоИдентификатору(Индекс)", в том, что она просто удобна, для взятого курса алгоритма.
//И ею очень удобно воспользоваться, для ТЧ ФормыЭлемент на клиенте. Но тут она не срабатывает, по выше описанной причине!
//И наверно где такое счастье, что бы везде работала.
// ======= Вариант 1 - не работает!
//ОбъектКонфиг = РезультПойска.ПолучитьОбъект();
//СтрокаТЧ = ОбъектКонфиг[ТЧ].НайтиПоИдентификатору(Индекс);
//значСтрокиТЧ = СтрокаТЧ[ТЧ_реквизит];
//Возврат значСтрокиТЧ;
////====== Вариант 2 - работает!
// ОбъектСправочника = РезультПойска.ПолучитьОбъект();
// n=0;
// Для каждого СтрокаТЧ Из ОбъектСправочника[ТЧ] Цикл
// n=n+1;
// Если n=Индекс тогда
// значСтрокиТЧ = СтрокаТЧ[ТЧ_реквизит];
// Перейти ~ПроцедураВыход;
// КонецЕсли;
// КонецЦикла;
// ~ПроцедураВыход:;
// Возврат значСтрокиТЧ;
////====== Вариант 3 - ?
//Запрос = Новый Запрос("ВЫБРАТЬ
// | Спр[ТЧ_реквизит]
// |ИЗ
// | Справочник[КонфигуратЭлемент][ТЧ] КАК Спр
// |ГДЕ
// | Спр.Ссылка = &Ссылка
// | И Спр.НомерСтроки = &НомерСтроки");
// Запрос.УстановитьПараметр("Ссылка", Справочники[КонфигуратЭлемент].НайтиПоКоду("000000001"));
// Запрос.УстановитьПараметр("НомерСтроки", Индекс);
// Выборка = Запрос.Выполнить().Выбрать();
// Если Выборка.Следующий() Тогда
// Возврат Выборка[ТЧ_реквизит];
// КонецЕсли;
Возврат "ШЫШЬ!))";
КонецЕсли;
//==========================================================================
КонецФункции
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua