8.х Вывод результата

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем rina, 6 мар 2008.

  1. TopicStarter Overlay
    rina
    Offline

    rina

    Регистрация:
    26 фев 2008
    Сообщения:
    35
    Симпатии:
    0
    Баллы:
    1
    Такой вопрос: есть документ Монтаж картриджа с реквизитами Картридж, Подразделение, Принтер. Выбираем картридж, нужное подразделение. И вот теперь: необходимо, чтобы при нажатии на кнопку выбора реквизита Принтер на основании запроса формировался список принтеров, которые установлены в выбранном подразделении. С самим запросом выбора принтеров проблемы нет, но каким образом наглядно представить результат запроса с возможностью выбора из него в соответствующий реквизит необходимого принтера? Подскажите, пожалуйста!!!
  2. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Выгрузить в ТЗ и вывести на экран в виде списка, как вариант, использовать ВыбратьИзСписка или ВыбратьИзМеню...
  3. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    Как проще всего вывести:
    Код:
    ТаблицаЗначений = РезультатЗапроса.Выгрузить();
    ТаблицаЗначений.ВыбратьСтроку();
    
    
    Но если нужно какое-то красивое интерфейсное решение - я обычно делал форму со списком значений или с таблицей значений, загружал в нее данные и открывал модально для выбора. В случае модального открытия окна при его закрытии передается можно передать выбранную строку.
  4. TopicStarter Overlay
    rina
    Offline

    rina

    Регистрация:
    26 фев 2008
    Сообщения:
    35
    Симпатии:
    0
    Баллы:
    1
    Не подскажете, почему при закрытии окна таблицы значений выдается ошибка "Значение не является значением объектного типа", хотя вроде с типами данных все нормально. В чем ошибка?
  5. TopicStarter Overlay
    rina
    Offline

    rina

    Регистрация:
    26 фев 2008
    Сообщения:
    35
    Симпатии:
    0
    Баллы:
    1
    Теперь другая проблема. Строку из таблицы значений необходимо передать в реквизит Принтер. Для данного реквизита желательно сохранить ссылку на справочник Принтеры. Но в таком случае после выбора строки из таблицы значений открывается справочник Принтеры. Можно ли сделать так, чтобы при открытии справочника была выделена строка, соответствующая строке, выбранной из таблицы значений? Подскажите, пожалуйста!
  6. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    По поводу первого вопроса:
    Где-то идет обращение к строке

    По поводу второго:
    Получить форму, найти строку, установить ее текущей
  7. TopicStarter Overlay
    rina
    Offline

    rina

    Регистрация:
    26 фев 2008
    Сообщения:
    35
    Симпатии:
    0
    Баллы:
    1
    А можно конкретнее? Если бы все было так элементрано просто.....
  8. TopicStarter Overlay
    rina
    Offline

    rina

    Регистрация:
    26 фев 2008
    Сообщения:
    35
    Симпатии:
    0
    Баллы:
    1
    Пожалуйста, подскажите по поводу второго вопроса!!! Очень надо!!!
  9. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Объясните понятнее, что происходит, из этого ничего не понял:
  10. TopicStarter Overlay
    rina
    Offline

    rina

    Регистрация:
    26 фев 2008
    Сообщения:
    35
    Симпатии:
    0
    Баллы:
    1
    Есть реквизит Принтер со ссылкой на справочник Принтеры и реквизит Подразделение. Выбирается подразделение, на основании запроса формируется таблица значений с принтерами, установленными в данном подразделении. Выбранную строку из ТЗ необходимо передать в реквизит Принтер, но открывается еще и форма справочника Принтеры. Как сделать, чтобы выбранная строка из ТЗ устанавливалась текущей в открытой форме справочника? Или может чтобы она вообще не открывалась? Вообщем не знаю....
  11. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    Вы не так отрабатываете выбор строки в таблице значений.
    Плюс не так выбор принтера в документе.

    1. В процедуре, в которой выбираетсяп ринтер (например что-то вроде Процедура ТабличнаяЧастьПринтерПриИзменении()) Вам надо прописать в начале
    Код:
    СтандартнаяОбработка = Ложь;
    
    
    Это определит то, что система будет отрабатывать это событие нестандартно (не будет предлагать выбрать принтер, а использует ваш код).
    2. Когда делаете ТЗ.ВыбратьСтроку - сделайте что-то вроде - я не знаю ваших названий реквизитов:
    Код:
    ТекСтр = ТЗ.ВыбратьСтроку();
    ЭлементыФормы.ТабличнаяЧасть.ТекущиеДанные.Принтер = ТекСтр.Принтер;
    
    
    Например вот так :) Но я бы сделал следующим образом:
    1. Отменил бы стандартную обработку, как и в предыдущем варианте
    2. Сформировал бы список принтеров по подразделению
    3. Взял бы форму справочника "Принтеры" и установил в ней отбор (Принтеры в полученном списке принтеров) и открыл бы форму принтеров модально. Возвращаемое ею значение и будет выбранный принтер.
  12. TopicStarter Overlay
    rina
    Offline

    rina

    Регистрация:
    26 фев 2008
    Сообщения:
    35
    Симпатии:
    0
    Баллы:
    1
    Огромное спасибо, все получилось! Воспользовалась отбором. Так даже лучше!
  13. TopicStarter Overlay
    rina
    Offline

    rina

    Регистрация:
    26 фев 2008
    Сообщения:
    35
    Симпатии:
    0
    Баллы:
    1
    А как в качестве значения отбора передать результат запроса?
  14. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    Нужно результат запроса выгрузить в список значений или массив (только конкретный реквизит). После чего список значений/массив/ссылку можно использовать как значение отбора.

    Например у вас запросом получилась таблица какая-нибудь, с колонкой Принтер - выгрузите эту колонку в список и используйте.
  15. TopicStarter Overlay
    rina
    Offline

    rina

    Регистрация:
    26 фев 2008
    Сообщения:
    35
    Симпатии:
    0
    Баллы:
    1
    Да, но в таком случае и возникает ошибка "Значение не является значением объектного типа"! А можно как-то без выгрузки в ТЗ? Т.к. надо выгрузить пару реквизитов.
  16. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Если бы был показан код, можно было бы понять, откуда ошибка лезет...
  17. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    1. Код, пожалуйста
    2. Если отбор по паре реквизитов, то вам нужно создать 2 списка значений и установить два отбора!
  18. TopicStarter Overlay
    rina
    Offline

    rina

    Регистрация:
    26 фев 2008
    Сообщения:
    35
    Симпатии:
    0
    Баллы:
    1
    Код:
    СтандартнаяОбработка=Ложь;
    
    Запрос = Новый Запрос();
    Запрос.Текст ="ВЫБРАТЬ
    |    СпрПринтеры.Наименование КАК Принтер,
    |    СпрПринтеры.ИнвентарныйНомер
    |ИЗ
    |    Справочник.Принтеры КАК СпрПринтеры
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ТекущееСостояниеОбъекта.СрезПоследних 
    |                                                                                  КАК ТекущееСостояниеОбъектаСрезПоследних
    |        ПО ТекущееСостояниеОбъектаСрезПоследних.Объект = СпрПринтеры.Ссылка
    |ГДЕ
    |    ТекущееСостояниеОбъектаСрезПоследних.Регистратор.Подразделение = &Подразделение";
    
    Запрос.УстановитьПараметр("Подразделение", Подразделение);
    
    Выборка = Запрос.Выполнить().Выгрузить().ВыбратьСтроку();
    ФормаВыбора = Справочники.Принтеры.ПолучитьФормуВыбора();
    ФормаВыбора.СправочникСписок.Отбор.Наименование.ВидСравнения=ВидСравнения.Равно;
    ФормаВыбора.СправочникСписок.Отбор.Наименование.Использование = Истина;
    ФормаВыбора.СправочникСписок.Отбор.Наименование.Значение = Выборка.Принтер;
    ФормаВыбора.СправочникСписок.Отбор.ИнвентарныйНомер.ВидСравнения = ВидСравнения.Равно;
    ФормаВыбора.СправочникСписок.Отбор.ИнвентарныйНомер.Использование=Истина;
    ФормаВыбора.СправочникСписок.Отбор.ИнвентарныйНомер.Значение = Выборка.ИнвентарныйНомер;
    ЗначениеВозврата = ФормаВыбора.ОткрытьМодально();
    Принтер = ЗначениеВозврата;
    
  19. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    Вы не правы - в вашем случае достаточно отбора по принтерам - без инвентарных номеров. Включать два отбора тут не надо - так как список принтеров - сам по себе отбор.

    А ошибка вылезает потому что вы некорректно делаете выборку:
    Код:
    Выборка = Запрос.Выполнить().Выгрузить().ВыбратьСтроку();
    
    
    Вы сначала даете пользователю выбрать принтер, а потом еще и справолчник открываете снова с отбором - ну это некорректно.
    Сделайте так:
    Код:
    СтандартнаяОбработка=Ложь;        
    Запрос = Новый Запрос();    
    // запрос оставляем - проверьте чтобы результат был, но выбирайте не Принтер.Наименование - а Принтер.Ссылка КАК Принтер
    Запрос.Текст ="///";    
    
    Запрос.УстановитьПараметр("Подразделение", Подразделение);        
    Принтеры = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Принтер");    
    ФормаВыбора = Справочники.Принтеры.ПолучитьФормуВыбора();
    ФормаВыбора.СправочникСписок.Отбор.Ссылка.ВидСравнения=ВидСравнения.ВСписке;
    ФормаВыбора.СправочникСписок.Отбор.Ссылка.Использование = Истина;
    ФормаВыбора.СправочникСписок.Отбор.Ссылка.Значение = Принтеры;
    ЗначениеВозврата = ФормаВыбора.ОткрытьМодально();
    Принтер = ЗначениеВозврата;
    
  20. TopicStarter Overlay
    rina
    Offline

    rina

    Регистрация:
    26 фев 2008
    Сообщения:
    35
    Симпатии:
    0
    Баллы:
    1
    Большое спасибо за подсказку, но теперь в строке ошибка: неверный тип значения
    Код:
    ФормаВыбора.СправочникСписок.Отбор.Ссылка.Значение = Принтеры;
    
    

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