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

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

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

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

Вывод таблицы значений в форме. Помогите...

  • Автор темы regal
  • Дата начала
R

regal

Помогите пожалуйста.
У меня такая проблема. Мне нужно, чтобы при нажатии кнопки в командной панели в форме документа появлялась таблица значений, куда бы заносились данные, полученные из запроса.
В форме в конфигураторе создал реквизит с типом ТЗ и добавил туда все необходимые колонки. Путь к данным прописался автоматически(перенес реквизит в окно элементов).
Процедуру запроса перенес на сервер, так как в клиенте самого запроса не видит. Запрос выполнил, его значения правильно переносятся в таблицу значений, только вот в форме их почему то не видно, т.е.
при нажатии кнопки ничего не происходит. ТЗ заполняется на сервере. При нажатии кнопки Видимость и Доступность ТЗ становится в положение Истина.
Конфигурация 8.2. Если нужны дополнительные сведения могу их предоставить.
 
U

unknown181538

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

Объект.ТЗ.Загрузить(Запрос.Выполнить().Выгрузить());

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


Добавлено: Еще через динамический список можно.
 
R

regal

Нет. К сожалению, не пойдет. У меня данные из запроса выбираются через цикл. Да и в ТЗ метода Загрузить в всплывающей подсказке нету :what?:
 
U

unknown181538

Не понял, какая разница.
Киньте код.
 
R

regal

&НаКлиенте
Процедура СформироватьСписокПартий(Команда)
ФормированиеТаблицыЗначений();
КонецПроцедуры

Процедура ФормированиеТаблицыЗначений();
Товар = Объект.ТоварДляВыбора;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТоварыНаСкладе.Регистратор КАК Партия,
| ТоварыНаСкладе.НаименованиеТовара,
| ТоварыНаСкладеОстаткиИОбороты.КоличествоКонечныйОстаток КАК Остаток
|ИЗ
| РегистрНакопления.ТоварыНаСкладе КАК ТоварыНаСкладе,
| РегистрНакопления.ТоварыНаСкладе.ОстаткиИОбороты КАК ТоварыНаСкладеОстаткиИОбороты
|ГДЕ
| ТоварыНаСкладе.НаименованиеТовара = &НаименованиеТовара";
Запрос.УстановитьПараметр("НаименованиеТовара", Товар);
Выборка = Запрос.Выполнить().Выбрать();

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


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

regal

А если так?

СписокПартий - реквизит объекта?
Да. СписокПартий это реквизит объекта с типом ТЗ.
Объект не подходит, так как выдает ошибку: "Поле объекта не обнаружено".
Если написать "Элементы.СписокПартий.Добавить();" тогда выдаст ошибку: "Метод объекта не обнаружен".
Хз, что еще можно сделать. Может это из-за того, что выполняется на сервере?
 
U

unknown181538

Вы что-то путаете.
У вас форма документа?
Документу не получится добавить реквизит типа таблицаЗначений.
 
R

regal

Вы что-то путаете.
У вас форма документа?
Документу не получится добавить реквизит типа таблицаЗначений.
Да, форма документа.
Я создавал это в окне реквизитов в правом верхнем углу. Там еще есть закладки: "Реквизиты", "Команды", "Параметры". Т.е. у меня в настройках форма строится автоматически. Не как в Делфи.
 
U

unknown181538

Блин, это не реквизит объекта, а реквизит формы....

Добавлено: А в форме созданы колонки ТЗ?
Т.е. в конфигураторе в нижнем окне их видно?
У меня ваш вариант работает.
 
R

regal

Блин, это не реквизит объекта, а реквизит формы....



Добавлено: А в форме созданы колонки ТЗ?
Т.е. в конфигураторе в нижнем окне их видно?
У меня ваш вариант работает.
Блин, нужно было всего навсего перетащить колонки в окно элементов. Теперь и у меня работает. Спасибо за подсказку :rolleyes:
 
U

unknown181538

Блин, нужно было всего навсего перетащить колонки в окно элементов. Теперь и у меня работает. Спасибо за подсказку
Ну или удалить и перетащить заново :rolleyes:
Как сделать так, чтобы элементы формы можно было добавлять вручную и расставлять их соответственно как в Делфи?
Нельзя.
 
R

regal

Еще один вопрос хотел бы задать.
В форме документа есть два табличных поля. Я бы хотел, чтобы при выборе строки первого ТП либо при выделении строки и нажатии кнопки Выбрать, эта же строка добавлялась во второе ТП.
Первое ТП сформировано из ТЗ, второе ТП это просто табличная часть документа.
Вот мой код:
СписокПартий это первое ТП, а СписокТоваров - второе.

&НаКлиенте
Процедура Выбрать(Команда)
ВыдСтроки = Элементы.СписокПартий.ВыделенныеСтроки;
Индекс = 0;
Для Каждого ТекСтрока ИЗ ВыдСтроки Цикл
Элементы.СписокТоваров.ДобавитьСтроку();
СтрокаТабличнойЧасти = Элементы.СписокТоваров.ТекущиеДанные;
ВС = ВыдСтроки.Получить(Индекс);
СтрокаТабличнойЧасти.Наименование = ВС.Название;
СтрокаТабличнойЧасти.Количество = ВС.Количество;
СтрокаТабличнойЧасти.Партия = ВС.Партия;
КонецЦикла;


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


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

unknown181538

Как я понял, в ВыдСтроки попадают индексы выделенных строк. Соответственно:

Код:
&НаКлиенте
Процедура Выбрать(Команда)
ВыдСтроки = Элементы.СписокПартий.ВыделенныеСтроки;

Для Каждого ТекСтрока ИЗ ВыдСтроки Цикл
Элементы.СписокТоваров.ДобавитьСтроку();
СтрокаТабличнойЧасти = Элементы.СписокТоваров.ТекущиеДанные;
[b]ВС = СписокПартий[ТекСтрока];[/b]
СтрокаТабличнойЧасти.Наименование = ВС.Название;
СтрокаТабличнойЧасти.Количество = ВС.Количество;
СтрокаТабличнойЧасти.Партия = ВС.Партия;
КонецЦикла;


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

regal

Разобрался. В ВС попадает индекс строки всего табличного поля. Теперь с помощь ВС я смогу легко обратиться к первому ТП по индексу и скопировать нужные данные.
 
Мы в соцсетях:

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