Две формы элемента документа

1. NicolasCage 13.02.25 09:43 Сейчас в теме
Здравствуйте! Товарищ подкинул задачку. По описанию, я считаю, задачка полный бред. Но как он говорит, такое реализовывали в реальности! Но наверное я что-то не понимаю и поэтому хочу тоже попробовать сделать :)
Есть 2 формы элемента. Одна основная, вторая для "редактирования". Интерфейс у них разный, "объект" естественно один :) В списке документов, при нажатии на один из документов, открывается первая. основная, форма. В этой форме у всех реквизитов стоит "только чтение". Изменить ничего нельзя. В командной панели этой формы есть команда "Редактировать". При нажатии на нее открывается вторая форма с другим интерфейсом. Если у первой, основной, формы элемента реквизиты расположены на одной странице, то в форме для "редактирования" несколько страниц и все реквизиты разбросаны/сгруппированы по ним. И конечно, все данные реквизитов из первой формы отображены во второй. После изменения нужных реквизитов и нажатия на кнопку "провести и закрыть" должна открываться основная форма с уже изменеными реквизитами.

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

Имеет ли право на жизнь такой способ или лучше сделать как-то по другому? Посоветуйте, пожалуйста, я прислушаюсь.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. RustamZz 13.02.25 09:49 Сейчас в теме
(1) Задача полный бред, но если у заказчика есть деньги, а у вас желание их получить - действуйте!
NicolasCage; +1 Ответить
4. glek 119 13.02.25 10:08 Сейчас в теме
(1) Теоретически можно при нажатии на кнопку открыть форму для редактирования, а форма просмотра - закрыть. При окончании редактирования - обратное. Минус в том, что происходит неоднократное чтение объекта. Как вариант, форму для просмотра не закрывать, а в форме редактирования после записи оповещать об изменении. В форме просмотра ловить это событие и перечитывать либо весь объект, либо что-то придумать :).
NicolasCage; +1 Ответить
3. Denis_CFO 49 13.02.25 09:49 Сейчас в теме
Это вполне может быть одна форма, но в режиме "Только чтение" показываются не все элементы формы. И не надо изобретать лисопед.
NicolasCage; +1 Ответить
5. user2127300 13.02.25 10:13 Сейчас в теме
Этот подход работает, но он:
Сложный в поддержке: если реквизитов много, их нужно вручную собирать и передавать.
Неэффективен: данные копируются между формами, что может быть избыточно.
Не соответствует принципам ООП: данные объекта дублируются, вместо того чтобы работать с одним экземпляром объекта. И ещё раз НО он работает
NicolasCage; +1 Ответить
7. NicolasCage 14.02.25 13:45 Сейчас в теме
(5) Так ООП в 1С нет) Но я понимаю, что вы имеете ввиду и согласен с вами. Методом тыка я пришел наверное к единственному варианту: гонять структуру туда-сюда. Выглядит это так: Собираю все реквизиты этим методом (благо добрые люди придумали все до нас). Потом во второй форме я вынужден преобразовывать ДанныеФормаСтруктура в обычную структуру этим методом, чтобы была возможность просто обойти структуру циклом. Обходя циклом проверяю: ОбщегоНазначения.ЕстьРеквизитОбъекта(Реквизит.Ключ, Метаданные.Документы.ПриемНаРаботу). Таким образом фильтрую ненужные данные. Потом просто записываю: Объект[Реквизит.Ключ] = Реквизит.Значение;
6. miniogn 44 13.02.25 11:12 Сейчас в теме
При необходимости редактирования - первую форму автоматически закрыть.
Открыть вторую, отредактировать, записать, закрыть, оповестить форму списка, из списка снова автоматически открыть первую форму.
NicolasCage; +1 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот