Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
25 ноя 2024, 03:04

пара вопрос по табличным частям и объекту.

Автор andron81_81, 01 мар 2018, 19:59

0 Пользователей и 1 гость просматривают эту тему.

andron81_81

Добрый всем вечер.
Помогите пока ещё зелёному чайнику :bleh:
Итак, Обычное приложение.

Задача такова, что имеется в одном документе несколько табличных частей с кучей строк.
Каждая такая строка имеет 4 поля :
код            - число
принадлежность - число
наименование   - строка
значение       - строка
Причем код + принадлежность идентифицируют строку тч.

Мне необходимо в куче процедур и функций по этим двум идентификаторам отыскивать значения этих строк.
Вопрос 1. Как грамотно в этих процедурах и функциях , описывающих логику, считать табличные части ? Мой вариант тупо в теле читать объект. и всё.  А хорошо ли это , будет ли эта логика производиться на сервере в этом случае ?

Скажем есть процедура РасчетЛистов:

Процедура РасчетЛистов()
Объект = ЭтаФорма.ДокументОбъект;
  //... Далее через объект получаем доступ уже ко всему что можно...
  //... в том числе и к таб. частям    .............................
КонецПроцедуры


Может быть есть более лучший вариант ?

Вопрос 2. Как мне искать нужные значения по идентификаторам принадлежность, код ?
Опять же предложу тупой обход по циклу. Ещё думал задействовать структуру , но у меня 2 ключа -
измерения , наверно не пойдет.


Luzer1C

ЦитироватьЕщё думал задействовать структуру , но у меня 2 ключа
1) В структуру можно запихать 2 ключа.
2) Воспользоваться: Объект[ИмяТЧ].НайтиСтроки(Структура) - возвращаемое значение "Массив".
Халамбалам.

andron81_81

Большое спасибо за отклик. Но вы фактически ответили в 1) и 2) только на один вопрос.
Цитата: Luzer1C от 02 мар 2018, 05:10
1) В структуру можно запихать 2 ключа.
А забивать структуру мне каким образом ? использую цикл или есть лучше способ ?

Цитата: Luzer1C от 02 мар 2018, 05:10
2) Воспользоваться: Объект[ИмяТЧ].НайтиСтроки(Структура) - возвращаемое значение "Массив".
да это понятно.

Вопрос то был не про то как искать значение. это я умею. вопрос был верно ли делать тупое обращение к объекту как я описал в первичном вопросе (см. код)  ? Ведь обращений будет много, то есть таких процедур как я описал(см. код) и в каждом будет Объект = ЭтаФорма.ДокументОбъект; , а затем тут же фактически будет много раз Объект[ИмяТЧ].НайтиСтроки(Структура) .  Это я и сделал в лоб. Но как тут сделать получше ?

Может быть создать глобальную переменные Табчасть1 , Табчасть2 . в них перед выполнением процедур логики (см. код) записать структуры. и работать уже в процедуре как обращение к этим переменным ?


AIFrame

Если ты работаешь в форме - обращайся к данным на форме.
Если ты работаешь со ссылкой, обращайся к данным ссылки. Напрямую, запросом, ТЧ.Выгрузить()  и т.д.
Про НайтиСтроки уже сказали.
Зачем тебе объекты, если ты не собираешься их менять?

andron81_81

Цитата: AIFrame от 02 мар 2018, 09:58
Зачем тебе объекты, если ты не собираешься их менять?

собираюсь.  вы не рекомендуете это делать ?

Цитата: AIFrame от 02 мар 2018, 09:58
Если ты работаешь в форме - обращайся к данным на форме.
можно коротенький пример ? что имеется ввиду


AIFrame

Цитата: andron81_81 от 02 мар 2018, 10:06собираюсь.
Вот когда собираешься - тогда и обращайся.
Цитироватьможно коротенький пример
ТаблицаНаФорме.Очистить();

andron81_81

Цитата: AIFrame от 02 мар 2018, 10:28
Вот когда собираешься - тогда и обращайся.
Обращаюсь. В этом то весь и смысл.
например есть Функция расчетКоличетсваЛистовОттисков (Тираж, объем)
входные параметры тираж и объем я их должен отыскать и взять из таб. части ТабЧасть1. В ней я ищу я их по коду . это был один из вопросов как это сделать.
а) простой обход по циклу
б) найтиСтроки
в) забить в структуру
я реализовал а) . а мне подсказали ещё б и в . Я и задал какой способ лучше.

В этой функции я считаю и потом должен записать в эту же таб. часть под названием Количество листов оттисков . Эту строка так же имеет свой код.

AIFrame

Цитата: andron81_81 от 02 мар 2018, 10:41б) найтиСтроки
в) забить в структуру
Чо?
НайтиСтроки с отбором по структуре тебе посоветовали вообще-то.

andron81_81

Цитата: AIFrame от 02 мар 2018, 10:43
Чо?
НайтиСтроки с отбором по структуре тебе посоветовали вообще-то.
я что-то не понимаю.
зачем в структуре найтиСтроки ?
Я понимал это так, что я всю таб. часть погружают в структуру :


Реквизиты = Новый Структура;

    Реквизиты.Вставить("код10", 1000); //тираж
    Реквизиты.Вставить("код102", 0.5); //объем
    Реквизиты.Вставить("код56", "Обложка"); //Наименование листа


и уже обращаюсь к элементам так :


РасчетЛистовОттисков = Реквизиты.Код10 * Реквизиты.Код102 ; // объем * Тираж



AIFrame

Цитата: andron81_81 от 02 мар 2018, 10:54зачем в структуре найтиСтроки ?
НайтиСтроки ПО СТРУКТУРЕ ОТБОРА!
Читай СП - НайтиСтроки
Табличная часть (Tabular section)
НайтиСтроки (FindRows)
Синтаксис:

НайтиСтроки(<ПараметрыОтбора>)
Параметры:

<ПараметрыОтбора> (обязательный)

Тип: Структура.
Задает условия поиска: ключ структуры определяет имя колонки, по которой будет осуществляться поиск, а значение структуры - искомое значение.
Возвращаемое значение:

Тип: Массив.
Массив из строк табличной части, соответствующих заданному условию поиска.
Замечание! Массив хранит ссылки на строки табличной части, то есть при изменении строки в табличной части, значение в массиве тоже будет изменено.
Описание:

Осуществляет поиск строк табличной части, соответствующих заданному условию поиска.

Доступность:

Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер).
Примечание:

Метод эффективно использовать для выборки неуникальных значений.
Пример:

ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("Номенклатура", ТекТовар);
НайденныеСтроки = Состав.НайтиСтроки(ПараметрыОтбора);


Похожие темы (5)

Рейтинг@Mail.ru

Поиск