Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Из ТЗ в форму документа  (Прочитано 8307 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
Dimkostav
Новенький

ru
Offline Offline

« : 28-10-2010 05:57 » 

Добрый день. Помогите новичку.
Есть документ ПередачаВСалоны. У этого документа есть ФормаДокумента. На ФормаДокумента есть поле ввода, данные которого <Реквизит табличной части> этого документа. Сам же  <Реквизит табличной части> имеет тип СправочникСсылка.<ИмяСправочника>.
При нажатии на поле ввода открывается ФормаВыбора из соответствующего справочника. На этой ФормаВыбора есть ТаблицаЗначений. В ней данные из запроса. Как же вернуть выбранное значение из этой ТаблицаЗначений в ФормаДокумента? А черт его знает...
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 28-10-2010 14:54 » new

ОповеститьОВыборе(<ЗначениеВыбора>);
Записан
Dimkostav
Новенький

ru
Offline Offline

« Ответ #2 : 28-10-2010 16:22 » 

Дело в том, что в ТаблицеЗначений на ФормаВыбора не удаётся выбрать элемент из этой таблицы. Можно лишь изменить его. Вот куда писать ОповеститьОВыборе(<ЗначениеВыбора>);? Знаю, что ещё событие нужно вещать на ФормаВыбора или на ТаблицаЗначений...

Добавлено через 29 минут и 6 секунд:
Вообще сейчас примерно такая ситуация получается:

В модуле формы документа

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

А в модуле ФормыВыбора так:

Процедура ПриОткрытии()
Если ЭтаФорма.Вызывает = "1" Тогда
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
              | Картриджи.Код КАК Код,
              | Картриджи.Наименование КАК Модель
              |ИЗ
              | Справочник.Картриджи КАК Картриджи";
Результат = Запрос.Выполнить();
       ТЗ = Результат.Выгрузить();
         ЭлементыФормы.ТЗ.СоздатьКолонки();
        
//////////////////////////////////////////////////////////////////////////////////
ИначеЕсли ЭтаФорма.Вызывает = "2" Тогда
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
  | Картриджи.Код КАК Код,
  | Картриджи.УникальныйНомерКартриджа,
  | Картриджи.Наименование,
  | Картриджи.ЮрЛицо.Наименование
  |ИЗ
  | Справочник.Картриджи КАК Картриджи";
Результат = Запрос.Выполнить();
  ЭлементыФормы.ТЗ.СоздатьКолонки();
КонецЕсли
КонецПроцедуры


Процедура КоманднаяПанель1Действие1(Кнопка)
Закрыть(ЭлементыФормы.ТЗ.ТекущиеДанные.Код);
Сообщить(ЭлементыФормы.ТЗ.ТекущиеДанные.Код);
КонецПроцедуры


ЭлементыФормы.Картриджи.Колонки.Картридж = ТекущаяСтрока.Код; //здесь должно присваиваться значение поля ввода...


Добавлено через 1 час, 35 минут и 1 секунду:
Код:
Процедура ПриОткрытии()
Если ЭтаФорма.Вызывает = "1" Тогда
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
              | Картриджи.Код КАК Код,
              | Картриджи.Наименование КАК Модель
              |ИЗ
              | Справочник.Картриджи КАК Картриджи";
Результат = Запрос.Выполнить();
       ТЗ = Результат.Выгрузить();
         ЭлементыФормы.ТЗ.СоздатьКолонки();
        
//////////////////////////////////////////////////////////////////////////////////
ИначеЕсли ЭтаФорма.Вызывает = "2" Тогда
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
  | Картриджи.Код КАК Код,
  | Картриджи.УникальныйНомерКартриджа,
  | Картриджи.Наименование,
  | Картриджи.ЮрЛицо.Наименование
  |ИЗ
  | Справочник.Картриджи КАК Картриджи";
Результат = Запрос.Выполнить();
  ЭлементыФормы.ТЗ.СоздатьКолонки();
КонецЕсли
КонецПроцедуры


Процедура КоманднаяПанель1Действие1(Кнопка)
Закрыть(ЭлементыФормы.ТЗ.ТекущиеДанные.Код);
КонецПроцедуры

Оборачивай код тегами!
[code] ... [/code]


Добавлено через 41 минуту и 13 секунд:
Конечно, записывать значения в реквизиты табличной части наверно нужно так

Код:
  ЭтотОбъект.Метаданные().ТабличныеЧасти.Картриджи.Реквизиты.Картридж = ТЗСтрока.Код;

Но ругается: Поле объекта недоступно для записи (Картридж) Не понял
« Последнее редактирование: 28-10-2010 19:14 от Dimkostav » Записан
Dimkostav
Новенький

ru
Offline Offline

« Ответ #3 : 29-10-2010 09:35 » 

Переделал. Но ошибка та же.
Форма документа:
Код:
Процедура КартриджиКартриджНачалоВыбора(Элемент, СтандартнаяОбработка)
 //передаём в реквизит формы "Вызывает" параметр, чтобы знать кто её вызвал
 СтандартнаяОбработка = Ложь;
 ФормаВыбора = Справочники.Картриджи.ПолучитьФормуВыбора("Форма", Элемент);
 Если Не ФормаВыбора.Открыта() Тогда
  ФормаВыбора.МножественныйВыбор = Ложь;
  ФормаВыбора.Вызывает = 1;
  ФормаВыбора.ЗакрыватьПриВыборе = Истина;
  ТекСтрока =  ФормаВыбора.ОткрытьМодально();
  ЭтотОбъект.Метаданные().ТабличныеЧасти.Картриджи.Реквизиты.Картридж = ТекСтрока; //Поле объекта недоступно для записи (Картридж)
    Иначе
  ФормаВыбора.Активизировать();
  ФормаВыбора.МножественныйВыбор = Ложь;
        ФормаВыбора.РежимВыбора = Истина;
        СтандартнаяОбработка = Ложь;
 КонецЕсли;
КонецПроцедуры
Форма выбора:
Код:
Процедура ПриОткрытии()
 
ЭтаФорма.РежимВыбора = Истина;

 Если ЭтаФорма.Вызывает = "1" Тогда
  Запрос = Новый Запрос;
  Запрос.Текст = "ВЫБРАТЬ
        | Картриджи.Код КАК Код,
        | Картриджи.УникальныйНомерКартриджа КАК УникальныйНомерКартриджа,
        | Картриджи.Наименование КАК Наименование,
        | Картриджи.ЮрЛицо.Наименование КАК ЮрЛицо
        |ИЗ
        | Справочник.Картриджи КАК Картриджи";
        Результат = Запрос.Выполнить();
        ТЗ = Результат.Выгрузить();
        ЭлементыФормы.ТЗ.СоздатьКолонки();
КонецПроцедуры

Процедура ТЗВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)
 ЭтаФорма.Закрыть(ВыбраннаяСтрока.Код);
КонецПроцедуры
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines