ВызовПриИзмененииЭлементаФормы из обработки
Всем привет. Теоретический вопрос.
На форме в шапке если менять какой то реквизит то меняются зависимые реквизиты в зависимости от выбранного реквизита. Данные перенесены в эти формы из другой 1С и форма не корректная - надо входить в каждый объект и там перевыбирать реквизит и сохранять форму.
Вопрос
1. Если мы получаем форму и присеваем реквизит самому себе это сработает?
ФормаКонтрагента.Объект.НашРеквизит =ФормаКонтрагента.Объект.НашРеквизит;
2. После присвоения некого Нашего реквизита в ФормаКонтрагента.Объект.НашРеквизит должно сработать событие при изменении или его надо вызывать руками после присвоения?
На форме в шапке если менять какой то реквизит то меняются зависимые реквизиты в зависимости от выбранного реквизита. Данные перенесены в эти формы из другой 1С и форма не корректная - надо входить в каждый объект и там перевыбирать реквизит и сохранять форму.
Вопрос
1. Если мы получаем форму и присеваем реквизит самому себе это сработает?
ФормаКонтрагента.Объект.НашРеквизит =ФормаКонтрагента.Объект.НашРеквизит;
2. После присвоения некого Нашего реквизита в ФормаКонтрагента.Объект.НашРеквизит должно сработать событие при изменении или его надо вызывать руками после присвоения?
Найденные решения
Вопрос решен, рабочая обработка изменения полей таблицы формы с вызовом ПриИзменении.
Ошибка была в том, что надо было активизировать страницу "Товаров" (Страница товары 2-я на форме и поэтому не менялась первая позиция в таблице т.к. когда пыталась активизироваться первая строка с таблице Товаров формы она не активизировалась, а активизировалась страница и поэтому строка не попадала для изменения, начиная со следующего получения позиции строки таблицы формы страница уже активизируется и строки в ней меняются по заданному алгоритму. (это мое предположение почему не срабатывало на первой строке)
Работает на УТ 11, Изменяет в документах (Первый документ) Реализация Товаров работ и услуг Ставку НДС на НулевуюНДС.
Ошибка была в том, что надо было активизировать страницу "Товаров" (Страница товары 2-я на форме и поэтому не менялась первая позиция в таблице т.к. когда пыталась активизироваться первая строка с таблице Товаров формы она не активизировалась, а активизировалась страница и поэтому строка не попадала для изменения, начиная со следующего получения позиции строки таблицы формы страница уже активизируется и строки в ней меняются по заданному алгоритму. (это мое предположение почему не срабатывало на первой строке)
Работает на УТ 11, Изменяет в документах (Первый документ) Реализация Товаров работ и услуг Ставку НДС на НулевуюНДС.
Прикрепленные файлы:
ИзменениеЭлементаФормыПрограмсно.epf
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(3)Не может быть все так сложно. В статье и коментах говориться, что надо форму открыть и потом вызвать
<Форма где меняем значение>.ОповеститьОВыборе(Значение)
ОповеститьОВыборе это метод формы который-посылает оповещение владельцу формы о выполнении выбора или подбора, передает ему выбранное значение.
Не проще добавить в расширение функцию ПриИзменение Экспорт, вызвать ее из обработки и потом в след за ней форма подтянет все требуемы действия. Но есть одно огромное НО - когда попадем в процедуры формы то они обращаються к текущей строке (если изменяем табличное поле) а текущей строки то нет - форма получена но не открыта.
<Форма где меняем значение>.ОповеститьОВыборе(Значение)
ОповеститьОВыборе это метод формы который-посылает оповещение владельцу формы о выполнении выбора или подбора, передает ему выбранное значение.
Не проще добавить в расширение функцию ПриИзменение Экспорт, вызвать ее из обработки и потом в след за ней форма подтянет все требуемы действия. Но есть одно огромное НО - когда попадем в процедуры формы то они обращаються к текущей строке (если изменяем табличное поле) а текущей строки то нет - форма получена но не открыта.
(6)Так если записывать его через объект, то все процедуры и функции надо адаптировать из модуля формы к модулю объекта. К примеру надо групповое изменение НДС в позиции таблицы товаров. Там по событию изменения НДС друг за другом вызывается много процедур и функций - и все тащить и адаптировать для объекта это мазахизм.
Когда то нужно было в БП3 в документе ПоступлениеНаРасчетныйСчет изменить реквизитов ВидОперации,Контрагент с отработкой события ПриИзменении. Через расширение добавил в модуль формы элемента этого документа экспортную процедуру
и далее ее вызвал из внешней обработки
&НаКлиенте
Процедура ВыполнитьДействия(ИмяДействия) ЭКСПОРТ
Выполнить(ИмяДействия);
КонецПроцедуры
и далее ее вызвал из внешней обработки
&НаКлиенте
Процедура ПроверитьВидОперации(ДокументСсылка)
Если ВидОперации=ПолучитьЗначениеРеквизита(ДокументСсылка,"ВидОперации") Тогда
Возврат;
КонецЕсли;
ПараметрыФормы=Новый Структура("Ключ",ДокументСсылка);
Форма=ОткрытьФорму("Документ.ПоступлениеНаРасчетныйСчет.Форма.ФормаДокумента",ПараметрыФормы,ЭтаФорма);
Форма.Объект.ВидОперации=ВидОперации;
Форма.ВыполнитьДействия("ВидОперацииПриИзменении("""")");
Форма.Объект.Контрагент=Контрагент;
Форма.ВыполнитьДействия("КонтрагентПриИзменении("""")");
ПараметрыЗаписи = Новый Структура;
ПараметрыЗаписи.Вставить("РежимЗаписи", РежимЗаписиДокумента.Проведение);
Форма.Записать(ПараметрыЗаписи);
Форма.Закрыть()
КонецПроцедуры
Показать
(8)Я так же делаю, но научный интерес заключается в том что бы изменить табличную часть. Основная проблема в том что бы обращаться к строкам таблицы формы и по каждой вызывать событие при изменении.
Сейчас напили такой код исходя из топика что тут мелькал выше. Получилось такое: но есть нюанс - код меняет все строки в документе кроме первого - хотя идентификатор строки стоит самой первой 0 и почему срабатывает только с 1 не ясно.
Сейчас напили такой код исходя из топика что тут мелькал выше. Получилось такое: но есть нюанс - код меняет все строки в документе кроме первого - хотя идентификатор строки стоит самой первой 0 и почему срабатывает только с 1 не ясно.
&НаКлиенте
Процедура ПерезаписатьКА(Команда)
СписокСсылокКонтрагента = ПерезаписатьКАНаСервере();
Для Каждого ТекКонтрагент из СписокСсылокКонтрагента Цикл
КлючьФОрмы= новый Структура;
КлючьФОрмы.Вставить("Ключ",ТекКонтрагент.Значение);
ФормаКонтрагента = ОткрытьФорму("Документ.РеализацияТоваровУслуг.Форма.ФормаДокумента",КлючьФОрмы);
ФормаКонтрагента.Активизировать();
ПолучитьСтавкуНДС1 = ПолучитьСтавкуНДС();
Для Каждого ТекСтрокаТовры из ФормаКонтрагента.ЭтотОбъект.Объект.Товары цикл
ИдентификаторСтроки =ТекСтрокаТовры.ПолучитьИдентификатор();
ФормаКонтрагента.Элементы.Товары.ТекущаяСтрока = ИдентификаторСтроки;
ФормаКонтрагента.Элементы.Товары.ТекущийЭлемент =ФормаКонтрагента.Элементы.Товары.ПодчиненныеЭлементы.ТоварыСтавкаНДС;
ФормаКонтрагента.Элементы.Товары.ИзменитьСтроку();
ИнтерактивноЗаписатьВЭлементУправленияЛкс(ФормаКонтрагента.Элементы.Товары.ТекущийЭлемент, ПолучитьСтавкуНДС1, ЭтаФорма);
ФормаКонтрагента.Элементы.Товары.ЗакончитьРедактированиеСтроки(Ложь);
//ЭтаФорма.ВладелецФормы =ФормаКонтрагента.Элементы.Товары.ТекущийЭлемент ;
//ЭтаФорма.ВладелецФормы =ФормаКонтрагента.Элементы.ТоварыСтавкаНДС;
//ФормаКонтрагента.Элементы.Товары.ПодчиненныеЭлементы.ТоварыСтавкаНДС
////ЭтаФорма.ОповеститьОВыборе(ПолучитьСтавкуНДС1);
//ЭтаФорма.ОповеститьОВыборе(12345);
// ЭтаФорма.ЗакрыватьПриВыборе = Истина;
//ФормаКонтрагента.Расш1_ТоварыСтавкаНДСПриИзмененииПеред(ТекСтрокаТовры.СтавкаНДС);
КонецЦикла;
ПараметрыЗаписи = Новый Структура;
ПараметрыЗаписи.Вставить("РежимЗаписи", РежимЗаписиДокумента.Запись);
ФормаКонтрагента.Записать(ПараметрыЗаписи);
Сообщить(ТекКонтрагент);
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Функция ИнтерактивноЗаписатьВЭлементУправленияЛкс(ЭлементУправления, Знач Значение, Знач ФормаИнициатор = Неопределено) Экспорт
СтарыйВладелец = ФормаИнициатор.ВладелецФормы;
СтарыйЗакрыватьПриВыборе = ФормаИнициатор.ЗакрыватьПриВыборе;
ФормаИнициатор.ВладелецФормы = ЭлементУправления;
ФормаИнициатор.ЗакрыватьПриВыборе = Ложь;
НовоеЗначение = ЭлементУправления.ОграничениеТипа.ПривестиЗначение(Значение);
Если НовоеЗначение <> Значение Или ЭлементУправления.ТолькоПросмотр Тогда
Возврат Ложь;
КонецЕсли;
ФормаИнициатор.ОповеститьОВыборе(Значение);
Если СтарыйЗакрыватьПриВыборе <> Неопределено Тогда
ФормаИнициатор.ВладелецФормы = СтарыйВладелец;
ФормаИнициатор.ЗакрыватьПриВыборе = СтарыйЗакрыватьПриВыборе;
КонецЕсли;
КонецФункции
&НаСервереБезКонтекста
Функция ПерезаписатьКАНаСервере()
Выборка = Справочники.Контрагенты.Выбрать();
//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| РеализацияТоваровУслуг.Ссылка КАК Ссылка
|ИЗ
| Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг"
;
РезультатЗапроса = Запрос.Выполнить().Выгрузить();
СписокЗначейКонтрагентов = новый СписокЗначений;
СписокЗначейКонтрагентов.ЗагрузитьЗначения(РезультатЗапроса.ВыгрузитьКолонку("Ссылка"));
//ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
//
//Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
// // Вставить обработку выборки ВыборкаДетальныеЗаписи
//КонецЦикла;
//
////}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
Возврат СписокЗначейКонтрагентов
КонецФункции
Показать
(10)Я получаю позицию строк из табличной части формы- они начинаются с 0. Потом фокусируясь на поле табличной части и элементе который хочу изменить. Т.е если три строки в табличной части то будет 0.1.2. Сфокусированный элемент устанавливается как владелец формы и вызывается метод (якобы этот элемент открыли руками и изменили элемент) тем самым вызывается вся цепочка процедур при изменении. Вопрос почему не срабатывает на элементе 0 и работает нам 1.2 элементе.
Реально нет ни у кого мыслей почему так криво работает на нулевой строке а все остальные отрабатывает?
Начал думать что это из за того что фора не успела открыть - поставил что бы сначала изменился склад а потом уже таблица товаров, но это не помогло.
Выкладываю обработку для Управление торговлей, редакция 11 (11.4.13.227) под 1С:Предприятие 8.3 (8.3.22.2411)
Начал думать что это из за того что фора не успела открыть - поставил что бы сначала изменился склад а потом уже таблица товаров, но это не помогло.
Выкладываю обработку для Управление торговлей, редакция 11 (11.4.13.227) под 1С:Предприятие 8.3 (8.3.22.2411)
Прикрепленные файлы:
ИзменениеЭлементаФормыПрограмсно.epf
Коллеги, то ли я не так понимаю то ли вы меня путаете. Но у нас есть ТаблицаФормы (Таблица что видит пользователь на форме в документе )и есть ДанныеФормыКоллекция (это данные что у нас в объекте записаны в базе), эти две "структуры" могут не соответствовать в разрезе порядка следования и поэтому мы получаем идентификатор из ДанныеФормыКоллекция перебирая все данные коллекции - что гарантирует что все данные ТаблицаФормы мы то же переберем (Если в ДанныеФормыКоллекция 4 строки и мы их перебрали то значит не важно в какой последовательности у нас идут значения в Таблице формы они все то же будут перебраны) поэтому получаем Номер строки из ДанныеФормыКоллекция и подставляем его в текущую строку ТаблицаФаормы. см скрин ниже с ИТС
PS - нам надо установить курсор на строчку таблицы на форме это делается так: <ТаблицаФормы>.ТекущаяСтрока ,но устанавливается он на все строчки кроме самой первой (нулевой на форме), Как перебрать строки на ТаблицеФормы я так и не нашел без перебора связанной с ней КоллекцииДанных в объекте.
PS - нам надо установить курсор на строчку таблицы на форме это делается так: <ТаблицаФормы>.ТекущаяСтрока ,но устанавливается он на все строчки кроме самой первой (нулевой на форме), Как перебрать строки на ТаблицеФормы я так и не нашел без перебора связанной с ней КоллекцииДанных в объекте.
Прикрепленные файлы:

Вопрос решен, рабочая обработка изменения полей таблицы формы с вызовом ПриИзменении.
Ошибка была в том, что надо было активизировать страницу "Товаров" (Страница товары 2-я на форме и поэтому не менялась первая позиция в таблице т.к. когда пыталась активизироваться первая строка с таблице Товаров формы она не активизировалась, а активизировалась страница и поэтому строка не попадала для изменения, начиная со следующего получения позиции строки таблицы формы страница уже активизируется и строки в ней меняются по заданному алгоритму. (это мое предположение почему не срабатывало на первой строке)
Работает на УТ 11, Изменяет в документах (Первый документ) Реализация Товаров работ и услуг Ставку НДС на НулевуюНДС.
Ошибка была в том, что надо было активизировать страницу "Товаров" (Страница товары 2-я на форме и поэтому не менялась первая позиция в таблице т.к. когда пыталась активизироваться первая строка с таблице Товаров формы она не активизировалась, а активизировалась страница и поэтому строка не попадала для изменения, начиная со следующего получения позиции строки таблицы формы страница уже активизируется и строки в ней меняются по заданному алгоритму. (это мое предположение почему не срабатывало на первой строке)
Работает на УТ 11, Изменяет в документах (Первый документ) Реализация Товаров работ и услуг Ставку НДС на НулевуюНДС.
Прикрепленные файлы:
ИзменениеЭлементаФормыПрограмсно.epf
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот