Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
11 апр 2025, 11:23

Изменение шага регулирования внешней функцией

Автор nordri, 17 фев 2022, 13:31

0 Пользователей и 1 гость просматривают эту тему.

nordri

Здравствуйте! Вопрос от новичка:

При Регулирование(Элемент, Направление, СтандартнаяОбработка) не могу изменить шаг Направление
2022-02-17 13-18-08 Конфигуратор (учебная версия) - Пустая.jpg

Основная моя проблема, полагаю, в понимании составного Типа данных:
Элементы[Элемент.Имя]Помогите пожалуйта, я только учусь.
&НаКлиенте Перем МойЭл; //Нужный реквизит (Формы?) ИЛИ (ЭлементаФормы???) , //Для использовнания между процедурами &НаКлиенте Процедура ПриОткрытии(Отказ) Элементы.РеквизитРегулируемый.КнопкаРегулирования=Истина; Элементы.ИтогНадпись.Вид=ВидПоляФормы.ПолеНадписи; Реквизит=100; МойЭл=Элементы.Итог; МойЭл.Ширина =5 ; КонецПроцедуры &НаКлиенте Процедура РеквизитРегулируемыйРегулирование(Элемент, Направление, СтандартнаяОбработка) СтандартнаяОбработка=Ложь; Шаг=10; //Работающий вариант, который не устраивает //Реквизит=Число(Элемент.ВыделенныйТекст)+Направление*Число(Шаг) ; //Так хотелось бы, но не работает //Элементы[Элемент.Имя]=Число(Элемент.ВыделенныйТекст)+Направление*Число(Шаг) ; #Область НеРаботает //Элементы[Элемент.Имя]=Число(Элемент.ВыделенныйТекст)+Направление*Число(Шаг) ; //Элемент=Число(Элемент)+Направление*Число(Шаг) ; //Элемент.Значение=Число(Элемент.Значение)+Направление*Число(Шаг) //Элемент.ВыделенныйТекст //В отладке это строка //Элемент //В отладке поле формы //При нажатии на кнопку регулирование результата нет #КонецОбласти //НеРаботает //А так нужно, но не выходит: обработка регулирования через Возврт функциии... Элементы[Элемент.Имя]=ПриРегулировании(Элемент,Направление,); //Реквизит=ПриРегулировании(Элемент,Направление,);  //Работает. //В объявленный ранее реквизит формы, передать значение из другого реквизита МойЭл=Реквизит; КонецПроцедуры &НаКлиенте Функция ПриРегулировании(ЭлементПолученный,НаправлениеПолученный,ШагПолученный)   //НеопределеннаяПеременная ШагПолученный; Если Не ТипЗнч(ШагПолученный) <> Тип("Неопределено")  Тогда ШагПоУмолчанию=10; Шаг=Число(ШагПоУмолчанию); КонецЕсли; ЗначРегулир=Число(ЭлементПолученный.ВыделенныйТекст)+ Число(НаправлениеПолученный)*Число(Шаг); //Число(Число( ) ) = Не комильфо :,(( Возврат Число(ЗначРегулир); КонецФункции  //ПриРегулировании &НаКлиенте Процедура РеквизитПриИзменении(Элемент)Внешняя обработка,управляемые формы, 1С:Предприятие 8.3, учебная версия (8.3.19.1150)

nordri

Нашел еще ошибку у себя:
&НаКлиенте Функция ПриРегулировании(ЭлементПолученный,НаправлениеПолученный,ШагПолученный)   //НеопределеннаяПеременная ШагПолученный; Если Не ТипЗнч(ШагПолученный) <> Тип("Неопределено")  Тогда         ШагПоУмолчанию=10; Шаг=Число(ШагПоУмолчанию);        КонецЕсли;     ЗначРегулир=Число(ЭлементПолученный.ВыделенныйТекст)+     Число(НаправлениеПолученный)*Число(Шаг);     //Число(Число( ) ) = Не комильфо :,((     Возврат Число(ЗначРегулир); КонецФункции  //ПриРегулировании
Верно:
&НаКлиенте Функция ПриРегулировании(ЭлементПолученный,НаправлениеПолученный,ШагПолученный)   //НеопределеннаяПеременная ШагПолученный; Если Не ТипЗнч(ШагПолученный) <> Тип("Неопределено")  Тогда ШагПоУмолчанию=10; Шаг=Число(ШагПоУмолчанию); Иначе Шаг=Число(ШагПолученный); КонецЕсли; ЗначРегулир=Число(ЭлементПолученный.ВыделенныйТекст)+ Число(НаправлениеПолученный)*Число(Шаг); //Число(Число( ) ) = Не комильфо :,(( Возврат Число(ЗначРегулир); КонецФункции  //ПриРегулировании

LexaK

nordri, что-то накрутили, ни чего не понятно,
вот одну строчку исправил, ошибки не стало, регулирование идет.
если помогло нажмите: Спасибо!

LexaK

nordri, вот еще вариант,
Шаг вынесен на форму, и его можно менять в процессе работы.
если помогло нажмите: Спасибо!

nordri

LexaK, Прошу простить, новичка за сумбур, и много букв в коде...
Да, ваш вариант, стандартный и понятный.
Реквизит = Реквизит + Направление * Шаг;И с шагом из реквизита формы тоже не подходит.
Мне необходимо получить "Реквизит" (ПолеФормы?) из Регулирование(Элемент, Направление, СтандартнаяОбработка) Да к тому же именно функцией...
Что то, похожее на это:
Элемент.Значение=ПриРегулировании(Элемент.Значение, Направление, ШагНов);Убрал не относящееся к моей проблеме:

&НаКлиенте Процедура РеквизитРегулируемыйРегулирование(Элемент, Направление, СтандартнаяОбработка) СтандартнаяОбработка=Ложь; //Реквизит=ПриРегулировании(Элемент,Направление,ШагНов);  //Работает. но нужно иначе //Элемент.СвязьПоТипу.ПутьКДанным=ПриРегулировании(Элемент,Направление,ШагНов);  //Не работает //Элементы[Элемент.Имя]=ПриРегулировании(Элемент,Направление,ШагНов); //Не работает Элемент.Значение=ПриРегулировании(Элемент.Значение, Направление, ШагНов); //Не работает КонецПроцедуры &НаКлиенте Функция ПриРегулировании(ЭлементПолученный,НаправлениеПолученный,ШагПолученный) ШагПоУмолчанию=100; Если Не ТипЗнч(ШагПолученный) <> Тип("Неопределено")  Тогда Шаг=Число(ШагПоУмолчанию); Иначе Шаг=Число(ШагПолученный); КонецЕсли; Регулирование=Число(ЭлементПолученный.ВыделенныйТекст)+ Число(НаправлениеПолученный)*Число(Шаг); Возврат Число(Регулирование); КонецФункции  //ПриРегулировании &НаКлиенте Процедура ПриОткрытии(Отказ) Элементы.РеквизитРегулируемый.КнопкаРегулирования=Истина; Элементы.Реквизит.Вид=ВидПоляФормы.ПолеНадписи; Элементы.Реквизит.Ширина=5; Элементы.РеквизитРегулируемый.Ширина=6; Элементы.ШагНов.Ширина=2; Реквизит=100; ШагНов=1; КонецПроцедуры
2022-02-17 15-40-01 Конфигуратор (учебная версия) - Пустая.jpg
К тому же тип реквизитов строка.
Мне это важно для понимания...

nordri

Почти решил свою проблему. Теперь осталось понять, как присвоить значение поля формы: РеквизитРегулируемый
[Строка(ЭлементПолученный.Имя)] В отладчике имеет значение "РеквизитРегулируемый".

А у меня на форме Один объект формы и... Два элемента формы,подчиненные этому объекту?
Вот это не могу понять...
2022-02-17 20-26-17 Конфигуратор (учебная версия) - Пустая.jpg
Я очень близок к пониманию...
&НаКлиенте Процедура РеквизитРегулируемыйРегулирование(Элемент, Направление, СтандартнаяОбработка) СтандартнаяОбработка=Ложь; ПриРегулировании(Элемент, Направление, ШагНов); КонецПроцедуры &НаКлиенте Процедура  ПриРегулировании(ЭлементПолученный,НаправлениеПолученный,ШагПолученный) ШагПоУмолчанию=100; Если Не ТипЗнч(ШагПолученный) <> Тип("Неопределено")  Или Не ЗначениеЗаполнено(ШагПолученный) Тогда Шаг=Число(ШагПоУмолчанию); Иначе Шаг=Число(ШагПолученный); КонецЕсли; Регулирование=Число(ЭлементПолученный.ВыделенныйТекст)+ Число(НаправлениеПолученный)*Число(Шаг); ЭтотОбъект[Строка(ЭлементПолученный.Имя)]  =Регулирование; КонецПроцедуры  //ПриРегулировании &НаКлиенте Процедура ПриОткрытии(Отказ) Элементы.РеквизитРегулируемый.КнопкаРегулирования=Истина; Элементы.Реквизит.Вид=ВидПоляФормы.ПолеНадписи; Элементы.Реквизит.Ширина=5; Элементы.РеквизитРегулируемый.Ширина=6; Элементы.ШагНов.Ширина=2; Реквизит=100; ШагНов=1; КонецПроцедуры
Если бы не различие в именах Объекта формы и Элемента Формы,  то работает...

nordri

Все, готово, получилось.  :ooifh:
Но с одним условием: Имя Объекта Формы должно быть равно Имени Элемента Формы.

&НаКлиенте Процедура РеквизитРегулируемыйРегулирование(Элемент, Направление, СтандартнаяОбработка) СтандартнаяОбработка=Ложь; ПриРегулировании(Элемент, Направление, ); КонецПроцедуры &НаКлиенте Процедура  ПриРегулировании(ЭлементПолученный,НаправлениеПолученный,ШагПолученный) ШагПоУмолчанию=100; Если ТипЗнч(ШагПолученный) <> Тип("Неопределено")  И ЗначениеЗаполнено(ШагПолученный) Тогда Шаг=Число(ШагПолученный); Иначе Шаг=Число(ШагПоУмолчанию); КонецЕсли; Регулирование=Число(ЭлементПолученный.ВыделенныйТекст)+ Число(НаправлениеПолученный)*Число(Шаг); ЭтотОбъект[Строка(ЭлементПолученный.Имя)]  = Регулирование; КонецПроцедуры  //ПриРегулировании &НаКлиенте Процедура ПриОткрытии(Отказ) Элементы.РеквизитРегулируемый.КнопкаРегулирования=Истина; Элементы.РеквизитРегулируемый.Ширина=6; Элементы.ШагНов.Ширина=2; РеквизитРегулируемый=100; КонецПроцедуры

nordri

На клиенте нельзя обратиться к реквизиту формы:
ЭтотОбъект[Строка(ЭлементПолученный.Имя)]это имя элемента на форме

И выход из этого: вызов процедуры на Сервере.
Что бы обратиться к реквизиту формы, получив ПутьКДанным уже в реквизит формы:
&НаСервере // // ЭтотОбъект[Строка(ЭлементПолученный.ПутьКДанным)]Но тут новая ошибка...
Отсутствует отображение для типа 'ПолеФормы'Здесь работает ЭлементыФормы.epf, но без передачи элементов? (не знаю пока,как сформулировать иначе...) между Клиентом и сервером:
Полагаю, что причина на клиенте: ПриРегулированииНаСервере(Элемент, Направление, ШагНов);&НаКлиенте Процедура НайтиЭлемены(Команда) ОчиститьСообщения(); НайтиЭлементыНаСервере(); КонецПроцедуры &НаСервере Процедура НайтиЭлементыНаСервере() МассивЭелементовФормы = Новый Массив; СтрокаНайденыхПолей=""; Для Каждого Рек из ЭтаФорма.Элементы Цикл Если ТипЗнч(Рек) = Тип("ПолеФормы") Тогда НайденыйЭлемент=Строка(рек)+" - "+рек.имя+", путь к данным = "+рек.ПутьКДанным; Сообщить(НайденыйЭлемент); МассивЭелементовФормы.Добавить(рек.имя); СтрокаНайденыхПолей=СтрокаНайденыхПолей+ рек.имя+Символы.ПС; КонецЕсли; КонецЦикла;  ПреремМассив=МассивЭелементовФормы; //Не используется, для других целей РезультатПоискаПолей=СтрокаНайденыхПолей; КонецПроцедуры  //НайтиЭлементыНаСервере

nordri

Цитата: nordri от 18 фев 2022, 12:45Полагаю, что причина на клиенте:
Код Выделить Развернуть
    ПриРегулированииНаСервере(Элемент, Направление, ШагНов);
&НаКлиенте Процедура РеквизитРегулируемыйРегулирование(Элемент, Направление, СтандартнаяОбработка) СтандартнаяОбработка=Ложь; ПриРегулированииНаСервере(Элемент, Направление, ШагНов); КонецПроцедуры &НаСервере Процедура  ПриРегулированииНаСервере(ЭлементПолученный,НаправлениеПолученный,ШагПолученный) ШагПоУмолчанию=100; Если Не ТипЗнч(ШагПолученный) <> Тип("Неопределено")  Тогда Шаг=Число(ШагПоУмолчанию); Иначе Шаг=Число(ШагПолученный); КонецЕсли; Регулирование=Число(Объект[Строка(ЭлементПолученный.ПутьКДанным)] )+ Число(НаправлениеПолученный)*Число(Шаг); Объект[Строка(ЭлементПолученный.ПутьКДанным)]  =Регулирование; ; // КонецПроцедуры  //ПриРегулировании
Теперь мой вопрос:
Как правильно передавать "Элемент" с клиента на сервер? :(
   &НаКлиенте Процедура РеквизитРегулируемыйРегулирование(Элемент, Направление, СтандартнаяОбработка) СтандартнаяОбработка=Ложь; ПриРегулированииНаСервере(Элемент, Направление, ); КонецПроцедуры &НаСервере Процедура  ПриРегулированииНаСервере(ЭлементПолученный,НаправлениеПолученный,ШагПолученный) // //
Простите за такую простыню... :trhregerhg:

nordri

Цитата: nordri от 18 фев 2022, 13:22Теперь мой вопрос:
Как правильно передавать "Элемент" с клиента на сервер?

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

Похожие темы (5)

Рейтинг@Mail.ru

Поиск