Имя: Пароль:
1C
1С v8
Как открыть форму регистра сведений для выбора?
,
0 Xelga
 
29.08.12
15:49
Из документа нужно открыть форму регистра сведений для выбора значения. В модуле формы документа пишу
   НоменклатураДляПОдбора = Новый Структура("Номенклатура",Элементы.ЗНМатериалы.ДанныеСтроки(Элементы.ЗНМатериалы.ТекущаяСтрока).Номенклатура);
   Аналог = ОткрытьФормуМодально("РегистрСведений.АналогиНоменклатуры.Форма.ФормаДляНоменклатуры",НоменклатураДляПОдбора);
Как обратится к параметру в форме регистра сведений? И как сделать , чтобы форма открывалась для подбора?
1 Wobland
 
29.08.12
15:49
что ты хочешь выбрать?
2 Xelga
 
29.08.12
15:56
В УНФ есть регистр сведений АналогиНоменклатуры, мне нужно открыть форму, в которой будут перечислены Аналоги текущей номенклатуры и выбрать одно значение Аналог
3 Wobland
 
29.08.12
15:57
(2) посмотреть не могу. аналог какого типа? просится форма его выбора
4 Wobland
 
29.08.12
15:58
(3) *его форма выбора
5 МишКа
 
29.08.12
16:00
(2) Если одно значение, зачем тогда подбор?
Проще всего - заполнить свойство "СписокВыбора" у соответствующего поля ввода в документе.
6 Xelga
 
29.08.12
16:00
(3)тип аналога - справочник номенклатура
7 Wobland
 
29.08.12
16:01
(6) ну вот и выбирай номенклатуру, а не то, что ты подумала. а на форму выбора можно отбор наколдовать или даже нарисовать свою
8 Xelga
 
29.08.12
16:01
(5) это не поле ввода, этот список должен открываться по кнопке
9 Xelga
 
29.08.12
16:03
(3) а я что-то не пойму, надо форму выбора справочника Номенклатура что ли? а в ней что ли отбор при открытии какой-то делать через запрос?
10 Rounder
 
29.08.12
16:03
Чтобы только для подбора - нужно форму сначала получить. Потом для Списка установить РежимВыбора (можно еще и только просмотр). Потом открыть форму.
11 Xelga
 
29.08.12
16:04
(7) дак отбор то вряд ли поможет мне на надо запросом список значений формировать
12 Rounder
 
29.08.12
16:04
Что является критерием для отбора? Это поле строки табличной части или реквизит формы?
13 Xelga
 
29.08.12
16:05
(10) это как?
14 Wobland
 
29.08.12
16:06
второй раз за сегодня говорю

   СписокОрганизаций.ЗагрузитьЗначения(Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку(0));
   ЭлементыФормы.Организации.Значение.Отбор.Ссылка.Использование=Истина;
   ЭлементыФормы.Организации.Значение.Отбор.Ссылка.ВидСравнения=ВидСравнения.ВСписке;
   ЭлементыФормы.Организации.Значение.Отбор.Ссылка.Значение=СписокОрганизаций;
15 Xelga
 
29.08.12
16:07
есть табличная часть ЗНМатериалы в ней реквизит Номенклатура, нужно чтобы можно было открыть Список аналогов для этой номенклатуры, выбрать значение и этим значением заменить первоначальную номенклатуры
16 Rounder
 
29.08.12
16:08
(13)
&НаКлиенте
Процедура РасшифровкаПлатежаДоговорКонтрагентаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
   Строка = Элемент.Родитель.ТекущиеДанные;
   СтандартнаяОбработка = Ложь;
   Если НЕ ЗначениеЗаполнено(Объект.Организация) Тогда
       Сообщение = Новый СообщениеПользователю;
       Сообщение.Текст = "Не указана организация.";
       Сообщение.Поле = "Объект.Организация";
       Сообщение.Сообщить();
       Возврат;        
   КонецЕсли;
   Если НЕ ЗначениеЗаполнено(Объект.Контрагент) Тогда
       Сообщение = Новый СообщениеПользователю;
       Сообщение.Текст = "Не указан контрагент.";
       Сообщение.Поле = "Объект.Контрагент";
       Сообщение.Сообщить();
       Возврат;        
   КонецЕсли;
   ПараметрыОткрытияФормыВыбора = Новый Структура;
   СтруктураПараметров = Новый Структура;
   СтруктураПараметров.Вставить("Организация"                , Объект.Организация);
   СтруктураПараметров.Вставить("Владелец"                    , Объект.Контрагент);
   СтруктураПараметров.Вставить("ВалютаВзаиморасчетов"        , Объект.ВалютаДокумента);
   Если Объект.ВидОперации = ВидОперацииВозвратДенежныхСредствПокупателю Тогда
       СтруктураПараметров.Вставить("ВидДоговора"                , ПредопределенноеЗначение("Перечисление.ВидыДоговоровКонтрагентов.СПокупателем"));
   Иначе
       СтруктураПараметров.Вставить("ВидДоговора"                , ПредопределенноеЗначение("Перечисление.ВидыДоговоровКонтрагентов.СПоставщиком"));
   КонецЕсли;
   ПараметрыОткрытияФормыВыбора.Вставить("Отбор", СтруктураПараметров);
   ПараметрыОткрытияФормыВыбора.Вставить("ТекущаяСтрока", Строка.ДоговорКонтрагента);
   Форма = ПолучитьФорму("Справочник.ДоговорыКонтрагентов.Форма.ФормаВыбораУправляемая", ПараметрыОткрытияФормыВыбора, ЭтаФорма);
   Форма.КоманднаяПанель.ПодчиненныеЭлементы.ФормаНастройкаСписка.Доступность = Ложь;
   Форма.КоманднаяПанель.ПодчиненныеЭлементы.ФормаИзменитьФорму.Доступность = Ложь;
   РезультатВыбора = Форма.ОткрытьМодально();
   Если РезультатВыбора <> Неопределено И РезультатВыбора <> ПараметрыОткрытияФормыВыбора.ТекущаяСтрока Тогда
       Строка.ДоговорКонтрагента = РезультатВыбора;
   КонецЕсли;
КонецПроцедуры
17 Wobland
 
29.08.12
16:08
(15) делаешь кнопку, по нажатии получаешь формы выбора номенклатуры, ищешь все аналоги, колдуешь на ТабПоле формы свой отбор, открываешь, тащишься
18 Xelga
 
29.08.12
16:15
(17) а в какой процедуре заполнение делать?
19 Wobland
 
29.08.12
16:16
(18) в обработчике кнопки
20 Xelga
 
29.08.12
16:19
(19) я имею ввиду форму выбора справочника там же где-то надо прописать, какие значения должны отображаться
21 Wobland
 
29.08.12
16:20
(20) проверь, у тебя включено отображение постов с номером 14?
22 Rounder
 
29.08.12
16:20
В (16) все есть. Формируешь структуру с отбором. И засылаешь ее в форму.
23 Rounder
 
29.08.12
16:21
(20) Опиши структуру - как у тебя связан аналог и номенклатура?
24 Xelga
 
29.08.12
16:32
(22)
   Запрос = Новый Запрос();
   Запрос.УстановитьПараметр("Номенклатура", Параметры.Номенклатура);
   Запрос.Текст =
   "ВЫБРАТЬ
   |    АналогиНоменклатуры.Аналог
   |ИЗ
   |    РегистрСведений.АналогиНоменклатуры КАК АналогиНоменклатуры
   |ГДЕ
   |    АналогиНоменклатуры.Номенклатура = &Номенклатура";
Как значениями этого запроса заполнить форму справочника?
25 Rounder
 
29.08.12
16:37
Если (24) тогда наверное получать форму выбора, а потом через условное оформление добавлять в нее отбор и тип сравнения например ВСписке. А затем открывать форму.
26 Rounder
 
29.08.12
16:41
Либо у справочника Номенклатура создаешь форму ФормаПодбора. А дальше по аналогии:

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


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
   Если Параметры.Свойство("ПроизвольныйЗапрос") Тогда
       Список.ПроизвольныйЗапрос = Истина;
       Список.ТекстЗапроса = Параметры.ТекстЗапроса;
       Для Сч = 0 По Параметры.МассивПолей.Количество() -1 Цикл
           КолонкаСписка = Элементы.Вставить(Параметры.МассивПолей[Сч], Тип("ПолеФормы"), Элементы.Список);
           КолонкаСписка.ПутьКДанным = "Список." + Параметры.МассивПолей[Сч];
           КолонкаСписка.Вид = ВидПоляФормы.ПолеВвода;
           КолонкаСписка.РастягиватьПоГоризонтали = Ложь;
       КонецЦикла;
   КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура СписокВыборЗначения(Элемент, Значение, СтандартнаяОбработка)
   Если Этаформа.ВладелецФормы.ИмяФормы = "Документ.ПриходныйКассовыйОрдер.Форма.ФормаДокументаУправляемая" Тогда
       СтруктураДанныхДляПередачи = Новый Структура;
       СтруктураДанныхДляПередачи.Вставить("ОстатокПоЧеку", Элемент.ТекущиеДанные.ОстатокПоЧеку);
       СтруктураДанныхДляПередачи.Вставить("СтатьяДвиженияДенежныхСредств", Элемент.ТекущиеДанные.СтатьяДвиженияДенежныхСредств);
       СтруктураДанныхДляПередачи.Вставить("ДенежныйЧек", Элемент.ТекущиеДанные.ДенежныйЧек);
       ЭтаФорма.ВладелецФормы.Проверка(СтруктураДанныхДляПередачи);
   КонецЕсли;
КонецПроцедуры
28 Rounder
 
29.08.12
16:43
Ну и еще в форме твоего документа экспортную процедуру Проверка.

&НаКлиенте
Процедура Проверка(СтруктураДанныхДляПередачи) Экспорт
   Объект.СуммаДокумента = СтруктураДанныхДляПередачи.ОстатокПоЧеку;
   Элементы.СуммаДокумента.ТолькоПросмотр = Истина;
   Объект.РасшифровкаПлатежа[0].СуммаПлатежа = СтруктураДанныхДляПередачи.ОстатокПоЧеку;
   ЭтаФорма.СтатьяДДС = СтруктураДанныхДляПередачи.СтатьяДвиженияДенежныхСредств;
   Объект.РасшифровкаПлатежа[0].СтатьяДвиженияДенежныхСредств = СтруктураДанныхДляПередачи.СтатьяДвиженияДенежныхСредств;
   Объект.ДенежныйЧек = СтруктураДанныхДляПередачи.ДенежныйЧек;
   Элементы.СтатьяДДС.ТолькоПросмотр = Истина;
КонецПроцедуры
29 Rounder
 
29.08.12
16:46
Таким образом реализовывал подбор денежного чека в форме документа Приходный кассовый ордер. Управляемые формы.

Т.е. возьмешь суть и положишь на свои рельсы.
30 Xelga
 
30.08.12
15:20
ничего не получается((((

в документе пишу на кнопке для отбора

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

В модуле формы справочника

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


и возникают 2 проблемы: 1)непонятно как в запрос передать параметр
2) значение которое считывается оказывается в переменной Аналог в процедуре ПодобратьИзАналогов - это число, а мне нужно чтобы это была ссылка на номенклатуру
2 + 2 = 3.9999999999999999999999999999999...