Получить строку в форме списка 1с

Обновлено: 07.07.2024

Пусть у нас есть есть документ ПриходнаяНакладная с табличной частью Состав . Для этого документа необходимо реализовать подбор номенклатур в табличную часть. Должна быть возможность переносить в документ несколько номенклатур за раз. То есть сначала пользователь подбирает номенклатуры в определенную таблицу, а затем по команде «Перенести в документ» данные из этой таблицы переносятся в табличную часть документа. При переносе в табличную часть, если номенклатура уже была добавлена ранее, нужно увеличить количество в этой строке на значение, указанное в подборе.

Рассмотрим два способа решения этой задачи: без обращения к серверу и с обращением к серверу.

Без обращения к серверу

Создадим форму списка у справочника Номенклатура не назначая ее основной. Добавим реквизит формы ПодобранныеНоменклатуры (тип ТаблицаЗначений ) и разместим соответствующий элемент формы. Для полей динамического списка ЭтоГруппа и Ссылка установим флаг ИспользоватьВсегда . Чуть позже станет понятно, для чего.

Все действия выбора будут сводиться к добавлению строки в таблицу ПодобранныеНоменклатуры элементов динамического списка. Если элемент уже был добавлен в таблицу, то увеличиваем его количество. Код обработки выбора элемента списка номенклатуры:

Форма подбора номенклатур вызывается из формы документа ПриходнаяНакладная по команде Подбор :

Когда в форме выбора необходимые номенклатуры подобраны, выполняется команда ПеренестиКлиент :

Теперь подобранные номенклатуры доступны в обработчике ОбработкаВыбора элемента формы документа:



С обращением к серверу

Отличия в реализации подбора будут в этом случае только в передаче данных в документ и, затем, обработки подобранных номенклатур в документе. Вот таким образом будет выглядеть команда передачи данных в документ из подбора:

Распечатать

17 правил для составления оптимального ЗАПРОСа к данным базы 1С  42
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ 1C и Google Maps  20
была поставлена задача отображения на географической карте медицинских учреждений. После обзора предлагаемых решений был выбран сервис google. Но так же подобного рода подход будет работать и с картами сервиса yandex. Во время решения задачи было реш 1С Предприятие что это?  11
Что такое 1С? 1С — это фирма , у которой одно из направлений деятельности — разработка программного обеспечения для автоматизации бизнес-процессов предприятий. « 1С:Предприятие » - конкретный продукт, который выпускает компания 1С . Что такое COM-подключение к базе 7.7 из 8.2 1С  6
Если код выполняется на стороне клиента, то необходимо наличие базы 7.7 на локальной машине. Пример (На форме объекта присутствует реквизит Таблица(ТаблицаЗначений)): НаКлиенте Процедура Загрузки() ПутьКБазе=" D:ВашаБаза1с77" ; Пользователь= Cклонения по падежам  6
НаКлиенте Процедура Команда1(Команда) ФИО = " Иванов Иван Иванович" ; Падеж = 2; Пол = 1; Результат = СклонениеФИО(ФИО, Падеж, пол); Сообщить(Результат); КонецПроцедуры НаСервере Функция СклонениеФИО(ФИО, Падеж, пол) Результат = " " ; Посмотреть все результаты поиска похожих

Еще в этой же категории

Как в форме списка реализовать сортировку по своему реквизиту?  10
Если реквизит примитивного типа, то достаточно установить для свойства реквизита «Индексировать» значение «Индексировать» или «Индексировать с доп. упорядочиванием» (не доступно для реквизитов типа ХранилищеЗначения). Если же реквизит ссылочного типа Сортировка списка по произвольной колонке?  7
В процедуру ПриОткрытии или в конец модуля добавить: ЭлементыФормы.РегистрСведенийСписок.НастройкаПорядка.НомерСоглашения.Доступность=Истина; Где НомерСоглашения - Колонка в списке регистра сведений по которой нужно сортировать! Далее щелкнув Оформление строки в ПриПолученииДанных или ПриВыводеСтроки   6
Событие ПриПолученииДанных использется для оформления ячеек строк данных, отображаемых табличным полем. Обработчик данного события вызывается табличным полем в тех же случаях, что и обработчик ПриВыводеСтроки , т.е. при обновлении данных, отображ Отбор по списку значений  3
СозданныйСписок = Новый СписокЗначений; СозданныйСписок.Добавить(Перечисления.СтатусЗаявки.Выполнено); СозданныйСписок.Добавить(Перечисления.СтатусЗаявки.ЗакрытиеЗаявки); СозданныйСписок.Добавить(Перечисления.СтатусЗаявки.ОтклоненаРукОтдЗакупок); Как пользователям запретить удаление условия отбора в форме списка?  3
ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; Полный код: ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип(" ЭлементОтбораКомпоновкиДанных" )); ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпонов Посмотреть все в категории Список Справочника, Документов, Регистров

Вся информация, представленная в статье, относится только к управляемому приложению.

Так как свойство относится к элементу формы (таблице), данные получаются именно из него, а не из источника. Из этого следует несколько особенностей свойства ТекущиеДанные:

Текущие данные 1С

  • Доступно только на клиенте. Его нельзя передавать и использовать на сервере. Поэтому правильно будет получить значения нужных полей в клиентской процедуре и передать их в серверную, при необходимости.
  • Содержит данные реквизитов добавленных на форму, а также данные реквизитов с установленным флагом Использовать всегда. Остальные реквизиты отсутствуют в коллекции.

    Как видно на картинке, в текущих данных представлены реквизиты Номенклатура и Сумма, добавленные в таблицу и реквизит Количество с установленным флагом Использовать всегда.
  • В случае, если таблица формы пустая или у нее нет активизированной строки, свойство ТекущиеДанные будет содержать значение Неопределено. Поэтому, перед использованием свойства, имеет смысл делать проверку. Но только в тех случаях, когда таблица действительно может быть пустой или не активизированной. Например событие ПриАктивизацииСтроки вызывается и для пустой таблицы. А вот событие ПриИзменении колонки таблицы, может вызываться только при наличии активизированной строки. Поэтому в проверке не будет смысла.

Варианты получения свойства Текущие данные 1С

В общем случае к свойству ТекущиеДанные можно обратиться через элемент формы к которому оно относится.

Но при обращении к текущим данным из обработчика события таблицы формы, можно воспользоваться параметром Элемент. В нем уже содержится таблица формы. В этом случае обращение к текущим данным будет выглядеть следующим образом:

Такое обращение к текущим данным не получится реализовать в обработчиках событий колонок таблицы формы. Так как в параметр Элемент там передается ПолеФормы, относящееся к колонке.

Затупил над простым вопросом. На УФ есть динамический список с основной таблицей в виде РС подчиненного регистратору. Надо получить значения из определенных колонок выделенных пользователем строк. В ТЧ это решается через получение ИД строк и метода:

У динамического списка такового нет. Как быть?

salt7; An-Aleksey; i.c.h; MariusUrsus; Serega-artem; Sashares; + 6 – Ответить

(19)Понятно.
Сначала надо в отдельный массив выделенные строки добавить.

А потом уже его обходить для получения данных.

(1) ВыделенныеСтроки (SelectedRows)
Использование:
Только чтение.
Описание:
Тип: Массив.
Содержит массив идентификаторов выделенных строк. (2) Так ИД получить не проблема, проблема получить данные по этим ИД. (6) Вы вопрос читали? Нет у динамического списка НайтиПоИдентификатору() ! (4) В выделенные строки заглядывали? Идентификаторами для динамического списка, основная таблица которого – РС, являются ключи записи этого РС. (11)А если убрать основную таблицу, то просто число.
Поэтому не суть что там. На УФ есть динамический список с основной таблицей в виде РС подчиненного регистратору. (13)Это я видел.
Я к тому, что из ключей ничего получить нормально нельзя. (14) Как раз из данных строки вы ничего не получите, точнее получите значения отображаемых колонок. При работе с ДС всегда следует работать с идентификаторами строк (ТекущаяСтрока / ВыделенныеСтроки). Надо получить значения из определенных колонок выделенных пользователем строк.

Именно это можно сделать из текущих данных, как предложено в (10)

При работе с ДС всегда следует работать с идентификаторами строк
Пока ничего полезного по теме вы не сказали.
Вот у вас идентификатор КлючЗаписи регистра, дальше что?

(16) Ваш вариант работает, но как-то странно: выводится информация только по части строк, причем закономерности особой не вижу! Буду копать дальше.

Про КлючЗаписи знаю, игрался долго с ним перед тем как задать вопрос на форму, но ничего путного не получил.

(19)Понятно.
Сначала надо в отдельный массив выделенные строки добавить.

А потом уже его обходить для получения данных.

(23)Сложно))
И максимум, что увижу - измерения.
А если надо ресурс или реквизит - предлагаете заново читать по ключу? (26) Вы получите Набор значений, однозначно идентифицирующих запись регистра. Этого более чем достаточно.

(27)
Если нужно получить значение из списка, который показывается пользователю на форме, считаю, что получать ключи регистра, потом по ключам читать записи регистра - не адекватное решение.

Если же нужно получить данные записей РС, которых нет в колонках списка, то ваш вариант, бесспорно, подходит.

(28) Это работает точно так же как с динамическим списком справочника или документа. Если вам понадобится получить какой-либо реквизит документа из выделенной строки списка, вы вряд ли будете его вытаскивать из данных строки – вы возьмете ссылку документа и на сервере получите его значение в запросе. Иначе вам необходимо предусмотреть наличие этой колонки в списке, пользовательскую видимость или включенное свойство реквизита ДС "Использовать всегда". (1)Если не указывать основную таблицу (если она регистр сведений), то в целом можно.

(5)Предыдущий комментарий не корректный. Извиняюсь.
Можно так:

Взять выделенные строки списка.
В цикле устанавливать текущей строкой - одну из выделенных.
Из ТекущихДанных брать значение.

Для иллюстрации механизма подбора информации в форме будем использовать задачу подбора элементов справочника Номенклатура в табличную часть документа ПриходнаяНакладная как наиболее распространенную. Поскольку механизм подбора реализован на уровне форм, то в других случаях просто будут задействованы иные прикладные объекты. Сама механика подбора не изменится.

Для организации подбора в форму документа следует открыть форму справочника как подчиненную форме документа в целом либо одному из элементов формы. Способ получения формы справочника может быть любым, также как и сама форма справочника, которая будет использована. Важно лишь то, что эта форма должна быть открыта как подчиненная.

Результат подбора будет доступен в обработчике события ОбработкаВыбора формы документа или элемента формы (в зависимости от того, чему мы подчиним форму справочника при открытии). Событие ОбработкаВыбора в форме документа будет вызвано в двух случаях:

  • когда в форме справочника будет выполнен интерактивный выбор;
  • когда в форме справочника будет вызван метод ОповеститьОВыборе .

Одиночный подбор

При одиночном подборе форма справочника будет закрываться сразу после выбора элемента. Для выбора следующего элемента необходимо будет снова инициировать подбор.

Откроем форму документа ПриходнаяНакладная , создадим команду Подбор и назначим для нее обработчик:

В этой процедуре мы открываем форму выбора для справочника Номенклатура , указывая, что она подчинена таблице Материалы формы документа ПриходнаяНакладная ( Элементы.Материалы ). При выборе из формы выбора справочника выбранное значение будет передано в обработчик события ОбработкаВыбора таблицы формы Материалы , так как она является владельцем открытой формы выбора.

Поэтому откроем палитру свойств таблицы Материалы и создадим обработчик события ОбработкаВыбора :

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

Множественный подбор

При множественном подборе форма справочника будет открыта до тех пор, пока пользователь не закроет ее интерактивно или не будет вызван метод формы Закрыть() .

Обработчик команды Подбор :

Обработчик события ОбработкаВыбора остается без изменений.

Подбор с использованием множественного выбора

Еще одним способом организации подбора является возможность выделения в списке сразу нескольких строк. Режим множественного выделения в списке устанавливается, как правило, во всех формах списков по умолчанию. Однако возможность выбрать сразу несколько элементов из списка по умолчанию, как правило, отключена.

Поэтому для того, чтобы в форме списка справочника Номенклатура можно было не только отметить, но и выбрать сразу несколько элементов, мы воспользуемся одним из параметров расширения формы динамического списка — МножественныйВыбор .

Обработчик команды Подбор :

Обработчик события ОбработкаВыбора :

Множественный подбор с использованием множественного выбора

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

Обработчик команды Подбор :

Обработчик события ОбработкаВыбора остается без изменений.

Использование метода ОповеститьОВыборе()

Метод формы ОповеститьОВыборе() используется в тех случаях, когда алгоритм формирования данных подбора сложен и кроме собственно выбора элемента справочника от пользователя требуется указание некоторой дополнительной информации. В этом случае метод ОповеститьОВыборе() вызывается тогда, когда вся необходимая информация подбора сформирована.

Метод ОповеститьОВыборе() посылает оповещение владельцу формы о выполнении выбора или подбора, передает ему выбранное значение и закрывает форму, если она открыта не в режиме множественного выбора.

Также метод ОповеститьОВыборе() может использоваться в тех случаях, когда требуется передать в форму документа не только выбранный элемент справочника (или массив элементов), а некоторую произвольную структуру данных.

Справка

ТабличноеПоле.ДобавитьСтроку()

Добавляет строку в табличное поле, аналогично выполнению команды «Добавить».

  • Если табличное поле связано с таблицей или деревом значений, метод добавляет строку в таблицу или дерево значений (аналогично соответствующим методам этих объектов).
  • Если табличное поле связано со списком объектов, хранимых в базе данных, метод начинает редактирование нового объекта этого списка. (Например, список объектов в форме списка справочника, или документа).
  • Если табличное поле связано с набором записей или табличной частью, то метод начинает редактирование новой записи. (Например, список записей в форме списка регистра сведений; табличная часть документа или справочника).

Доступность: Толстый клиент.

ДанныеФормыКоллекция.Добавить()

Добавляет элемент в конец коллекции и возвращает его в качестве результата метода. Возвращаемое значение: ДанныеФормыЭлементКоллекции .

Доступность: тонкий клиент, веб-клиент, сервер, толстый клиент, мобильное приложение(клиент), мобильное приложение(сервер).

Читайте также: