Как программно открыть форму справочника?
Открыть форму справочника можно несколькими способами:
А. По имени формы
Если требуется открыть основную форму нового элемента справочника или форму списка, достаточно написать следующий код:
ОткрытьФорму("Справочник.ФизическиеЛица.ФормаОбъекта");
Где ФормаОбъекта — имя основной формы открываемого справочника. Вместо нее можно указать другую основную форму, которую требуется открыть:
| ФормаОбъекта | основная форма элемента справочника |
| ФормаГруппы | основная форма группы справочника |
| ФормаСписка | основная форма списка справочника |
| ФормаВыбора | основная форма выбора справочника |
| ФормаВыбораГруппы | основная форма выбора группы |
Чтобы открыть любую другую форму, необходимо указать ее имя после ключевого слова Форма (точно так, как оно задано в конфигураторе):
ОткрытьФорму("Справочник.ФизическиеЛица.Форма.ФормаНового");
Б. По ссылке
Если в контексте вызова доступна ссылка на элемент или группу справочника, можно воспользоваться параметрами формы:
ПараметрыФормы = Новый Структура("Ключ", СсылкаНаОбъект); ОткрытьФорму("Справочник.ФизическиеЛица.ФормаОбъекта", ПараметрыФормы);
а можно воспользоваться универсальными методами и просто открыть значение:
//если режим использования модальности выключен ОткрытьЗначение(СсылкаНаОбъект); //если режим использования модальности включен ПоказатьЗначение(,СсылкаНаОбъект);
Читайте также:
- Работа с формами: программное открытие формы
- Как программно создать группу справочника
УФ: Программно получить и открыть форму объекта в 1С. Открытие формы для ввода значения
Различные варианты, как можно программно получить и открыть форму объекта (справочника, документа и т.д.):
2. ПоказатьЗначение(, Объект);
3. Пример для получения и открытия формы элемента справочника Номенклатура (здесь Объект – это элемент справочника Номенклатура):
ПараметрыФ = Новый Структура("Ключ", Объект); Форма = ПолучитьФорму("Справочник.Номенклатура.Форма.ФормаЭлемента", ПараметрыФ); Форма.Открыть();
4. Пример для открытия формы элемента справочника Номенклатура (здесь Объект – это элемент справочника Номенклатура):
ПараметрыФ = Новый Структура("Ключ", Объект); ОткрытьФорму("Справочник.Номенклатура.Форма.ФормаЭлемента", ПараметрыФ);
Открыть форму для ввода значения:
- ПоказатьВводДаты();
- ПоказатьВводЗначения();
- ПоказатьВводСтроки();
- ПоказатьВводЧисла();
- ПоказатьВопрос();
и др., искать в Синтакс-помощнике по началу строки «Показать».
Программно открыть форму элемента справочника
Дописать надо проверку на то, что элемент найден.
Потом почитать хотя бы в хелпе про ТекущийЭлемент() и про НайтиПоНаименованию() — какая функция что возвращает. И про открыть форму тоже.
3. Stæg 25 15.08.20 23:19 Сейчас в теме
(2)
Ок. Сделал по вашим советам, и теперь открывает форму
спр = СоздатьОбъект("Справочник.Номенклатура"); Если спр.НайтиПоКоду("00000003") = 1 Тогда ОткрытьФорму(спр.ТекущийЭлемент(),контр,);//открываем форму элемента справочника КонецЕсли;
Следующая задача, как программно записать эту форму? Т.е. как будто мышкой нажал на «ок» или «записать»
4. CheBurator 3116 16.08.20 01:15 Сейчас в теме
(3) в какой момент записать? и зачем записать?! ты открыл форму — ничего не изменилось, зачем что-то записывать? а так-то, конечно, рискни здоровьем
//тут как бы контр д.б. объявлена явно или неявно как минимум
ОткрытьФорму(спр.ТекущийЭлемент(),контр,);//открываем форму элемента справочника
контр.записать();
6. Stæg 25 16.08.20 01:24 Сейчас в теме
(4)
Мне надо пройтись по всей номенклатуре, открыть и сохранить каждый элемент, иначе не создаются единицы измерения в подчиненном справочнике.
контр.записать();
Так пробовал сохранять, но ошибка «Данная команда не может выполняться в формуле элемента диалога!»
7. Sergex 57 16.08.20 05:19 Сейчас в теме
(6) Если там даже 1000 элементов в справочнике номенклатуры то вы за день все руками по сохраняете. Но за тот же день обработку которая это делает механически вы не напишите.
Так что в вашем случае проще руками каждый элемент открыть и сохранить,
8. starjevschik 16.08.20 09:20 Сейчас в теме
(6) надо пойти в код, найти там создание единиц и переписать в свою обработку.
Нажать кнопку программно можно, но это не 1с, это надо эмуляцию клавиатуры вызывать. Можно попробовать, но не очень рационально. Намного дешевле, быстрее и проще нанять программиста, эта задача не очень большая.
9. Stæg 25 16.08.20 10:46 Сейчас в теме
(8)
А других способов как программно сохранить форму нет?
Пробовал так
Форма.Обновить(1);
Но тогда появляется окошко подтверждения, и там тоже надо нажимать «да»
14. dvk09 2 18.08.20 11:19 Сейчас в теме
надо пойти в код, найти там создание единиц и переписать в свою обработку.
Вот ответ самый оптимальный. Т.к. не надо редактировать конфигурацию базы, только почитать))
Ну и (11) , но тут придется лезть и переписывать процедуру в самой форме, которая является частью конфигурации.
12. CheBurator 3116 16.08.20 23:39 Сейчас в теме
(6) ну так не вызывай этот код в таком месте. или поработай с ложным закрытием формы.
.
а вообще забабахать генерацию единиц или что там у тебя нужно — это гораздо проще чем ежика рожать как сейчас.
типовая конфига не допускают таких траблов как создание номенклатур с незаполненными единицами.
так что или кривой перенос данных или кривые ручки погромиста. быстрее всего вылечить обратившись к программисту с прямыми руками. там тупая техническая работа. даже думать особо не надо.
15. sinops 18.08.20 18:13 Сейчас в теме
(6)
Найди кусок в модуле «При закрытии» там идет создание подчиненного спр. единицы.
Возьми обработку и напиши
Спр = СоздатьОбъект("справочник.Номенклатура"); спр.выбратьЭлементы(0); Пока спр.получитьЭлемент() =1 цикл Если спр.ЭтоГруппа() = 1 тогда продолжить; конецЕсли; //а сюда пишешь код из процедуры при закрытии // например для базовой единицы СпрОКИЕ = создатьОбъект("Справочник.ОКЕИ"); СпрОКИЕ .найтиПоКоду("796"); // штуки СпрЕдиницы = СоздатьОбъект("Справочник.Единицы"); СпрЕдиницы.ИспользоватьВладельца(Спр.ТекущийЭлемент()); СпрЕдиницы.Наименование = РеквЕдиница.Наименование; СпрЕдиницы.Вес = 0; СпрЕдиницы.ВесБрутто = 0; СпрЕдиницы.Коэффициент = 1; СпрЕдиницы.ОКЕИ = СпрОКИЕ.ТекущийЭлемент(); СпрЕдиницы.ШтрихКод = ""; СпрЕдиницы.Объем = 0; Попытка СпрЕдиницы.Записать(); Исключение КонецПопытки; спр.БазоваяЕдиница = СпрЕдиницы.ТекущийЭлемент(); спр.Записать(); конецЦикла;
16. dvk09 2 19.08.20 09:58 Сейчас в теме
Попытка
СпрЕдиницы.Записать();
Исключение
КонецПопытки;
спр.БазоваяЕдиница = СпрЕдиницы.ТекущийЭлемент();
спр.Записать();
Интересно как))
В случае исключения базовая единица сотрется.
Ну и по идее проверить надо перед тем, как генерировать новую единицу измерения, может она уже есть и заполнена? тогда надо пропустить этот элемент.
Ну и все опыты делать только на копии базы.
Создание и заполнение формы справочника программное
Дано.
1С 8.3.18 БСП самописка
Справочники:
— _ФизическиеЛица
Стандартный реквизит Наименование (ФИО) строка
— Пользователи
Стандартный реквизит ФИО строка
Реквизит Физические лица ОпределяемыйТип.ФизическоеЛицо (СправочникСсылка._ФизическиеЛица).
Требуется.
1. По команде СоздатьПользователя(Команда) в форме элемента справочника _ФизическиеЛица, создавать элемент справочника Пользователи, открывать его форму и заполнять Объект.Наименование и Объект.ФизическоеЛицо, данными из Объект.Наименование и ссылкой на этот элемент соответственно.
Знаю как создать форму:
Справочник _ФизическиеЛица форма элемента
Создаю СоздатьПользователя(Команда)
Модуль формы элемента
1 2 3 4
&НаКлиенте Процедура СоздатьПользователя(Команда) ОткрытьФорму("Справочник.Пользователи.ФормаОбъекта"); КонецПроцедуры
А как передать данные заполнения не понимаю.
Знаю что можно как-то через структуру, но не понимаю что указывать как «ключ?
