Реквизитформывзначение объект ошибка

   margo_irkutsk

19.04.19 — 09:49

Доброго времени суток всем.

Обращаюсь к экспортной процедуре, находящейся в модуле объекта, из модуля формы списка документов через метод РеквизитФормыВЗначение.

Программа ругается: {Документ.ЛГ_ЖдНакладная.Форма.ФормаСпискаЛогистика.Форма(297)}: Ошибка при вызове метода контекста (РеквизитФормыВЗначение)

    ДокОбъект = РеквизитФормыВЗначение(«Объект»);

по причине:

Недопустимое значение параметра (параметр номер ‘1’)

В чем может быть ошибка?

Вот текст процедуры обращения:

&НаСервере

Процедура СпецификацияЗаполнитьПриложенияСервер()

    
    Объект = Элементы.Ссылка;

    ДокОбъект = («Объект»);

    Объект. ЗаполнитьИРасценитьПоВнутреннимЦенам();

        
    ДокОбъект.ЗначениеВРеквизитФормы(«Объект»);

    Объект.Обработано = Истина;

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

   Mankubus

1 — 19.04.19 — 09:52

(0) в тексте процедуры нет той строки на которой происходит ошибка

   margo_irkutsk

2 — 19.04.19 — 09:55

криво скрпировала))

&НаСервере

Процедура СпецификацияЗаполнитьПриложенияСервер()

    
    Объект = Элементы.Ссылка;

    ДокОбъект = РеквизитФормыВЗначение(«Объект»);

    Объект. ЗаполнитьИРасценитьПоВнутреннимЦенам();

        
    ДокОбъект.ЗначениеВРеквизитФормы(«Объект»);

    Объект.Обработано = Истина;

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

   hhhh

3 — 19.04.19 — 09:56

(0) посмотрите на форме, справа, где список реквизитов, есть там такой реквизит «Объект»?

   hhhh

4 — 19.04.19 — 09:57

(2) тут у вас получается, что Объект это вообще не реквизит, а какие-то Элементы.Ссылка

   margo_irkutsk

5 — 19.04.19 — 09:58

на форме списка документов нужно обработать выделенные документы через процедуру вызываемую из модуля объекта:

&НаКлиенте

Процедура ЗаполнитьПриложениями(Команда)

    
    ВыделенныеСтроки = ПроверитьПолучитьВыделенныеВСпискеСсылки(Элементы.СписокПиломат);

    Если ВыделенныеСтроки.Количество() = 0 Тогда

        Возврат;

    КонецЕсли;

    ТекстВопроса = НСтр(«ru=’К выделенным в списке документам будут заполнены приложения. Продолжить?'»);

    Ответ = Вопрос(ТекстВопроса,РежимДиалогаВопрос.ДаНет);

    
    Если Ответ = КодВозвратаДиалога.Нет Тогда

        Возврат;

    КонецЕсли;

    
    ОчиститьСообщения();

    Объект = Элементы.Ссылка;

    Для каждого Объект из ВыделенныеСтроки Цикл

     Если  НЕ Объект.СпецификацияКатВ.Количество()= 0    Тогда

        ТекстОшибки = НСтр(«ru = ‘Заполнена спецификация кат.В (необходимо предварительно очистить!'»);

        ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки);

        Возврат;

    КонецЕсли;

    СпецификацияЗаполнитьПриложенияСервер();    

    
    КонецЦикла;

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

   НЕА123

6 — 19.04.19 — 10:00

(4) похоже на попытку «редактировать в списке»

   НЕА123

7 — 19.04.19 — 10:02

(0)

что оно должно сделать?

   margo_irkutsk

8 — 19.04.19 — 10:03

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

   Eg0rkas

9 — 19.04.19 — 10:07

покажите теперь код процедуры «ЗаполнитьИРасценитьПоВнутреннимЦенам()»

   Darych

10 — 19.04.19 — 10:13

в (2) в коде беда

   margo_irkutsk

11 — 19.04.19 — 11:15

немного подправила код, но ошибка осталась та же:

&НаКлиенте

Процедура ЗаполнитьПриложениями(Команда)

    
    ВыделенныеСтроки = ПроверитьПолучитьВыделенныеВСпискеСсылки(Элементы.СписокПиломат);

    Если ВыделенныеСтроки.Количество() = 0 Тогда

        Возврат;

    КонецЕсли;

    ТекстВопроса = НСтр(«ru=’К выделенным в списке документам будут заполнены приложения. Продолжить?'»);

    Ответ = Вопрос(ТекстВопроса,РежимДиалогаВопрос.ДаНет);

    
    Если Ответ = КодВозвратаДиалога.Нет Тогда

        Возврат;

    КонецЕсли;

    
    ОчиститьСообщения();

    Для каждого Объект из ВыделенныеСтроки Цикл

     Если  НЕ Объект.СпецификацияКатВ.Количество()= 0    Тогда

        ТекстОшибки = НСтр(«ru = ‘Заполнена спецификация кат.В (необходимо предварительно очистить!'»);

        ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки);

        Возврат;

    КонецЕсли;

    СпецификацияЗаполнитьПриложенияСервер();    

    
    КонецЦикла;

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

Процедура СпецификацияЗаполнитьПриложенияСервер()

    
    
    ДокОбъект = РеквизитФормыВЗначение(«Объект»,Тип(«ДокументОбъект.ЛГ_ЖдНакладная»));

    ДокОбъект. ЗаполнитьИРасценитьПоВнутреннимЦенам();

        
    ДокОбъект.ЗначениеВРеквизитФормы(«Объект»);

    ДокОбъект.Обработано = Истина;

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

   margo_irkutsk

12 — 19.04.19 — 11:17

Пробовала через ДанныеФормыВЗначение, но ошибка та же.

   Darych

13 — 19.04.19 — 11:18

объект — это что?

   Darych

14 — 19.04.19 — 11:18

если данные формы — то беда

   margo_irkutsk

15 — 19.04.19 — 11:19

объект-это документ

   Mankubus

16 — 19.04.19 — 11:19

(11) >>Для каждого Объект из ВыделенныеСтроки Цикл

нельзя использовать слово «объект» в качестве переменных!

   margo_irkutsk

17 — 19.04.19 — 11:29

Хорошо,изменила код, ошибка та же(. В параметрах метода также пробовала менять. Ошибка не уходит.

Наименование п

&НаКлиенте

Процедура ЗаполнитьПриложениями(Команда)

    
    ВыделенныеСтроки = ПроверитьПолучитьВыделенныеВСпискеСсылки(Элементы.СписокПиломат);

    Если ВыделенныеСтроки.Количество() = 0 Тогда

        Возврат;

    КонецЕсли;

    ТекстВопроса = НСтр(«ru=’К выделенным в списке документам будут заполнены приложения. Продолжить?'»);

    Ответ = Вопрос(ТекстВопроса,РежимДиалогаВопрос.ДаНет);

    
    Если Ответ = КодВозвратаДиалога.Нет Тогда

        Возврат;

    КонецЕсли;

    
    ОчиститьСообщения();

    Для каждого Элемент из ВыделенныеСтроки Цикл

     Если  НЕ Элемент.СпецификацияКатВ.Количество()= 0    Тогда

        ТекстОшибки = НСтр(«ru = ‘Заполнена спецификация кат.В (необходимо предварительно очистить!'»);

        ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки);

        Возврат;

    КонецЕсли;

    СпецификацияЗаполнитьПриложенияСервер();    

    
    КонецЦикла;

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

Процедура СпецификацияЗаполнитьПриложенияСервер()

    
    
    ДокОбъект = РеквизитФормыВЗначение(«Объект»,Тип(«ДокументОбъект.ЛГ_ЖдНакладная»));

    ДокОбъект. ЗаполнитьИРасценитьПоВнутреннимЦенам();

        
    ДокОбъект.ЗначениеВРеквизитФормы(«Объект»);

    ДокОбъект.Обработано = Истина;

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

   Darych

18 — 19.04.19 — 11:32

она не читает ответы

   hhhh

19 — 19.04.19 — 11:41

(17) ДокОбъект = РеквизитФормыВЗначение(«Объект»,Тип(«ДокументОбъект.ЛГ_ЖдНакладная»)); — это для формы документа

для формы списка так писать — это полный дебилизм.

поэтому пробуйте

Процедура СпецификацияЗаполнитьПриложенияСервер(Элемент)

    
    
    ДокОбъект = Элемент.Ссылка.ПолучитьОбъект();

    ДокОбъект. ЗаполнитьИРасценитьПоВнутреннимЦенам();

        
    ДокОбъект.Обработано = Истина;

ДокОбъект.Записать();

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

   margo_irkutsk

20 — 19.04.19 — 11:57

Ответы читаю.

Задача стоит так: в списке документов накладных пользователь выделяет несколько документов для групповой обработки. цель обработки проставить стоимость товаров в табличных частях выделенных документов. в процедуре Заполнить приложениями (команда) получаю список выделенных и в цикле забираю каждый. И для каждого выбранного документа вызываю процедуру заполнения (ЗаполнитьИРасценитьПоВнутреннимЦенам). Процедура заполнения цен товаров прописана в модуле объекта документа, поэтому обращаюсь через метод РеквизитФормыВЗначение.

Мои извинения, если чего-то не понимаю.

  

SSSSS_AAAAA

21 — 19.04.19 — 11:59

(20) И Реквизит какой формы вы пытаетесь загнать в значение? Формы списка?

 Казалось бы, банальная операция вызов процедуры/функции модуля объекта из модуля формы, но тут я был сбит, как бейсбольной битой, этой ошибкой и засомневался во всем что накопил в голове своей за прошедшие 10 лет периодической возни с 1С.

Поясню, есть внешняя печатная форма, в связи хотелкой прогресс бара вынужден перенести часть функций в модуль объекта, а дальше извращаться с их вызовом через:

ОбработкаОбъект=РеквизитФормыВЗначение("Объект");
ОбарботкаОбъект.МояПроцедура(ПараметрыПроцедуры);

Но тут я получаю ошибку:

{Обработка.ЗагрузкаПрайсЛиста.Форма.Форма1.Форма(317)}: Ошибка при вызове метода контекста (РеквизитФормыВЗначение)

ОбарботкаОбъект=РеквизитФормыВЗначение(«Объект»);

по причине:

Недопустимое значение параметра (параметр номер ‘1’)

Недопустимое значение параметра (параметр номер ‘1’)

И думаю что за дичь такая, еще удивляюсь почему в подсказке не было варианта «Объект», в итоге это и был ответ, у объекта на форме не определен был тип:

Я сделал форму, добавил реквизит пользователей из справочника пользователей и создал поле выбора с типом справочника пользователей. Мне нужно получить значение этого реквизита в модуле формы, но в строке, где я его получаю, выходит ошибка:

Ошибка при вызове метода контекста (РеквизитФормыВЗначение)
{Отчеты Отчет.НовыйОтчетПрофилей.Форма.ФормаОтчета.Форма(201)}:РеквизитПользователя = РеквизитФормыВЗначение("Пользователь"); //
{Отчеты Отчет.НовыйОтчетПрофилей.Форма.ФормаОтчета.Форма(230)}:ТабДокумент                          = СформироватьМакетНаСервере();

по причине:
Недопустимое значение параметра (параметр номер '1')

Как это можно исправить?

Вот сам код:

&НаСервере
Функция СформироватьМакетНаСервере()
    
    ОтчетОбъект = РеквизитФормыВЗначение("Отчет"); 
    РеквизитПользователя = РеквизитФормыВЗначение("Пользователь"); //
    
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    
    МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(ОтчетОбъект.СхемаКомпоновкиДанных,  ОтчетОбъект.КомпоновщикНастроек.Настройки, , ,  Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
    
    ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных);
    
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
    
    ТаблицаЗначений = Новый ТаблицаЗначений;
    ПроцессорВывода.УстановитьОбъект(ТаблицаЗначений);
    ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных); 
        
    ТабДокумент = Новый ТабличныйДокумент;
    
    ТабДокумент.Очистить();
    Макет = ОтчетОбъект.ПолучитьМакет("Макет");
                                            
    Возврат ТабДокумент;
    
КонецФункции

&НаКлиенте
Процедура СформироватьМакет(Команда)
    
    ТабДокумент                         = СформироватьМакетНаСервере();    
    КоллекцияПечатныхФорм               = УправлениеПечатьюКлиент.НоваяКоллекцияПечатныхФорм("Макет");
    ПечатнаяФорма                       = УправлениеПечатьюКлиент.ОписаниеПечатнойФормы(КоллекцияПечатныхФорм, "Макет");
    ПечатнаяФорма.СинонимМакета         = "Макет";
    ПечатнаяФорма.ТабличныйДокумент     = ТабДокумент;
    ПечатнаяФорма.ИмяФайлаПечатнойФормы = "Макет";
    
    ОбластиОбъектов = Новый СписокЗначений;
    УправлениеПечатьюКлиент.ПечатьДокументов(КоллекцияПечатныхФорм, ОбластиОбъектов);
    
КонецПроцедуры

Вот форма со свойствами поля:

И свойства реквизита:

{Обработка.РМКУправляемыйРежим.Форма.Форма.Форма(2823)}: Ошибка при вызове метода контекста (РеквизитФормыВЗначение)     Объект  = РеквизитФормыВЗначение(«Обработка»); по причине: Недопустимое значение параметра (параметр номер ‘1’) Вот функция &НаСервере КонецФункции Почему может валить ошибку?

есть реквизит формы «Обработка»?

ОбъектОбработки = РеквизитФормыВЗначение(«Объект»);

Преобразовывать в значение существующий реквизит

если я в обработку добавлю макет, как его получить?

А если добавляю кнопку, то отображается окно с «» и больше ничего, кто нибудь сталкивался?

из серверной процедуры(функции) модуля формы:

А зачем вообще его в форме получать? Я бы заполнил в модуле объекта и вернул уже готовый табличный документ

На РМК Кнопку  нужно прикрутить, а тут такие подвохи блин, второй час долблюсь

я уже и другую кнопку отредактировал,  теперь вот эта фигня выскакивает

Дык, чтобы вызвать метод из модуля объекта — его (объект) все-равно получить придется ;-)

{Обработка.РМКУправляемыйРежим.Форма.Форма.Форма(2823)}: Ошибка при установке значения атрибута контекста (Объект)     Объект  = РеквизитФормыВЗначение(«Объект»); по причине: Нельзя изменять поле, содержащее объект данных формы Нельзя изменять поле, содержащее объект данных формы

Объект в реквизиты добавить?

Таки да, но удобнее заполнять в модуле, а не в форме — если что можно будет вызвать без открытия формы … да и вообще в форме должен быть только код, связанный с работой самой формы

Что не понятно в функции РеквизитФормыВЗначение?

Посмотри внимательно на форму. Там уже есть реквизит «Объект». Только не верь глазам своим, он не фига не объект :-). Это данные формы (можешь пока представлять себе как структуру с полями). А чтобы вызвать методы этого объекта — его надо преобразовать в»настоящий» при помощи РеквизитФормыВЗначение

+ Объект = … — так нельзя!!!

Неправильно:  Объект  = …. Правильно ОбъектНастоящий = …. :-)

+ в том случае, если у тебя реквизит формы назван по умолчанию, т.е. «Объект» (назван платформой)

Что тут не так по мимо того что нет значения для макета

Реквизит на форме нужно разместить?

Что отладчик говорит про полученный объект? Тип значения у него какой?

{Обработка.РМКУправляемыйРежим.Форма.Форма.Форма(2823)}: Ошибка при вызове метода контекста (РеквизитФормыВЗначение)     Объект  = РеквизитФормыВЗначение(«Отчет»); по причине: Недопустимое значение параметра (параметр номер ‘1’) Недопустимое значение параметра (параметр номер ‘1’)

ТС, ответь на вопрос: как называется основной реквизит твоей обработки?

так у тебя есть реквизит формы с именем «Отчет»?

А не проще к самому отчету обратится сразу Отчеты.ВидыОплатККМ.ПолучитьМакет?

{Обработка.РМКУправляемыйРежим.Форма.Форма.Форма(2875)}: Ошибка при вызове метода контекста (Показать)     ТабДок.Показать; по причине: Метод недоступен на сервере Метод недоступен на сервере а тут то что не так?

Метод показать не работает на сервере?

А кому и на чем показывать ее на сервере? Предлагаю немного углубиться в понимание концепции управляемых форм

а как тогда его на клиенте показать? если он в другой функции?

Параметр передай, заполни его на сервере, а когда вернешься на клиент — покажи. Я повторюсь

ну серверу он хочет показать…сервер что, не живой, ему что, прекрасное увидеть не хочется… а то гоняют и в хвост и в гриву, а ничего и не показывают, вот потом и появляются ошибки формата потока)

Переменная не определена ТабДок)))

Спасибо за помощи идиоту!!

Тэги: 1С 8

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

  1. Добрый день
    такая ошибка!

    {Форма.Форма.Форма(4)}: Ошибка при вызове метода контекста (РеквизитФормыВЗначение)
    тотОбьект= РеквизитФормыВЗначение(Объект);
    по причине:
    Несоответствие типов (параметр номер '1')

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

    &НаСервере
    Процедура Команда1НаСервере()
    тотОбьект= РеквизитФормыВЗначение(Объект);
    тотОбьект.ВыгрузитьВCSV("C:my.csv");
    КонецПроцедуры
    
    &НаКлиенте
    Процедура Команда1(Команда)
        Команда1НаСервере();
       
    КонецПроцедуры
    

    код в модуле объекта

    // Выполним запрос к справочнику Номенклатуры
    // Получим Таблицу Значений
    Функция ПолучитьНоменклатуру()
        Запрос = Новый Запрос;
        Запрос.Текст =
            "ВЫБРАТЬ ПЕРВЫЕ 100
            |    Номенклатура.Наименование
            |ИЗ
            |    Справочник.Номенклатура КАК Номенклатура";
        Результат = Запрос.Выполнить();
        ТаблицаЗначений = Результат.Выгрузить();
        возврат ТаблицаЗначений;
    КонецФункции //   
    
    // Создаем строку загоовков для CSV-файла
    Функция СоздатьЗаголовкиCSV(ТаблицаЗначений,разделитель)
        //разделитель = "|";
        колонкиТЗ=ТаблицаЗначений.колонки;
        Для каждого колонка Из колонкиТЗ Цикл
            стрКолонки = "" + стрКолонки + колонка.Имя + разделитель ;
        КонецЦикла;
        Возврат стрКолонки;
    КонецФункции
    
    // Создаем текст CSV:
    // текст заголовков и
    // текст данных
    Функция СоздатьДанныеCSV(ТаблицаЗначений,разделитель)
       
        текст="";
        для каждого запись из ТаблицаЗначений Цикл
            если текст="" тогда
                текст=СоздатьЗаголовкиCSV(ТаблицаЗначений,разделитель)
                    + Символы.ПС;   
            КонецЕсли;   
                   
            сообщить(запись.Наименование);
            текст = текст + запись.Ссылка
                + разделитель + запись.Код
                + разделитель + запись.Родитель
                + разделитель + запись.Наименование            
                + Символы.ПС;       
        КонецЦикла;
           
        //сообщить(текст);
        Возврат текст;
    
    КонецФункции //
    
    // Запишем данные в файл
    Функция ЗаписатьCSV(текст,имяФайла)             
        кодировка = КодировкаТекста.ANSI;
       
        ТекстовыйФайлЗапись = Новый ЗаписьТекста(имяФайла,Кодировка);           
        ТекстовыйФайлЗапись.ЗаписатьСтроку(текст);
        ТекстовыйФайлЗапись.Закрыть();   
        Возврат 0;
    
    КонецФункции //
    
    // Основная логика:
    Функция ВыгрузитьВCSV(имяФайлаCSV);
        разделитель = "|";
        ТаблицаЗначений = ПолучитьНоменклатуру();
        текст = СоздатьДанныеCSV(ТаблицаЗначений,разделитель);
        ЗаписатьCSV(текст,имяФайлаCSV);
    
    КонецФункции
    

    Помогите пожалуйста я новичок уже 3ю неделю пытаюсь решить не получается(


  2. Dem0lisher

    Offline

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

    Регистрация:
    4 авг 2009
    Сообщения:
    1.271
    Симпатии:
    106
    Баллы:
    104

    Вы читали,что написано про РеквизитФормыВЗначение(ИмяРеквизита) в синтакс-помощнике?
    1.Туда нужно передавать имя реквизита формы, значение которого хотите получить.
    А теперь откройте вкладу реквизиты на упр. форме и посмотрите, есть ли там такой реквизит с именем «Объект»?
    2. Передавать нужно имя, т.е строку «Объект», «Обработка», а не сам Объект или Обработка..

  3. спасибо передал строку

    тотОбьект= РеквизитФормыВЗначение("Объект");
    тотОбьект.ВыгрузитьВCSV("C:my.csv");
    

    теперь вылезает ошибка

    {Форма.Форма.Форма(5)}: Метод объекта не обнаружен (ВыгрузитьВCSV)
    тотОбьект.ВыгрузитьВCSV("C:my.csv")

    ничего не понимаю(

  4. Все разобрался забыл добавить ЭКСПОРТ


1C-pro.ru - форум по 1С:Предприятию 7.7, 8.0, 8.1, 8.2, 8.3

Понравилась статья? Поделить с друзьями:
  • Результат ошибка 116 ошибка озу
  • Рекавери пишет ошибка
  • Рейдж 2 работа прекращена отчет об ошибке
  • Результат локальной проверки 0 ошибка локальной проверки 1
  • Река более шире исправьте ошибку