8.х Как получить данные реквизитов ТЧ

Тема в разделе "Отчеты и обработки для "1С:Предприятие 8"", создана пользователем bajiepka, 2 окт 2014.

  1. TopicStarter Overlay
    bajiepka
    Offline

    bajiepka Опытный в 1С

    Регистрация:
    26 сен 2014
    Сообщения:
    328
    Симпатии:
    22
    Баллы:
    29
    Здравствуйте. Прошу помощи в следующей проблеме (1с 8.3.4.408 - БП 3.0 - Управляемое приложение)
    Создал обработку ВПФ к документу РеализацияТоваровУслуг. Подключил внешний макет.
    Необходимо внести в макет дополнительные данные, которые содержатся в ТЧ документа.
    Обычно, обращался к этим данным либо Объект.* или через реквизит обработки СсылкаНаОбъект.*
    Сейчас, обращаясь к реквизитам получаю пустые значения, например: дата документа 00:00:00, номер 00, хотя данные в документе заполнены.
    Как в управляемом приложении обратиться к этим данным?
  2. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    может данные заполнены, но документ не записан?
  3. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.760
    Симпатии:
    509
    Баллы:
    204
    Все правильно, к данным нужно обращаться либо через ссылку, либо через объект. Ссылку можно получить и с клиента, объект доступен на сервере.
  4. TopicStarter Overlay
    bajiepka
    Offline

    bajiepka Опытный в 1С

    Регистрация:
    26 сен 2014
    Сообщения:
    328
    Симпатии:
    22
    Баллы:
    29
    Документ и проведен и записан
  5. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.760
    Симпатии:
    509
    Баллы:
    204
    Вам поможет РеквизитФормыВЗначение(), ибо табличную часть с сервера на клиента вы не передадите.
  6. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.565
    Симпатии:
    716
    Баллы:
    204
    Мож тогда лучше запросом получить все необходимые данные?
    Эт я с точки зрения оптимизации......какой смысл гонять доп.данные между клиентом и сервером
  7. TopicStarter Overlay
    bajiepka
    Offline

    bajiepka Опытный в 1С

    Регистрация:
    26 сен 2014
    Сообщения:
    328
    Симпатии:
    22
    Баллы:
    29
    Благодарю, сейчас буду пробовать!
  8. TopicStarter Overlay
    bajiepka
    Offline

    bajiepka Опытный в 1С

    Регистрация:
    26 сен 2014
    Сообщения:
    328
    Симпатии:
    22
    Баллы:
    29
    Господа, мой уровень тупости в 1с не позволяет постичь ваши советы. Крутил-вертел в гугле метод РеквизитФормыВЗначение(), понял, что нужно создать серверную процедуру, которая будет считывать необходимый реквизит:
    Код:
    &НаСервере
    Процедура ПересчитатьНаСервере()
    АдресОбъекта = "РеализацияТоваровУслуг.ДоговорКонтрагента";
    Документ = РеквизитФормыВЗначение(АдресОбъекта);
    Документ.Пересчитать();
    ЗначениеВРеквизитФормы(Документ, АдресОбъекта);
    КонецПроцедуры
    
    Затем в тексте общего модуля обработки ВПФ, формирующую область макета вызываю эту процедуру:
    Код:
    ОбластьМакета = Макет.ПолучитьОбласть("Договор");
         ОбластьМакета.Параметры.Договор = СсылкаНаОбъект.ДоговорКонтрагента.ПересчитатьНаСервере();
         ТабличныйДокумент.Вывести(ОбластьМакета);
    
    1с выводит ошибку:

    {ВнешняяОбработка.ВПФ_АктОбОказанииУслуг2.МодульОбъекта(92,13)}: Процедура или функция с указанным именем не определена (РеквизитФормыВЗначение)
    Документ = <<?>>РеквизитФормыВЗначение(АдресОбъекта); (Проверка: Сервер)

    хотя синтаксис помощник её знает и выводит мне справку по ней:

    УправляемаяФорма (ManagedForm)
    РеквизитФормыВЗначение (FormAttributeToValue)

    Уважаемый alexburn, помогите пожалуйста осилить "это", своих знаний не хватает :(
    _____________________________________________
    з.ы. 2ТС - используйте тег для офомления кода
    Последнее редактирование модератором: 3 окт 2014
  9. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    а что вам мешает получить данные (раз уж вы все равно на стороне сервера делаете) запросом.

    у вас в коде "ЗначениеВРеквизитФормы", а в ошибке "РеквизитФормыВЗначение"
  10. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.760
    Симпатии:
    509
    Баллы:
    204
    Вы объясните, что вы хотите получить ?
  11. TopicStarter Overlay
    bajiepka
    Offline

    bajiepka Опытный в 1С

    Регистрация:
    26 сен 2014
    Сообщения:
    328
    Симпатии:
    22
    Баллы:
    29
    В БП 3.0 в документе РеализацияТоваровУслуг есть "Акт о реализации услуги". Меня попросили добавить в макет этого акта о реализации услуг номер договора контрагента, от какого числи и его №. Все данные содержатся в соответствующем документе.
    Я сделал обработку, внешнюю печатную форму, скопировал туда макет оригинала (вобщем как всегда делают ВПФ), но разработкой управляемой формы я не занимался, поэтому из опыта работы с обычной я всегда добавлял новую область макета и вызывал туда с помощью СсылкаНаОбъект.* соответсвующие данные.
    Т.е. сейчас мне нужно просто вывести значение объекта формы (поле ДоговорКонтрагента). Делая это традиционным способом, описанным выше, ничего не выводится - пустая строка.
    Судя по описанию указанного Вами метода я пытаюсь получить значение реквизита ДоговорКонтрагента, с помощью серверной процедуры, в документе РеализацияТоваровУслуг:

    АдресОбъекта = "РеализацияТоваровУслуг.ДоговорКонтрагента";
    Документ = РеквизитФормыВЗначение(АдресОбъекта);

    Полученное значение пересчитываю перед так сказать "экспортом":

    Документ.Пересчитать();

    Потом "экспортирую":

    ЗначениеВРеквизитФормы(Документ, АдресОбъекта);

    Насколько я ожидал, то при вызове этой серверной процедуры при выводе табличной части я должен получить нужное поле:

    ОбластьМакета = Макет.ПолучитьОбласть("Договор");
    ОбластьМакета.Параметры.Договор = СсылкаНаОбъект.ДоговорКонтрагента.ПересчитатьНаСервере();
    ТабличныйДокумент.Вывести(ОбластьМакета);

    Ход моих мыслей приблизительно такой...
    --- Объединение сообщений, 3 окт 2014 ---
    Извиняюсь, не скопировал весь текст ошибки, ругается на всё:

    {ВнешняяОбработка.ВПФ_АктОбОказанииУслуг2.МодульОбъекта(92,13)}: Процедура или функция с указанным именем не определена (РеквизитФормыВЗначение)
    Документ = <<?>>РеквизитФормыВЗначение(АдресОбъекта); (Проверка: Сервер)
    {ВнешняяОбработка.ВПФ_АктОбОказанииУслуг2.МодульОбъекта(94,2)}: Процедура или функция с указанным именем не определена (ЗначениеВРеквизитФормы)
    <<?>>ЗначениеВРеквизитФормы(Документ, АдресОбъекта); (Проверка: Сервер)
  12. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.760
    Симпатии:
    509
    Баллы:
    204
    Договор контрагента является реквизитом объекта вашего документа ? Если так, то можно обращаться через:
    СсылкаНаОбъект.ДоговорКонтрагента.НомерДоговора
    СсылкаНаОбъект.ДоговорКонтрагента.ДатаДоговора
    Как-то так. Пишу на коленке, т.к. нет вашей конфы под рукой.
  13. TopicStarter Overlay
    bajiepka
    Offline

    bajiepka Опытный в 1С

    Регистрация:
    26 сен 2014
    Сообщения:
    328
    Симпатии:
    22
    Баллы:
    29
    СсылкаНаОбъект.ДоговорКонтрагента.НомерДоговора
    СсылкаНаОбъект.ДоговорКонтрагента.ДатаДоговора

    все подобные ссылки возвращаются пустыми.

    Получилось вывести таким образом:
    - скопировал из общего модуля (ф) ПолучитьОписаниеАктаОбОказанииУслуг()
    - в таблицу, которую возвращает ф-ция добавил колонки соответствующих реквизитов ("Договор");
    - скопировал из общего модуля (ф) ПолучитьТекстЗапросаДляФормированияТаблицыСведенийАктаОбОказанииУслуг()
    - в запрос добавил выборку нужных полей реквизитов ("Договор");
    Эти функции формируют массив СведенияОДокументе, где становится доступным значение СведенияОДокументе.Договор, который нормально выводится в ВПФ.
  14. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.760
    Симпатии:
    509
    Баллы:
    204
    Первый раз вижу такой гемор, если честно:D. Ну если сделали - молодцы:)

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