Версия для печати темы (https://pro1c.org.ua/index.php?s=131fc5fd9b9667721298cbf728f9a1da&showtopic=32465)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Заполнение списка значений поля выбора

Автор: micom 16.10.16, 18:01

Здравствуйте!
Только начинаю изучать программирование в 1С. В бухгалтерии и учете - 0, т.к. сам инженер по автоматизации технологических процессов (электросхемы, пром. контроллеры). Что-бы понять принципы программирования в 1С, начал делать конфигурацию для известного мне "бизнес-процесса" - учет энергоресурсов предприятия. Это так, предыстория.

Есть предприятие, которое потребляет какие-то ресурсы. Перечень ресурсов и услуг - в справочнике ВидРесурсов. Каждый ресурс учитывается точкой учета, допустим для счетчика электроэнергии этими ресурсами будут потребление активной электроэнергии, генерация активной электроэнергии, потребление реактивной, генерация реактивной электроэнергии. Есть справочник ТочкиУчета, где содержатся все точки учета, например электросчетчик по адресу ул. Щевченко,11, счетчик воды по адресу... и т.д. Каждый элемент справочника ТочкиУчета имеет табличную часть, где содержатся данные про учитываемые ресурсы (например для счетчика электроэнергии - это виды электроэнергии: активная потребление, акт. ген., реакт. потр., реакт.ген.).


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

Код:

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

        Запрос.УстановитьПараметр("ПарамРесурс", ПолеВидРесурса);
        
        //результат запроса в таблицу значений
        ТЗРезультатЗапроса =  Запрос.Выполнить().Выгрузить();
        
        //создание элемента формы поле выбора и реквизита для него
        //реквизит
        Реквизит = Новый РеквизитФормы("РеквизитТочкаУч", Новый ОписаниеТипов ("СправочникСсылка.ТочкиУчета"),,, Истина);
        массивРеквизиты = Новый Массив;
        массивРеквизиты.Добавить(Реквизит);
         ИзменитьРеквизиты(массивРеквизиты);
         //поле выбора
         ЭлементПолеВыбра = ЭтаФорма.Элементы.Добавить("ПолеВыбораТУ", Тип ("ПолеФормы"), ЭтаФорма);
         ЭлементПолеВыбра.Вид = ВидПоляФормы.ПолеВвода;
         ЭлементПолеВыбра.ПутьКДанным = "РеквизитТочкаУч";

        
        ЭлементПолеВыбра.СписокВыбора.Очистить();
        ЭлементПолеВыбра.СписокВыбора.ЗагрузитьЗначения(ТЗРезультатЗапроса.ВыгрузитьКолонку("ТочкаУчета"));         
        
    КонецПроцедуры


Результат:


Как видно, нужные данные получаю (обведено красным), но перед ними отображается все содержимое справочника и в этом проблема. Данные, полученные в запросе отделены чертой.Я так понимаю, что ненужные мне данные отображаются из-за того, что при создании реквизита установлен тип Новый ОписаниеТипов ("СправочникСсылка.ТочкиУчета").
Как отобразить только результат запроса, который обведен?
Очень надеюсь на помощь в вопросе, над которым бьюсь уже несколько дней.

Автор: logist 16.10.16, 19:25

Цитата(micom @ 16.10.16, 19:01) *
ЭлементПолеВыбра.Вид = ВидПоляФормы.ПолеВвода;

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

Не понятен смысл программного создания реквизита. Вам нужно к созданному реквизиту подключить обработку события НачалоВыбора и в ней указать СтанадартнаяОбработка = Ложь, и далее отображать сформированный программно список выбора. Как-то так.

p.s. чтобы просто просматривать информацию есть Отчеты.

Автор: micom 17.10.16, 15:25

СПАСИБО.
Буду пробовать.

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua