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

Проблема при добавлении обычной группы формы

Я
   satoru

12.01.18 — 10:46

На управляемой форме создаю обычную группу программным путем и программа выдаёт ошибку:

{Документ.ПеремещениеТоваров.Форма.ФормаВводаПеремещения.Форма(956)}: Ошибка при вызове метода контекста (Добавить)

            ГруппаДляКнопок = Элементы.Добавить(«ГруппаДляКнопок»+КоличествоГрупп+»»,Тип(«ОбычнаяГруппаФормы»),Элементы.ГруппаПодборКнопки);

по причине:

Недопустимое значение параметров

Платформа 8.3.10.2168

Конфигурация Управление торговлей для Украины ред. 2.3

   hhhh

1 — 12.01.18 — 10:51

(0) может нельзя обычную группу внутрь кнопки впихивать?

   satoru

2 — 12.01.18 — 10:53

(1) Элементы.ГруппаПодборКнопки — это тоже обычная группа

   Тихий омут

3 — 12.01.18 — 10:54

(0) Тип(«ГруппаФормы»), не? Чёт не вижу  в ЖКК типа «ОбычнаяГруппаФормы»

   dezss

4 — 12.01.18 — 10:55

какой тип у Элементы.ГруппаПодборКнопки?

   dezss

5 — 12.01.18 — 10:57

и попробуй явное преобразование, т.е. не «+КоличествоГрупп+», а «+Строка(КоличествоГрупп)+».

   satoru

6 — 12.01.18 — 10:59

(4) тип «ГруппаФормы»

   dezss

7 — 12.01.18 — 11:01

(5) + просто у тебя ошибка «Недопустимое значение параметров», т.е. не указан номер неправильного параметра, а это говорит, ИМХО, о том, что дело не в параметрах метода, а в том, что происходит до этого, т.е. в конкатенации.

   satoru

8 — 12.01.18 — 11:02

Поменял код, с учетом замечаний:

            ГруппаДляКнопок = Элементы.Добавить(«ГруппаДляКнопок»+КоличествоГрупп+»»,Тип(«ГруппаФормы»),Элементы.ГруппаПодборКнопки);

            ГруппаДляКнопок.Вид = ВидГруппыФормы.ОбычнаяГруппа;

И всё заработало. Всем спасибо.

   satoru

9 — 12.01.18 — 12:45

В продолжении темы ещё момент: кнопки добавляются, но необходимо ещё, чтобы на кнопках отображалось изображение товара. Но согласно СП картинка может быть только из библиотеки, так же это касается и декорации формы.

Вопрос: выходит, что если программно создать любой объект на форме, который содержит атрибут «Картинка», нельзя указывать программным путем картинку из файла, хранилища и т.п.?

  

satoru

10 — 12.01.18 — 14:44

Нашёл костыльный способ, может кому-то пригодится:

        //добавляем картинку через создание нового реквизита

        ИмяРеквизита = «АдресКнопки»+СокрЛП(Строка.Код)+»»;

        РеквизитКнопки = Новый РеквизитФормы(ИмяРеквизита,Новый ОписаниеТипов(«Строка»));

        //добавляем новый реквизит, если его нет в форме

        Попытка

            РеквизитКнопки = ЭтаФорма[ИмяРеквизита];

        Исключение

            Массив = Новый Массив;

            Массив.Добавить(РеквизитКнопки);

            ИзменитьРеквизиты(Массив);

        КонецПопытки;

        //создаём поле с видом «ПолеКартинки»

        ИзображениеКнопки = Элементы.Добавить(«ИзображениеКнопки»+СокрЛП(Строка.Код)+»»,Тип(«ПолеФормы»),ГруппаКнопки);

        ИзображениеКнопки.ПутьКДанным = ИмяРеквизита;

        ИзображениеКнопки.Вид = ВидПоляФормы.ПолеКартинки;

Проблема при добавлении обычной группы формы

Я
   satoru

12.01.18 — 10:46

На управляемой форме создаю обычную группу программным путем и программа выдаёт ошибку:

{Документ.ПеремещениеТоваров.Форма.ФормаВводаПеремещения.Форма(956)}: Ошибка при вызове метода контекста (Добавить)

            ГруппаДляКнопок = Элементы.Добавить(«ГруппаДляКнопок»+КоличествоГрупп+»»,Тип(«ОбычнаяГруппаФормы»),Элементы.ГруппаПодборКнопки);

по причине:

Недопустимое значение параметров

Платформа 8.3.10.2168

Конфигурация Управление торговлей для Украины ред. 2.3

   hhhh

1 — 12.01.18 — 10:51

(0) может нельзя обычную группу внутрь кнопки впихивать?

   satoru

2 — 12.01.18 — 10:53

(1) Элементы.ГруппаПодборКнопки — это тоже обычная группа

   Тихий омут

3 — 12.01.18 — 10:54

(0) Тип(«ГруппаФормы»), не? Чёт не вижу  в ЖКК типа «ОбычнаяГруппаФормы»

   dezss

4 — 12.01.18 — 10:55

какой тип у Элементы.ГруппаПодборКнопки?

   dezss

5 — 12.01.18 — 10:57

и попробуй явное преобразование, т.е. не «+КоличествоГрупп+», а «+Строка(КоличествоГрупп)+».

   satoru

6 — 12.01.18 — 10:59

(4) тип «ГруппаФормы»

   dezss

7 — 12.01.18 — 11:01

(5) + просто у тебя ошибка «Недопустимое значение параметров», т.е. не указан номер неправильного параметра, а это говорит, ИМХО, о том, что дело не в параметрах метода, а в том, что происходит до этого, т.е. в конкатенации.

   satoru

8 — 12.01.18 — 11:02

Поменял код, с учетом замечаний:

            ГруппаДляКнопок = Элементы.Добавить(«ГруппаДляКнопок»+КоличествоГрупп+»»,Тип(«ГруппаФормы»),Элементы.ГруппаПодборКнопки);

            ГруппаДляКнопок.Вид = ВидГруппыФормы.ОбычнаяГруппа;

И всё заработало. Всем спасибо.

   satoru

9 — 12.01.18 — 12:45

В продолжении темы ещё момент: кнопки добавляются, но необходимо ещё, чтобы на кнопках отображалось изображение товара. Но согласно СП картинка может быть только из библиотеки, так же это касается и декорации формы.

Вопрос: выходит, что если программно создать любой объект на форме, который содержит атрибут «Картинка», нельзя указывать программным путем картинку из файла, хранилища и т.п.?

  

satoru

10 — 12.01.18 — 14:44

Нашёл костыльный способ, может кому-то пригодится:

        //добавляем картинку через создание нового реквизита

        ИмяРеквизита = «АдресКнопки»+СокрЛП(Строка.Код)+»»;

        РеквизитКнопки = Новый РеквизитФормы(ИмяРеквизита,Новый ОписаниеТипов(«Строка»));

        //добавляем новый реквизит, если его нет в форме

        Попытка

            РеквизитКнопки = ЭтаФорма[ИмяРеквизита];

        Исключение

            Массив = Новый Массив;

            Массив.Добавить(РеквизитКнопки);

            ИзменитьРеквизиты(Массив);

        КонецПопытки;

        //создаём поле с видом «ПолеКартинки»

        ИзображениеКнопки = Элементы.Добавить(«ИзображениеКнопки»+СокрЛП(Строка.Код)+»»,Тип(«ПолеФормы»),ГруппаКнопки);

        ИзображениеКнопки.ПутьКДанным = ИмяРеквизита;

        ИзображениеКнопки.Вид = ВидПоляФормы.ПолеКартинки;

ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку «Обновить» в браузере.

Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.

0 / 0 / 0

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

Сообщений: 15

1

Ошибка при вызове метода контекста(Добавить)

20.05.2021, 01:00. Показов 3469. Ответов 1


Здравствуйте. Необходимо было изобразить игру Сапёр в 1С, по заданию из задачника Чистова. Код ниже.

По итогу столкнулся с проблемой: {Обработка.сапер.Форма.Форма.Форма(35)}: Ошибка при вызове метода контекста (Добавить)
Группа = ЭтаФорма.Элементы.Добавить(«Ряд «+Х,Тип(«ГруппаФормы»),Элементы.ИгровоеПоле);
по причине:
Недопустимое значение параметра (параметр номер ‘1’)
Недопустимое значение параметра (параметр номер ‘1’)

как решить?

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
&НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)     МиныВсего = 10;     КолВоСтрок = 10;     КолВоСтолбцов = 10;     МиныОстаток = 10;     Флаги = 0; КонецПроцедуры   &НаКлиенте Процедура НачатьИгру(Команда)        НачатьИгруНаСервере();        ЭтаФорма.ОбновитьОтображениеДанных(Элементы["ИгровоеПоле"]); КонецПроцедуры     &НаСервере Процедура НачатьИгруНаСервере()             ИгровоеПоле = Элементы.Найти("ИгровоеПоле");         Если ИгровоеПоле <> Неопределено Тогда             ЭтаФорма.Элементы.Удалить(ИгровоеПоле);             КонецЕсли;               ИгровоеПоле = ЭтаФорма.Элементы.Добавить("ИгровоеПоле",Тип("ГруппаФормы"),ЭтаФорма);           ИгровоеПоле.Вид = ВидГруппыФормы.ОбычнаяГруппа;           ИгровоеПоле.Отображение = ОтображениеОбычнойГруппы.Нет;           ИгровоеПоле.ОтображатьЗаголовок = Ложь;           ИгровоеПоле.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда;           ИгровоеПоле.РазрешитьИзменениеСостава = Истина;           ИгровоеПоле.Видимость = Истина;                   Для Х = 1 По КолВоСтолбцов Цикл               Группа = ЭтаФорма.Элементы.Добавить("Ряд "+Х,Тип("ГруппаФормы"),Элементы.ИгровоеПоле);               Группа.Вид = ВидГруппыФормы.ОбычнаяГруппа;               Группа.ВертикальноеПоложениеВГруппе = ВертикальноеПоложениеПодчиненных;               Группа.Видимость = Истина;                   Для У = 1  по КолВоСтрок Цикл                   НоваяКнопка = ЭтаФорма.Элементы.Добавить("Клетка_У "+У+"_Х "+Х,Тип("ДекорацияФормы"),Группа);                   НоваяКнопка.Вид = ВидДекорацииФормы.Картинка;                   НоваяКнопка.Высота = 1;                   НоваяКнопка.Ширина = 2;                   НоваяКнопка.Видимость = Истина;                   НоваяКнопка.КонтекстноеМеню.Видимость = Истина;                   НоваяКнопка.Рамка = Новый Рамка(ТипРамкиЭлементаУправления.Выпуклая,3);                   НоваяКнопка.Гиперссылка = Истина;                   НоваяКнопка.УстановитьДействие("Нажатие","КнопкаНажатие");                                     КомандаВопрос = ЭтаФорма.Элементы.Добавить("Клетка_У "+У+"_Х "+Х+"КонтекстноеМенюВопрос",                   Тип("КнопкаФормы"),НоваяКнопка.КонтекстноеМеню);                   КомандаВопрос.ИмяКоманды = "Вопрос1";                   КомандаВопрос.Картинка = БиблиотекаКартинок.Справка;                                                       КомандаМина = ЭтаФорма.Элементы.Добавить("Клетка_У "+У+"_Х "+Х+"КонтекстноеМенюМина",                   Тип("КнопкаФормы"),НоваяКнопка.КонтекстноеМеню);                   КомандаМина.ИмяКоманды = "ЭтоМина";                   КомандаМина.Картинка = БиблиотекаКартинок.ОформлениеФлагКрасный;                                     НастройкаПоля = НастройкиПоля.Добавить();                   НастройкаПоля.ИмяПоля = "Клетка_У"+У+"_Х "+Х;                   НастройкаПоля.Строка = У;                   НастройкаПоля.Столбец = Х;                   НастройкаПоля.МинаВЯчейке = Ложь;                                 КонецЦикла;           КонецЦикла;                     ГенСлучЧис = Новый ГенераторСлучайныхЧисел();           Для СлучЧис = 1 По МиныВсего Цикл               МинаЕсть = Ложь;               Пока Не МинаЕсть Цикл                   ГдеМина = ГенСлучЧис.СлучайноеЧисло(0,НастройкиПоля.Количество()-1);                   Строка = НастройкиПоля[ГдеМина];                   Если Строка.Мина = Истина Тогда                       Продолжить                   КонецЕсли;                    Строка.Мина = истина;                    Элементы[Строка.ИмяПоля].Заголовок = "Х";                    МинаЕсть = Истина;                КонецЦикла;            КонецЦикла;                        Для Х = 1 по КолВоСтолбцов Цикл                Для У = 1 По КолВоСтрок Цикл                    ИмяТекущегоЭлемента = "Клетка_У "+У+"_Х "+Х;                    Если Элементы[ИмяТекущегоЭлемента].Заголовок = "Х" Тогда                        Продолжить;                    КонецЕсли;                    МиныРядом =0;                                        ИмяЭлемента = "Клетка_У"+(У-1)+"_Х "+(Х-1);                    Если (У-1>0 и Х-1>0) и Элементы[ИмяЭлемента].Заголовок = "Х" тогда                        МиныРядом = МиныРядом+1;                    КонецЕсли;                                         ИмяЭлемента = "Клетка_У"+(У-1)+"_Х "+(Х);                    Если (У-1>0) и Элементы[ИмяЭлемента].Заголовок = "Х" тогда                        МиныРядом = МиныРядом+1;                    КонецЕсли;                                        ИмяЭлемента = "Клетка_У"+(У-1)+"_Х "+(Х+1);                    Если (У-1>0 и Х+1<=КолВоСтолбцов) И Элементы[ИмяЭлемента].Заголовок = "Х" тогда                        МиныРядом = МиныРядом+1;                    КонецЕсли;                                                            ИмяЭлемента = "Клетка_У"+(У)+"_Х "+(Х-1);                    Если (Х-1>0) и Элементы[ИмяЭлемента].Заголовок = "Х" тогда                        МиныРядом = МиныРядом+1;                    КонецЕсли;                                                            ИмяЭлемента = "Клетка_У"+(У)+"_Х "+(Х+1);                    Если (Х+1<=КолВоСтолбцов) и Элементы[ИмяЭлемента].Заголовок = "Х" тогда                        МиныРядом = МиныРядом+1;                    КонецЕсли;                                                            ИмяЭлемента = "Клетка_У"+(У+1)+"_Х "+(Х-1);                    Если (У+1<=КолВоСтрок и Х-1>0) и Элементы[ИмяЭлемента].Заголовок = "Х" тогда                        МиныРядом = МиныРядом+1;                    КонецЕсли;                                                            ИмяЭлемента = "Клетка_У"+(У+1)+"_Х "+(Х);                    Если (У+1<=КолВоСтрок) и Элементы[ИмяЭлемента].Заголовок = "Х" тогда                        МиныРядом = МиныРядом+1;                    КонецЕсли;                                                            ИмяЭлемента = "Клетка_У"+(У+1)+"_Х "+(Х+1);                    Если (У+1<=КолВоСтрок и Х+1<=КолВоСтолбцов) и Элементы[ИмяЭлемента].Заголовок = "Х" тогда                        МиныРядом = МиныРядом+1;                    КонецЕсли;                                        Если МиныРядом > 0 Тогда                        Элементы[ИмяТекущегоЭлемента].Заголовок = МиныРядом;                                            КонецЕсли;                КонецЦикла;                КОнецЦикла;                                                                     КонецПроцедуры     &НаКлиенте     Процедура Вопрос1(Команда)         ТекущийЭлемент.Картинка = БиблиотекаКартинок.Справка;     КонецПроцедуры   &НаКлиенте     Процедура ЭтоМина(Команда)         ТекущийЭлемент.Картинка = БиблиотекаКартинок.ОформлениеФлагКрасный;     КонецПроцедуры         &НаКлиенте Процедура КнопкаНажатие(Элемент)     Элемент.Рамка = Новый Рамка(ТипРамкиЭлементаУправления.Одинарная, 1);     Если Элемент.Заголовок = "Х" Тогда         Элемент.Картинка = библиотекаКартинок.Удалить;         ОткрытьВсеМины();         Предупреждение("Неудачно");     Иначе         Элемент.Картинка = Новый Картинка;         Элемент.ТекстНеВыбраннойКартинки = Элемент.Заголовок;     КонецЕсли;     КонецПРоцедуры       &НаСервере Процедура ОткрытьВсеМины()     Для Х = 1 По КолВоСтолбцов Цикл         Для У = 1 по КолВоСтрок Цикл             ИмяТекущегоЭлемента = "Клетка_У"+У+"_ Х"+Х;             Если Элементы[ИмяТекущегоЭлемента].Заголовок = "Х" Тогда                 Элементы[ИмяТекущегоЭлемента].Рамка = Новый Рамка(ТипРамкиЭлементаУправления.Одинарная, 1);                 Элементы[ИмяТекущегоЭлемента].Картинка = БиблиотекаКартинок.Удалить;             КонецЕсли;         КОнецЦикла;     КонецЦикла;     КонецПроцедуры

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

0

Ошибка при вызове метода контекста(Добавить)

Здравствуйте. Необходимо было изобразить игру Сапёр в 1С, по заданию из задачника Чистова. Код ниже.

По итогу столкнулся с проблемой: <Обработка.сапер.Форма.Форма.Форма(35)>: Ошибка при вызове метода контекста (Добавить)
Группа = ЭтаФорма.Элементы.Добавить(«Ряд «+Х,Тип(«ГруппаФормы»),Элементы.ИгровоеПоле);
по причине:
Недопустимое значение параметра (параметр номер ‘1’)
Недопустимое значение параметра (параметр номер ‘1’)

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

Ошибка при вызове метода контекста
Здравствуйте. У меня возникла проблема (с крупным содержимым). Я пыталась сделать автоматическое.

Ошибка при вызове метода контекста
Помогите. 1с 8.3 УТ 10.3т Задача: Выгрузить реализацию из БП 2.0 и загрузить приходный ордер.

Недопустимое значение параметров элементы добавитьОшибка при вызове метода контекста(Послать)
Всем привет. Чето ни как не разберусь, пробую отправить электронку выдает «Ошибка при вызове метода.

Ошибка при вызове метода контекста (Записать)
Есть кусок кода(стандартная обработка загрузки товара из документа Excel) СтрНоменклатура =.

Решение

Добавлено через 1 минуту

И везде, идентификатор не может содержать пробелов

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

Открытие формы (Ошибка при вызове метода контекста)
открываю форму методом открытьФорму(«имяФормы.через точку.из подсказки.все правильно») но не.

Недопустимое значение параметров элементы добавитьОшибка при вызове метода контекста (Добавить)
Помогите разобраться почему не работает!? Код программы: Функция.

Источник

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

Добрый день.Замучался немного с планировщиком.такой вопрос появилась ошибка
Ошибка при вызове метода контекста (Добавить)
НовыйМастер = ИзмерениеМастера.Элементы.Добавить(выб.Мастер);
по причине:
Недопустимое значение параметра (параметр номер ‘1’)

&НаКлиенте
Процедура Отобразить(Команда)
Планировщик.ТекущиеПериодыОтображения.Очистить();
//Планировщик.ТекущиеПериодыОтображения.Добавить(ПериодОтображенияНачало, ПериодОтображенияКонец);
Планировщик.ТекущиеПериодыОтображения.Добавить(НачалоДня(Текущаядата()), КонецДня(Текущаядата()));
Планировщик.ЕдиницаПериодическогоВарианта = ТипЕдиницыШкалыВремени.Час;
Планировщик.КратностьПериодическогоВарианта = 24;
Планировщик.ОтображатьПеренесенныеЗаголовки = Истина;
Планировщик.ОтступСНачалаПереносаШкалыВремени=8;
Планировщик.ОтступСКонцаПереносаШкалыВремени=3;

// Инициализируем измерения планировщика
ИзмеренияПланировщика = Планировщик.Измерения;
ИзмеренияПланировщика.Очистить();

Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| Заявка.Ссылка КАК Ссылка,
| Заявка.Мастер КАК Мастер,
| Заявка.ДатаНачала КАК ДатаНачала,
| Заявка.ДатаОкончания КАК ДатаОкончания
|ИЗ
| Документ.Заявка КАК Заявка
|ГДЕ
| ЗаявкаНаРемонтСокр.Дата МЕЖДУ &ДатаНачало И &ДатаКонец»;

Запрос.УстановитьПараметр(«ДатаНачало»,НачалоГода(Текущаядата()));
Запрос.УстановитьПараметр(«ДатаКонец», КонецДня(Текущаядата()));
выб = Запрос.Выполнить().Выбрать();

Пока выб.Следующий() Цикл
// Заполнение измерений продавцы
НовыйМастер = ИзмерениеМастера.Элементы.Добавить(выб.Мастер);
НовыйМастер.Текст = выб.Мастер.Наименование;

Источник

v8.2: Программное создание таблицы в управляемой форме

Мне необходимо программным образом в справочник Пользователи( в управляемую форму списка) добавить таблицу, отображающую регистр сведений «Контактная информация». Проблема в том, что не получается у этой таблицы объявить поля(колонки), если таблица представляет собой динамический список.

Создание реквизита
реквизиты = Новый Массив;
реквизиты.Добавить(Новый РеквизитФормы(«Поле», Новый ОписаниеТипов («ДинамическийСписок»),,»Поле таблицы»));
ЭтаФорма.ИзменитьРеквизиты(реквизиты);
ЭтаФорма.Поле.ОсновнаяТаблица=»РегистрСведений.КонтактнаяИнформация»;

создание элемента
Элемент = Элементы.Добавить(«Поле», Тип(«ТаблицаФормы»), ЭтаФорма);
Элемент.ПутьКДанным = «Поле»;
Элемент.Видимость = Истина;

При попытке создать элемент, являющийся колонкой таблицы, выдается ошибка:
<Справочник.Пользователи.Форма.ФормаСписка.Форма(211)>: Ошибка при вызове метода контекста (Добавить): Недопустимое значение параметров
Элемент1 = Элементы.Добавить(«Представление»,Тип(«Строка»),Элемент);
по причине:
Недопустимое значение параметров

Ниже код, где возникает ошибка:
Элемент1 = Элементы.Добавить(«Представление»,Тип(«Строка»),Элемент); ошибка возникает здесь!
Элемент1.Вид = ВидПоляФормы.ПолеВвода;
Элемент1.ПутьКДанным = «Поле.Представление»;

Может, кто-нибудь сталкивался с подобной ситуацией? Помогите 🙂

Можно для динамического списка задать свой запрос, но проблема та же((( Не могу создать колонки с соответствующими полями в запросе.

Источник

Вывод дерева значений на управляемую форму

<Форма.Форма.Форма(88)>: Ошибка при вызове метода контекста (Добавить)
НовыйЭлемент = Элементы.Добавить(Колонка.Имя, Тип(«ПолеФормы»), ЭлементДерево);
по причине: Недопустимое значение параметров

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

// Преобразование объекта прикладного типа ДеревоЗначений
// в реквизит управляемой формы (данные формы)
ЗначениеВРеквизитФормы(ВыборкаПериод, «Дерево»);

// Создание элемента формы типа ТаблицаФормы для отображения дерева
ЭлементДерево = Элементы.Добавить(«Дерево», Тип(«ТаблицаФормы»));
ЭлементДерево.ПутьКДанным = «Дерево»;
ЭлементДерево.Отображение = ОтображениеТаблицы.Дерево;

Для Каждого Колонка Из ВыборкаПериод.Колонки Цикл
НовыйЭлемент = Элементы.Добавить(Колонка.Имя, Тип(«ПолеФормы»), ЭлементДерево);
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
НовыйЭлемент.ПутьКДанным = «Дерево.» + Колонка.Имя;
КонецЦикла;

Источник

Форум (регистрация не требуется)

Программный изменение формы списка, Динамический список

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

p.s. Просьба задавать вопросы только по программированию. На вопросы по типовым конфигурациям обычно не отвечаю по двум причинам
1. В последнее время редко с ними работаю.
2. Чтобы ответить на вопрос требуется: установить соответствующую базу нужного релиза, смоделировать ситуацию, и только после этого возможно залезть в конфигуратор и разобраться что не так (к сожалению, у меня нет столько времени).

Программный изменение формы списка, Динамический список

Здравствуйте Сергей!
Вывожу программно новый реквизит на управляемую форму списка.
Меняю произвольный запрос из динамического списка(Добавляю в него выбор нужного мне поля).
Хочу вывести новое поле в колонке таблицы.
На строчке кода Элемент.ПутьКДанным = «Список.ВнешнийКод» выдает ошибку, и ругается на неправильный путь.
Как быть? Добавить реквизит в динамический список тоже нельзя.
Код: выделить все ЭтаФормаПерем.Список.ТекстЗапроса = СтрЗаменить(ЭтаФормаПерем.Список.ТекстЗапроса,»СправочникКонтрагенты.Ссылка,»,»СправочникКонтрагенты.Ссылка, СправочникКонтрагенты.ВнешнийКод КАК ВнешнийКод»);

Re: Программный изменение формы списка, Динамический список

НовЭлемент = ЭтаФормаПерем.Элементы.Добавить(«ПолеВнешнийКод»,Тип(«ПолеФормы»),ЭтаФормаПерем.Элементы.Список);
НовЭлемент.Вид = ВидПоляФормы.ПолеНадписи;
НовЭлемент.ПутьКДанным = «Список.ВнешнийКод»;

и у поля ВнешнийКод необходимо в реквизитах формы поставить галочку «использовать всегда»

Мне до конца не ясна задача, для чего вам все это потребовалось

Более простой вариант: вытащить все колонки и программно регулировать видимость колонок.

Re: Программный изменение формы списка, Динамический список

Re: Программный изменение формы списка, Динамический список

и у поля ВнешнийКод необходимо в реквизитах формы поставить галочку «использовать всегда»

Все делается таким образом, для того чтобы не вмешиваться в форму.
весь код пишется в общем модуле и не затрагивает форму.
Цель обновление без проблем.

Re: Программный изменение формы списка, Динамический список

Re: Программный изменение формы списка, Динамический список

Re: Программный изменение формы списка, Динамический список

У меня все работает:
ЭтаФорма.Список.ТекстЗапроса = СтрЗаменить(ЭтаФорма.Список.ТекстЗапроса,»СправочникКонтрагенты.Ссылка,»,»СправочникКонтрагенты.Ссылка, СправочникКонтрагенты.ВнешнийКод КАК ВнешнийКод,»);
НовЭлемент = ЭтаФорма.Элементы.Добавить(«ПолеВнешнийКод»,Тип(«ПолеФормы»),ЭтаФорма.Элементы.Список);
НовЭлемент.Вид = ВидПоляФормы.ПолеНадписи;
НовЭлемент.ПутьКДанным = «Список.ВнешнийКод»;

(Это при условии, что в динамическом списке установлен флаг «произвольный запрос», к сожалению под рукой у меня нет свежей БП 3.0, в старой БП 3.0 этот флаг не установлен)

Re: Программный изменение формы списка, Динамический список

Код: выделить все Форма.Список.ТекстЗапроса = СтрЗаменить(Форма.Список.ТекстЗапроса, «СостоянияЭД.СостояниеВерсииЭД», «,ДокументЗаказКлиента.ФАЙТ_ДополнительныйНомер КАК ДополнительныйНомер»);
Форма.Список.УстановитьОбязательноеИспользование(«ДополнительныйНомер», Истина);
Элемент = Форма.Элементы.Добавить(«ПолеДополнительныйНомер», Тип(«ПолеФормы»), Форма.Элементы.Список);
Элемент.Вид = ВидПоляФормы.ПолеНадписи;
Элемент.ПутьКДанным = «Список.ДополнительныйНомер»;

Re: Программный изменение формы списка, Динамический список

Re: Программный изменение формы списка, Динамический список

Источник

1C. «Недопустимое значение параметра» при вызове макета в расширении

Дано: 1С (в данном примере конфигурация 1С:Университет ПРОФ), платформа 8.3.10. Создано расширение, в котором к документу добавлен новый макет. В модуле менеджера документа есть процедура, формирующая печатную форму на базе макета. Необходимо было заменить данную процедуру (при помощи директивы расширения «&Вместо») и заменить вызов встроенного макета на наш, добавленный в расширение.
Проблема: при вызове добавленного макета в момент его печати в режиме «1С:Предприятие» возникала ошибка при получении макета:

{ЗаявлениеПоступающегоРасширение Документ.ЗаявлениеПоступающего.МодульМенеджера(176)}: Ошибка при вызове метода контекста (ПолучитьМакет)
Макет = Документы.ЗаявлениеПоступающего.ПолучитьМакет («Расш1_МакетЗаявлениеПоступающего»);
по причине:
Недопустимое значение параметра (параметр номер ‘1’)

Код, вызывающий ошибку:

Код, вызывающий ошибку:

Варианты решения:

1. Добавить функцию, выполняемую на сервере, которая вызовет добавленный макет из документа:

&НаСервере

Функция ПолучитьМакетЗаявленияИзРасширения()

    Макет = Документы.ЗаявлениеПоступающего.ПолучитьМакет («Расш1_МакетЗаявлениеПоступающего»);

    Возврат Макет;

КонецФункции

А затем из заменяемой процедуры вызвать эту функцию:

А затем из заменяемой процедуры вызвать эту функцию:

(как оказалось этот способ не нужен. Причину читайте ниже)

2. Другой вариант — перенести макеты в общие и следующей командой вызвать (получить) макет из «Общие макеты»:

Макет = ПолучитьОбщийМакет («Расш1_МакетЗаявлениеПоступающего»);

——
Видимо это всё-таки какой-то глюк платформы (протестировано на 8.3.10.2252 и 8.3.10.2299), но если просто добавить пустой макет в общие макеты в расширении, то команда, ранее вызывавшая ошибку (ПолучитьМакет из макета документа без допфункций на сервере), начинает нормально работать. При удалении пустого общего макета, команда вызова макета из документа снова вызывает ошибку (даже если вынесена в функцию на сервере, как показано в способе 1).
Т.е. если всё-таки хочется сделать макеты нормально в документе (ожидая, что когда-нибудь этот глюк исправят), то нужно сделать макет-заглушку в общих макетах. Например:

При этом, если в расширении добавлено несколько макетов к документу, то «заглушки» достаточно только одной.

Если Вам понравилась статья, пожалуйста, поставьте лайк, сделайте репост или оставьте комментарий. Если у Вас есть какие-либо замечания, также пишите комментарии.

Содержание

  1. Решение проблемы
  2. Исправляем ситуацию
  3. Контекстные правила и методы
  4. Несоблюдение правил и методов программного контекста
  5. Ошибки команд
  6. Как узнать правильный метод?
  7. Что полезно знать об ошибках

Любой программист 1С встречался с таким сообщением, как «Ошибка при вызове метода контекста (Выполнить)». Обычно эта ошибка не вызывает затруднения у опытного программиста. Почему она возникает? Рассмотрим ниже.

Как в любом языке программирования, в платформе 1С есть предопределенные методы, которые облегчают жизнь разработчикам. Но выполнение этих команд требует правильного соблюдения синтаксиса языка программирования.

Самые распространенные ошибки при вызове типовых методов:

  • Записать
  • Создать
  • Подключиться
  • Connect
  • ПроверитьВывод
  • PreviewFile1C
  • Прочитать
  • Выполнить
  • ВыполнитьПакет
  • ПрочитатьИзменения

Рассмотрим пример. Мы программно создали запрос (справочник по запросам), передав в параметры «текст» вот такой фрагмент:

Получите 267 видеоуроков по 1С бесплатно:

В конструкции «ГДЕ» мы преднамеренно ошиблись, поставив «И», но не прописав еще одно условие. Совершенно логично, что 1С не сможет справиться с таким запросом и выдаст ошибку:

<МодульСеанса(21)>: Ошибка при вызове метода контекста (Выполнить)
РезультатЗапроса = Запрос.Выполнить();
по причине:
<(13, 4)>: Синтаксическая ошибка
И >

Рассмотрим еще один пример:

Перенесем ошибочный код в обработчик «ПередЗаписью» справочника «Версии программ» и попробуем записать справочник программно. Видим ошибку:

<МодульСеанса(8)>: Ошибка при вызове метода контекста (Записать)
Выборка.ПолучитьОбъект().Записать();
по причине:
Ошибка при выполнении обработчика — ‘ПередЗаписью’
по причине:
<Справочник.ВерсииПрограмм.МодульОбъекта(20)>: Ошибка при вызове метода контекста (Выполнить)
РезультатЗапроса = Запрос.Выполнить();
по причине:
<(13, 4)>: Синтаксическая ошибка
И >

Несмотря на то, что ошибка заключается в выполнения метода «Выполнить», система ругается и на строчку кода, где вызывается программная запись объекта.

Решение проблемы

Для решения проблемы достаточно понять, в чем именно заключается ошибка. В 99% случаев проблема решается банальным чтением справки и анализом проблемы.

Для того чтобы узнать, как пользоваться тем или иным методом, достаточно установить курсор на интересующей Вас функции и нажать «Ctrl + F1». Платформа 1С выдаст Вам контекстную подсказку по требуемому методу:

Проверьте параметры, передаваемые в функцию, и правильность её использования.

Другие статьи по 1С:

К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.

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

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

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

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

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

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

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

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

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

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

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

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

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

Понимание принципов функционирования метода контекста поможет избежать ошибок при работе в 1С.

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

Любой программный продукт архитектурно состоит из модулей (module, англ.), частей. Модульные части программы 1С и их местоположение показаны на рисунке:

Программные модули, в свою очередь, состоят из разделов:

Контекст (context, англ.) — это одно из важнейших понятий в программировании. В 1С под ним понимается окружение модуля и его разделов, — какие именно переменные, свойства, объекты, метод (method) и события могут быть ему доступны в каждой конкретной точке. В разных точках context, как правило, уже другой.

Разработчик (доработчик) должен понимать — какие контекстные свойства имеет точка и какой method является доступным для использования в ней.

В восьмёрке выделены контекстные виды:

  • В любой точке конфигурации доступен Глобальный context. Отдельная ветка синтаксис-помощника показывает доступные для вызова функции:
  • Локальный context (более низкого уровня) доступен в точках каждой модульной части;
  • Ещё ниже уровень — локальный context процедуры и так далее.

Базовыми являются основные четыре правила для доступа процедур, переменных, и ф-ций в модулях:

  • В общих модульных частях не будут доступными для экспорта переменные, процедуры и ф-ции модульных приложений;
  • В модульных приложениях есть доступ для экспорта процедур и ф-ций общих модулей;
  • Для общих мод. частей открыт доступ к экспорту процедур и ф-ций прочих общих модулей;
  • Для модульных прикладных объектов и для модульных форм являются доступными переменные, функции и процедуры модулей приложений для экспорта и общих модулей.

Если какой-либо форме присвоен основной реквизит, то в контексте этой формы будут содержаться свойство и method, отвечающие этому основному реквизиту. К примеру, в модуле формы для элемента справочника Номенклатура доступен method и свойства объекта СправочникОбъект.Номенклатура.

Иллюстрация приведённых правил на схеме:

Стрелками обозначено что одной из модульных частей предоставляется возможность другим по обращению к своим переменным, функциям и процедурам для экспорта. Напоминаем, — в общем модуле не существует объявления переменных.

Несоблюдение правил и методов программного контекста

Все программисты встречались с уведомлением об ошибке 1С при вызове метода контекста. Рассмотрим такой пример:

Ошибки команд

При создании запроса в справочнике в его параметре «текст» был внесён фрагмент:

В конструкции «ГДЕ» было внесено «И», но само условие осталось непрописанным.

Реакция программы была такой:

<МОДСеанса(21)>: Ошибка при вызове метода контекста (Выполнить)
РезультатЗапроса = Запрос.Выполнить();

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

Для того чтобы получить подсказку платформы 1С о том, как использовать какой-либо method, поставьте курсор на нужную функцию и нажмите «Ctrl + F1». При возникновении ошибок нужно проверить параметры, которые передаются в функцию, а также правильность использования функции.

Что полезно знать об ошибках

Напоследок проведём общий анализ ошибок в 1С. Любая из них может быть причиной тех, которым посвящена тема статьи:

  • Нарушение как логической, так физической целостности информационной базы;
  • Ошибки пользователей при обращении с платформой;
  • Ошибочно введённый разработчиком (доработчиком) код;
  • Человеческий фактор — например, забывчивость;
  • Чрезвычайные ситуации (отсутствие света, метель, дождь, град, ураган, наводнение).

Провести анализ ошибки:

  • Сравнить релизы платформы и конфигурации;
  • Прочитать полный текст сообщения до конца, некоторое время подумать и понять то, что написала машина. Очень часто люди не читают такие сообщения целиком. Но бывает, что именно в конце его содержатся рекомендации к её устранению;
  • Проанализировать насколько давней она является и обстоятельства её появления;
  • Можно ли её воспроизвести;
  • Невоспроизводимые ранее не встречавшиеся ошибки, как правило, не исправляются;
  • Повторяется ли ошибка с другого компьютера или другим пользователем. В этом случае рассмотреть очистку кэша, настройку прав, очистку пользовательских настроек.

Дополнительно о причинах ошибок:

  • Часть ошибок — это результат использования нелицензионного программного обеспечения (и windows тоже);
  • Повреждённая платформа — это самый распространённый пример. Всего один патч способен взломать версию платформы. После чего можно не обнаружить базу (или лицензию);
  • При первичном столкновении с ошибкой стоит поискать решение в поисковике — возможно решение её уже кем-то найдено;
  • Следите за актуальностью релиза конфигурации (особенно если из них сдаётся регламентированная отчётность);
  • Актуальность релиза платформы — для каждой конфигурации рекомендован свой релиз;
    Все события, происходящие в 1С, протоколируются в технологическом журнале!
  • Перед началом каких-то действий с базой необходимо делать архивную копию!

Теперь вы знаете что такое context, почему возникают связанные с ним ошибки, как анализировать ошибки в 1С и как их решать.

В платформе 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С.

Рекомендовать в новости

——
Видимо это всё-таки какой-то глюк платформы (протестировано на 8.3.10.2252 и 8.3.10.2299), но если просто добавить пустой макет в общие макеты в расширении, то команда, ранее вызывавшая ошибку (ПолучитьМакет из макета документа без допфункций на сервере), начинает нормально работать. При удалении пустого общего макета, команда вызова макета из документа снова вызывает ошибку (даже если вынесена в функцию на сервере, как показано в способе 1).
Т.е. если всё-таки хочется сделать макеты нормально в документе (ожидая, что когда-нибудь этот глюк исправят), то нужно сделать макет-заглушку в общих макетах. Например:

При этом, если в расширении добавлено несколько макетов к документу, то «заглушки» достаточно только одной.

Если Вам понравилась статья, пожалуйста, поставьте лайк, сделайте репост или оставьте комментарий. Если у Вас есть какие-либо замечания, также пишите комментарии.

Содержание

  1. Решение проблемы
  2. Исправляем ситуацию
  3. Контекстные правила и методы
  4. Несоблюдение правил и методов программного контекста
  5. Ошибки команд
  6. Как узнать правильный метод?
  7. Что полезно знать об ошибках

Любой программист 1С встречался с таким сообщением, как «Ошибка при вызове метода контекста (Выполнить)». Обычно эта ошибка не вызывает затруднения у опытного программиста. Почему она возникает? Рассмотрим ниже.

Как в любом языке программирования, в платформе 1С есть предопределенные методы, которые облегчают жизнь разработчикам. Но выполнение этих команд требует правильного соблюдения синтаксиса языка программирования.

Самые распространенные ошибки при вызове типовых методов:

  • Записать
  • Создать
  • Подключиться
  • Connect
  • ПроверитьВывод
  • PreviewFile1C
  • Прочитать
  • Выполнить
  • ВыполнитьПакет
  • ПрочитатьИзменения

Рассмотрим пример. Мы программно создали запрос (справочник по запросам), передав в параметры «текст» вот такой фрагмент:

Получите 267 видеоуроков по 1С бесплатно:

В конструкции «ГДЕ» мы преднамеренно ошиблись, поставив «И», но не прописав еще одно условие. Совершенно логично, что 1С не сможет справиться с таким запросом и выдаст ошибку:

<МодульСеанса(21)>: Ошибка при вызове метода контекста (Выполнить)
РезультатЗапроса = Запрос.Выполнить();
по причине:
<(13, 4)>: Синтаксическая ошибка
И >

Рассмотрим еще один пример:

Перенесем ошибочный код в обработчик «ПередЗаписью» справочника «Версии программ» и попробуем записать справочник программно. Видим ошибку:

<МодульСеанса(8)>: Ошибка при вызове метода контекста (Записать)
Выборка.ПолучитьОбъект().Записать();
по причине:
Ошибка при выполнении обработчика — ‘ПередЗаписью’
по причине:
<Справочник.ВерсииПрограмм.МодульОбъекта(20)>: Ошибка при вызове метода контекста (Выполнить)
РезультатЗапроса = Запрос.Выполнить();
по причине:
<(13, 4)>: Синтаксическая ошибка
И >

Несмотря на то, что ошибка заключается в выполнения метода «Выполнить», система ругается и на строчку кода, где вызывается программная запись объекта.

Решение проблемы

Для решения проблемы достаточно понять, в чем именно заключается ошибка. В 99% случаев проблема решается банальным чтением справки и анализом проблемы.

Для того чтобы узнать, как пользоваться тем или иным методом, достаточно установить курсор на интересующей Вас функции и нажать «Ctrl + F1». Платформа 1С выдаст Вам контекстную подсказку по требуемому методу:

Проверьте параметры, передаваемые в функцию, и правильность её использования.

Другие статьи по 1С:

К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.

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

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

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

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

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

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

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

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

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

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

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

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

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

Понимание принципов функционирования метода контекста поможет избежать ошибок при работе в 1С.

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

Любой программный продукт архитектурно состоит из модулей (module, англ.), частей. Модульные части программы 1С и их местоположение показаны на рисунке:

Программные модули, в свою очередь, состоят из разделов:

Контекст (context, англ.) — это одно из важнейших понятий в программировании. В 1С под ним понимается окружение модуля и его разделов, — какие именно переменные, свойства, объекты, метод (method) и события могут быть ему доступны в каждой конкретной точке. В разных точках context, как правило, уже другой.

Разработчик (доработчик) должен понимать — какие контекстные свойства имеет точка и какой method является доступным для использования в ней.

В восьмёрке выделены контекстные виды:

  • В любой точке конфигурации доступен Глобальный context. Отдельная ветка синтаксис-помощника показывает доступные для вызова функции:
  • Локальный context (более низкого уровня) доступен в точках каждой модульной части;
  • Ещё ниже уровень — локальный context процедуры и так далее.

Базовыми являются основные четыре правила для доступа процедур, переменных, и ф-ций в модулях:

  • В общих модульных частях не будут доступными для экспорта переменные, процедуры и ф-ции модульных приложений;
  • В модульных приложениях есть доступ для экспорта процедур и ф-ций общих модулей;
  • Для общих мод. частей открыт доступ к экспорту процедур и ф-ций прочих общих модулей;
  • Для модульных прикладных объектов и для модульных форм являются доступными переменные, функции и процедуры модулей приложений для экспорта и общих модулей.

Если какой-либо форме присвоен основной реквизит, то в контексте этой формы будут содержаться свойство и method, отвечающие этому основному реквизиту. К примеру, в модуле формы для элемента справочника Номенклатура доступен method и свойства объекта СправочникОбъект.Номенклатура.

Иллюстрация приведённых правил на схеме:

Стрелками обозначено что одной из модульных частей предоставляется возможность другим по обращению к своим переменным, функциям и процедурам для экспорта. Напоминаем, — в общем модуле не существует объявления переменных.

Несоблюдение правил и методов программного контекста

Все программисты встречались с уведомлением об ошибке 1С при вызове метода контекста. Рассмотрим такой пример:

Ошибки команд

При создании запроса в справочнике в его параметре «текст» был внесён фрагмент:

В конструкции «ГДЕ» было внесено «И», но само условие осталось непрописанным.

Реакция программы была такой:

<МОДСеанса(21)>: Ошибка при вызове метода контекста (Выполнить)
РезультатЗапроса = Запрос.Выполнить();

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

Для того чтобы получить подсказку платформы 1С о том, как использовать какой-либо method, поставьте курсор на нужную функцию и нажмите «Ctrl + F1». При возникновении ошибок нужно проверить параметры, которые передаются в функцию, а также правильность использования функции.

Что полезно знать об ошибках

Напоследок проведём общий анализ ошибок в 1С. Любая из них может быть причиной тех, которым посвящена тема статьи:

  • Нарушение как логической, так физической целостности информационной базы;
  • Ошибки пользователей при обращении с платформой;
  • Ошибочно введённый разработчиком (доработчиком) код;
  • Человеческий фактор — например, забывчивость;
  • Чрезвычайные ситуации (отсутствие света, метель, дождь, град, ураган, наводнение).

Провести анализ ошибки:

  • Сравнить релизы платформы и конфигурации;
  • Прочитать полный текст сообщения до конца, некоторое время подумать и понять то, что написала машина. Очень часто люди не читают такие сообщения целиком. Но бывает, что именно в конце его содержатся рекомендации к её устранению;
  • Проанализировать насколько давней она является и обстоятельства её появления;
  • Можно ли её воспроизвести;
  • Невоспроизводимые ранее не встречавшиеся ошибки, как правило, не исправляются;
  • Повторяется ли ошибка с другого компьютера или другим пользователем. В этом случае рассмотреть очистку кэша, настройку прав, очистку пользовательских настроек.

Дополнительно о причинах ошибок:

  • Часть ошибок — это результат использования нелицензионного программного обеспечения (и windows тоже);
  • Повреждённая платформа — это самый распространённый пример. Всего один патч способен взломать версию платформы. После чего можно не обнаружить базу (или лицензию);
  • При первичном столкновении с ошибкой стоит поискать решение в поисковике — возможно решение её уже кем-то найдено;
  • Следите за актуальностью релиза конфигурации (особенно если из них сдаётся регламентированная отчётность);
  • Актуальность релиза платформы — для каждой конфигурации рекомендован свой релиз;
    Все события, происходящие в 1С, протоколируются в технологическом журнале!
  • Перед началом каких-то действий с базой необходимо делать архивную копию!

Теперь вы знаете что такое context, почему возникают связанные с ним ошибки, как анализировать ошибки в 1С и как их решать.

В платформе 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С.

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

0

10.02.2015 — 13:21


Всем, добрый день!

Пытаюсь программно создать колонки в таблице формы, вроде всё написал правильно,
но оно выдаёт ошибку:

{Обработка.ПланированиеПроизводства.Форма.Форма.Фо рма(48)**: Ошибка при вызове метода контекста (Добавить)
НовоеПолеФормы = ЭтаФорма.Элементы.Добавить(«Поле8», Тип(«ПолеФормы»), ТаблицаРодитель);
по причине:
Недопустимое значение параметров
Недопустимое значение параметров

Я уже голову поломал, что с этим делать!
ПОДСКАЖИТЕ, ДРУЗЬЯ, в чём тут дело?

вот текст процедуры:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

ТаблицаРодитель = ЭтаФорма.Элементы[Элементы.ТаблицаПланирования.Имя];
НовоеПолеФормы = ЭтаФорма.Элементы.Добавить(«Поле8», Тип(«ПолеФормы»), ТаблицаРодитель);
НовоеПолеФормы.Вид = ВидПоляФормы.ПолеВвода;
НовоеПолеФормы.ПутьКДанным = «ТаблицаПланирования.Поле8»;
НовоеПолеФормы.АвтоВысотаЯчейки = Истина;
НовоеПолеФормы.Ширина = 15;

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

1

10.02.2015 — 14:19

(0) А как бы ты все тоже самое написал для обычной формы?

На управляемой форме создаю обычную группу программным путем и программа выдаёт ошибку: {Документ.ПеремещениеТоваров.Форма.ФормаВводаПеремещения.Форма}: Ошибка при вызове метода контекста (Добавить)             ГруппаДляКнопок = Элементы.Добавить(«ГруппаДляКнопок»+КоличествоГрупп+»»,Тип(«ОбычнаяГруппаФормы»),Элементы.ГруппаПодборКнопки); по причине: Недопустимое значение параметров Платформа 8.3.10.2168 Конфигурация Управление торговлей для Украины ред. 2.3

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

Элементы.ГруппаПодборКнопки — это тоже обычная группа

Тип(«ГруппаФормы»), не? Чёт не вижу  в ЖКК типа «ОбычнаяГруппаФормы»

какой тип у Элементы.ГруппаПодборКнопки?

и попробуй явное преобразование, т.е. не «+КоличествоГрупп+», а «+Строка(КоличествоГрупп)+».

+ просто у тебя ошибка «Недопустимое значение параметров», т.е. не указан номер неправильного параметра, а это говорит, ИМХО, о том, что дело не в параметрах метода, а в том, что происходит до этого, т.е. в конкатенации.

Поменял код, с учетом замечаний: И всё заработало. Всем спасибо.

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

Нашёл костыльный способ, может кому-то пригодится:

Тэги: 1С 8

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

1C. «Недопустимое значение параметра» при вызове макета в расширении

Дано: 1С (в данном примере конфигурация 1С:Университет ПРОФ), платформа 8.3.10. Создано расширение, в котором к документу добавлен новый макет. В модуле менеджера документа есть процедура, формирующая печатную форму на базе макета. Необходимо было заменить данную процедуру (при помощи директивы расширения «&Вместо») и заменить вызов встроенного макета на наш, добавленный в расширение.
Проблема: при вызове добавленного макета в момент его печати в режиме «1С:Предприятие» возникала ошибка при получении макета:

{ЗаявлениеПоступающегоРасширение Документ.ЗаявлениеПоступающего.МодульМенеджера(176)}: Ошибка при вызове метода контекста (ПолучитьМакет)
Макет = Документы.ЗаявлениеПоступающего.ПолучитьМакет («Расш1_МакетЗаявлениеПоступающего»);
по причине:
Недопустимое значение параметра (параметр номер ‘1’)

Код, вызывающий ошибку:

Код, вызывающий ошибку:

Варианты решения:

1. Добавить функцию, выполняемую на сервере, которая вызовет добавленный макет из документа:

&НаСервере

Функция ПолучитьМакетЗаявленияИзРасширения()

    Макет = Документы.ЗаявлениеПоступающего.ПолучитьМакет («Расш1_МакетЗаявлениеПоступающего»);

    Возврат Макет;

КонецФункции

А затем из заменяемой процедуры вызвать эту функцию:

А затем из заменяемой процедуры вызвать эту функцию:

(как оказалось этот способ не нужен. Причину читайте ниже)

2. Другой вариант — перенести макеты в общие и следующей командой вызвать (получить) макет из «Общие макеты»:

Макет = ПолучитьОбщийМакет («Расш1_МакетЗаявлениеПоступающего»);

——
Видимо это всё-таки какой-то глюк платформы (протестировано на 8.3.10.2252 и 8.3.10.2299), но если просто добавить пустой макет в общие макеты в расширении, то команда, ранее вызывавшая ошибку (ПолучитьМакет из макета документа без допфункций на сервере), начинает нормально работать. При удалении пустого общего макета, команда вызова макета из документа снова вызывает ошибку (даже если вынесена в функцию на сервере, как показано в способе 1).
Т.е. если всё-таки хочется сделать макеты нормально в документе (ожидая, что когда-нибудь этот глюк исправят), то нужно сделать макет-заглушку в общих макетах. Например:

При этом, если в расширении добавлено несколько макетов к документу, то «заглушки» достаточно только одной.

Если Вам понравилась статья, пожалуйста, поставьте лайк, сделайте репост или оставьте комментарий. Если у Вас есть какие-либо замечания, также пишите комментарии.

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

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

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

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

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

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

по причине:

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

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

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

——
Видимо это всё-таки какой-то глюк платформы (протестировано на 8.3.10.2252 и 8.3.10.2299), но если просто добавить пустой макет в общие макеты в расширении, то команда, ранее вызывавшая ошибку (ПолучитьМакет из макета документа без допфункций на сервере), начинает нормально работать. При удалении пустого общего макета, команда вызова макета из документа снова вызывает ошибку (даже если вынесена в функцию на сервере, как показано в способе 1).
Т.е. если всё-таки хочется сделать макеты нормально в документе (ожидая, что когда-нибудь этот глюк исправят), то нужно сделать макет-заглушку в общих макетах. Например:

При этом, если в расширении добавлено несколько макетов к документу, то «заглушки» достаточно только одной.

Если Вам понравилась статья, пожалуйста, поставьте лайк, сделайте репост или оставьте комментарий. Если у Вас есть какие-либо замечания, также пишите комментарии.

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

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

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

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

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

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

по причине:

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

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

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

Понравилась статья? Поделить с друзьями:
  • Ошибка при вызове метода контекста выгрузитьколонку
  • Ошибка при вызове метода контекста добавить неверное имя колонки
  • Ошибка при вызове метода контекста выгрузить
  • Ошибка при вызове метода контекста выполнитьзадачу
  • Ошибка при вызове метода контекста выполнитьвыгрузку