Всем привет. Теоретический вопрос.
На форме в шапке если менять какой то реквизит то меняются зависимые реквизиты в зависимости от выбранного реквизита. Данные перенесены в эти формы из другой 1С и форма не корректная - надо входить в каждый объект и там перевыбирать реквизит и сохранять форму.
Вопрос
1. Если мы получаем форму и присеваем реквизит самому себе это сработает?
ФормаКонтрагента.Объект.НашРеквизит =ФормаКонтрагента.Объект.НашРеквизит;
2. После присвоения некого Нашего реквизита в ФормаКонтрагента.Объект.НашРеквизит должно сработать событие при изменении или его надо вызывать руками после присвоения?
---
Вопрос решен, рабочая обработка изменения полей таблицы формы с вызовом ПриИзменении.
Ошибка была в том, что надо было активизировать страницу "Товаров" (Страница товары 2-я на форме и поэтому не менялась первая позиция в таблице т.к. когда пыталась активизироваться первая строка с таблице Товаров формы она не активизировалась, а активизировалась страница и поэтому строка не попадала для изменения, начиная со следующего получения позиции строки таблицы формы страница уже активизируется и строки в ней меняются по заданному алгоритму. (это мое предположение почему не срабатывало на первой строке)
Работает на УТ 11, Изменяет в документах (Первый документ) Реализация Товаров работ и услуг Ставку НДС на НулевуюНДС.
---
Здарова! Подпишусь под вопросом, мне самому очень лень пробовать!
---
Обрубил последнюю надежду человеку! А он так на тебя надеялся...
---
https://infostart.ru/1c/articles/16985/
---
Не может быть все так сложно. В статье и коментах говориться, что надо форму открыть и потом вызвать
<Форма где меняем значение>.ОповеститьОВыборе(Значение)
ОповеститьОВыборе это метод формы который-посылает оповещение владельцу формы о выполнении выбора или подбора, передает ему выбранное значение.
Не проще добавить в расширение функцию ПриИзменение Экспорт, вызвать ее из обработки и потом в след за ней форма подтянет все требуемы действия. Но есть одно огромное НО - когда попадем в процедуры формы то они обращаються к текущей строке (если изменяем табличное поле) а текущей строки то нет - форма получена но не открыта.
---
Не может быть все так сложноТы совершенно прав. Если записывать данные в объекты информационной базы, а не в формы, всё значительно упрощается.
---
Так если записывать его через объект, то все процедуры и функции надо адаптировать из модуля формы к модулю объекта. К примеру надо групповое изменение НДС в позиции таблицы товаров. Там по событию изменения НДС друг за другом вызывается много процедур и функций - и все тащить и адаптировать для объекта это мазахизм.
---
Когда то нужно было в БП3 в документе ПоступлениеНаРасчетныйСчет изменить реквизитов ВидОперации,Контрагент с отработкой события ПриИзменении. Через расширение добавил в модуль формы элемента этого документа экспортную процедуру

```1c
    &НаКлиенте
    Процедура ВыполнитьДействия(ИмяДействия) ЭКСПОРТ
    Выполнить(ИмяДействия);
    КонецПроцедуры
```

и далее ее вызвал из внешней обработки

```1c
    &НаКлиенте
    Процедура ПроверитьВидОперации(ДокументСсылка)
    Если ВидОперации=ПолучитьЗначениеРеквизита(ДокументСсылка,"ВидОперации") Тогда
    Возврат;
    КонецЕсли;
    ПараметрыФормы=Новый Структура("Ключ",ДокументСсылка);
    Форма=ОткрытьФорму("Документ.ПоступлениеНаРасчетныйСчет.Форма.ФормаДокумента",ПараметрыФормы,ЭтаФорма);
    Форма.Объект.ВидОперации=ВидОперации;
    Форма.ВыполнитьДействия("ВидОперацииПриИзменении("")");
    Форма.Объект.Контрагент=Контрагент;
    Форма.ВыполнитьДействия("КонтрагентПриИзменении("")");
    ПараметрыЗаписи = Новый Структура;
    ПараметрыЗаписи.Вставить("РежимЗаписи", РежимЗаписиДокумента.Проведение);
    Форма.Записать(ПараметрыЗаписи);
    Форма.Закрыть()
    КонецПроцедуры
```
---
Я так же делаю, но научный интерес заключается в том что бы изменить табличную часть. Основная проблема в том что бы обращаться к строкам таблицы формы и по каждой вызывать событие при изменении.
Сейчас напили такой код исходя из топика что тут мелькал выше. Получилось такое: но есть нюанс - код меняет все строки в документе кроме первого - хотя идентификатор строки стоит самой первой 0 и почему срабатывает только с 1 не ясно.

```1c
    &НаКлиенте
    Процедура ПерезаписатьКА(Команда)
    СписокСсылокКонтрагента = ПерезаписатьКАНаСервере();
    Для Каждого ТекКонтрагент из СписокСсылокКонтрагента Цикл
    КлючьФОрмы= новый Структура;
    КлючьФОрмы.Вставить("Ключ",ТекКонтрагент.Значение);
    ФормаКонтрагента = ОткрытьФорму("Документ.РеализацияТоваровУслуг.Форма.ФормаДокумента",КлючьФОрмы);
    ФормаКонтрагента.Активизировать();
    ПолучитьСтавкуНДС1 = ПолучитьСтавкуНДС();

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

    ПараметрыЗаписи = Новый Структура;
    ПараметрыЗаписи.Вставить("РежимЗаписи", РежимЗаписиДокумента.Запись);

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

    КонецФункции

    &НаСервереБезКонтекста
    Функция ПерезаписатьКАНаСервере()
    Выборка = Справочники.Контрагенты.Выбрать();

    //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ ПЕРВЫЕ 1
    | РеализацияТоваровУслуг.Ссылка КАК Ссылка
    |ИЗ
    | Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг"
    ;
    РезультатЗапроса = Запрос.Выполнить().Выгрузить();
    СписокЗначейКонтрагентов = новый СписокЗначений;
    СписокЗначейКонтрагентов.ЗагрузитьЗначения(РезультатЗапроса.ВыгрузитьКолонку("Ссылка"));
    //ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    //
    //Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    // // Вставить обработку выборки ВыборкаДетальныеЗаписи
    //КонецЦикла;
    //
    ////}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА

    Возврат СписокЗначейКонтрагентов

    КонецФункции
```
---
Строки таблицы формы никакого прямого отношения к табличной части объекта не имеют. Это просто платформенная прокладка для удобства клиент-серверного взаимодействия, не более.
---
Я получаю позицию строк из табличной части формы- они начинаются с 0. Потом фокусируясь на поле табличной части и элементе который хочу изменить. Т.е если три строки в табличной части то будет 0.1.2. Сфокусированный элемент устанавливается как владелец формы и вызывается метод (якобы этот элемент открыли руками и изменили элемент) тем самым вызывается вся цепочка процедур при изменении. Вопрос почему не срабатывает на элементе 0 и работает нам 1.2 элементе.
---
Реально нет ни у кого мыслей почему так криво работает на нулевой строке а все остальные отрабатывает?
Начал думать что это из за того что фора не успела открыть - поставил что бы сначала изменился склад а потом уже таблица товаров, но это не помогло.
Выкладываю обработку для Управление торговлей, редакция 11 (11.4.13.227) под 1С:Предприятие 8.3 (8.3.22.2411)
---
Ты работаешь с идентификаторами строки, а не с их позициями. А это очень большая разница.
---
в чем скрытый смысл если позиция в таблице на форме должна совпадать с идентификатором. Да же предположим что они не совпадают по порядку - их количество не должно различаться и если принудительно да же их задать все равно не меняется нулевая строка.
---
позиция в таблице на форме должна совпадать с идентификаторомА ты подвигай-ка строчки туда-сюда. Очисти, заполни заново, добавь, удали... Потом посмотри на идентификаторы и только после этого говори, что позиция кому-то что-то "должна".
---
Это же сложно...
---
Реально
Господа! Я оперирую гланды через анальный сфинктер стоя в гамаке в ластах. Ни у кого мыслей почему так криво?
---
Моя ж ты радость... Может скальпель не тот? Попробуй ланцет!
---
Коллеги, то ли я не так понимаю то ли вы меня путаете. Но у нас есть ТаблицаФормы (Таблица что видит пользователь на форме в документе )и есть ДанныеФормыКоллекция (это данные что у нас в объекте записаны в базе), эти две "структуры" могут не соответствовать в разрезе порядка следования и поэтому мы получаем идентификатор из ДанныеФормыКоллекция перебирая все данные коллекции - что гарантирует что все данные ТаблицаФормы мы то же переберем (Если в ДанныеФормыКоллекция 4 строки и мы их перебрали то значит не важно в какой последовательности у нас идут значения в Таблице формы они все то же будут перебраны) поэтому получаем Номер строки из ДанныеФормыКоллекция и подставляем его в текущую строку ТаблицаФаормы. см скрин ниже с ИТС
PS - нам надо установить курсор на строчку таблицы на форме это делается так: <ТаблицаФормы>.ТекущаяСтрока ,но устанавливается он на все строчки кроме самой первой (нулевой на форме), Как перебрать строки на ТаблицеФормы я так и не нашел без перебора связанной с ней КоллекцииДанных в объекте.
---
получаем Номер строкиВот с этого момента можешь свои рассуждения заканчивать. Найди, хотя бы, термин "номер строки" на той картинке с ИТС, которую ты приводишь.
---
В общем помощи можно не ждать, можно только сделать - человек написал - ему ответили "дурак" и пошли дальше.

   Оптимально было бы открыть обработку и поправить там где явная ошибка.
---
Оптимально было бы открыть обработку и поправить
---
В тексте на ИТС ничего не сказано про "номер строки", как его получить?
---
Поговорили и пропали) - через много лет народ придет с той же проблемой, - прочитает столько текста, а ответа так и нет. Печально.
---
народ придет с той же проблемойАй, ты не бойся.

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

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