Архив рубрики: Работа с формами

1с 8.1: Как программно открыть множественный подбор документов (справочников)?

Делаем обработку на примере подбора документа Перемещение товаров.

Создаем обработку. На панели размещаем кнопку Подбор




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

 
 
Процедура обработки подбора
Процедура ОбработкаВыбора(ЗначениеВыбора, Источник)
МассивВыбранныхЭлементов = ЗначениеВыбора;
Для каждого СтрокаМассива Из МассивВыбранныхЭлементов Цикл
Результат = ТабличнаяЧасть1.Найти(СтрокаМассива,"ПеремещениеТоваров");
Если Результат = Неопределено Тогда
НоваяСтрока = ТабличнаяЧасть1.Добавить();
НоваяСтрока.ПеремещениеТоваров = СтрокаМассива;

КонецЕсли;

КонецЦикла; 

 
ФормаВыбора.Открыть();
КонецПроцедуры
 

 
признак множественного подбора предполагает подбор нескольких позиций в журнале,используя зажаты SHIFT или CTRL.

 
.Команда ФормаВыбора.Открыть();  
использованная в конце последней процедуры, позволяет повторно открыть форму подбора. Конечно, при таком способе журнал будет постоянно закрываться и открываться (будет заметно мигание), но это позволяет несложным способом настроить подбор.

1с 8: Пример. Как использовать ПолеТабличногоДокумента

в 1С 8 есть возможность разместить на форме печатную форму макета с помощью элемента формы: Поле табличного документа.

Нужно создать Макет, а также вывести на форму элемент "Поле табличного документа"

Скачать пример использования поля табличного документа

1с 8.1 Как в подвал табличного поля добавить итог по колонке

Как организовать вывод итогов в подвал табличного поля

ЭлементыФормы.ТабличноеПоле.Колонки["ИмяНужнойКолонки"]  

.ОтображатьИтогиВПодвале = Истина;

Но перед этим нужно включить флаг "подвал" в свойствах табличного поля или сделать это программно.


Выбрать элемент справочника в v 7.7 и в 8.1


Поговорим об интерактивном выборе элемента из справочника в версиях 7.7 и 8.1



В Версии 7.7 выбрать элемент справочника можно функцией Выбрать:

Перем ВыбСпр;
Спр=СоздатьОбъект("Справочник.Товары");
Если Спр.Выбрать("Выберите товар из справочника", "ОсновнаяФорма")=Тогда
    ВыбСпр=Спр.ТекущийЭлемент();
КонецЕсли;
 



ОсновнаяФорма - можно выбрать


Для версии 8.1 выбор элемента может выглядеть так:

Спр=Справочники.Товары;
ФормаВыбора=Спр.ПолучитьФормуВыбора("ФормаВыбора");
ФормаВыбора.ЗакрыватьПриВыборе=Истина;
ФормаВыб.РежимВыбора = Истина;
 
ФормаВыбора.ОткрытьМодально();


Аналогичным образом можно выбирать и документы

Рабочая версия выглядит так:

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


 
Второй параметр в функции  ПолучитьФормуВыбора("ФормаВыбора",ЭтаФорма) - задает форму владелеца (ЭтаФорма) (подробнее описание функции смотрите в справке )

Была ситуация в версии 8.1, когда при выборе элемента из списка - элемент не выбирался, а происходило открытие для редактирования.
Проблема оказалась в коде выбираемого документа. Там был код принудительного открытия формы документа при выборе из списка:

Процедура ДокументСписокВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)
        Если ТекЗначениеУчета.Значение=Перечисления.ВидУчетаЛБ.Соптовары Тогда
            СтандартнаяОбработка = Ложь;
            ФормаСпецификации = ВыбраннаяСтрока.ПолучитьФорму("ФормаДокументаРозничная");
            ФормаСпецификации.Открыть();
        КонецЕсли;

КонецПроцедуры

пришлось добавить условие: если существует форма владелец, то производить выбор. В результате получилось так:

Процедура ДокументСписокВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)

    Если ЭтаФорма.ВладелецФормы = Неопределено Тогда      //Добавлено условие - в случае, если Форма-Владелей не определена

        Если ТекЗначениеУчета.Значение=Перечисления.ВидУчетаЛБ.Соптовары Тогда

            СтандартнаяОбработка = Ложь;

            ФормаСпецификации = ВыбраннаяСтрока.ПолучитьФорму("ФормаДокументаРозничнаяЛБ");

            ФормаСпецификации.Открыть();

        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

Ещё можно глянуть более подробный материал здесь 

Как программно добавить кнопку в Панель формы 1с 8.1

Иногда бывает, что нужно вставить кнопку в форму программно. Как это можно реализовать в 1с 8.х

Мы хотим на Панель ОсновныеДействияФормы поместить новую кнопку

Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)

Если ЭлементыФормы.ОсновныеДействияФормы.Кнопки.Найти("ИмяКнопки")=Неопределено Тогда // проверяем: есть ли уже такая кнопка?

ТипКнопки = ТипКнопкиКоманднойПанели.Действие;
ДействиеКнопки = Новый Действие("ОсновныеДействияФормыНазваниеИмяКнопки");

КнопкиФормы =ЭлементыФормы.ОсновныеДействияФормы.Кнопки;
НоваяКнопка =КнопкиФормы.Добавить("ИмяКнопки",ТипКнопки,"Имя Кнопки",ДействиеКнопки);
НоваяКнопка.Картинка = БиблиотекаКартинок.ПиктограммаВашейКнопки;
НоваяКнопка.Отображение = ОтображениеКнопкиКоманднойПанели.Картинка; // можно выбрать другие варианты "Авто", "Надпись" или "Надпись и Картинка"
КнопкиФормы.Сдвинуть(НоваяКнопка,(-1)*КнопкиФормы.Количество()-1); // сдвигаем кнопку в крайнее правое положение
КонецЕсли;

КонецПроцедуры

КонецПроцедуры




Программно добавлена кнопка с изображением значка Word


Модальное открытие формы в 1с 8. Как вернуть результат ОткрытьМодально()

Открытие формы модально - форма появляется на экране и блокирует другие окна, пока не будет закрыта.

МодФорма = ПолучитьФорму("ОсновнаяФорма",ВладелецФормы);
Результат = МодФорма.ОткрытьМодально();
Возникает проблема возврата результата, если форма не "для выбора"




В описании функции ОткрытьМодально() написано:


Форма.ОткрытьМодально (Form.DoModal)
ОткрытьМодально(<Таймаут>)

Параметры: <Таймаут> (необязательный)
Тип: Число. Время показа формы в секундах, по истечении которого форма будет закрыта с параметром закрытия Неопределено. Если значение параметра не задано, время показа не ограничено.
Значение по умолчанию: 0
 Возвращаемое значение:
Тип: Произвольный. Команда закрытия формы.
Если форма открывалась для выбора, возвращает выбранное значение (или массив значений, в случае разрешенного множественного выделения в открываемой форме). Если значение не выбрано, возвращается Неопределено. 
Описание:
Открывает форму в модальном режиме.

Я специально выделил фразу цветом. Получается: если форма определена "для выбора" - то она возвращает выбранные значения
В любых других случаях будет возвращаться - Неопределено. 


Что же делать, когда у нас  "обычная" форма (т. е. форма не определена как "для выбора") и мы хотим вернуть результат из формы после закрытия ?

В этом случае есть несколько решений:
1. Получив доступ к форме, мы можем вызывать различные функции и получать переменные. Естественно нужно, чтобы эти функции имели статус Экспорт
Например:  МодФорма = ПолучитьФорму("ОсновнаяФорма",ВладелецФормы);
          Результат = МодФорма.ОткрытьМодально();
РезультатФункции  = МодФорма.НашаФункция("Параметры функции");
Внимание!  Форма после закрытия продолжает существовать, и доступ к функциям с пометкой Экспорт можно получить.
......
// Функция вставляется в   Форму
Функция НашаФункция(ПараметрыФункцииЭкспорт
// Действия в функции
Возврат Результат  
КонецФункции
2.  Можно использовать команду ОповеститьОВыборе(ВозвращаемыйПараметр)
Эта команда позволяет вернуть из формы указанный параметр "ВозвращаемыйПараметр"


На  этом пока всё, может будут у кого замечания и дополнения ... пишите :)