Доброго вечера.
Мне необходимо из основной формы получить форму настроек.
Я делаю по аналогии с работающим отчётом.
В модуле основной формы- (форма настроек открывается)
такой код:
В модуле формы настроек
Я прошу помощи в объяснении рабочего кода. Что необходимо писать в процедуре УстановитьЗначенияРеквизитов??
И у меня на данный момент не работает :(
только открывается форма настрое
В отладчике- СтруктураОтчета- нужные, но пустые поля.
Мне необходимо из основной формы получить форму настроек.
Я делаю по аналогии с работающим отчётом.
В модуле основной формы- (форма настроек открывается)
такой код:
//**************************************************************************************************************
&НаКлиенте
Процедура ОткрытьНастройки(Команда)
ПараметрыОткрытия = Новый Структура("СтруктураОтчета",ПолучитьСтруктуруОтчета());
Форма = ПолучитьФорму("ВнешняяОбработка.Тест.Форма.ФормаНастроек",ПараметрыОткрытия,ЭтаФорма);
Форма.ОткрытьМодально();
ЗаполнитьЗначенияСвойств(Объект,Форма);
КонецПроцедуры // ОткрытьНастройки()
//**************************************************************************************************************
&НаКлиенте
Функция ПолучитьСтруктуруОтчета()
СтруктураОтчета = Новый Структура;
СтруктураОтчета.Вставить("ДатаНач");
СтруктураОтчета.Вставить("ДатаКон");
СтруктураОтчета.Вставить("МинСумма");
СтруктураОтчета.Вставить("МаксСумма");
СтруктураОтчета.Вставить("ЛицевойСчёт");
СтруктураОтчета.Вставить("Представитель");
ЗаполнитьЗначенияСвойств(СтруктураОтчета,Объект);
Возврат СтруктураОтчета;
КонецФункции //ПолучитьСтруктуруОтчета()
//**************************************************************************************************************
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
УстановитьЗначенияРеквизитов(Параметры);
КонецПроцедуры //ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
//**************************************************************************************************************
&НаСервере
Процедура УстановитьЗначенияРеквизитов(Параметры)
////Отчет.ВариантМакета = Параметры.ВариантМакета; //Из рабочего образца
//Объект.ДатаНач = Параметры.ДатаНач;
//Объект.ДатаКон = Параметры.ДатаКон;
//Объект.ЛицевойСчёт = Параметры.ЛицевойСчёт;
//Объект.Представитель = Параметры.Представитель;
КонецПроцедуры //УстановитьЗначенияРеквизитов(Параметры)
//**************************************************************************************************************
ПоказатьВ модуле формы настроек
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Параметры.Свойство("СтруктураОтчета") Тогда
СтруктураОтчета = Параметры.СтруктураОтчета;
ЗаполнитьЗначенияСвойств(ЭтаФорма,СтруктураОтчета);
КонецЕсли; //Параметры.Свойство("СтруктураОтчета") Тогда
КонецПроцедуры //ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
//**************************************************************************************************************
ПоказатьЯ прошу помощи в объяснении рабочего кода. Что необходимо писать в процедуре УстановитьЗначенияРеквизитов??
И у меня на данный момент не работает :(
только открывается форма настрое
В отладчике- СтруктураОтчета- нужные, но пустые поля.
По теме из базы знаний
- Пример получения данных в EXCEL из 1С посредством ComConnector
- 1С:Контрагент. Автозаполнение реквизитов контрагентов по ИНН: цены от 4 200 руб.
- Перенос данных между похожими конфигурациями 1С
- Infostart PrintWizard - создание и редактирование печатных форм в 1С 8.3
- Из месяца в месяц. АРМ для копирования услуг предыдущего периода. Получение данных из динамического списка.
Найденные решения
Получилось :)
Благодарю Всех за помощь и за советы
Взяла другой отчёт и по шаблону сделала
На основной форме
на форме настроек
Благодарю Всех за помощь и за советы
Взяла другой отчёт и по шаблону сделала
На основной форме
&НаКлиенте
Процедура ОткрытьНастройки(Команда)
//https://www.about1c.ru/v83/language-reference/other/procedure-fill-property-values
//Источник = Новый Структура("Наименование,Код", "Стул деревянный", 1);
//Получатель = Новый Структура("Наименование,Код");
//ЗаполнитьЗначенияСвойств(Получатель, Источник);
Парам = ПолучитьСтруктуруРеквизитов();
ЗаполнитьЗначенияСвойств(Парам, Объект);
ФормаНастроек = ПолучитьФорму("ВнешняяОбработка.Тест.Форма.ФормаНастроек",Парам,ЭтаФорма);
ФормаНастроек.ОткрытьМодально();
КонецПроцедуры // ОткрытьНастройки()
//**************************************************************************************************************
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если ИмяСобытия = "Передать настройки" Тогда
ЗаполнитьЗначенияСвойств(Объект,Параметр);
КонецЕсли; //ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
КонецПроцедуры //ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
//**************************************************************************************************************
//
&НаСервере
Функция ПолучитьСтруктуруРеквизитов()
СтруктураРеквизитов = Новый Структура;
ОтчетОбъект = РеквизитФормыВЗначение("Объект");
МетаданныеОтчета = ОтчетОбъект.Метаданные();
Для каждого ТекущийРеквизит Из МетаданныеОтчета.Реквизиты Цикл
СтруктураРеквизитов.Вставить(ТекущийРеквизит.Имя, Неопределено);
КонецЦикла;//каждого ТекущийРеквизит Из МетаданныеОтчета.Реквизиты Цикл
Возврат СтруктураРеквизитов;
КонецФункции //ПолучитьСтруктуруРеквизитов()
//**************************************************************************************************************
Показатьна форме настроек
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ЗаполнитьЗначенияСвойств(Объект,Параметры);
КонецПроцедуры //ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
//**************************************************************************************************************
Процедура НастройкиОтчета(Настройки) Экспорт
// Пустой модуль что бы не ругалась система
НовыеНастройки = Настройки;
Настройки = НовыеНастройки;
КонецПроцедуры
//**************************************************************************************************************
&НаСервере
Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки)
ЭтаФорма.Параметры.Свойство("ДатаНач",Объект.ДатаНач);
ЭтаФорма.Параметры.Свойство("ДатаКон",Объект.ДатаКон);
ЭтаФорма.Параметры.Свойство("ЛицевойСчёт",Объект.ЛицевойСчёт);
ЭтаФорма.Параметры.Свойство("Представитель",Объект.Представитель);
ЭтаФорма.Параметры.Свойство("МинСумма",Объект.МинСумма);
ЭтаФорма.Параметры.Свойство("МаксСумма",Объект.МаксСумма);
КонецПроцедуры //ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки)
//**************************************************************************************************************
&НаКлиенте
Процедура ПринятьНастройки(Команда)
Отказ = Ложь;
Парам = ПолучитьСтруктуруРеквизитов();
ЗаполнитьЗначенияСвойств(Парам, Объект);
Оповестить("Передать настройки", Парам, ЭтаФорма);
Если Не Отказ Тогда
Закрыть();
КонецЕсли;
КонецПроцедуры //КомандаОК(Команда)
//**************************************************************************************************************
&НаСервере
Функция ПолучитьСтруктуруРеквизитов()
СтруктураРеквизитов = Новый Структура;
ОтчетОбъект = РеквизитФормыВЗначение("Объект");
МетаданныеОтчета = ОтчетОбъект.Метаданные();
Для каждого ТекущийРеквизит Из МетаданныеОтчета.Реквизиты Цикл
СтруктураРеквизитов.Вставить(ТекущийРеквизит.Имя, Неопределено);
КонецЦикла;
Возврат СтруктураРеквизитов;
КонецФункции //ПолучитьСтруктуруРеквизитов()
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
Форма.ОткрытьМодально()
возвращает значение, которое Вам нужно обработать. Вы вызываете функцию как процедуру. В приведенном коде "ЗаполнитьЗначенияСвойств(Объект,Форма)" вызывается сразу за открытием формы, не дожидаясь заполнения полей в ней. А вообще, уходите от модальности, воспользуйтесь описанием оповещения о закрытии формы настроек (в которой при закрытии возвращайте заполненные значения как структуру).
(4) ОткрытьМодально() - это синхронный вызов, то есть выполнение кода после этой строчки останавливается пока форма не будет закрыта, поэтому ЗаполнитьЗначенияСвойств(Объект,Форма) отработает корректно. В остальном согласен, лучше использовать оповещение о закрытии.
(1) Можно проще используя ВладелецФормы
В основной форме открываем форму настроек
В форме настроек обращаемся к реквизитам основной формы через ВладелецФормы
В основной форме открываем форму настроек
ОткрытьФорму("ВнешняяОбработка.Тест.Форма.ФормаНастроек",,ЭтаФорма);
В форме настроек обращаемся к реквизитам основной формы через ВладелецФормы
ВладелецФормы.Отчет.ВариантМакета = Параметры.ВариантМакета; //Из рабочего образца
ВладелецФормы.ДатаНач = Параметры.ДатаНач;
ВладелецФормы.ДатаКон = Параметры.ДатаКон;
ВладелецФормы.Объект.Задолженность.Очистить();
НоваяСтрока = ВладелецФормы.Объект.Задолженность.Добавить();
НоваяСтрока.ЛС = ВладелецФормы.Объект.ЛицевойСчёт;
НоваяСтрока.Помещение = ВладелецФормы.Объект.ЛицевойСчёт.Помещение;
(1)
Вот здесь вручную пропиши параметры
Вот здесь вручную пропиши параметры
&НаКлиенте
Функция ПолучитьСтруктуруОтчета()
СтруктураОтчета = Новый Структура;
СтруктураОтчета.Вставить("ДатаНач" ДатаНач);
СтруктураОтчета.Вставить("ДатаКон" ДатаКон);
СтруктураОтчета.Вставить("МинСумма" МинСумма);
СтруктураОтчета.Вставить("МаксСумма" МаксСумма );
СтруктураОтчета.Вставить("ЛицевойСчёт" ЛицевойСчёт);
СтруктураОтчета.Вставить("Представитель" Представитель);
///ЗаполнитьЗначенияСвойств(СтруктураОтчета,Объект);
Возврат СтруктураОтчета;
КонецФункции //ПолучитьСтруктуруОтчета()
Показать
(2)
Нет, все поля пустые :(
Я добавила ещё этот код в основную форму, а то до него ругался при открытии.
Нет, все поля пустые :(
Я добавила ещё этот код в основную форму, а то до него ругался при открытии.
Процедура УстановитьЗначенияРеквизитов(Параметры)
Если Параметры.Свойство("ДатаНач") Тогда
Объект.ДатаНач = Параметры.ДатаНач;
КонецЕсли; //Параметры.Свойство("ДатаНач") Тогда
(3) а если сначала заполнить форму а потом открыть ?
Процедура ОткрытьНастройки(Команда)
ПараметрыОткрытия = Новый Структура("СтруктураОтчета",ПолучитьСтруктуруОтчета());
Форма = ПолучитьФорму("ВнешняяОбработка.Тест.Форма.ФормаНастроек",ПараметрыОткрытия,ЭтаФорма);
ЗаполнитьЗначенияСвойств(Объект,Форма); ///ВОт так
Форма.ОткрытьМодально();
КонецПроцедуры // ОткрытьНастройки()
Показать
(7)
Пробую различные варианты, что-то не получается.
Я не могу понять, в какую форму необходимо вписать эту процедуру
Я на форме настроек хочу поменять ЛС и затем на основной форме очистить ТЧ и добавить строчку с нужным ЛС
Пробую различные варианты, что-то не получается.
Я не могу понять, в какую форму необходимо вписать эту процедуру
Я на форме настроек хочу поменять ЛС и затем на основной форме очистить ТЧ и добавить строчку с нужным ЛС
&НаСервере
Процедура ЛСПриИзмененииНаСервере()
Объект.Задолженность.Очистить();
НоваяСтрока = Объект.Задолженность.Добавить();
НоваяСтрока.ЛС = Объект.ЛицевойСчёт;
НоваяСтрока.Помещение = Объект.ЛицевойСчёт.Помещение;
КонецПроцедуры //ЛСПриИзмененииНаСервере()
Показать
Получилось :)
Благодарю Всех за помощь и за советы
Взяла другой отчёт и по шаблону сделала
На основной форме
на форме настроек
Благодарю Всех за помощь и за советы
Взяла другой отчёт и по шаблону сделала
На основной форме
&НаКлиенте
Процедура ОткрытьНастройки(Команда)
//https://www.about1c.ru/v83/language-reference/other/procedure-fill-property-values
//Источник = Новый Структура("Наименование,Код", "Стул деревянный", 1);
//Получатель = Новый Структура("Наименование,Код");
//ЗаполнитьЗначенияСвойств(Получатель, Источник);
Парам = ПолучитьСтруктуруРеквизитов();
ЗаполнитьЗначенияСвойств(Парам, Объект);
ФормаНастроек = ПолучитьФорму("ВнешняяОбработка.Тест.Форма.ФормаНастроек",Парам,ЭтаФорма);
ФормаНастроек.ОткрытьМодально();
КонецПроцедуры // ОткрытьНастройки()
//**************************************************************************************************************
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если ИмяСобытия = "Передать настройки" Тогда
ЗаполнитьЗначенияСвойств(Объект,Параметр);
КонецЕсли; //ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
КонецПроцедуры //ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
//**************************************************************************************************************
//
&НаСервере
Функция ПолучитьСтруктуруРеквизитов()
СтруктураРеквизитов = Новый Структура;
ОтчетОбъект = РеквизитФормыВЗначение("Объект");
МетаданныеОтчета = ОтчетОбъект.Метаданные();
Для каждого ТекущийРеквизит Из МетаданныеОтчета.Реквизиты Цикл
СтруктураРеквизитов.Вставить(ТекущийРеквизит.Имя, Неопределено);
КонецЦикла;//каждого ТекущийРеквизит Из МетаданныеОтчета.Реквизиты Цикл
Возврат СтруктураРеквизитов;
КонецФункции //ПолучитьСтруктуруРеквизитов()
//**************************************************************************************************************
Показатьна форме настроек
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ЗаполнитьЗначенияСвойств(Объект,Параметры);
КонецПроцедуры //ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
//**************************************************************************************************************
Процедура НастройкиОтчета(Настройки) Экспорт
// Пустой модуль что бы не ругалась система
НовыеНастройки = Настройки;
Настройки = НовыеНастройки;
КонецПроцедуры
//**************************************************************************************************************
&НаСервере
Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки)
ЭтаФорма.Параметры.Свойство("ДатаНач",Объект.ДатаНач);
ЭтаФорма.Параметры.Свойство("ДатаКон",Объект.ДатаКон);
ЭтаФорма.Параметры.Свойство("ЛицевойСчёт",Объект.ЛицевойСчёт);
ЭтаФорма.Параметры.Свойство("Представитель",Объект.Представитель);
ЭтаФорма.Параметры.Свойство("МинСумма",Объект.МинСумма);
ЭтаФорма.Параметры.Свойство("МаксСумма",Объект.МаксСумма);
КонецПроцедуры //ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки)
//**************************************************************************************************************
&НаКлиенте
Процедура ПринятьНастройки(Команда)
Отказ = Ложь;
Парам = ПолучитьСтруктуруРеквизитов();
ЗаполнитьЗначенияСвойств(Парам, Объект);
Оповестить("Передать настройки", Парам, ЭтаФорма);
Если Не Отказ Тогда
Закрыть();
КонецЕсли;
КонецПроцедуры //КомандаОК(Команда)
//**************************************************************************************************************
&НаСервере
Функция ПолучитьСтруктуруРеквизитов()
СтруктураРеквизитов = Новый Структура;
ОтчетОбъект = РеквизитФормыВЗначение("Объект");
МетаданныеОтчета = ОтчетОбъект.Метаданные();
Для каждого ТекущийРеквизит Из МетаданныеОтчета.Реквизиты Цикл
СтруктураРеквизитов.Вставить(ТекущийРеквизит.Имя, Неопределено);
КонецЦикла;
Возврат СтруктураРеквизитов;
КонецФункции //ПолучитьСтруктуруРеквизитов()
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот