7.7 Обновление данных в форме

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем evgPinsk, 6 ноя 2012.

  1. TopicStarter Overlay
    evgPinsk
    Offline

    evgPinsk Опытный в 1С

    Регистрация:
    27 окт 2010
    Сообщения:
    193
    Симпатии:
    0
    Баллы:
    26
    Открываю форму документа в режиме просмотра. Через код

    Код:
    Док=создатьОбъект("Документ.МойДокумент");
    Док.НайтиДокумент(ТекущийДокумент());
    Док.Поле="Новоезначение";
    Док.Записать();
    изменяю значение поля документа. Естественно содержимое формы на экране не обновляется.
    Можно ли обновить содержимое открытой формы без повторного открытия данной формы?
  2. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    А изменять реквизит ДО открытия нельзя?
  3. TopicStarter Overlay
    evgPinsk
    Offline

    evgPinsk Опытный в 1С

    Регистрация:
    27 окт 2010
    Сообщения:
    193
    Симпатии:
    0
    Баллы:
    26
    Пользователь открывает форму документа, права только для чтения у него. Через кнопку я ему даю права на изменение реквизита. Он её жмёт в форме, но не видит изменений, пока не откроет форму заново.
  4. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
  5. TopicStarter Overlay
    evgPinsk
    Offline

    evgPinsk Опытный в 1С

    Регистрация:
    27 окт 2010
    Сообщения:
    193
    Симпатии:
    0
    Баллы:
    26
    Почемуто не работает. На форме документа есть кнопка, на неё повешена данная процедура

    Код:
    Процедура ИзменитьПоле()
    Перем Текст_;
    Док=создатьОбъект("Документ.ВозвратПоГарантии");
    Док.НайтиДокумент(ТекущийДокумент());
    ВвестиСтроку(Текст_,"Введите текст",100,,120);
    Док.Дефект=Текст_;
    Док.Записать();
    Форма.Обновить(); //ставил параметром и 1 и 0 - не помогает
    КонецПроцедуры
    Только после закрытия/открытия формы вижу изменение реквизита "Дефект"
  6. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    А что значит права только для чтения? Как права заданы?

    И зачем так сложно (через СоздатьОбъект)?
    Попробуйте так:
    [CODE1C]Процедура ИзменитьПоле()
    Перем Текст_;
    ВвестиСтроку(Текст_,"Введите текст",100,,120);
    Дефект=Текст_;
    Записать();
    КонецПроцедуры[/CODE1C]
  7. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    во-во... Потому что создавали объект изменения и не отражалить
  8. TopicStarter Overlay
    evgPinsk
    Offline

    evgPinsk Опытный в 1С

    Регистрация:
    27 окт 2010
    Сообщения:
    193
    Симпатии:
    0
    Баллы:
    26
    Пользователь не может редактировать проведённые документы. Права заданы в конфигураторе. Но одно поле "Дефект" он должен править, вот поэтому так и приходится выкручиваться.
  9. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Скорее всего выкручиваться придётся и дальше :).
    Пока вижу несколько вариантов:
    1. Изменить права. Разрешить редактирование, а запрет организовать в коде;
    2. Права не изменять. Убрать реквизит документа с формы, и выводить данные в элемент на форме (в виде Текста или Поля ввода). Редактирование реквизита организовать кнопкой для всех (только проверку добавить: для режима только просмотр через СоздатьОбъект, в противном случае - напрямую);
    3. Права не изменять. Закрывать форму после редактирования реквизита - пущай повторно открывают - если нужно.
  10. TopicStarter Overlay
    evgPinsk
    Offline

    evgPinsk Опытный в 1С

    Регистрация:
    27 окт 2010
    Сообщения:
    193
    Симпатии:
    0
    Баллы:
    26
    Понял, спасибо ). Думал просто, что может есть в 1с метод Форма.Refresh. Пока 3й вариант есть, - наверное он тогда и останется.
  11. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    а есть и 4й вариант... через внешнюю обработку... Не открывая сам документ вообще
  12. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Да, кстати, как вариант. Можно даже открывая форму документа (т.е. из формы документа). Передаете документ в обработку, закрываете форму документа, обрабатываете документ и открываете форму документа снова. Форму обработки можно даже не показывать.
  13. TopicStarter Overlay
    evgPinsk
    Offline

    evgPinsk Опытный в 1С

    Регистрация:
    27 окт 2010
    Сообщения:
    193
    Симпатии:
    0
    Баллы:
    26
    Что-то я не понял возможно.Как работает наш пользователь :
    Заходит в журнал документов, вводит документ, сохраняет и проводит его. Далее у него возникает потребость изменить документ (прописать поле "Дефект"). Я вижу самый простой способ для пользователя - также открыть документ - увидеть его глазами, и внести это изменение в документе. (сейчас работает это через кнопку и команду ВвестиСтроку(...)

    Каким образом внешняя обработка упростит, мне чтото непонятно
  14. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Для того, чтобы что-то поменять в документе программно не обязательно открывать документ. Кнопку и код можно "прописать" и в форме списка (т.е. в журнале документов).
    Из открытой формы документа, через обработку (не обязательно внешнюю) можно, предварительно закрыв форму, отредактировать реквизит документа и открыть форму опять (с уже измененными данными).

    P.S. Через внешнюю обработку, может не так и удобно для пользователя, но типовую конфигурацию "курочить" особенно не придеться (если она конечно у вас типовая).

    P.P.S. Ну и, IMHO, немного логика у вас "хромает". Если пользователю запрещено изменять проведённые документы, то и потребности изменить проведённый документ у него и не должно возникать. Но это так - в идеале. :)
  15. TopicStarter Overlay
    evgPinsk
    Offline

    evgPinsk Опытный в 1С

    Регистрация:
    27 окт 2010
    Сообщения:
    193
    Симпатии:
    0
    Баллы:
    26
    Теперь понял вашу мысль. У меня самопальный конфиг.
    Думаю что логика не хромает ). Я считаю, что для всех юзеров очень желательно запретить редактирование проведённых документов (в целях безопасности данных), но иногда бывает что например пользователю нужно править какойто реквизит документа уже после проведения.
    Мой случай это Документ - "приём товара на гарантийно обслуживание". СервисЦентр оприходовал от клиента товар, указал все реквизиты, провёл документ. И через пару дней в документ он должен внести в домкуент результат тестирования.
  16. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    можно прямо на форме журнала создать реквизит и менять... Если нужно отображать табличную часть документа. То через обработку лучше
  17. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    [off]
    Запрещать редактирование проведённых документов, там где это жёстко не требуется логикой работы, IMHO, неправильно.
    Потом приходится думать, как эту безопасность обходить. :)

    И далее, если пользователю запрещено редактирование проведённого документа, то делать ему там (в документе), кроме как "посмотреть", нечего. Если через пару дней что-то нужно поменять, то логичнее, это делать через новый документ, что-то типа "дефектовка по результатам тестирования", причем, желательно (совсем в идеале), той датой когда это тестирование проводилось, а не на дату приёма.
    Либо же редактировать реквизит через обработку, если по каким-то причинам данные хранятся в документе, но никак не в форме запрещённого к редактированию документа.

    P.S.
    Если б не подхрамывала, то не пришлось бы "костыли" подставлять. :)))

    P.P.S. На единственно правильное мнение не претендую. Всё - IMHO. Разработчику на месте обычно виднее.
    [/off]
  18. TopicStarter Overlay
    evgPinsk
    Offline

    evgPinsk Опытный в 1С

    Регистрация:
    27 окт 2010
    Сообщения:
    193
    Симпатии:
    0
    Баллы:
    26
    Разговор может плавно перетечь в правильность построения структур баз данных ). 1с как СУБД никак не может похвастаться тем, что под неё нужно создавать правильные схемы баз данных, ИМХО. Вот и приходится часто создавать таблицы, которые с точки зрения теории - ненормализованы.
    Например реквизит сумма - его неправильно хранить в таблице, т.к. он есть произведение количества на цену и получается избыточным. Но насколько я знаю в типовой конфигурации он хранится в табличных частях документов

Поделиться этой страницей