• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Программное заполнение табличного поля данными из справочника

  • Автор темы 111111
  • Дата начала
1

111111

Я пытаюсь заполнить табличное поле данными из таблицы, но в результате оно остается пустым.
Я действую так:
1)Создал реквизит формы "ВсяНоменклатура" (название реквизита без ковычек).
2)В модуле формы ввожу след. код


ЭлементыФормы.ТабличноеПоле1.Данные=ВсяНоменклатура;
ЭлементыФормы.ТабличноеПоле1.СоздатьКолонки();

Версия 8.0
В чем моя ошибка?
 
M

mialord

Брррррррр. Не совсем понятно, т.е. совсем не понятно
Создал реквизит формы "ВсяНоменклатура"
вот это еще понятно
ЭлементыФормы.ТабличноеПоле1.Данные="ВсяНоменклатура";
ЭлементыФормы.ТабличноеПоле1.СоздатьКолонки();
а это не очень.
Может быть 8.0 и 8.1 на столько отличаются, что я Вас и не понимаю.
1 У Вас реквизит какого типа?
2 Разве реквизит указывается в ковычках - это не реквизит, а просто строка тоже самое что я напишу так "Мама мыла раму".
3 СоздатьКолонки() :) , Зачем? если Вы завязываете к данные табличного поля к реквизиту.
Не, ну может быть конечно язык настолько сильно изменился и тогда я Вам не советник.
4 А зачем завязывать табличное поле и реквизит програмно? Это принципиально или требуется всвязи с особенностью поставленной задачи?
5 Вообще должно тогда хватить следующего ЭлементыФормы.ТабличноеПоле1.Данные=ВсяНоменклатура, при условии что типы совместимы.
 
1

111111

mialord

Когда печатал в сообщении, ошибся. У меня в модуле, конечно, без ковычек, т.е. вот так (первый пост на всякий случай исправил).


Код:
ЭлементыФормы.ТабличноеПоле1.Данные=ВсяНоменклатура;
ЭлементыФормы.ТабличноеПоле1.СоздатьКолонки();


А зачем завязывать табличное поле и реквизит програмно? Это принципиально или требуется всвязи с особенностью поставленной задачи?


Необходимо, чтобы в одном и том же табличном поле можно было просматривать данные нескольких справочников (выбор по переключателю).

СоздатьКолонки() blink.gif , Зачем? если Вы завязываете к данные табличного поля к реквизиту

Хм, в описании метода говорится,
Удаляет старые колонки и загружает новые колонки из источника данных.
Недоступен на сервере 1С:Предприятие. Не используется в модуле внешнего соединения.

В этих справочниках разное количество столбцов (т.е. реквизитов). А разве для изменения числа колонок в ТабличномПоле не надо вызывать метод СоздатьКолонки()?

Табличное поле изначально связано с реквизитом "ТабличноеПоле1" (тип "ТаблицаЗначений"). Реквизит "ВсяНоменклатура" имеет тип "СправочникСсылка.Услуги".
 
K

kaa

1. надо получить ссылку для заполнения реквизита
2. СтрокаТабЧасти = ЭлементыФормы.ТабличноеПоле1.ТекущиеДанные;
СтрокаТабЧасти.ВсяНоменклатура = ВАША ССЫЛКА;
 
1

111111

1. надо получить ссылку для заполнения реквизита
Вы имеете ввиду "Справочники.Услуги.ПолучитьСсылку()" или "ВсяНоменклатура", который имеет тип "СправочникСсылка.Услуги" ?

2. СтрокаТабЧасти = ЭлементыФормы.ТабличноеПоле1.ТекущиеДанные;
СтрокаТабЧасти.ВсяНоменклатура = ВАША ССЫЛКА;

Т.е. должно получиться так:

СтрокаТабЧасти = ЭлементыФормы.ТабличноеПоле1.ТекущиеДанные;
СтрокаТабЧасти.ВсяНоменклатура = СправочникСсылка.Услуги;

???

А код из моего первого поста разве не нужен? Изначально реквизит табличного поля это "ТабличноеПоле1", а не "ВсяНоменклатура".

Я недавно начал работать с 1С, поэтому очень прошу объяснить мне приведенный выше код.

СтрокаТабЧасти = ЭлементыФормы.ТабличноеПоле1.ТекущиеДанные; /*Здесь, как я понял, мы присваиваем переменной СтрокаТабЧасти объект, содержащий данные текущей строки*/

СтрокаТабЧасти.ВсяНоменклатура = СправочникСсылка.Услуги; /* А здесь не совсем понятно. Можете объяснить, что делает эта комманда*/
 
K

kaa

СтрокаТабЧасти.ВсяНоменклатура = СправочникСсылка.Услуги;
я подозреваю что у вас в табличной части есть реквизит ВсяНоменклатура с типом СправочникСсылка.Услуги и этой строкой присваиваем значение реквизиту таб. части

Например

НужнаяСсылка = Справочники.Услуги.НайтиПоКоду("00001");//возвращает ссылку на элемент справочника Услуги с кодом "00001"
СтрокаТабЧасти.ВсяНоменклатура = НужнаяСсылка;
 
1

111111

Это не совсем то, что мне нужно. Как я понял данный код сначала получает ссылку на строку, соответствующую критерию. А вот что дальше происходит? Ведь у ЭлементыФормы.ТабличноеПоле1.ТекущиеДанные нет свойства ВсяНоменклатура или ТабличноеПоле1, а есть только

ТекущиеДанные (CurrentData)
Использование:
Только чтение.
Описание:
Содержит данные текущей строки табличного поля.

Может быть я чего-то не понимаю, но мне кажется, что тот алгоритм, что вы имели ввиду, будет иметь следующий код:

ТабличноеПоле1.Колонки.Очистить();
ТабличноеПоле1.Колонки.Добавить("Код",,"Код",);
ТабличноеПоле1.Колонки.Добавить("Наименование",,"Наименование",);
ТабличноеПоле1.Колонки.Добавить("КраткоеОписание",,"КраткоеОписание",);
ЭлементыФормы.ТабличноеПоле1.СоздатьКолонки();
ссылка=Справочники.Услуги.НайтиПоКоду("00001");
Строка=ТабличноеПоле1.Добавить();
Строка.Код=ссылка.Код;
Строка.Наименование=ссылка.Наименование;
Строка.КраткоеОписание=ссылка.КраткоеОписание;
ЭлементыФормы.ТабличноеПоле1.ТекущаяСтрока=Строка;


Где "КраткоеОписание" есть реквизит справочника "Услуги" (к сожалению не смог найти способ программного определения реквизитов, но так как в моем случае это не принципиально, то можно обойтись и без этого, хотя, если кто-нибудь сей замечательный способ подскажет, буду рад :) ).

Но данный алгоритм, если вы его имели ввиду, мне не подходит, т.к. мне необходимо заполнить табличное поле всеми значениями справочника, не зная их предварительно.

Мне нужно, чтобы при смене переключателей моментально менялись и данные в табличной части формы. Т.е. выбрал один переключатель - в табличной части данные одного справочника, выбрал второй - второго.
 
1

111111

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!