8.х Повторный вызов ПриСозданииНаСервере()???

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Yury, 14 ноя 2017 в 11:52.

  1. TopicStarter Overlay
    Yury
    Offline

    Yury Опытный в 1С

    Регистрация:
    22 дек 2011
    Сообщения:
    365
    Симпатии:
    4
    Баллы:
    29
    Здравствуйте, уважаемые!
    Есть такой вопрос. Исходит из потребности открыть форму созданного, но не записанного объекта.
    Вот фрагмент кода:
    Код:
    ФормаДок = ПолучитьФорму("Документ.РеализацияУслугПоПереработке.ФормаОбъекта",,ЭтаФорма, ТекущаяДата() + Сч);
    ДанныеФормы = ФормаДок.Объект;
    ЗаполнитьДанныеФормы (ДанныеФормы);
    КопироватьДанныеФормы(ДанныеФормы, ФормаДок.Объект);
     ФормаДок.Открыть();
    
    Простой и ясный код по-сути.
    1. Получили форму
    2. Получили данные формы
    3. Заполнили данные формы
    4. Скопировали их в форму
    5. Открыли форму

    Все бы хорошо, но ПриСозданииНаСервере () модуля формы вызывается в первом пункте.
    А на форме есть реквизиты, которые как раз и заполняется внутри этого метода на основании реквизитов объекта. Но на момент исполнения этого метода объект был пустой. А на момент открытия он уже заполнен. Как перезаполнить реквизиты формы?

    Примером может служить колонка "Всего". Реквизитом объекта она не является, а является реквизитом формы. При выполнении этого кода откроется форма документы с пустой колонкой всего. Но если записать документ и открыть его колонка будет заполнена.

    Помогайте, кто может.
    ЗЫЖ Дважды дергать форму не хочется.
  2. 1с-ник
    Offline

    1с-ник Профессионал в 1С

    Регистрация:
    5 окт 2014
    Сообщения:
    988
    Симпатии:
    159
    Баллы:
    104
    Обычно при создании формы её заполняют ПриСозданииНаСервере(), передавая данные в параметры формы:
    Код:
    ФормаДок = ПолучитьФорму("Документ.РеализацияУслугПоПереработке.ФормаОбъекта",ПараметрыФормы,ЭтаФорма, ТекущаяДата() + Сч);
    В данном случае можно вызвать метод принудительно:
    Код:
    ФормаДок.ПриСозданииНаСервере(Ложь, Ложь);
    Правда это "криво", 2 раза вызывать.
    А что вы там заполняете то? Может в обработке заполнения вообще это делать? Тогда нужно в параметры формы передать основание или некую структуру.
  3. TopicStarter Overlay
    Yury
    Offline

    Yury Опытный в 1С

    Регистрация:
    22 дек 2011
    Сообщения:
    365
    Симпатии:
    4
    Баллы:
    29
    За мысли спасибо.
    НО есть нюансы: :)
    Передача параметра не катит. Кто в теме те понимают. Я форму здесь получаю, так сказать, ради Объекта.
    Прямой вызов ПриСозданииНаСервере(Ложь, Ложь) невозможен.
    Это не экспортный метод. И может вообще отсутствовать в модуле формы.
    Про, то зачем "там заполнять", я привел исчерпывающий пример с реквизитом "Всего".
    Последнее редактирование: 14 ноя 2017 в 13:34
  4. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    7.560
    Симпатии:
    454
    Баллы:
    104
    Почему?
  5. 1с-ник
    Offline

    1с-ник Профессионал в 1С

    Регистрация:
    5 окт 2014
    Сообщения:
    988
    Симпатии:
    159
    Баллы:
    104
    Какого объекта?
    Можно поспорить - возьму любую валюту, в том числе крипто.
    Ну так заполни его там же, где ты заполняешь остальное - ЗаполнитьДанныеФормы().
    Вопрос вообще не понятен. Автор похоже вообще не понимает, КС-взаимодействие.

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