Имя: Пароль:
1C
1С v8
из обычной в управляемую форму
0 ЧтоТакое1С
 
19.08.11
14:18
вот есть код для обычной формы, как преобразовать его для управляемой?

Процедура КонтрагентПриИзменении(Элемент)
   
   ЭлементыФормы.ПолеВыбора1.Значение = "";
   ЭлементыФормы.РегНомер.Заголовок = "";
   ЭлементыФормы.ИнформацияОПодписке.Заголовок = "";
   
   ТекущийКонтрагент = ЭлементыФормы.Контрагент.Значение;
   
   Список2 = Новый СписокЗначений;
   
   Запрос2 = Новый Запрос;
   Запрос2.Текст=
   "ВЫБРАТЬ РАЗЛИЧНЫЕ
   |    КонфигурацииКонтрагентов.Конфигурация.Ссылка КАК Конфигурация,
   |    КонфигурацииКонтрагентов.РегНомер,
   |    КонфигурацииКонтрагентов.Владелец.Ссылка
   |ИЗ
   |    Справочник.КонфигурацииКонтрагентов КАК КонфигурацииКонтрагентов
   |ГДЕ
   |    КонфигурацииКонтрагентов.Владелец.Ссылка = &ТК
   |    И (НЕ КонфигурацииКонтрагентов.ПометкаУдаления)";
   Запрос2.УстановитьПараметр("ТК", ТекущийКонтрагент);
   Результат = Запрос2.Выполнить();    
   Колонка2 = Запрос2.Выполнить().Выгрузить().ВыгрузитьКолонку("Конфигурация");
   Список2.ЗагрузитьЗначения(Колонка2);
   ЭлементыФормы.ПолеВыбора1.СписокВыбора = Список2;
   
   ДатаОбщ = Месяц(ТекущаяДата()) + Год(ТекущаяДата())*12;
   Запрос=Новый Запрос;
   Запрос.Текст=
   "ВЫБРАТЬ
   |    Подписки.Владелец КАК Контрагент,
   |    Подписки.ГодНачалаСопровождения КАК ГодНач,
   |    Подписки.МесяцНачалаСопровождения КАК МесяцНач,
   |    Подписки.СрокСопровождения КАК СрокСопр,
   |    Подписки.ГодНачалаСопровождения * 12 + Подписки.МесяцНачалаСопровождения.Порядок + Подписки.СрокСопровождения КАК КоличествоМесяцев,
   |    Подписки.ВидПодписки.Наименование
   |ИЗ
   |    Справочник.Подписки КАК Подписки
   |ГДЕ
   |    Подписки.МесяцНачалаСопровождения.Порядок + Подписки.ГодНачалаСопровождения * 12 < &ТекМесяц
   |    И Подписки.МесяцНачалаСопровождения.Порядок + Подписки.СрокСопровождения + Подписки.ГодНачалаСопровождения * 12 > &ТекМесяц - 1
   |    И Подписки.Владелец.Ссылка = &Контрагент";
   Запрос.УстановитьПараметр("ТекМесяц", ДатаОбщ);
   Запрос.УстановитьПараметр("Контрагент", ТекущийКонтрагент);
   
   Результат=Запрос.Выполнить();
   Выборка=Результат.Выбрать();
   
   Если Выборка.Следующий() Тогда
       Год = Цел(Выборка.КоличествоМесяцев/12);
       Месяц = Выборка.КоличествоМесяцев - Год*12;
       ЭлементыФормы.ИнформацияОПодписке.Заголовок = "Подписка " + Выборка.ВидПодпискиНаименование + " действительна до " + Перечисления.НазванияМесяцев.Получить(Месяц-1) + " " + Строка(Год) + " включительно.";
   иначе
       ЭлементыФормы.ИнформацияОПодписке.Заголовок = "Нет подписки";
   КонецЕсли;
   
   ЭлементыФормы.ПолеВыбора1.Доступность = (Список2.Количество() > 0);
   
КонецПроцедуры

Процедура ПолеВыбора1ПриИзменении(Элемент)
   
ТекущаяКонф = ЭлементыФормы.ПолеВыбора1.Значение;
   Запрос3 = Новый Запрос;
   Запрос3.Текст=
   "ВЫБРАТЬ
   |    КонфигурацииКонтрагентов.Конфигурация.Ссылка,
   |    КонфигурацииКонтрагентов.РегНомер,
   |    КонфигурацииКонтрагентов.Владелец.Ссылка
   |ИЗ
   |    Справочник.КонфигурацииКонтрагентов КАК КонфигурацииКонтрагентов
   |ГДЕ
   |    КонфигурацииКонтрагентов.Конфигурация.Ссылка = &ТКонф
   |    И КонфигурацииКонтрагентов.Владелец.Ссылка = &ТК";
   
   Запрос3.УстановитьПараметр("ТКонф", ТекущаяКонф);
   Запрос3.УстановитьПараметр("ТК", ТекущийКонтрагент);
   
   Результат2=Запрос3.Выполнить();
   Выборка=Результат2.Выбрать();
   
   Пока Выборка.Следующий() Цикл
   ЭлементыФормы.РегНомер.Заголовок = "Регистрационный номер: " + Выборка.РегНомер;
   КонецЦикла
КонецПроцедуры

делаю вот так:

 
 &НаКлиенте
 
 Процедура КонтрагентПриИзменении(Элемент)
     
     //ЭтаФорма.ПрограммныйПродукт.Очистить();
     //ЭтаФорма.РегНомер.Очистить();
     ТекущийКонтрагент = ЭтаФорма.Контрагент;
     ЭтаФорма.Элементы.ИнформацияОПодписке.Заголовок = КонтрагентПриИзмененииПодпискаСервер (ТекущийКонтрагент);
     Список2 = КонтрагентПриИзмененииСервер(ТекущийКонтрагент);
     ЭтаФорма.ПрограммныйПродукт.ДоступныеЗначения = Список2;  
     ЭтаФорма.Элементы.ПрограммныйПродукт.Доступность = (Список2.Количество() > 0);
     
 КонецПроцедуры
 
 & НаСервере
 
 Функция КонтрагентПриИзмененииСервер(ТекущийКонтрагент)
     
     Список2 = Новый СписокЗначений;
     
     Запрос2 = Новый Запрос;
     Запрос2.Текст=
     "ВЫБРАТЬ РАЗЛИЧНЫЕ
     |    КонфигурацииКонтрагентов.Конфигурация.Ссылка КАК Конфигурация,
     |    КонфигурацииКонтрагентов.РегНомер,
     |    КонфигурацииКонтрагентов.Владелец.Ссылка
     |ИЗ
     |    Справочник.КонфигурацииКонтрагентов КАК КонфигурацииКонтрагентов
     |ГДЕ
     |    КонфигурацииКонтрагентов.Владелец.Ссылка = &ТК
     |    И (НЕ КонфигурацииКонтрагентов.ПометкаУдаления)";
     
     Запрос2.УстановитьПараметр("ТК", ТекущийКонтрагент);
     Колонка2 = Запрос2.Выполнить().Выгрузить().ВыгрузитьКолонку("Конфигурация");
     Список2.ЗагрузитьЗначения(Колонка2);
     Возврат Список2
     
 КонецФункции
 
 & НаСервере
 
 Функция КонтрагентПриИзмененииПодпискаСервер (ТекущийКонтрагент)
     
     ДатаОбщ = Месяц(ТекущаяДата()) + Год(ТекущаяДата())*12;
     
     Запрос=Новый Запрос;
     Запрос.Текст=
     "ВЫБРАТЬ
     |    Подписки.Владелец КАК Контрагент,
     |    Подписки.ГодНачалаСопровождения КАК ГодНач,
     |    Подписки.МесяцНачалаСопровождения КАК МесяцНач,
     |    Подписки.СрокСопровождения КАК СрокСопр,
     |    Подписки.ГодНачалаСопровождения * 12 + Подписки.МесяцНачалаСопровождения.Порядок + Подписки.СрокСопровождения КАК КоличествоМесяцев,
     |    Подписки.ВидПодписки.Наименование
     |ИЗ
     |    Справочник.Подписки КАК Подписки
     |ГДЕ
     |    Подписки.МесяцНачалаСопровождения.Порядок + Подписки.ГодНачалаСопровождения * 12 < &ТекМесяц
     |    И Подписки.МесяцНачалаСопровождения.Порядок + Подписки.СрокСопровождения + Подписки.ГодНачалаСопровождения * 12 > &ТекМесяц - 1
     |    И Подписки.Владелец.Ссылка = &Контрагент";
     Запрос.УстановитьПараметр("ТекМесяц", ДатаОбщ);
     Запрос.УстановитьПараметр("Контрагент", ТекущийКонтрагент);
     
     Результат=Запрос.Выполнить();
     Выборка=Результат.Выбрать();
     
     Если Выборка.Следующий() Тогда
         Год = Цел(Выборка.КоличествоМесяцев/12);
         Месяц = Выборка.КоличествоМесяцев - Год*12;
         Строка = "Подписка " + Выборка.ВидПодпискиНаименование + " действительна до " + Перечисления.НазванияМесяцев.Получить(Месяц-1) + " " + Строка(Год) + " включительно.";
     Иначе
         Строка = "Нет подписки";
     КонецЕсли;
     
     Возврат Строка;
     
 КонецФункции
 
 &НаКлиенте
 Процедура ПрограммныйПродуктПриИзменении(Элемент)
     
     ТекущаяКонф = ЭтаФорма.ПрограммныйПродукт;
     ТекущийКонтрагент = ЭтаФорма.Контрагент;
     ЭтаФорма.Элементы.РегНомер.Заголовок = ПрограммныйПродуктПриИзмененииСервер(ТекущаяКонф, ТекущийКонтрагент);
     
 КонецПроцедуры    
 
 & НаСервере
 Функция ПрограммныйПродуктПриИзмененииСервер(ТекущаяКонф, ТекущийКонтрагент)
     
     Запрос3 = Новый Запрос;
     Запрос3.Текст=
     "ВЫБРАТЬ
     |    КонфигурацииКонтрагентов.Конфигурация,
     |    КонфигурацииКонтрагентов.РегНомер,
     |    КонфигурацииКонтрагентов.Владелец      
     |ИЗ
     |    Справочник.КонфигурацииКонтрагентов КАК КонфигурацииКонтрагентов
     |ГДЕ
     |    КонфигурацииКонтрагентов.Владелец.Ссылка = &ТК
     |    И КонфигурацииКонтрагентов.Конфигурация.Ссылка = &ТКонф";
         
     Запрос3.УстановитьПараметр("ТК", ТекущийКонтрагент);
     Запрос3.УстановитьПараметр("ТКонф", ТекущаяКонф);
     Результат2=Запрос3.Выполнить();
     Выборка=Результат2.Выбрать();
     
     Пока Выборка.Следующий() Цикл
         
         Строка = "Регистрационный номер: " + Выборка.РегНомер;
         
     КонецЦикла;
     
     Возврат Строка
     
 КонецФункции

Ругается на то, что ТекущаяКонф в последнем запросом сравнивается с КонфигурацииКонтрагентов.Конфигурация.Ссылка

{Документ.ВопросКонтаргента.Форма.ФормаДокумента.Форма(106)}: Ошибка при вызове метода контекста (Выполнить)
     Результат2=Запрос3.Выполнить();
по причине:

по причине:
{(9, 49)}: Неверные параметры в операции сравнения. Нельзя сравнивать поля
неограниченной длины и поля несовместимых типов.
И КонфигурацииКонтрагентов.Конфигурация.Ссылка <<?>>= &ТКонф

Как вообще реализовать ПолеВыбора, на простой форме все просто положил в неё колонку от запроса список открывается, а тут и ПолеВоода то ненайти даже в УФ.
1 ЧтоТакое1С
 
19.08.11
14:39
подскажите хоть что нить уже
2 Mort
 
19.08.11
14:50
По теме смотри в отладчике что посылается в запрос. (Про то как отладку на сервере поймать, тему не заводи. На форуме поищи)

Ну а что данный код можно в музей сдавать, я не стану распространяться.
3 Alexandr Puzakov
 
19.08.11
14:50
Дык тыкает же в ошибку:

И КонфигурацииКонтрагентов.Конфигурация.Ссылка <<?>>= &ТКонф

Стоить проверить передаваемое значение.

И устанавливать значения параметров лучше так:

Запрос3.УстановитьПараметр("ТК", Объект.ТекущийКонтрагент);
Запрос3.УстановитьПараметр("ТКонф", Объект.ТекущаяКонф);

P. S. код не айс...
4 Mort
 
19.08.11
14:52
У меня вообще возникает подозрение, что половину этого кошмара (если не весь) можно связями параметров выбора сделать.
5 ЧтоТакое1С
 
19.08.11
14:54
Mort, я не знаю что это даже..

e ТекущаяКонф тип СписокЗначений а пытаемся сравнить с КонфигурацииКонтрагентов.Конфигурация.Ссылка я думаю поэтому ошибка..
6 Mort
 
19.08.11
14:57
Ты бы лучше нормально обозначил задачу, поискал по ней информацию и переписал бы это все нафиг.
7 Evfarion
 
19.08.11
14:57
За ИмяПеременной1, 2...N - гори в аду!
8 ЧтоТакое1С
 
19.08.11
14:59
Задача простая и в первом хоть и как вы говорите корявом варианте она работает, почти. Но в уф нет, нужно чтобы при выборе контрагента, ниже в списке вылезил список именно его подписок, а при выборе подписок вылазил рег номер данной подписки, но блин в уф нет полявыбора нормального и не выходит ничего
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший