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

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

  1. 111111

    111111 Гость

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


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

    Версия 8.0
    В чем моя ошибка?
     
  2. mialord

    mialord Гость

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

    111111 Гость

    mialord

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


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


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

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

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

    kaa Гость

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

    111111 Гость

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

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

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

    ???

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

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

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

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

    kaa Гость

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

    Например

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

    111111 Гость

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

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

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


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

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

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

    111111 Гость

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

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