Как программно установить отбор в открываемой форме(При открытии)? Для установки отбора используется свойство "Отбор" у менеджеров списков объектов, например, для открытия списка договоров определенного контрагента можно написать следующий код:
Код 1C v 8.х ФормаВыбора = Справочники.ДоговорыКонтрагентов.ПолучитьФормуВыбора("ФормаВыбора", ЭтаФорма, "ФормаВыбораДоговора");
ФормаВыбора.Отбор.Владелец.Значение = КонтрагентСсылка;
ФормаВыбора.Отбор.Владелец.Использование = ИСТИНА;
ФормаВыбора.ОткрытьМодально();
В данном случае мы применили вид сравнения "Равно", но не указывали его т.к. оно стоит по умолчанию. Используя разные значения вида сравнения мы значительно расширяем возможности.
Например, у нас в базе контрагент является и продавцом и покупателем, при этом договоры находятся в соответствующей группе внутри справочника. Поэтому мы сделаем отбор не только на самого контрагента, но и на группу "Группа Покупатели" в которой находится договор:
Код 1C v 8.х ФормаВыбора = Справочники.ДоговорыКонтрагентов.ПолучитьФормуВыбора("ФормаВыбора", ЭтаФорма, "ФормаВыбораДоговора");
ФормаВыбора.Отбор.Владелец.Значение = КонтрагентСсылка;
ФормаВыбора.Отбор.Владелец.Использование = ИСТИНА;
ГруппаПокупатели = Справочники.ДоговорыКонтрагентов.НайтиПоНаименованию("Группа Покупатели");
ФормаВыбора.Отбор.Родитель.ВидСравнения = ВидСравнения.ВИерархии;
ФормаВыбора.Отбор.Родитель.Значение = ГруппаПокупатели;
ФормаВыбора.Отбор.Родитель.Использование = ИСТИНА;
ФормаВыбора.ОткрытьМодально();
Категория:
Работа с Формой (Диалог) и её элементами Поле выбора ~ Как ограничить список выбора? Ограничим список элементов, установив отбор в открываемой форме
Код 1C v 8.х //Пример 1
Процедура СтатьяПДРНачалоВыбора(Элемент, СтандартнаяОбработка)
ФормаВыбора = Справочники.ПрочиеДоходыИРасходы.ПолучитьФормуВыбора(, Элемент);
ЭлементОтбораВидПДР = ФормаВыбора.Отбор.ВидПрочихДоходовИРасходов;
Если ЭлементОтбораВидПДР <> Неопределено Тогда
ЭлементОтбораВидПДР.ВидСравнения = ВидСравнения.Равно;
ЭлементОтбораВидПДР.Значение = Перечисления.ВидыПрочихДоходовИРасходов.ПрочиеВнереализационныеДоходыРасходы;
ЭлементОтбораВидПДР.Использование = Истина;
КонецЕсли;
// Закроем доступ к настройке отбора. Таким образом, пользователь не может отключить заданный программно отбор
// и имеет возможность сделать выбор значения только из ограниченного списка.
ФормаВыбора.ЭлементыФормы.СправочникСписок.НастройкаОтбора.ВидПрочихДоходовИРасходов.Доступность = Ложь;
ФормаВыбора.Открыть();
СтандартнаяОбработка = Ложь;
КонецПроцедуры
//Пример 2
Процедура СчетДтНачалоВыбора(Элемент, СтандартнаяОбработка)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| Хозрасчетный.Ссылка
|ИЗ
| ПланСчетов.Хозрасчетный КАК Хозрасчетный
|ГДЕ
| Хозрасчетный.Родитель В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.Материалы))
| И Хозрасчетный.ЗапретитьИспользоватьВПроводках = ЛОЖЬ";
СписокСчетов = Новый СписокЗначений;
СписокСчетов.ЗагрузитьЗначения(Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"));
ФормаВыбора = ПланыСчетов.Хозрасчетный.ПолучитьФормуВыбора(, Элемент);
ЭлементОтбораСсылка = ФормаВыбора.Отбор.Ссылка;
Если ЭлементОтбораСсылка <> Неопределено Тогда
ЭлементОтбораСсылка.ВидСравнения = ВидСравнения.ВСписке;
ЭлементОтбораСсылка.Значение = СписокСчетов;
ЭлементОтбораСсылка.Использование = Истина;
КонецЕсли;
ФормаВыбора.ЭлементыФормы.Список.НастройкаОтбора.Ссылка.Доступность = Ложь;
ФормаВыбора.Открыть();
СтандартнаяОбработка = Ложь;
КонецПроцедуры
Использование выбора из списка
Код 1C v 8.х //Пример 1
Процедура ВидПДРНачалоВыбора(Элемент, СтандартнаяОбработка)
ВидыПДР = Новый СписокЗначений;
ВидыПДР.Добавить(Перечисления.ВидыПрочихДоходовИРасходов.ПрочиеВнереализационныеДоходыРасходы);
ВидыПДР.Добавить(Перечисления.ВидыПрочихДоходовИРасходов.ПрочиеОперационныеДоходыРасходы);
ВыбранныйЭлемент = ВыбратьИзСписка(ВидыПДР, Элемент, ВидыПДР.НайтиПоЗначению(Элемент.Значение));
Если ВыбранныйЭлемент <> Неопределено Тогда
Элемент.Значение = ВыбранныйЭлемент.Значение;
КонецЕсли;
СтандартнаяОбработка = Ложь;
КонецПроцедуры
//Пример 2
Процедура СчетКтНачалоВыбора(Элемент, СтандартнаяОбработка)
СчетаКт = Новый СписокЗначений;
СчетаКт.Добавить(ПланыСчетов.Хозрасчетный.РасчетыСПоставщиками);
СчетаКт.Добавить(ПланыСчетов.Хозрасчетный.РасчетыСПодотчетнымиЛицами);
СчетаКт.Добавить(ПланыСчетов.Хозрасчетный.РасчетыСПрочимиПоставщикамиИПодрядчиками);
СчетаКт.Добавить(ПланыСчетов.Хозрасчетный.РасчетыПоТекущимОперациям);
СчетаКт.Добавить(ПланыСчетов.Хозрасчетный.ПрочиеДоходы);
ВыбранныйЭлемент = ВыбратьИзСписка(СчетаКт, Элемент, СчетаКт.НайтиПоЗначению(Элемент.Значение));
Если ВыбранныйЭлемент <> Неопределено Тогда
Элемент.Значение = ВыбранныйЭлемент.Значение;
КонецЕсли;
СтандартнаяОбработка = Ложь;
КонецПроцедуры
Категория:
Работа с Формой (Диалог) и её элементами Открыть форму выбора и выбрать элемент справочника На форме отчета находится поле списка, связанное с реквизитом списком значений.
Нужно:
1) чтоб при нажатии на кнопку Подбор на форме отчета открывалась форма справочника
2) при выборе элементов этого справочника они попадали в список значений в форме отчета и отображались в поле списка.
Как это сделать?
Код 1C v 8.х // сзВодители - тот самый список значений,
// Справочники.Водители - справочник, откуда надо добавлять данные в список
// Кнопка Подбор:
Процедура ДобавитьВодителяНажатие(Элемент)
ФормаПодбора = Справочники.Водители.ПолучитьФормуСписка(,ЭтаФорма);
ФормаПодбора.РежимВыбора = Истина;
ФормаПодбора.ЗакрыватьПриВыборе = Ложь;
Если Не ФормаПодбора.Открыта() Тогда
ФормаПодбора.Открыть();
КонецЕсли;
КонецПроцедуры
// ОбработкаВыбора для формы со Списком Значений
Процедура ОбработкаВыбора(ЗначениеВыбора, Источник)
сзВодители.Добавить(ЗначениеВыбора, ЗначениеВыбора.Наименование, Истина);
КонецПроцедуры
Как видите, владельцем формы,
открываемой для подбора служит не отдельный элемент формы отчета, а вся форма отчета.
Категория:
Справочники Как начать транзакцию в режиме управляемых транзакционных блокировок? У метода системы НачатьТранзакцию() есть параметр, с помощью которого можно указать режим управления.
Код 1C v 8.х // Указание режима открываемой транзакции
// Транзакция предназначена для записи в информационную базу согласованных изменений.
// Все изменения, внесенные в информационную базу после начала транзакции,
// будут затем либо целиком записаны, либо целиком отменены.
НачатьТранзакцию(РежимУправленияБлокировкойДанных.Управляемый);
// Код, исполняемый в рамках транзакции.
// ...
Если ОбнаруженыОшибки Тогда
// Отменяем открытую ранее транзакцию.
// Все изменения, внесенные в информационную базу в процессе транзакции, будут отменены.
ОтменитьТранзакцию();
КонецЕсли;
// Завершаем успешную транзакцию.
// Все изменения, внесенные в информационную базу в процессе транзакции, будут записаны.
ЗафиксироватьТранзакцию();
Следует помнить, что «вложенных» транзакций в системе 1С:Предприятие 8 нет. Также надо иметь в виду, что параметр «действует» только в том случае, если в свойстве конфигурации Режим управления блокировкой данных выбрано значение Автоматический и управляемый. Если для конфигурации установлен режим Автоматический, то все транзакции будут исполняться в автоматическом режиме; если Управляемый, то в управляемом режиме.
Пример:
Код 1C v 8.х // Увеличение закупочной цены на 5%
ВыборкаТоваров = Справочники.Номенклатура.Выбрать();
НачатьТранзакцию();
Пока ВыборкаТоваров.Следующий() Цикл
ТоварОбъект = ВыборкаТоваров.ПолучитьОбъект();
ЗакупочнаяЦена = ТоварОбъект.ЗакупочнаяЦена;
Если ЗакупочнаяЦена <> 0 Тогда
ТоварОбъект.ЗакупочнаяЦена = ЗакупочнаяЦена * 1.05;
ТоварОбъект.Записать();
КонецЕсли;
КонецЦикла;
ЗафиксироватьТранзакцию();
Категория:
Встроенные Функции Как организовать подбор элемента справочника Форма справочника должна быть открыта как подчинённая данной форме (или элементу формы), а в нашей форме (или элементе формы) кодируем событие “Обработка выбора”:
Код 1C v 8.х Процедура кнПодборНажатие(Элемент)
ОчиститьСообщения();
форма = Справочники.Номенклатура.ПолучитьФормуВыбора();
форма.ВладелецФормы = ЭтаФорма;//указали владельца;
форма.РежимВыбора = Истина;
форма.ЗакрыватьПриВыборе = Ложь;
форма.Открыть();
КонецПроцедуры
//Это обработчик выбора для формы, т.к. форма - владелец
//открываемой формы выбора справочника;
Процедура ОбработкаВыбора(значениеВыбора, Источник)
перем стр;
стр = табл.Найти(строка(значениеВыбора), "Вторая");
если стр = Неопределено тогда
кол = табл.Количество();
новаяСтрока = табл.Добавить();
новаяСтрока.Первая = кол + 1;
новаяСтрока.Вторая = строка(значениеВыбора);
иначе
Сообщить("Наименование " + строка(значениеВыбора) + " уже имеется в таблице.");
конецЕсли;
конецПроцедуры
Категория:
Справочники Форма ~ Как получить данные одной формы, находясь на другой? Например, на 1 форме есть поле ввода. Как поместить данные этого поля ввода на форму 2, используя внешние обработки?
Самый простой способ - инициировать открытие формы программно и программно получить данные с нее после закрытия:
Код 1C v 8.х Форма = Справочники.Номенклатура.ПолучитьФормуСписка();
Форма.ОткрытьМодально();
Сообщить(Форма.ПолеВВода1);
Второй вариант - переподключить обработчик событий:
Код 1C v 8.х Форма = Справочники.Номенклатура.ПолучитьФормуСписка();
Форма.ПодключитьОбработчикИзмененияДанных("РеквизитФормы","ПриНоменклатуре");
Форма.ОткрытьМодально();
Но в этом случае процедура ПриНоменклатуре(РасшифровкаСобытия) должна находиться в модуле
открываемой формы.
Стандартных способов 1С для других видов обработки событий не существует. Т.к. в 1С все процедуры-обработчики событий должны находиться в модуле этого элемента и никак иначе из внешней обработки процедуру не подключишь.
Категория:
Работа с Формой (Диалог) и её элементами Форма ~ Как установить отбор в открываемой форме? Код 1C v 8.х ФормаВыбораВидаРасчета = ПланыВидовРасчета.УдержанияОрганизаций.ПолучитьФормуВыбора("ФормаВыбора", ЭлементыФормы.Удержания, "дляДокументаРегистрацияРазовыхУдержаний");
ФормаВыбораВидаРасчета.Отбор.Ссылка.ВидСравнения = ВидСравнения.НеВСписке;
ФормаВыбораВидаРасчета.Отбор.Ссылка.Значение = СпВидовРасчета;
ФормаВыбораВидаРасчета.Отбор.Ссылка.Использование = ИСТИНА;
ФормаВыбораВидаРасчета.Открыть();
Категория:
Работа с Формой (Диалог) и её элементами Открыть форму справочника Код 1C v 8.х
Форма = Справочники.Номенклатура.ПолучитьФормуСписка();
//Можно открыть так
Форма.Открыть(); //Открывает форму и делает ее окно активным.
// или так
ФормаСписка.ОткрытьМодально(); //Открывает форму в модальном режиме. Форма открывается для выбора, возвращает выбранное значение (или массив значений, в случае разрешенного множественного выделения в открываемой форме). Если значение не выбрано, возвращается Неопределено.
// Для возврата значения из модальной формы, в форме пишут Закрыть(<Параметр закрытия>); Параметр закрытия формы, открытой в модальном режиме. Это значение будет возвращено как результат метода, открывающего форму модально.
Категория:
Справочники Открыть форму документа Код 1C v 8.х
Форма = Документы.РасходныйКассовыйОрдер.ПолучитьФорму();
//возможные варианты получения формы: Параметы ()
//Форма = Документы.РасходныйКассовыйОрдер.ПолучитьФормуВыбора();
//Форма = Документы.РасходныйКассовыйОрдер.ПолучитьФормуНовогоДокумента();
//Форма = Документы.РасходныйКассовыйОрдер.ПолучитьФормуСписка();
//Можно открыть так
Форма.Открыть(); //Открывает форму и делает ее окно активным.
// или так
ФормаСписка.ОткрытьМодально(); //Открывает форму в модальном режиме. Форма открывается для выбора, возвращает выбранное значение (или массив значений, в случае разрешенного множественного выделения в открываемой форме). Если значение не выбрано, возвращается Неопределено.
// Для возврата значения из модальной формы, в форме пишут Закрыть(<Параметр закрытия>); Параметр закрытия формы, открытой в модальном режиме. Это значение будет возвращено как результат метода, открывающего форму модально.
Категория:
Документы