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

Как при сохранение одного документа, менять идентичный реквизит в другом документе

Автор kipishio, 18 фев 2015, 08:24

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

cska-fanat-kz

Цитата: vitasw от 19 фев 2015, 11:30
:) Опять же, насколько я понял идею LexaK, то он не предлагает использовать общие реквизиты как объект метаданных. Речь шла о том, что допустим "Контрагент" - это реквизит, которые имеет смысл для всех трех документов, но он не создается во всех документах, а только в документе-основании, а в подчиненных документах на форму просто выводится текст типа "ДокументОснование.Контрагент", Т.е. понятие "общий" - это образное выражение и не относится к метаданным.

Идея то понятна, но я категорически против, потому что дочерним документам желательно тоже иметь у себя в виде реквизита этого самого контрагента. Станете вы к примеру делать запрос по дочерним документам с отбором по контрагенту - контрагент как "ДочернийДок.ДокументОснование.Контрагент" получать будете? не есть гуд...
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

vitasw

То что не есть гуд - это понятно. Сейчас в первую очередь стоит обеспечение синхронности реквизитов в родительских и подчиненных объектах. Предложенный вариант - достаточно неплох. А если уж бороться за ресурсы системы, то можно в явном виде указывать левое соединение - на какие-то миллисекунды получим прирост.
Искать подчиненные документы и колбасить в них одноименные реквизиты - явно будет дольше.

cska-fanat-kz

синхронизация происходит при записи каждого отдельного документа что вполне себе проще нежели в запросе получать через точку весь объект документа-основания ради одного реквизита.
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

vitasw

Ээээээ, вы разбирали типовой отчет "структура подчиненности"? вы считаете, что реализовав нечто подобное оно будет работать быстро?

kipishio

Цитата: vitasw от 19 фев 2015, 11:30
:) Опять же, насколько я понял идею LexaK, то он не предлагает использовать общие реквизиты как объект метаданных. Речь шла о том, что допустим "Контрагент" - это реквизит, которые имеет смысл для всех трех документов, но он не создается во всех документах, а только в документе-основании, а в подчиненных документах на форму просто выводится текст типа "ДокументОснование.Контрагент", Т.е. понятие "общий" - это образное выражение и не относится к метаданным.
Теперь малость не догоняю, как же все-таки делать? Надо сделать чтоб работало так, при изменении одинакового реквизита для  3 документов (реквизит текстовое поле), чтоб этот реквизит автоматом менялся во всех оставшихся 2-х документах, планируется что к этим докам будет доступ настроен, и если один иммет право открывать акт приемки и его править, то остальные только акт выполненных и квитанцию

vitasw

В таком акцепте, идея
Цитата: kipishio от 19 фев 2015, 16:37LexaK
не проходит. Я бы попробовал подумать в сторону РС. Значения общих реквизитов пишутся в РС,а в документах подтягиваются на форму.


LexaK

давайте рассмотрим такой вариант
заводим справочник ДопРеквизиты, в нем несколько реквизитов общих для группы документов
во все связанные между собой документы добавляем ссылку на этот справочник
во все ФОРМЫ  документов, в закладку реквизиты добавляем ДопРеквизитыОбъект
выводим на форму поля где источник данных
ДопРеквизитыОбъект.Наименование,
ДопРеквизитыОбъект.КакиеТоДругиеРеквизиты, ...

во все формы в процедуру ПриОткрытии или ПередОткрытием добавляем код

Процедура ПриОткрытии()

    //...

    Если ДопРеквизиты.Пустая() Тогда
ДопРеквизитыОбъект = Справочники.ДопРеквизиты.СоздатьЭлемент();
    Иначе
ДопРеквизитыОбъект = ДопРеквизиты.ПолучитьОбъект();
    КонецЕсли;

КонецПроцедуры


в процедуру ПередЗаписью (здесь возможна куча вариантов, например можно записывать ДопРеквизитыОбъект при любом изменении его поля и т.д.)


Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)

    //...
    лкНовыйРеквизит = ДопРеквизитыОбъект.ЭтоНовый();
    ДопРеквизитыОбъект.Записать();
    Если лкНовыйРеквизит  Тогда
ДопРеквизиты = ДопРеквизитыОбъект.Ссылка;
    КонецЕсли;

КонецПроцедуры



в подчиненных документах в модуле документа в обработке заполнения прописать

Процедура ОбработкаЗаполнения(Основание)

    //...
    ДопРеквизиты = Основание.ДопРеквизиты;

КонецПроцедуры // ОбработкаЗаполнения()


Надеюсь идея понятна? во всех связанных документах будет одна ссылка на элемент справочника ДопРеквизыти, во всех формах связанных документов вы можете редактировать и сохранять новые значения полей ДопРеквизита, соответственно при открытии других связанных документов, вы будете автоматом видеть новые значения и опять возможность их изменения!
Но есть одно НО! догадались какое? надо разрулить проблему одновременного редактирования одного элемента справочника из разных связанных документов! Средствами 1С это сделать можно, допишите сами.
если помогло нажмите: Спасибо!

vitasw

Такую же идею и я предложил, только на основе РС. РС будет универсальнее. ИМХО

kipishio

Цитата: LexaK от 20 фев 2015, 10:50
давайте рассмотрим такой вариант
заводим справочник ДопРеквизиты, в нем несколько реквизитов общих для группы документов
во все связанные между собой документы добавляем ссылку на этот справочник
во все ФОРМЫ  документов, в закладку реквизиты добавляем ДопРеквизитыОбъект
выводим на форму поля где источник данных
ДопРеквизитыОбъект.Наименование,
ДопРеквизитыОбъект.КакиеТоДругиеРеквизиты, ...
Большое спасибо, все понял, буду делать. Спасибо за советы и пояснения.

LexaK

Цитата: vitasw от 20 фев 2015, 11:59
Такую же идею и я предложил, только на основе РС. РС будет универсальнее. ИМХО

Со справочником гораздо проще, и при проведении и/или печати связанных документов, если нужны общие реквизиты, не надо кучу (как минимум по одному во всех местах) запросов к регистру писать!

Вообще конечно от постановки задачи зависит,
- если общих реквизитов немного и они редко меняются, то лучше справочник.
- если общих реквизитов много или ожидается что они (состав или вид) часто будут меняться, то лучше использовать набор записей Регистра сведений.
если помогло нажмите: Спасибо!

Теги:

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

Рейтинг@Mail.ru

Поиск