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

Тема в разделе "1C и всё что с ней связано", создана пользователем regal, 4 янв 2011.

  1. regal

    regal Гость

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

    unknown181538 НеГуру
    1C Team

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

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

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

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

    regal Гость

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

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    Не понял, какая разница.
    Киньте код.
     
  5. regal

    regal Гость

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

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

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


    КонецПроцедуры
     
  6. unknown181538

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    А если так?
    СписокПартий - реквизит объекта?
     
  7. regal

    regal Гость

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

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    Вы что-то путаете.
    У вас форма документа?
    Документу не получится добавить реквизит типа таблицаЗначений.
     
  9. regal

    regal Гость

    Да, форма документа.
    Я создавал это в окне реквизитов в правом верхнем углу. Там еще есть закладки: "Реквизиты", "Команды", "Параметры". Т.е. у меня в настройках форма строится автоматически. Не как в Делфи.
     
  10. unknown181538

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    Блин, это не реквизит объекта, а реквизит формы....

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

    regal Гость

    Блин, нужно было всего навсего перетащить колонки в окно элементов. Теперь и у меня работает. Спасибо за подсказку :rolleyes:
     
  12. unknown181538

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    Ну или удалить и перетащить заново :rolleyes:
    Нельзя.
     
  13. regal

    regal Гость

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

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


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


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

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    Как я понял, в ВыдСтроки попадают индексы выделенных строк. Соответственно:

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

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


    КонецПроцедуры
     
  15. regal

    regal Гость

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

Поделиться этой страницей