среда, 31 октября 2018 г.

Преобразование прикладных объектов (СправочникСсылка, ДокументОбъект) в данные управляемой формы (ДанныеФормыСтруктура, ДанныеФормыКоллекция) и наоборот (Толстый клиент, тонкий клиент)

Назначение: в управляемой форме в качестве реквизитов могут быть следующие типы: примитивные (дата, число, строка, булево) и ссылки (СправочникСсылка.Контрагенты, ДокументСсылка.ЗаказПокупателя и т.д.).
Прикладные объекты (СправочникОбъект, ДокументОбъект и т.д.) храниться в управляемой форме не могут. Поэтому для управляемых форм созданы аналогичные специальные типы значений (ДанныеФормыСтруктура, ДанныеФормыКоллекция и т.д). На форме эти типы обозначаются в скобках, причем в скобках указываются не сами типы, а соответствующие им прикладные объекты:



В работе часто требуется преобразовать такие типы значений управляемой формы в прикладной объект и наоборот. Для этого созданы специальные операторы (показаны ниже в коде). Важно, что:
- с их помощью можно преобразовывать только «специальные» типы значений (ДанныеФормыСтруктура, ДанныеФормыКоллекция и т.д). Для ссылок и примитивных типов преобразование не требуется;
- по синтакс-помощнику нужно смотреть, где эти операторы доступны (какие на клиенте, какие на сервере).
Источник: 
Номенклатура объектов: модуль формы объекта (справочника, документа и т.д).


&НаСервере
Процедура ПрочитатьЗаполнитьСвойстваИЗначения()
   // преобразование реквизита управляемой формы в прикладной объект
   // пример:
   // ДокументОбъект = РеквизитФормыВЗначение("Объект");
   ДокументОбъект = РеквизитФормыВЗначение("[Реквизит формы]");
   //-------------------------------------------------------------
   // преобразование прикладного объекта в реквизит управляемой формы
   // пример:
   // ЗначениеВРеквизитФормы(ДокументОбъект, "Объект");
   ЗначениеВРеквизитФормы([Прикладной объект], "[Реквизит формы]");
   //-------------------------------------------------------------
   // преобразование реквизита управляемой формы в прикладной объект
   // пример:
   // ОбъектБД = ДанныеФормыВЗначение(Объект, Тип("СправочникОбъект.Фонды"));
   ОбъектБД = ДанныеФормыВЗначение([Реквизит формы], Тип("[имя типа]"));
   //-------------------------------------------------------------
   // преобразование прикладного объекта в реквизит управляемой формы
   // пример:
   // ЗначениеВДанныеФормы(ОбъектБД, Объект);
   ЗначениеВДанныеФормы([Прикладной объект], [Реквизит формы]);
КонецПроцедуры


Проверка, что документ уже проведен (Толстый клиент, тонкий клиент)

Назначение: чтобы при повторном проведении не повторялось то, что не должно повторяться.
Источник:
Номенклатура объектов: модуль объекта документа.

Перем флПроведен Экспорт;
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
 флПроведен = Проведен;
КонецПроцедуры

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
 Если Не Отказ И Не флПроведен Тогда
    ... // вносим то, что должно произойти при первом проведении
 КонецЕсли;
КонецПроцедуры


Сортировка по измерению или ресурсу в регистре сведений (Толстый клиент).

Назначение: возможность сортировки по измерению в форме списка в регистре сведений. В управляемых формах такая возможность присутствует автоматически, код нужен для обычных форм.

Процедура ПриОткрытии()
   // пример:
//ЭлементыФормы.РаботникиОрганизации.НастройкаПорядка.ПодразделениеОрганизации.Доступность = Истина;
ЭлементыФормы.[ИмяРегистраСведений].НастройкаПорядка.[Измерение].Доступность = Истина;
КонецПроцедуры

Создание в управляемой форме реквизита с типом динамический список с отбором по владельцу формы (Толстый клиент, тонкий клиент)


Назначение: создание на управляемой форме динамического списка с отбором по владельцу формы.
Номенклатура объектов: документ «Электронное письмо», реквизит «Вложения письма» (динамический список). В этот реквизит должны входить все вложения, относящиеся к данному электронному письму.
Разработка на форме:
1.Добавляем реквизит «ВложенияПисьма».




2.Свойства реквизита «ВложенияПисьма» заполняем как на рисунке



3.Нажимаем на «Настройка списка Открыть» из рис. 2 и на вкладке «Запрос» вводим код:
//-----------------------------------
ВЫБРАТЬ
ВложенияЭлектронныхПисем.Наименование,
ВложенияЭлектронныхПисем.ИмяФайла
ИЗ
Справочник.ВложенияЭлектронныхПисем КАК ВложенияЭлектронныхПисем
ГДЕ
ВложенияЭлектронныхПисем.ПометкаУдаления = ЛОЖЬ
И ВложенияЭлектронныхПисем.Объект = &Объект
//-----------------------------------

4.Перетаскиваем реквизит «ВложенияПисьма» на форму, так чтобы появилась вкладка, как на рисунке.



5.Чтобы подставить значение параметра "Объект" (который в запросе), делаем следующее: у Формы создаем событие "ПриСозданииНаСервере" (как на рисунке), в отладчике заходим в "параметры" (пкм - вычислить выражение - в поле пишем "параметры"), там находим ссылку на владельца формы (например, "СсылкаНаОбъект = Параметры.Ключ;"), далее присваиваем владельца параметру в запросе.






// код в модуле формы
//-----------------------------------
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
 СсылкаНаОбъект = Параметры.Ключ;
ВложенияПисьма.Параметры.УстановитьЗначениеПараметра("Объект",СсылкаНаОбъект);
КонецПроцедуры
//-----------------------------------

Создание документа на основании другого документа (Толстый клиент, тонкий клиент)

Назначение: создание документа на основании другого документа.
Номенклатура объектов: документ «Корректировка долга» вводится на основании «Возврат товаров от покупателя».
Разработка на форме:
1.
 
2.Если использовать Конструктор ввода на основании, то процедура «обработка заполнения» будет замещена. Чтобы этого не произошло, изменения в процедуру «обработка заполнения» нужно добавить вручную.

3.


Процедура ОбработкаЗаполнения(Основание)
Если ТипЗнч(Основание) = Тип("ДокументСсылка.ВозвратТоваровОтПокупателя") Тогда
   Организация = Основание.Организация;
   КонтрагентДебитор = Основание.Контрагент;
   КонтрагентКредитор = Основание.Контрагент;
   ОснованиеОбъект = Основание.ПолучитьОбъект();
   ТЗ = ОснованиеОбъект.Товары;
   ТЗ.Свернуть("ДокументПартии,ИРВ_Проект","Сумма");
   Для Каждого Стр из ТЗ Цикл
      нСтр = СуммыДолга.Добавить();
 нСтр.ВидЗадолженности = Перечисления.ВидыЗадолженности.Дебиторская;
 нСтр.ДоговорКонтрагента = Основание.ДоговорКонтрагента;
 нСтр.Сделка = Основание.Сделка;
 нСтр.ДокументРасчетовСКонтрагентом = Стр.ДокументПартии;
 нСтр.Сумма = Стр.Сумма;
 нСтр.СуммаРегл = Стр.Сумма;
 нСтр.КурсВзаиморасчетов = 1;
 нСтр.ИРВ_Проект = Стр.ИРВ_Проект; 
 ИРВ_ЗаполнитьСчетаУчетаВСтроке(нСтр, Истина);//Добавил чтобы Заполнялись счета 
 Нстр2 = СуммыДолга.Добавить();
 Нстр2.ВидЗадолженности = Перечисления.ВидыЗадолженности.Кредиторская;
 Нстр2.ДоговорКонтрагента = Основание.ДоговорКонтрагента;
 Нстр2.Сделка = Основание.Сделка;
 Нстр2.ДокументРасчетовСКонтрагентом = Основание;
 Нстр2.Сумма = Стр.Сумма;
 Нстр2.СуммаРегл = Стр.Сумма;
 Нстр2.КурсВзаиморасчетов = 1;
 Нстр2.ИРВ_Проект = Стр.ИРВ_Проект; 
 ИРВ_ЗаполнитьСчетаУчетаВСтроке(Нстр2, Истина);//Добавил чтобы Заполнялись счета    
   КонецЦикла;
КонецЕсли;
 
КонецПроцедуры 



Пояснения:
Если требуется программно поймать момент, когда создается новый документ на основании (например, чтобы в этот момент вывести какое-нибудь сообщение), то этот момент отслеживается в процедуре «обработка заполнения» создаваемого на основании документа.

Программный вызов ВНЕШНЕГО отчета (обработки) из обычной формы (Толстый клиент)

Назначение: программный вызов внешнего отчета или обработки из обычной формы. ВНИМАНИЕ: Получение управляемой формы внешней обработки/отчета для обычного режима работы приложения не поддерживается.
Номенклатура объектов:  обычная форма документа «Заказ покупателя», внешний отчет «Журнал уведомлений».
Разработка на форме:
1.На обычной форме документа «Заказ покупателя» создаем кнопку «Журнал уведомлений».


2.В свойствах кнопки в разделе «Основные» создаем действие «ДействияФормыоЖурналУведомлений".


Процедура ДействияФормыоЖурналУведомлений(Кнопка)
   ОтчетЖурналУведомлений = Справочники.ВнешниеОбработки.НайтиПоКоду("000000247");
   ИмяФайла = ПолучитьИмяВременногоФайла();
   ДвоичныеДанные = ОтчетЖурналУведомлений.ХранилищеВнешнейОбработки.Получить();
   ДвоичныеДанные.Записать(ИмяФайла);
   Форма = ВнешниеОтчеты.ПолучитьФорму(ИмяФайла);
   //---отбор для вызываемой формы, если нужен---
   ОбъектЗадачи = Новый ПолеКомпоновкиДанных("ОбъектЗадачи");
   ФиксированныеНастройки = Форма.ОтчетОбъект.КомпоновщикНастроек.ФиксированныеНастройки.Отбор.Элементы;
 
   ОтборОбъект = ФиксированныеНастройки.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
   ОтборОбъект.ЛевоеЗначение = ОбъектЗадачи;
   ОтборОбъект.ПравоеЗначение = Ссылка; 
   //--------------------------------
   Форма.ОтчетОбъект.СкомпоноватьРезультат(Форма.ЭлементыФормы.Результат);
   Форма.Открыть();
   УдалитьФайлы(ИмяФайла); 
КонецПроцедуры


Программный вызов ВНЕШНЕГО отчета (обработки) из управляемой формы (Тонкий клиент)

Назначение: программный вызов внешнего отчета или обработки из управляемой формы. ВНИМАНИЕ: Получение управляемой формы внешней обработки/отчета для обычного режима работы приложения не поддерживается.
Номенклатура объектов:  управляемая форма документа оЗаявкаНаЛогистику, внешний отчет «Журнал уведомлений».
Разработка на форме:
1.На управляемой форме документа «оЗаявкаНаЛогистику» создаем команду (кнопку) «Журнал уведомлений».


2.В свойствах команды в разделе «Основные» создаем действие «Журнал уведомлений"


&НаКлиенте
Процедура ЖурналУведомлений(Команда)
   ИмяФайла = ЖурналУведомленийНаСервере();
   Форма = ОткрытьФорму("ВнешнийОтчет."+ИмяФайла+".Форма.ФормаОтчетаУправляемая");  
   //---отбор для вызываемой формы, если нужен---
   ОбъектЗадачи = Новый ПолеКомпоновкиДанных("ОбъектЗадачи");
   ФиксированныеНастройки = Форма.Отчет.КомпоновщикНастроек.ФиксированныеНастройки.Отбор.Элементы;
   ОтборОбъект = ФиксированныеНастройки.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
   ОтборОбъект.ЛевоеЗначение = ОбъектЗадачи;
   ОтборОбъект.ПравоеЗначение = Объект.Ссылка; 
   //--------------------------------
   Форма.СкомпоноватьРезультат(РежимКомпоновкиРезультата.Непосредственно);
   УдалитьФайлы(ИмяФайла); 
КонецПроцедуры

&НаСервере
Функция ЖурналУведомленийНаСервере()
   ОтчетЖурналУведомлений = Справочники.ВнешниеОбработки.НайтиПоКоду("000000247");
   ДвоичныеДанные = ОтчетЖурналУведомлений.ХранилищеВнешнейОбработки.Получить();
   АдресВХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные);
   ИмяФайла = ВнешниеОтчеты.Подключить(АдресВХранилище,,Ложь);
   Возврат ИмяФайла;
КонецФункции


Получение списка выбора для поля ввода (в виде выпадающего списка) средствами конфигуратора в управляемой форме (Толстый клиент, тонкий клиент)

Назначение: получение списка выбора в виде выпадающего списка.
Номенклатура объектов: справочник «Клиенты», выбираем поле «Адрес» из выпадающего списка.
Разработка на форме:
1.На форме элемента встаем на поле «Адрес» и в палитре свойств устанавливаем свойство «Режим выбора из списка».

2.На форме элемента встаем на поле «Адрес» и в палитре свойств нажимаем кнопку выбора в строке «Список выбора», после чего добавляем в список нужные значения. Можно добавлять значения с примитивным типом данных (строка, число и т.д.), а также предопределенные значения с типом данных «Ссылка».



Получение списка выбора для поля ввода (в виде выпадающего списка) средствами встроенного языка в управляемой форме (Толстый клиент, тонкий клиент)

Назначение: получение списка выбора в виде выпадающего списка.
Номенклатура объектов: справочник «Контрагенты», документ «Поступление товаров и услуг».
Разработка на форме:
1.На форме документа встаем на поле «Контрагент».



2.В свойствах в разделе «События» создаем событие «НачалоВыбора».


&НаКлиенте
Процедура КонтрагентНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
 СтандартнаяОбработка = Ложь; 
 КонтрагентНачалоВыбораНаСервере(ДанныеВыбора);
КонецПроцедуры

&НаСервере
Процедура КонтрагентНачалоВыбораНаСервере(ДанныеВыбора)
 ДанныеВыбора = Новый СписокЗначений;
 ДанныеВыбора.Добавить(Справочники.Контрагенты.НайтиПоКоду("00012"));
 ДанныеВыбора.Добавить(Справочники.Контрагенты.НайтиПоКоду("00022"));
 ДанныеВыбора.Добавить(Справочники.Контрагенты.НайтиПоКоду("00052"));
КонецПроцедуры


Получение управляемой формы выбора с отбором из управляемой формы (Толстый клиент, тонкий клиент)

Назначение: получение управляемой формы выбора с заданным отбором (предполагается, форма выбора уже есть в конфигурации).
Номенклатура объектов: справочник «Контрагенты», документ «Поступление товаров и услуг». Накладываем отбор на справочник «Контрагенты».
Разработка на форме:
1.На форме документа встаем на поле «Контрагент».


2.В свойствах в разделе «События» создаем событие «НачалоВыбора».



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

&НаСервере
Функция ПолучитьКонтрагентовДляВыбора()
   Список = Новый СписокЗначений;
   // заполняем список значений, по которому будем отбирать
   Список.Добавить(Справочники.Контрагенты.НайтиПоКоду("00012").Наименование);
   Список.Добавить(Справочники.Контрагенты.НайтиПоКоду("00022").Наименование);
   Список.Добавить(Справочники.Контрагенты.НайтиПоКоду("00052").Наименование);
   Возврат Список;
КонецФункции


Получение обычной формы выбора с отбором из управляемой формы (Толстый клиент)

Назначение: получение обычной формы выбора с заданным отбором (предполагается, форма выбора уже есть в конфигурации).
Номенклатура объектов: справочник «Контрагенты», документ «Поступление товаров и услуг». Накладываем отбор на справочник «Контрагенты».
Разработка на форме:

1.На форме документа встаем на поле «Контрагент».

2.В свойствах в разделе «События» создаем событие «НачалоВыбора».


&НаКлиенте
Процедура КонтрагентНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
   СтандартнаяОбработка = Ложь; 
   ФормаКонтрагенты = ОткрытьФорму("Справочник.Контрагенты.ФормаВыбора",, Элемент);
   // если объект, форму выбора которого хотим получить, является подчиненным, то требуется указать владельца объекта.
   //-------------------------------------------------------------
   //Организация = Справочники.Организации.НайтиПоКоду("00001");
   //ФормаКонтрагенты.Отбор.Владелец.Установить(Организация, Истина);
   //-------------------------------------------------------------
   ФормаКонтрагенты.РежимВыбора = Истина;
   СписокКонтрагентов = ПолучитьКонтрагентовДляВыбора();
   ФормаКонтрагенты.Отбор.Наименование.ВидСравнения = ВидСравнения.ВСписке;  
   // тип только СписокЗначений, строка "ВидСравнения" обязательно перед строкой "Значение".
   ФормаКонтрагенты.Отбор.Наименование.Значение = СписокКонтрагентов;        
   // если отбираем по наименованию, то в списке значений должны быть либо ссылки, 
   // либо наименования. Можно применять различные поля отбора и различные виды сравнения.
   ФормаКонтрагенты.Отбор.Наименование.Использование = Истина;
   ФормаКонтрагенты.Открыть();
КонецПроцедуры

&НаСервере
Функция ПолучитьКонтрагентовДляВыбора()
   Список = Новый СписокЗначений;
   // заполняем список значений, по которому будем отбирать
   Список.Добавить(Справочники.Контрагенты.НайтиПоКоду("00012"));
   Список.Добавить(Справочники.Контрагенты.НайтиПоКоду("00022"));
   Список.Добавить(Справочники.Контрагенты.НайтиПоКоду("00052"));
   Возврат Список;
КонецФункции


Получение управляемой формы выбора с отбором из обычной формы (Толстый клиент)

Назначение: получение управляемой формы выбора с заданным отбором (предполагается, форма выбора уже есть в конфигурации).
Номенклатура объектов: справочник «Контрагенты», документ «Поступление товаров и услуг». Накладываем отбор на справочник «Контрагенты».
Разработка на форме:
1.На форме документа встаем на поле «Контрагент».

2.В свойствах в разделе «События» создаем событие «НачалоВыбора».

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

Функция ПолучитьКонтрагентовДляВыбора()
   Список = Новый СписокЗначений;
   // заполняем список значений, по которому будем отбирать
   Список.Добавить(Справочники.Контрагенты.НайтиПоКоду("00012").Наименование);
   Список.Добавить(Справочники.Контрагенты.НайтиПоКоду("00022").Наименование);
   Список.Добавить(Справочники.Контрагенты.НайтиПоКоду("00052").Наименование);  
   Возврат Список;
КонецФункции


Получение обычной формы выбора с отбором из обычной формы (Толстый клиент)

Назначение: получение обычной формы выбора с заданным отбором (предполагается, форма выбора уже есть в конфигурации).
Номенклатура объектов: справочник «Контрагенты», документ «Поступление товаров и услуг». Накладываем отбор на справочник «Контрагенты».
Разработка на форме:
1.На форме документа встаем на поле «Контрагент».



2.В свойствах в разделе «События» создаем событие «НачалоВыбора».

Процедура КонтрагентНачалоВыбора(Элемент, СтандартнаяОбработка)
   СтандартнаяОбработка = Ложь;
   ФормаКонтрагенты = Справочники.Контрагенты.ПолучитьФормуВыбора(,Элемент,);
   // если объект, форму выбора которого хотим получить, является подчиненным, то требуется указать владельца объекта.
   //-------------------------------------------------------------
   //Организация = Справочники.Организации.НайтиПоКоду("00001");
   //ФормаКонтрагенты.Отбор.Владелец.Установить(Организация, Истина);
   //-------------------------------------------------------------
   ФормаКонтрагенты.РежимВыбора = Истина;
   СписокКонтрагентов = ПолучитьКонтрагентовДляВыбора();
   ФормаКонтрагенты.Отбор.Наименование.ВидСравнения = ВидСравнения.ВСписке;  
   // тип только СписокЗначений, строка "ВидСравнения" обязательно перед строкой "Значение".
   ФормаКонтрагенты.Отбор.Наименование.Значение = СписокКонтрагентов;        
   // если отбираем по наименованию, то в списке значений должны быть либо ссылки, 
   // либо наименования. Можно применять различные поля отбора и различные виды сравнения.
   ФормаКонтрагенты.Отбор.Наименование.Использование = Истина;
   ФормаКонтрагенты.Открыть();
КонецПроцедуры

Функция ПолучитьКонтрагентовДляВыбора()
   Список = Новый СписокЗначений;
   // заполняем список значений, по которому будем отбирать
   Список.Добавить(Справочники.Контрагенты.НайтиПоКоду("00012"));
   Список.Добавить(Справочники.Контрагенты.НайтиПоКоду("00022"));
   Список.Добавить(Справочники.Контрагенты.НайтиПоКоду("00052"));
   Возврат Список;
КонецФункции


Замена типовой обычной формы выбора своей обычной формой (Толстый клиент)

Назначение: замена типовой обычной формы выбора своей обычной формой (предполагается, что своя форма выбора уже создана).
Номенклатура объектов:
Разработка на форме:

Процедура ТоварыСерияНоменклатурыНачалоВыбора(Элемент, СтандартнаяОбработка)
   СтандартнаяОбработка = Ложь;  // прерываем стандартную обработку, чтобы не 
   // открылась типовая форма выбора
   ФормаВыборки = ПолучитьФорму("ОбщаяФорма.ИРВ_ФормаВыбораСерии"); 
   // получаем свою форму выбора и заполняем колонки данными 
   ФормаВыборки.Серия = Элемент.Значение; 
   ФормаВыборки.Характеристика = ЭлементыФормы.Товары.ТекущиеДанные.ХарактеристикаНоменклатуры;
   ФормаВыборки.Номенклатура = Элемент.ВыборПоВладельцу.Ссылка;
   ФормаВыборки.СкладОтправитель = ЭлементыФормы.СкладОтправитель.Значение;
   ФормаВыборки.ПроектОтправитель = ЭлементыФормы.ПроектОтправитель.Значение;
   ФормаВыборки.Период = ЭлементыФормы.Дата.Значение;
   ФормаВыборки.РежимВыбора = Истина;
   ЭлементыФормы.Товары.ТекущиеДанные.СерияНоменклатуры = ОткрытьФормуМодально(ФормаВыборки,,Элемент);  
КонецПроцедуры


Открытие обычной и управляемой формы объекта из управляемой формы другого объекта (Толстый клиент, тонкий клиент)

Назначение: открытие обычной и управляемой формы объекта из управляемой формы другого объекта (предполагается, формы уже есть в конфигурации).
Номенклатура объектов: справочник «Контрагенты», справочник «Банковские счета». Из управляемой формы объекта справочника «Контрагенты» открываем форму объекта справочника «Банковские счета».
Разработка на форме:
1.На форме справочника «Контрагенты» встаем на команду «Создать банковский счет».

2.В свойствах в разделе «Основные» создаем действие «Создать банковский счет».


&НаКлиенте
Процедура СоздатьБанковскийСчет(Команда)
   // если форма должна открываться с заполненными полями 
   // (например, "Владелец"), то делаем следующее:
   // в структуру "ПараметрыЗаполнения" помещаем нужные параметры и их 
   // значения, имена параметров структуры должны совпадать с параметрами
   // открываемой формы
   ПараметрыЗаполнения = Новый Структура;
   ПараметрыЗаполнения.Вставить("Владелец", Объект.Ссылка);
   // заполненную параметрами структуру помещаем в другую структуру,
   // ключ другой структуры должен иметь имя "ЗначенияЗаполнения"
   ПараметрыСоздания = Новый Структура;
   ПараметрыСоздания.Вставить("ЗначенияЗаполнения", ПараметрыЗаполнения);
 
   // открываем обычную форму без параметров (толстый клиент)
   ОткрытьФорму("Справочник.БанковскиеСчета.Форма.ФормаЭлемента");
   // открываем управляемую форму без параметров (толстый и тонкий клиент)
   ОткрытьФорму("Справочник.БанковскиеСчета.Форма.ФормаЭлементаУправляемая");
   // открываем обычную форму с параметрами (толстый клиент)
   ОткрытьФорму("Справочник.БанковскиеСчета.Форма.ФормаЭлемента", ПараметрыСоздания);
   // открываем управляемую форму с параметрами (толстый и тонкий клиент)
   ОткрытьФорму("Справочник.БанковскиеСчета.Форма.ФормаЭлементаУправляемая", ПараметрыСоздания);
КонецПроцедуры



Открытие обычной формы объекта из формы другого объекта (Толстый клиент)

Назначение: открытие формы справочника, документа или регистра с отбором из формы другого справочника или документа. Часто используется при пункте меню «Перейти».
Номенклатура объектов:
Разработка на форме:

Код:

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


Добавление колонки в табличную часть справочника или документа или в форму списка в обычной форме (Толстый клиент)

Назначение: код предназначен для добавления колонки в табличную часть.
Номенклатура объектов:
Разработка на форме:
1.Если требуется добавить колонку с реквизитом объекта, то это делается так:
 
На форме «пкм – добавить колонку» и в поле «Данные» выбираем реквизит.
2.Если требуется добавить колонку с вычисляемым значением, которое не будет храниться в базе, а будет каждый раз вычисляться при открытии формы, то это делается так:
 

На форме «пкм – добавить колонку», а поле «Данные» не заполняем. Затем в процедуре «ПриВыводеСтроки» в модуле формы прописываем нужный код.




Код:
Процедура ТоварыПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
ОформлениеСтроки.Ячейки.[Наименование колонки].УстановитьТекст([Нужное значение]);
// пример:  
//ОформлениеСтроки.Ячейки.ИРВ_КодОбмена.УстановитьТекст(ДанныеСтроки.Хар//актеристикаНоменклатуры.ИРВ_КодОбмена);
КонецПроцедуры


Программное нажатие кнопки «Сформировать» отчета (Толстый клиент, тонкий клиент)

Назначение: код предназначен для программного формирования отчета. Отчет формируется при условиях:
- отчет открывается в управляемой форме (должна быть у отчета или генерируется самостоятельно системой);
- параметры отчета должны быть заданы изначально либо хотя бы раз пользователем;

Номенклатура объектов:

// код в обычной форме 
// указываем, какой отчет хотим сформировать:
// если у отчета есть управляемая форма:
Форма = ОткрытьФорму("Отчет.ДниРождения.Форма.ФормаОтчетаУправляемая");
// если у отчета нет форм
// Форма = ОткрытьФорму("Отчет.ДниРождения.Форма");
Форма.СкомпоноватьРезультат(РежимКомпоновкиРезультата.Непосредственно);

// код в управляемой форме 
&НаКлиенте
// указываем, какой отчет хотим сформировать:
// если у отчета есть управляемая форма:
Форма = ОткрытьФорму("Отчет.ДниРождения.Форма.ФормаОтчетаУправляемая");
// если у отчета нет форм
// Форма = ОткрытьФорму("Отчет.ДниРождения.Форма");
Форма.СкомпоноватьРезультат(РежимКомпоновкиРезультата.Непосредственно);


Пояснения:

Вызов диалогового окна (Толстый клиент, тонкий клиент)

Вызов диалогового окна (Толстый клиент, тонкий клиент)
Назначение: процедура предназначена для вызова диалогового окна и дальнейшего поведения системы при ответе пользователя «Да» или «Нет».

Номенклатура объектов:

Код:

Если ЭтоНовый() Тогда    // условие, что объект не был ни разу записан
   Режим = РежимДиалогаВопрос.ДаНетОтмена;
   Ответ = Вопрос("[Вопрос для пользователя]", Режим, 0);
   Если Ответ = КодВозвратаДиалога.Да Тогда
      [действия, если пользователь ответит «да»]
   ИначеЕсли Ответ = КодВозвратаДиалога.Нет Тогда
      [действия, если пользователь ответит «нет»]
   КонецЕсли  
КонецЕсли; 


Пояснения:
Блок «…»:
Блок «…»:
Блок «…»:

Перебор табличной части (Толстый клиент)

Назначение: код предназначен для построчного перебора табличной части.


// код в обычной форме 
// получаем документ, табличную часть которого будем перебирать
Док = Документы.КадровоеПеремещение.НайтиПоНомеру("00000001",'20060210'); 
Для Каждого СтрокаТаблЧасти Из Док.Работники Цикл
   // манипуляции с табличной частью; 
   Сообщить(СтрокаТаблЧасти.Сотрудник);
КонецЦикла;

// код в управляемой форме 
// табличную часть другого документа в управляемой форме получить нельзя,
// максимум можно получить Массив, но целесообразность сомнительна

Открытие формы объекта по ссылке (Толстый клиент, тонкий клиент)

Открывается основная форма объекта, заданная в конфигураторе. Никакие параметры в открываемую форму передать не получится. Обычную форму можно открыть только в толстом клиенте. Управляемую форму можно открыть и в толстом, и в тонком клиенте.

// код в обычной форме 
Процедура КнопкаВыполнитьНажатие(Кнопка)
   ОткрытьЗначение(Справочники.Контрагенты.НайтиПоКоду("Ю0002")); 
КонецПроцедуры

// код в управляемой форме 
&НаКлиенте
Процедура ВыполнитьКоманду(Команда)
   НужнаяСсылка = ПолучитьНужнуюСсылку();
   ОткрытьЗначение(НужнаяСсылка); 
КонецПроцедуры

&НаСервере
Функция ПолучитьНужнуюСсылку()
   НужнаяСсылка = Справочники.Контрагенты.НайтиПоКоду("Ю0002");
   Возврат НужнаяСсылка; 
КонецФункции