Ошибка при вызове метода контекста реквизитформывзначение

РеквизитФормыВЗначение ошибка параметр 1
   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) И Реквизит какой формы вы пытаетесь загнать в значение? Формы списка?

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

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

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

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

Вот сам код:

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

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

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

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

Есть встроенная в конф-ии обработка. Пишу:

&НаСервере но получаю ошибку: Ошибка при вызове метода контекста (РеквизитФормыВЗначение)     ОбъектНаСервере = РеквизитФормыВЗначение(«Объект»); по причине: Тип не определен ‘ecaffd21-70c8-4642-950b-379bc1ad00db’

Есть встроенная обработка. Пишу: приди ко мне. Но тщетно..

тип «Объект» — ДанныеФормыСтруктура Смотрю в справке, с помощью функции ДанныеФормыВЗначение вроде тоже можно но опять таки ошибка. Не пойму где ошибка. я 2 раза ctrl+enter нажал :)

Перем ОбъектНаСервере мешается?

в смысле что не нужно такое там?

я имел в виду это. на сам не верю ;)

а чего бы ОбработатьВнешниеФайлыНаСервер не положить в модуль менеджера?

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

откуда то берется один и тот же ИД в описание ошибки, интересно: Тип не определен ‘ecaffd21-70c8-4642-950b-379bc1ad00db’

блин не хочется кэш чистить

даже после чистке кэша этот ИД в описание ошибке не меняется. ЧТо за …

а как у тебя Сообщить(йо) на сервере работает?

Выводит текст сообщения в окно сообщений. Если в момент вызова окно сообщений отсутствует, то будет открыто новое окно сообщений. Сообщение, в зависимости от его смысловой нагрузки, можно пометить одной из пиктограмм, входящих в предопределенный набор. ;)

работает оно НаСервере. Оно дожидается возвращения на клиент и сообщает. СП читать надо

/СП читать надо/ Спасибо что разрешили… так и буду впредь поступать :)

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

а давайте подумаем, где у сервера окно ;)

/не так, как тебе хочется/ где Вы это в моем тексте узрели, чего мне хочется или не хочется, написал же «удивлен» ПС. К тому же не Вам :)

/Оно дожидается возвращения на клиент и сообщает/ Вот про это что то не нашел… Глобальный контекст (Global context) Сообщить (Message) Синтаксис: Сообщить(<ТекстСообщения>, <Статус>) Параметры: Тип: Строка. Тип: СтатусСообщения. Статус сообщения. Определяет вид пиктограммы. Значение по умолчанию: Обычное Описание: Выводит текст сообщения в окно сообщений. Если в момент вызова окно сообщений отсутствует, то будет открыто новое окно сообщений. Сообщение, в зависимости от его смысловой нагрузки, можно пометить одной из пиктограмм, входящих в предопределенный набор. Доступность: Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение. потому и спросил…

Если в момент вызова окно сообщений отсутствует, то будет открыто новое

вообще, мутно сформулировано, да

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

а если сообщать в регзадании, к примеру, так и вообще никаких окон не будет

а я не к Вам обращалась, молодой человек. Я лишь высказала свою мысль, обращенную вообще к аудитории, которая может сей текст прочесть. Доступность: сервер — ни о чем не говорит Вам? А про «Оно дожидается возвращения на клиент и сообщает» на собственном опыте испытано

ну знай ещё. я в своё время логи регзадания ловил по Сообщить

и зачем тогда СообщениеПользователю было мутить… а Предупредить тоже дожидается возвращения на клиент?

спс, очччьь признателен. (не сарказм)

Сду по тому кому Вы свои сообщения адресовали, то не к аудитории а именно мне

СообщениеПользователю — потомок Сообщить, а предупреждения на сервере нет

Ах, ну простите меня, я такая бестактная. Впредь не буду приставать с такими глупостяи

Тэги: 1С 8

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

khenata

0 / 0 / 0

Регистрация: 09.11.2017

Сообщений: 19

1

Внешняя обработка: не обновляется уже открытая форма после изменений в табличной части

09.11.2017, 14:35. Показов 19467. Ответов 15

Метки нет (Все метки)


Создана внешняя обработка. Добавляется кнопкой в документ в 1С ЗУП 3.1 в документах ДанныеДляРасчетаЗарплаты(создаются с помощью шаблонов). В открытой форме нажатие на кнопку вызывает обработку, делает изменения, но форма не обновляется. Ф-ция Сообщить выдает правильные результаты изменений.Чего-то не хватает, может быть знает кто-нибудь что еще нужно дописать? Если такой код запускаю в документе РазовоеНачисление — все работает, форма сразу обновляется и документ можно провести.

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды,ОбъектыНазначенияМассив) Экспорт
   ВладелецФормы.Модифицированность = Истина;
   ОснРеквизит1 = ВладелецФормы.Объект;      
   ЗаполнитьОбъект(ОснРеквизит1);
   КопироватьДанныеФормы(ОснРеквизит1,ВладелецФормы.Объект);
КонецПроцедуры
&НаСервере
Функция ЗаполнитьОбъект(ОснРеквизит1)
   ТЧ =ОснРеквизит1.ЗначенияПоказателей; 
   Для Каждого Строка ИЗ ТЧ Цикл
      Если СтрСравнить(Строка.Показатель, "СдельноНорма") = 0 Тогда
         Строка.Значение = Строка.Значение +15;
                        Сообщить(Строка.Показатель);
                  Сообщить(Строка.Значение);
           КонецЕсли;
        КонецЦикла;
КонецФункции

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



Эксперт 1С

476 / 413 / 93

Регистрация: 26.09.2012

Сообщений: 1,904

09.11.2017, 16:52

2

Может, владелецФормы.Обновить()?

Добавлено через 1 минуту
Еще можно попробовать все перенести на клиент
и избавиться от таких вещей как
ОснРеквизит1 = ВладелецФормы.Объект;
ТЧ =ОснРеквизит1.ЗначенияПоказателей;
А все реквизиты получать через точку, т.е работать непосредтсвенно с объектом владельца формы а не его копией.



0



khenata

0 / 0 / 0

Регистрация: 09.11.2017

Сообщений: 19

09.11.2017, 21:51

 [ТС]

3

говорит:{ВнешняяОбработка.ВнешняяОбработкаЗУП31021 12017данные.Форма.Форма.Форма(13)}: Метод объекта не обнаружен (Обновить)
ВладелецФормы.Обновить();

Добавлено через 3 минуты
хорошо, попробую. потом результат скажу.

Добавлено через 4 часа 52 минуты
Попробовала сделать. Код работает, значения пересчитываются, но на форме все равно нет измененных данных.

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды,ОбъектыНазначенияМассив) Экспорт
        ВладелецФормы.Модифицированность = Истина;
               ТЧ1=ВладелецФормы.Объект.значенияПоказателей;
           Для Каждого Строка ИЗ ТЧ1 Цикл
           Если СтрСравнить(Строка.Показатель, "СдельноНорма") = 0 Тогда
            Строка.Значение = Строка.Значение +15;
            Сообщить(Строка.Показатель);
            Сообщить(Строка.Значение);
 
           КонецЦикла;
          ЭтаФорма.ОбновитьОтображениеДанных();
         ОтобразитьИзменениеДанных(ВладелецФормы.Объект,ВидИзмененияДанных.Изменение)  ;
КонецПроцедуры



0



Joker_vad

Эксперт 1С

476 / 413 / 93

Регистрация: 26.09.2012

Сообщений: 1,904

09.11.2017, 22:33

4

1C
1
2
3
4
5
6
7
8
9
10
   ВладелецФормы.Модифицированность = Истина;
           Для Каждого Строка ИЗ ВладелецФормы.Объект.значенияПоказателейЦикл
           Если СтрСравнить(Строка.Показатель, "СдельноНорма") = 0 Тогда
            Строка.Значение = Строка.Значение +15;
            Сообщить(Строка.Показатель);
            Сообщить(Строка.Значение);
 
           КонецЦикла;
          ЭтаФорма.ОбновитьОтображениеДанных();
         ОтобразитьИзменениеДанных(ВладелецФормы.Объект,ВидИзмененияДанных.Изменение)

Добавлено через 11 секунд
а так?



0



0 / 0 / 0

Регистрация: 09.11.2017

Сообщений: 19

09.11.2017, 22:47

 [ТС]

5

Код изменила, но результат тот же.
Не знаю в чем разница, если этот же код работает с Документ — Разовые начисления, но структура этого документа определена в конфигурации и к нему напрямую обращаюсь, а Документ ДанныеДляРасчетаЗарплаты является общим для создания различных документов по шаблону (Шаблоны ввода исходных данных) интерактивно в 1С Предприятие. Т.е.когда захожу в журнал документов ДанныеДляРасчетаЗарплаты выбираю и кнопкой Создать новый документ, который называется Сделка, т.е. документ из шаблона. В конфигураторе именно такого документа Сделка нет, только документ ДанныеДляРасчетаЗарплаты. Может это не должно влиять, но я не могу нигде найти ответ.



0



1789 / 1213 / 438

Регистрация: 16.01.2015

Сообщений: 5,349

10.11.2017, 01:08

6

khenata, Скорей всего, дело в этом (из СП)

Описание:

Копирует данные формы, обладающие совместимой структурой.

Структура форм несовместима. Реквизиты имеют одинаковое Имя? Одинаковый тип значений?



0



0 / 0 / 0

Регистрация: 09.11.2017

Сообщений: 19

10.11.2017, 08:16

 [ТС]

7

программно же видит реквизиты, которые созданы в 1С Предприятие. ЗначенияПоказателей- это табличная часть объекта ДанныеДляРасчетаЗарплаты, через эту табличную часть программа видит созданные мной реквизиты шаблона в 1С Предприятие, но в самом объекте Документы.ДанныеДляРасчетаЗарплаты.ЗначенияПоказат елей моих реквизитов нет. Т.е. считывать данные можно, а вернуть рассчитанные значения в форму как интересно? Может есть где почитать решения для таких задач. Собственно говоря, нужно было создать специальный документ для не типового вида начисления и хотелось в некоторых столбцах производить вычисления и записывать результаты для каждой строки. Хотелось бы найти решение, т.к. это дает большую возможность гибко настраивать не стандартные виды начислений. Спасибо, что помогаете думать.



0



1789 / 1213 / 438

Регистрация: 16.01.2015

Сообщений: 5,349

10.11.2017, 16:02

8

khenata,

через эту табличную часть программа видит созданные мной реквизиты шаблона в 1С Предприятие, но в самом объекте Документы.ДанныеДляРасчетаЗарплаты.ЗначенияПоказат елей моих реквизитов нет.

Так о том и речь. На сервере вы форму владелец заполните без проблем, а дальше КопироватьДанныеФормы не отрабатывает.
Т.е. считайте, что вы создали структуру на владельце, условно:
(«Номенклатура», Номенклатура), («Сумма», Сумма). Если реквизит Номенклатура на форме приемник существует и тип значения одинаковый, данные перенесутся. Но если у вас поле на приемнике называется «Товар» или на источнике тип СправочникСсылка, а на приемнике Строка, то данных НЕ будет. Проверьте. Чудес-то не бывает. Раз работает с одной формой, но не работает со второй, значит дело в каком-то несоответствии во второй форме



0



0 / 0 / 0

Регистрация: 09.11.2017

Сообщений: 19

10.11.2017, 16:29

 [ТС]

9

не соображу как проверить и где смотреть, подскажите пожалуйста. в конфигураторе моего конкретного документа и его формы нет.



0



polax

1789 / 1213 / 438

Регистрация: 16.01.2015

Сообщений: 5,349

10.11.2017, 16:58

10

khenata, Не знаю точно, но вы говорите, что где-то существует шаблон, посмотреть в нем. Возможно дело в шаблоне?
Мысль пришла. Может так попробовать?

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды,ОбъектыНазначенияМассив) Экспорт
   ЗаполнитьНаСервере(ОбъектыНазначенияМассив [0]);
КонецПроцедуры;
 
&НаСервере
Процедура ЗаполнитьНаСервере(НашОбъект)
   Док = РеквизитФормыВЗначение("НашОбъект");
   ЗаполнитьОбъект(Док);
   ЗначениеВРеквизитФормы(Док, "НашОбъект");
КонецПроцедуры
 
 
// в модуле объекта обработки
 
 
Процедура ЗаполнитьОбъект(ОснРеквизит1) Экспорт
   ТЧ =ОснРеквизит1.ЗначенияПоказателей; 
   Для Каждого Строка ИЗ ТЧ Цикл
      Если СтрСравнить(Строка.Показатель, "СдельноНорма") = 0 Тогда
         Строка.Значение = Строка.Значение +15;
                        Сообщить(Строка.Показатель);
                  Сообщить(Строка.Значение);
           КонецЕсли;
        КонецЦикла;
КонецПроцедуры



0



0 / 0 / 0

Регистрация: 09.11.2017

Сообщений: 19

10.11.2017, 22:02

 [ТС]

11

тогда не находит Табличную часть:

{ВнешняяОбработка.ВнешняяОбработкаЗУП3102112017дан ные.МодульОбъекта(102)}: Поле объекта не обнаружено (ЗначенияПоказателей)
ТЧ =ОснРеквизит1.ЗначенияПоказателей;



0



polax

1789 / 1213 / 438

Регистрация: 16.01.2015

Сообщений: 5,349

10.11.2017, 22:43

12

khenata, А что отладчик показывает на значение ОбъектыНазначенияМассив [0]?
Просто не совсем пойму как работает ваша обработка Попробуйте изменить первую процедуру

1C
1
2
3
4
&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды,ОбъектыНазначенияМассив) Экспорт
   ЗаполнитьНаСервере(ВладелецФормы.Объект);
КонецПроцедуры;



0



0 / 0 / 0

Регистрация: 09.11.2017

Сообщений: 19

10.11.2017, 23:10

 [ТС]

13

на ОбъектНазначенияМассив — показывает ДанныеФрормыСтруктура



0



polax

1789 / 1213 / 438

Регистрация: 16.01.2015

Сообщений: 5,349

10.11.2017, 23:13

14

khenata, Отлично! Тогда так

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды,ОбъектыНазначенияМассив) Экспорт
   ЗаполнитьНаСервере(ОбъектыНазначенияМассив [0]);
КонецПроцедуры;
 
&НаСервере
Процедура ЗаполнитьНаСервере(НашОбъект)
   Док = РеквизитФормыВЗначение("НашОбъект.Объект");
   ЗаполнитьОбъект(Док);
   ЗначениеВРеквизитФормы(Док, "НашОбъект.Объект");
КонецПроцедуры
 
 
// в модуле объекта обработки
 
 
Процедура ЗаполнитьОбъект(ОснРеквизит1) Экспорт
   ТЧ =ОснРеквизит1.ЗначенияПоказателей; 
   Для Каждого Строка ИЗ ТЧ Цикл
      Если СтрСравнить(Строка.Показатель, "СдельноНорма") = 0 Тогда
         Строка.Значение = Строка.Значение +15;
                        Сообщить(Строка.Показатель);
                  Сообщить(Строка.Значение);
           КонецЕсли;
        КонецЦикла;
КонецПроцедуры



0



0 / 0 / 0

Регистрация: 09.11.2017

Сообщений: 19

10.11.2017, 23:23

 [ТС]

15

а теперь :
ВнешняяОбработка.ВнешняяОбработкаЗУП3102112017данн ые.Форма.Форма.Форма(33)}: Ошибка при вызове метода контекста (РеквизитФормыВЗначение)
Док=РеквизитФормыВЗначение(«НашОбъект.Объект»);
по причине:
Недопустимое значение параметра (параметр номер ‘1’)



0



polax

1789 / 1213 / 438

Регистрация: 16.01.2015

Сообщений: 5,349

11.11.2017, 00:18

16

khenata, Давайте попробуем через ДанныеФормыВЗначении. Все процедуры в модуле формы

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды,ОбъектыНазначенияМассив) Экспорт
   ЗаполнитьНаСервере(ОбъектыНазначенияМассив [0]);
КонецПроцедуры;
 
&НаСервере
Процедура ЗаполнитьНаСервере(НашОбъект)
   Док = ДанныеФормыВЗначение("НашОбъект",Тип("ДокументОбъект.ДанныеДляРасчетаЗарплаты");
   ЗаполнитьОбъект(Док.ЗначенияПоказателей);
   ЗначениеВРеквизитФормы(Док, "НашОбъект");
КонецПроцедуры
 
 
&НаСервере
Процедура ЗаполнитьОбъект(ТЧ) Экспорт
    
   Для Каждого Строка ИЗ ТЧ Цикл
      Если СтрСравнить(Строка.Показатель, "СдельноНорма") = 0 Тогда
         Строка.Значение = Строка.Значение +15;
                        Сообщить(Строка.Показатель);
                  Сообщить(Строка.Значение);
           КонецЕсли;
        КонецЦикла;
 
КонецПроцедуры

Добавлено через 3 минуты
Да ну на фиг. Невнимательность. Вторая процедура исправьте

1C
1
2
3
4
5
6
&НаСервере
Процедура ЗаполнитьНаСервере(НашОбъект)
   Док = ДанныеФормыВЗначение("НашОбъект",Тип("ДокументОбъект.ДанныеДляРасчетаЗарплаты");
   ЗаполнитьОбъект(Док.ЗначенияПоказателей);
   ЗначениеВДанныеФормы(Док, "НашОбъект");
КонецПроцедуры

И в третьей Экспорт не нужен

Добавлено через 11 минут
Нет не так. Сейчас напишу как надо. Уж извините, что-то туго соображаю сегодня ((

Добавлено через 8 минут
НашОбъект — без кавычек

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды,ОбъектыНазначенияМассив) Экспорт
   ЗаполнитьНаСервере(ОбъектыНазначенияМассив [0]);
КонецПроцедуры;
 
&НаСервере
Процедура ЗаполнитьНаСервере(НашОбъект)
   Док = ДанныеФормыВЗначение(НашОбъект,Тип("ДокументОбъект.ДанныеДляРасчетаЗарплаты");
   ЗаполнитьОбъект(Док.ЗначенияПоказателей);
   ЗначениеВДанныеФормы(Док, НашОбъект);
КонецПроцедуры
 
 
&НаСервере
Процедура ЗаполнитьОбъект(ТЧ) Экспорт
    
   Для Каждого Строка ИЗ ТЧ Цикл
      Если СтрСравнить(Строка.Показатель, "СдельноНорма") = 0 Тогда
         Строка.Значение = Строка.Значение +15;
                        Сообщить(Строка.Показатель);
                  Сообщить(Строка.Значение);
           КонецЕсли;
        КонецЦикла;
 
КонецПроцедуры



0



  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

В платформе 1С сообщения об ошибках бывают достаточно запутаны, и без должных навыков разобраться в причинах достаточно сложно. Вот и сообщение об ошибке при вызове контекста может ввести в ступор начинающего разработчика. Однако в подавляющем большинстве случаев мы видим подобное сообщение, если разработчик допустил ошибку в своем коде. Причем речь зачастую идет не об орфографических ошибках, а о логических.

Исправляем ситуацию

Чтобы избавиться от этого неприятного сообщения об ошибке при вызове метода контекста, следует понимать, что контекстом называют методы платформы 1С. Значит в определенной строке кода воспользовались методом с неверными параметрами или вызвали его не от того владельца. Всегда внимательно и полностью читайте сообщения об ошибках – часто в них содержится указание на строку и метод, вызвавший ошибку. Это поможет сэкономить время на отладку и поиск проблемного места в коде.

Рассмотрим действия разработчика на примере со специально допущенной ошибкой. Мы запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора. Компилятор 1С пропускает такую процедуру, так как орфографических ошибок в написании команд мы не допустили. Однако в режиме предприятия нас ждет такое сообщение об ошибке:


	 Запрос = Новый Запрос;
	 Запрос.Текст =
	         "ВЫБРАТЬ
	          |        Номенклатура.Ссылка КАК Ссылка,
	          |        Номенклатура.ВерсияДанных КАК ВерсияДанных,
	          |        Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
	          |        Номенклатура.Родитель КАК Родитель,
	          |        Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
	          |        Номенклатура.Код КАК Код,
	          |        Номенклатура.Наименование КАК Наименование,
	          |        Номенклатура.Артикул КАК Артикул,
	          |        Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
	          |        Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
	          |        Номенклатура.Предопределенный КАК Предопределенный,
	          |        Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
	          |ИЗ
	          |        Справочник.Номенклатура КАК Номенклатура
	          |ГДЕ
	          |         ";
	 РезультатЗапроса = Запрос.Выполнить();
	 ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	 Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
	 КонецЦикла;
Рис.1 Запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора
Рис.1 Запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора

Приведенный текст ошибки программисту 1С скажет, что в модуле формы обработки «ЧтениеЗаписьXML на 152 строчке кода не может выполниться запрос. Причина в том, что на 17 строчке запроса нет чего-то, что ждал компилятор. Таким образом, чтобы убрать подобное сообщение, необходимо выяснить, что там должно быть и написать недостающий код.

Увидев вышеприведенный кусок кода, разработчик заметит, что в запросе есть служебное слово «ГДЕ», дающее сигнал 1С, что дальше будет условие. Но мы забыли дописать его и, естественно, система с помощью сообщения об ошибке спрашивает нас – «а где условие?». Чтобы исправить эту ситуацию необходимо либо убрать оператор «ГДЕ» из запроса, либо добавить условие.

Но ошибки могут быть не только в текстах запросов. Допустим, мы хотим выбрать всю номенклатуру и узнать, входит ли она в определенную группу. Проверка происходит с помощью метода «ПринадлежитЭлементу» и его параметра, который должен быть типа СправочникСсылка. Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной.


	 Запрос = Новый Запрос;
	            Запрос.Текст =
	                       "ВЫБРАТЬ
	                        |          Номенклатура.Ссылка КАК Ссылка,
	                        |          Номенклатура.ВерсияДанных КАК ВерсияДанных,
	                        |          Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
	                        |          Номенклатура.Родитель КАК Родитель,
	                        |          Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
	                        |          Номенклатура.Код КАК Код,
	                        |          Номенклатура.Наименование КАК Наименование,
	                        |          Номенклатура.Артикул КАК Артикул,
	                        |          Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
	                        |          Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
	                        |          Номенклатура.Предопределенный КАК Предопределенный,
	                        |          Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
	                        |ИЗ
	                        |          Справочник.Номенклатура КАК Номенклатура
	                        |ГДЕ
	                        |          НЕ Номенклатура.ЭтоГруппа ";
	 НужнаяГруппаЭлементов = Справочники.Номенклатура.НайтиПоНаименованию("Мебель");
	 РезультатЗапроса = Запрос.Выполнить();
	 ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	 Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
	 Сообщить(ВыборкаДетальныеЗаписи.Ссылка.ПринадлежитЭлементу("НужнаяГруппаЭлементов"));
	 КонецЦикла;
Рис.2 Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной
Рис.2 Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной

1С выдает настолько же информативное сообщение, из которого мы понимаем, что на 158 строке у 1 параметра неправильный тип. Но что же делать, если мы не знаем, какой тип должен быть? В этом нам поможет Синтакс-помощник, встроенный в платформу 1С.

Рис.3 Синтакс-помощник
Рис.3 Синтакс-помощник

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

Рис.4 Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает
Рис.4 Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает

Чаще всего причиной подобных ошибок выступают следующие факторы:

  1. Невнимательность;
  2. Отсутствие опыта или знаний;
  3. Несогласованность действий разработчиков друг с другом;
  4. Изменения в методах контекста в новых версиях платформы.

Но ошибки при разработке ПО случаются постоянно, поскольку иногда ошибаются даже специалисты с многолетним опытом. Самое главное – уметь исправлять их и учиться на них. Постепенно вы будете видеть сообщения об ошибках все реже и научитесь замечать подобные «опечатки» еще до запуска 1С.

Понравилась статья? Поделить с друзьями:
  • Ошибка при вызове метода контекста прочитатьизменения ошибка формата представления изменений
  • Ошибка при вызове конструктора двоичные данные 1с
  • Ошибка при вызове метода контекста прочитатьxml
  • Ошибка при вызове метода контекста прочитатьxdto
  • Ошибка при вызове конструктора wsпрокси