Группа: Пользователи
Сообщений: 498
Спасибо сказали: 5 раз
Рейтинг: 0
Привет всем! Уважаемые форумчане. Столкнулся с одной проблемой. Касательно метода НайтиПоИдентификатору(). Дело в том, что в синтаксис помощнике дает сухие характеристики. Хоть и на примерах, но не все. проблема в том, что с этот метод в процедуре клиента работает нормально. Т.е. если на пример нужно выдать значение строки табличной части по указанному индексу, на клиенте. Но есть нужда получить значение строки табличной части по указанному индексу из другого справочника. Поэтому проблема в том, следующий вид кода на КЛИЕНТЕ:
Работает нормально! Т.е. в случае если нужно значение табличной части родного для модуля справочника. Но если таким же способом сделать для сервера, что бы получить значение из табличной части другого справочника, то пишет:
Цитата
Метод объекта не обнаружен (НайтиПоИдентификатору)
Вот того же самого (но с переменными ТЧ и ТЧ_реквизит), только для сервера:
Группа: Местный
Сообщений: 858
Из: Місто щасливих людей
Спасибо сказали: 317 раз
Рейтинг: 0
Gigi @ Сегодня, 17:58
, Посмотрите в отладчике какой у Вас тип переменной СтрокаОбъект[ТЧ], функция которую вы ищете есть только у: ДанныеФормыКоллекция, ДанныеФормыСтруктураСКоллекцией, ДанныеФормыДерево, СписокЗначений
Дописываю конфигурации на платформе 8.х. - Управление торговым предприятием для Украины - Управление производственным предприятием для Украины - Управление небольшой фирмой для Украины - Бухгалтерия для Украины; - Общепит для Украины - Ресторан (Рарус) - Розница
Группа: Пользователи
Сообщений: 498
Спасибо сказали: 5 раз
Рейтинг: 0
Bernet @ Вчера, 17:02
,
Цитата(Bernet @ 03.05.17, 17:02)
Посмотрите в отладчике какой у Вас тип переменной СтрокаОбъект[ТЧ], функция которую вы ищете есть только у: ДанныеФормыКоллекция, ДанныеФормыСтруктураСКоллекцией, ДанныеФормыДерево, СписокЗначений
Код решил чуть видоизменить, для простоты понимания:
&НаСервере Процедура Тест_ПолучитьЗначениеТЧпоИндексу() ЭлементСправочника = Справочники.ТОЧКА.НайтиПоКоду("000000001"); ОбъектСправочника = ЭлементСправочника.ПолучитьОбъект(); Строка = ОбъектСправочника.ТЧ_Субабоненты.НайтиПоИдентификатору(1); //{Справочник.Тест_РаботаСколлекциями.Форма.ФормаЭлемента.Форма(19)}: Метод объекта не обнаружен (НайтиПоИдентификатору) //Строка = ОбъектСправочника.ТЧ_Субабоненты.НайтиПоИдентификатору(1); Строка = Строка.Субабоненты; Сообщить(Строка); КонецПроцедуры
Отладчик пишет так:
Цитата
{Справочник.Тест_РаботаСколлекциями.Форма.ФормаЭлемента.Форма(19)}: Метод объекта не обнаружен (НайтиПоИдентификатору) Строка = ОбъектСправочника.ТЧ_Субабоненты.НайтиПоИдентификатору(1);
Поэтому, как понимаю команда, НайтиПоИдентификатору работает только с коллекциями Ну на пример в таком стиле ...
НаборЗначений= Новый Структура;
и т.д.
И что касается массивов, тут я честно говоря плаваю ... И изучать досконально это долго, а нужно срочно решать задачу, цель которой всего лишь следующая:
ПОЛУЧИТЬ ЗНАЧЕНИЕ СТРОКИ РЕКВИЗИТА ТАБЛИЧНОЙ ЧАСТИ КАКОГО НИ БУДЬ СПРАВОЧНИКА ПО указанному ИНДЕКСУ! Вот собственно какая задача стоит.
Для этой задачи как мне понимается, что первое это получить количество строк ТЧ. Что удалось сделать всего одной командой. Но как получить значение по индексу т.е. номеру строки ТЧ вот тут застрял. Сервак Метод НайтиПоИдентификатору не находит. И поэтому, для этого обязательно надо создавать коллекцию? .. блин... нет ли более простого и для сервака не накладного пути? Может не ту команду выбрал для этой цели?
Группа: Пользователи
Сообщений: 498
Спасибо сказали: 5 раз
Рейтинг: 0
Цитата(Pepe @ 04.05.17, 11:49)
Ничего не понимаю. Тема про программирование 1С 7.7, а вы о
Ну да .. согласен! ... у каждого сайта нужно указывать кучу полей ... достали уже со своими полями .. Но надеюсь из за этого, модератор не включит в группу не "Общительный", а "нарушитель правил" )))))) и кроме того команды 1С 7-8 не на много отличаются.
// ====== Вариант 2 - работает! РезультПойска = Справочники.ТОЧКА.НайтиПоКоду("000000001"); номер=1; n=0; ОбъектСправочника = РезультПойска.ПолучитьОбъект(); Для каждого Строка Из ОбъектСправочника.ТЧ_Субабоненты Цикл n=n+1; Если n=номер тогда Сообщить(Строка.Субабоненты); Перейти ~ПроцедураВыход; КонецЕсли; КонецЦикла; ~ПроцедураВыход:; КонецПроцедуры
И повторю преследуемую цель: ПОЛУЧИТЬ ЗНАЧЕНИЕ ТАБЛИЧНОЙ ЧАСТИ ФОРМЫ ЭЛЕМЕНТА СПРАВОЧНИКА по указанному ИНДЕСКУ!
В процедуре вариант работающий и не работающий... работающий выдает то, что нужно, но это слишком обычный путь. Нет ли просто одной или пару команды, для данной цели? Что бы не было необходимости цыклить
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0
Цитата(Gigi @ 04.05.17, 14:31)
и кроме того команды 1С 7-8 не на много отличаются.
Бегло просмотрел тему, не понял что надо сделать. Вы пытаетесь изъясняться языком программиста, но не понимаете в нем (в 1С8 по крайней мере), может попробуйте проще пояснить задачу?
Цитата(Gigi @ 03.05.17, 17:58)
Почему функция на сервере метод НайтиПоИдентификатору() не находит?
Она доступна на сервере, но работает с типом ДанныеФормыКоллекция, коим не является ваш другой справочник
Может это...
&НаСервереБезКонтекста Процедура Тест_ПолучитьЗначениеТЧпоИндексу(Индекс) Запрос = Новый Запрос("ВЫБРАТЬ | Спр.Субабоненты |ИЗ | Справочник.ТОЧКА.ТЧ_Субабоненты КАК Спр |ГДЕ | Спр.Ссылка = &Ссылка | И Спр.НомерСтроки = &НомерСтроки") Запрос.УстановитьПараметр("Ссылка", Справочники.ТОЧКА.НайтиПоКоду("000000001")); Запрос.УстановитьПараметр("НомерСтроки", Индекс); Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда Сообщить(Выборка.Субабоненты); КонецЕсли; КонецПроцедуры
Личные бесплатные консультации не даю, для этого есть форум!
Группа: Пользователи
Сообщений: 498
Спасибо сказали: 5 раз
Рейтинг: 0
logist @ Сегодня, 13:51
,
Цитата(logist @ 04.05.17, 13:51)
Она доступна на сервере, но работает с типом ДанныеФормыКоллекция, коим не является ваш другой справочник
Отлично ... великолепно.. Но в первую очередь спасибо...
Цитата(logist @ 04.05.17, 13:51)
Вы пытаетесь изъясняться языком программиста, но не понимаете в нем (в 1С8 по крайней мере)
Ну я бы не сказал бы, что совсем уже и не понимаю ... а в остальном .... ну а что вы хотели... если имел бы большой опыт работы и глубокие знания всех тонкостей то в таком случае, что я здесь вообще потерял. ))
Вариант нормальный и рабочий, спасибо. Просто от грамотного написания зависит скорость загрузки данных. поэтому, предложенный вариант не сильный наклад на сервак? Или вообще есть ли какая нибудь одна команда, на подобие НайтиПоИдентификатору() .. или еще другая ....не важно ..., но которая работает не только с типом ДанныеФормыКоллекция. Просто одна команда, которая найдет значение по индексу. И сократит объем кода.
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0
Цитата(Gigi @ 04.05.17, 18:18)
предложенный вариант не сильный наклад на сервак?
я ж не знаю что у вас там происходит, если это одновременно требуется для большого количества строк, то имеет смысл собрать все строки и получить сразу для всех потом заполнить, может вообще задача решается по другому.
Цитата(Gigi @ 04.05.17, 18:18)
Или вообще есть ли какая нибудь одна команда, на подобие НайтиПоИдентификатору()
что вы прицепились этому идентификатору, вот вообще не пойму, нет никакой одной одной команды.
Цитата(Gigi @ 04.05.17, 18:18)
И сократит объем кода.
Минимальный объем кода не всегда значит быструю производительность, иногда может быть наоборот.
Личные бесплатные консультации не даю, для этого есть форум!
Группа: Пользователи
Сообщений: 498
Спасибо сказали: 5 раз
Рейтинг: 0
Цитата(Gigi @ 04.05.17, 17:18)
я ж не знаю что у вас там происходит, если это одновременно требуется для большого количества строк, то имеет смысл собрать все строки и получить сразу для всех потом заполнить, может вообще задача решается по другому.
Цитата(logist @ 05.05.17, 13:23)
что вы прицепились этому идентификатору, вот вообще не пойму, нет никакой одной одной команды.
Ответ на эти вопросы, возможно дать только если скину образец процедур на клиенте и на сервере. И я решил все таки скинуть ... и думаю этим не уйду в сторону от поднятой темы. Ибо скинутое опять имеет отношение к получению значения по индексу табличной части. А в остальном, конечно может будет накладно вникать, но рассчитываю, на понимание и в любом случае спасибо! Вот код:
&НаКлиенте Процедура ТестФункции_ПолучитьЗначПоляТЧпоИдексу() //=========================================== Конфиг = "Справочники"; КонфигИмя="ТОЧКА"; АдреОбъекта=Конфиг+"."+КонфигИмя; //=========================================== знКодаПойска="000000001"; //------------------------------------------ знТЧ="ТЧ_Субабоненты"; знТЧреквизит="Субабоненты"; номерИндекса=1; //=========================================== // Команада: НайтиПоИдентификатору(2) для табличной части родной ФормыЭлемента нормально работает!
//Пример команды: НайтиПоИдентификатору(2)для табличной части родной ФормыЭлемента //СтрокаТЧ = Объект.ТабличнаяЧасть1.НайтиПоИдентификатору(2); //ТЧреквЗнач = Строка.Реквизит1; //Сообщить(ТЧреквЗнач);
//Тут нужно, получить значение ЧТ из другой ФормыЭлемента по указанному индексу. НужноеЗначение=ПолучитьЗначПоляТЧпоИдексу(Конфиг,КонфигИмя, знКодаПойска, знТЧ,знТЧреквизит,номерИндекса); Сообщить(НужноеЗначение); //=========================================== КонецПроцедуры
&НаСервере Функция ПолучитьЗначПоляТЧпоИдексу(Конфигурат,КонфигуратЭлемент, КодПойска, ТЧ, ТЧ_реквизит,Индекс) //========================================================================== Если Конфигурат = "Справочники" Тогда Попытка РезультПойска = Справочники[КонфигуратЭлемент].НайтиПоКоду(КодПойска); Исключение Возврат "Указанный адрес: «"+Конфигурат+"."+КонфигуратЭлемент+"» не существует!"; КонецПопытки ИначеЕсли Конфигурат = "Документы" Тогда Попытка РезультПойска = Документы[КонфигуратЭлемент].НайтиПоКоду(КодПойска); Исключение Возврат "Указанный адрес: «"+Конфигурат+"."+КонфигуратЭлемент+"» не существует!"; КонецПопытки Иначе Возврат "Не корректное указание объекта конфирурации!"; КонецЕсли; //========================================================================== Если РезультПойска.Пустая() Тогда Сообщить("В Списке: «"+Конфигурат+"."+КонфигуратЭлемент+"» КодПойска: «" + КодПойска + "» не найден!"); Иначе // ====ВОТ ГДЕ ЗАЦЫКЛИЛСЯ И НИКАК НЕ СМОГ НАЙТИ ПРИЕМЛЕМОЕ РЕШЕНИЕ! // ТУТ МНЕ ПРОСТО НУЖНО ПОЛУЧИТЬ ЗАЧЕНИЕ РЕКВИЗИТА ТАБЛИЧНОЙ ЧАСТИ ПО ИНДЕКСУ! //И ПРИЧИНА ТОГО, ПОЧЕМУ Я ПРИЦЕПИЛСЯ К КОМАНДЕ: "НайтиПоИдентификатору(Индекс)", в том, что она просто удобна, для взятого курса алгоритма. //И ею очень удобно воспользоваться, для ТЧ ФормыЭлемент на клиенте. Но тут она не срабатывает, по выше описанной причине! //И наверно где такое счастье, что бы везде работала.
// ======= Вариант 1 - не работает! //ОбъектКонфиг = РезультПойска.ПолучитьОбъект(); //СтрокаТЧ = ОбъектКонфиг[ТЧ].НайтиПоИдентификатору(Индекс); //значСтрокиТЧ = СтрокаТЧ[ТЧ_реквизит]; //Возврат значСтрокиТЧ;
////====== Вариант 2 - работает! // ОбъектСправочника = РезультПойска.ПолучитьОбъект(); // n=0; // Для каждого СтрокаТЧ Из ОбъектСправочника[ТЧ] Цикл // n=n+1; // Если n=Индекс тогда // значСтрокиТЧ = СтрокаТЧ[ТЧ_реквизит]; // Перейти ~ПроцедураВыход; // КонецЕсли; // КонецЦикла; // ~ПроцедураВыход:; // Возврат значСтрокиТЧ;
////====== Вариант 3 - ? //Запрос = Новый Запрос("ВЫБРАТЬ // | Спр[ТЧ_реквизит] // |ИЗ // | Справочник[КонфигуратЭлемент][ТЧ] КАК Спр // |ГДЕ // | Спр.Ссылка = &Ссылка // | И Спр.НомерСтроки = &НомерСтроки"); // Запрос.УстановитьПараметр("Ссылка", Справочники[КонфигуратЭлемент].НайтиПоКоду("000000001")); // Запрос.УстановитьПараметр("НомерСтроки", Индекс); // Выборка = Запрос.Выполнить().Выбрать(); // Если Выборка.Следующий() Тогда // Возврат Выборка[ТЧ_реквизит]; // КонецЕсли;
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0
Цитата(Gigi @ 05.05.17, 17:38)
если надеться оптимальное решение вопроса!
Вопрос то в чем? Для того что бы понимать оптимальность/правильность кода - надо понимать задачу которую он выполняет (не конкретный пункт действия, а в целом)
Личные бесплатные консультации не даю, для этого есть форум!
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!