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

Автоматическое заполнение табличной части документа

Автор Gregory78, 14 авг 2014, 19:34

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

Gregory78

Всем привет! Подскажите: как программным способом заполнить табличную часть документа данными из справочника "Сотрудники"?

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

Затем повесил на форму событие "При открытии". Перебираю массив циклом, и... дальше не хватает знаний.
Каким образом мне обратиться к ТЧ "СписокСотрудников"? Как к "Элементы.СписокСотрудников" или как "Объект.СписокСотрудников" (в последнем случае процедуру заменить на серверную)? Пытался через синтакс-помощник найти подходящие методы, но пока безрезультатно.

Была еще идея вставить вместо ТЧ динамический список - это получается легко... но мне нужны рядом с фамилией каждого сотрудника еще и реквизит типа "булево", редактируемый пользователем. Вот с этим тоже все сложно. (

В общем, цель такая: при открытии формы документа табличная часть должна автоматически заполниться списком сотрудников (циклом - создается строка, в реквизит "ФИО" вставляются данные из массива, данные записываются), чтобы пользователю осталось только выставить галочки на булевых реквизитах.
Работаю в 1С 8.2.

freez1301

после выполнения запроса у вас будет ТаблицаЗначений. Далее необходимо получить документ (или создать), который будете заполнять. и
Для каждого стр из ТЗ Цикл
НоваяСтрока = Документ.ТЧ.Добавить();
НоваяСтрока.ФИО = стр.ФИО;
и т.д.

TreeDogNight

&НаКлиенте
Процедура ПриОткрытии(Отказ)

ЗаполнитьТабличнуюЧасть();

КонецПроцедуры

&НаСервере
Процедура ЗаполнитьТабличнуюЧасть()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Сотрудники.Наименование
|ИЗ
| Справочник.Сотрудники КАК Сотрудники";

РезультатЗапроса = Запрос.Выполнить().Выгрузить()

Для каждого Стр из РезультатЗапроса Цикл
НоваяСтрока = Объект.ТабличнаячЧасть.Добавить();
НоваяСтрока.ФИО = Стр.Наименование;
КонецЦикла
КонецПроцедуры

Gregory78

Спасибо за подробный ответ! Но почему-то не все тут срабатывает. Создаются строки (их количество соответствует числу сотрудников), но поля остаются пустыми. Проверил с точкой останова, вроде все должно быть правильно. Жму Shift+F9 (вычислить выражение), получаю:
Стр.Наименование - видна фамилия сотрудника, тип - строка;
НоваяСтрока - ДанныеФормыЭлементКоллекции;
НоваяСтрока.Сотрудник - СправочникСсылка.Сотрудники

Но хоть убей, не видны эти сотрудники в форме!
Ковырялся еще сам, поместил весь код в одну процедуру "При создании на сервере". Попробовал использовать метод "Выбрать" вместо "Выгрузить", изменил обход результата запроса:

        Результат =  Запрос.Выполнить().Выбрать();
   Пока Результат.Следующий() Цикл
   НоваяСтрока = Объект.СписокСотрудников.Добавить();
   НоваяСтрока.Сотрудник = Результат.Наименование;

Но в итоге суть та же, все это как мертвому припарка. Последняя строка "НоваяСтрока.Сотрудник = Результат.Наименование;" не срабатывает. У кого-нибудь есть еще соображения?

GRADUS

Цитата: Gregory78 от 18 авг 2014, 21:55
Спасибо за подробный ответ! Но почему-то не все тут срабатывает. Создаются строки (их количество соответствует числу сотрудников), но поля остаются пустыми. Проверил с точкой останова, вроде все должно быть правильно. Жму Shift+F9 (вычислить выражение), получаю:
Стр.Наименование - видна фамилия сотрудника, тип - строка;
НоваяСтрока - ДанныеФормыЭлементКоллекции;
НоваяСтрока.Сотрудник - СправочникСсылка.Сотрудники

Но хоть убей, не видны эти сотрудники в форме!
Ковырялся еще сам, поместил весь код в одну процедуру "При создании на сервере". Попробовал использовать метод "Выбрать" вместо "Выгрузить", изменил обход результата запроса:

        Результат =  Запрос.Выполнить().Выбрать();
   Пока Результат.Следующий() Цикл
   НоваяСтрока = Объект.СписокСотрудников.Добавить();
   НоваяСтрока.Сотрудник = Результат.Наименование;

Но в итоге суть та же, все это как мертвому припарка. Последняя строка "НоваяСтрока.Сотрудник = Результат.Наименование;" не срабатывает. У кого-нибудь есть еще соображения?

Что будет, если ты попытаешься записать строку "абв" в переменную числового типа?
Вот и подумай, почему у тебя строка не записывается в переменную ссылочного типа.

Gregory78

Каким образом тогда получить ссылочные значения? Получить строку и каким-то образом выполнить поиск по справочнику, а полученный результат поместить в переменную?

roman_se.kz

А в Табличной Части это поле, куда вы записываете это ссылка на справочник Сотрудники? Или строковое?

has

Цитата: Gregory78 от 19 авг 2014, 16:10
Каким образом тогда получить ссылочные значения? Получить строку и каким-то образом выполнить поиск по справочнику, а полученный результат поместить в переменную?

Текст запроса то какой? Поди в запросе вместо ссылки наименование получаете

Gregory78

НоваяСтрока.Сотрудник -
СправочникСсылка.Сотрудники
Стало быть, не строка, а ссылка.
Добавлено: 20 авг 2014, 07:47



[/quote]
Текст запроса то какой? Поди в запросе вместо ссылки наименование получаете
[/quote]

Да, запросом получаю наименование . Так! Может быть, вместо наименования выбрать ссылку?

ВЫБРАТЬ
Сотрудники.Ссылка
ИЗ
Справочник.Сотрудники КАК Сотрудники
???
Надо будет попробовать.

has

Цитата: Gregory78 от 20 авг 2014, 07:41Да, запросом получаю наименование . Так! Может быть, вместо наименования выбрать ссылку?
Если в табличной части ссылка, то и в запросе ссылку выбирать надо


Теги:

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

Рейтинг@Mail.ru

Поиск