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

ошибка при методе структура.вставить ☑ 0

0level

23.12.13

10:37

СтруктураПолей = Новый Структура;

    Для ТекущаяКолонка = 1 По 50 Цикл

        ЗначениеТекущейЯчейки = СокрЛП(ExcelЛист.Cells(3, ТекущаяКолонка).Value);

        Если ПустаяСтрока(ЗначениеТекущейЯчейки) Тогда

            Прервать;

        КонецЕсли;

        
        СтруктураПолей.Вставить(ЗначениеТекущейЯчейки, ТекущаяКолонка);

    КонецЦикла;

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

        СтруктураПолей.Вставить(ЗначениеТекущейЯчейки, ТекущаяКолонка);

по причине:

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

Куда смотреть, помогите?

1

mikecool

23.12.13

10:37

нет такого индекса, может тебе надо добавить?

2

Wobland

23.12.13

10:37

в имя атрибута структуры? нет, не может быть

3

mikecool

23.12.13

10:38

+1 или

если структура.свойство(ЗначениеТекущейЯчейки) тогда

вставить

иначе

добавить

4

МихаилМ

23.12.13

10:42

(0)

нарушено правило именования идентификаторов 1с

5

х86

23.12.13

10:48

(4)+ ключ структуры должен быть строка, не может начинаться с числа, содержать не допустимые символы (<>*-/+) и т.д.

6

0level

23.12.13

11:12

спасибо. действительно были пробелы и точки

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

Я
   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С сообщения об ошибках бывают достаточно запутаны, и без должных навыков разобраться в причинах достаточно сложно. Вот и сообщение об ошибке при вызове контекста может ввести в ступор начинающего разработчика. Однако в подавляющем большинстве случаев мы видим подобное сообщение, если разработчик допустил ошибку в своем коде. Причем речь зачастую идет не об орфографических ошибках, а о логических.

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

Чтобы избавиться от этого неприятного сообщения об ошибке при вызове метода контекста, следует понимать, что контекстом называют методы платформы 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. Решение проблемы
  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С, по заданию из задачника Чистова. Код ниже.

По итогу столкнулся с проблемой: <Обработка.сапер.Форма.Форма.Форма(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: Программный изменение формы списка, Динамический список

Источник

Добрый час суток уважаемые!

Управление торговлей, редакция 11 (11.4.13.209)
платформа 8.3.17

Благополучно разобрался с подсистемой БСП ТекущиеДела, но как обычно бывает шефу захотелось эдок извернуться, хотел по мягче послать, но стало интересно.

Метод Элементы.Добавить типовой работает, а добавляю свой не работает, и это не все. (Управляемые формы на сервере).

Просто копирую типовой код и вставляю ниже в той же процедуре, свое убираю естественно, и выдает ошибку!

ЦитироватьОшибка при вызове метода контекста (Добавить)
   Элемент = Элементы.Добавить(«ВидыЦен», Тип(«СписокЗначений»));
по причине:
Недопустимое значение параметров

НаСервере
Процедура СоздатьДело(Дело, Группа, ВключенаВидимостьДела)

ЗаголовокДела = Дело.Представление + ?(Дело.Количество <> 0," (" + Дело.Количество + ")", "");

Элемент = Элементы.Добавить(Дело.Идентификатор, Тип("ДекорацияФормы"), Группа); // РасширениеПоляФормыДляПоляНадписи
Элемент.Вид = ВидДекорацииФормы.Надпись;
Элемент.ГоризонтальноеПоложение = ГоризонтальноеПоложениеЭлемента.Лево;
Элемент.Заголовок = ЗаголовокДела;
Элемент.Видимость = (ВключенаВидимостьДела И Дело.ЕстьДела);
Элемент.АвтоМаксимальнаяШирина = Ложь;
Элемент.Гиперссылка = ЗначениеЗаполнено(Дело.Форма);
Элемент.УстановитьДействие("Нажатие", "Подключаемый_ОбработатьНажатиеНаГиперссылку");
Если Дело.Важное Тогда
Элемент.ЦветТекста = ЦветаСтиля.ПросроченныеДанныеЦвет;
КонецЕсли;

Если ЗначениеЗаполнено(Дело.Подсказка) Тогда
Подсказка                    = Новый ФорматированнаяСтрока(Дело.Подсказка);
Элемент.Подсказка            = Подсказка;
Элемент.ОтображениеПодсказки = ОтображениеПодсказки.Кнопка;
КонецЕсли;

//++ ЭТОГО НЕТ В ТИПОВОЙ
Элемент1 = Элементы.Добавить("ВидыЦен", Тип("СписокЗначений")); //РУГАЕТСЯ СЮДА! Недопустимое значение параметров
Элемент1.ПутьКДанным = "ВидыЦен";
ВидыЦен.Добавить("Зн1","Зн1",Истина);
//--ЭТОГО НЕТ В ТИПОВОЙ


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

  

Deahianaianyrto

22.07.16 — 11:24

Не подскажет ли кто-нибудь, как программно добавить страницу в управляемой форме 8.3?

  

Горогуля

1 — 22.07.16 — 11:30

изменить реквизиты

  

Deahianaianyrto

2 — 22.07.16 — 11:32

Нов каждой странице надо прописать элементы цправления и обработчики событий.

Может кто-то даст ссылку, где посмотреть?

  

Cyberhawk

3 — 22.07.16 — 11:33

ВсеЭлементыФормы.Вставить (FormAllItems.Insert)

ВсеЭлементыФормы (FormAllItems)

Вставить (Insert)

Синтаксис:

Вставить(<Имя>, <ТипЭлемента>, <Родитель>, <Элемент>)

Параметры:

<Имя> (обязательный)

Тип: Строка.

Уникальное имя добавляемого элемента.

<ТипЭлемента> (обязательный)

Тип: Тип.

Тип добавляемого элемента.

<Родитель> (необязательный)

Тип: ГруппаФормы; ТаблицаФормы; УправляемаяФорма.

Родитель для добавляемого элемента.

Если не указан, то вставляется на верхний уровень.

<Элемент> (необязательный)

Тип: ДекорацияФормы; ГруппаФормы; КнопкаФормы; ТаблицаФормы; ПолеФормы.

Элемент, перед которым должен быть вставлен новый элемент. Если не указан, то элемент будет вставлен в конец.

Возвращаемое значение:

Тип: ДекорацияФормы; ГруппаФормы; КнопкаФормы; ТаблицаФормы; ПолеФормы.

Описание:

Вставляет элемент в коллекцию элементов.

Доступность:

Сервер.

  

Горогуля

4 — 22.07.16 — 11:34

(3) о как

(2) добавить обработчик

  

Deahianaianyrto

5 — 22.07.16 — 11:40

А как в новой странице прописать элемент формы, скажем поле html-документа и обработчик (ПриНажатии)?

  

Горогуля

6 — 22.07.16 — 11:41

(5) а сам-то как думаешь?

  

Deahianaianyrto

7 — 22.07.16 — 11:48

Вот ещё проблемка, может кто подскажет, или кинет ссылку:

Если я генерю страницы со сгенерированными идентификаторами, а на странице поле html документа, то как мне обратиться к элементу формы страницы по сгенерированному идентификатору, который у меня есть в виде строковой переменной.

    Элементы.ПолеHTMLРезультат.Документ.url = «http://api-laravel-dev.1clicom.ru/1s/search?facetype=7&sess_id=»; + Объект.PHPSESSID;

То есть как обратиться к некоему ПолеHTMLРезультатXXX? Где XXX — порядковый номер сгененрированного идентификатора элемента формы.

  

Горогуля

8 — 22.07.16 — 11:49

внезапно Элементы.ПолеHTMLРезультатXXX

  

Mauser

9 — 22.07.16 — 11:50

(7) []

  

Deahianaianyrto

10 — 22.07.16 — 12:08

Но так же не получиться, то есть у меня есть строка «ПолеHTMLРезультатXXX», а надо обратиться по идентификатору.

Может кто-то знает?

Элементы. а дальше?

  

Горогуля

11 — 22.07.16 — 12:15

Элементы[«ПолеHTMLРезультат»+XXX]

  

Deahianaianyrto

12 — 22.07.16 — 12:15

А как прописать Тип «Страница» в Группе формы?

  

Deahianaianyrto

13 — 22.07.16 — 12:15

(11) Спасибо!

  

Горогуля

14 — 22.07.16 — 12:16

это ж группа

  

Deahianaianyrto

15 — 22.07.16 — 12:18

Надо добавить Группу с Видом «Страница»

  

Горогуля

16 — 22.07.16 — 12:19

(15) и чего там в СП пишут?

  

Deahianaianyrto

17 — 22.07.16 — 12:20

Там все очень не подробно, без примеров. Можете пример дать? Создать Группу с Видом «Страница»

  

Горогуля

18 — 22.07.16 — 12:23

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

  

Deahianaianyrto

19 — 22.07.16 — 12:33

&НаКлиенте

Функция СоздатьСтраницуНаФорме(Заголовок)

    ИдентификаторСтраницы = СгенерироватьИдентификатор();

    ВсеЭлементыФормы.Вставить(ИдентификаторСтраницы,Тип(«ГруппаФормы»),Элементы.ВкладкиОКонтрагентах);

    

    
    
    Возврат ИдентификаторСтраницы;

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

Почему-то даёт ошибку:

ВнешняяОбработка.LicBusinessUP_2_2_1_8beta_expert.Форма.Форма.Форма(4347,2)}: Переменная не определена (ВсеЭлементыФормы)

    <<?>>ВсеЭлементыФормы.Вставить(ИдентификаторСтраницы,Тип(«ГруппаФормы»),Элементы.ВкладкиОКонтрагентах); (Проверка: Тонкий клиент)

  

Горогуля

20 — 22.07.16 — 12:34

не почему-то, а потому что &НаКлиенте

  

aleks_default

21 — 22.07.16 — 12:36

ВсеЭлементыФормы = Элементы

  

Deahianaianyrto

22 — 22.07.16 — 12:36

&НаСервере

Функция СоздатьСтраницуНаФорме(Заголовок)

    ИдентификаторСтраницы = СгенерироватьИдентификатор();

    ВсеЭлементыФормы.Вставить(ИдентификаторСтраницы,Тип(«ГруппаФормы»),Элементы.ВкладкиОКонтрагентах);

    

    
    
    Возврат ИдентификаторСтраницы;

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

{ВнешняяОбработка.LicBusinessUP_2_2_1_8beta_expert.Форма.Форма.Форма(4347,2)}: Переменная не определена (ВсеЭлементыФормы)

    <<?>>ВсеЭлементыФормы.Вставить(ИдентификаторСтраницы,Тип(«ГруппаФормы»),Элементы.ВкладкиОКонтрагентах); (Проверка: Сервер)

  

Горогуля

23 — 22.07.16 — 12:37

видать, эта платформа так не умеет

  

Deahianaianyrto

24 — 22.07.16 — 12:38

А сейчас пишет при работе:

{ВнешняяОбработка.LicBusinessUP_2_2_1_8beta_expert.Форма.Форма.Форма(4347)}: Ошибка при вызове метода контекста (Вставить)

    Элементы.Вставить(ИдентификаторСтраницы,Тип(«ГруппаФормы»),Элементы.ВкладкиОКонтрагентах);

по причине:

Изменение состава элементов недоступно

  

aleks_default

25 — 22.07.16 — 12:46

Элементы.ВкладкиОКонтрагентах — это что за элемент формы?

  

aleks_default

26 — 22.07.16 — 12:48

И попробуй не Вставить(), а Добавить()

  

Горогуля

27 — 22.07.16 — 12:53

от такая галка есть у формы: Разрешить пользовательскую настройку формы

  

Deahianaianyrto

28 — 22.07.16 — 13:00

&НаСервере

Функция СгенерироватьИдентификатор()

    Возврат «001»;    

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

&НаСервере

Функция СоздатьСтраницуНаФорме()

    Счетчик = СгенерироватьИдентификатор();

    ИдентификаторСтраницы = «Группа»+Счетчик;

    ИдентификаторПоляHTML = «ПолеHTMLРезультат»+Счетчик;

    

    Элементы.Добавить(ИдентификаторСтраницы,Тип(«ГруппаФормы»),Элементы.ВкладкиОКонтрагентах);

    Элементы[ИдентификаторСтраницы].Вид=ВидГруппыФормы.Страница;

    Элементы[ИдентификаторСтраницы].Видимость = Истина;

    Элементы[ИдентификаторСтраницы].Доступность = Истина;

    Элементы.Добавить(ИдентификаторПоляHTML,Тип(«ПолеФормы»),Элементы[ИдентификаторСтраницы]);

    Элементы[ИдентификаторПоляHTML].Вид=ВидПоляФормы.ПолеHTMLДокумента;

    Элементы[ИдентификаторПоляHTML].Видимость = Истина;

    Элементы[ИдентификаторПоляHTML].Доступность = Истина;

    Возврат ИдентификаторСтраницы;

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

&НаСервере

Процедура ЗагрузитьHTML(Команда)

    
    ИдентификаторСтраницы = СоздатьСтраницуНаФорме();

    
    //Элементы[ИдентификаторСтраницы].Документ.url = «http://api-laravel-dev.1clicom.ru/1s/search?facetype=7&sess_id=»; + Объект.PHPSESSID;

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

Не появляется ни страница, ни полеHTMLдокумента в ней.

  

aleks_default

29 — 22.07.16 — 13:01

млять

ЭлементСтраница = Элементы.Добавить(ИдентификаторСтраницы,Тип(«ГруппаФормы»),Элементы.ВкладкиОКонтрагентах);

  

Deahianaianyrto

30 — 22.07.16 — 14:03

&НаСервере

Функция СоздатьСтраницуНаФорме()

    Счетчик = СгенерироватьИдентификатор();

    ИдентификаторСтраницы = «Группа»+Счетчик;

    ИдентификаторПоляHTML = «ПолеHTMLРезультат»+Счетчик;

    

    ЭлементСтраница = Элементы.Добавить(ИдентификаторСтраницы,Тип(«ГруппаФормы»),Элементы.ВкладкиОКонтрагентах);

    ЭлементСтраница.Вид=ВидГруппыФормы.Страница;

    ЭлементСтраница.Видимость = Истина;

    ЭлементСтраница.Доступность = Истина;

    ЭлементПолеHTML = Элементы.Добавить(ИдентификаторПоляHTML,Тип(«ПолеФормы»),Элементы[ИдентификаторСтраницы]);

    ЭлементПолеHTML.Вид=ВидПоляФормы.ПолеHTMLДокумента;

    ЭлементПолеHTML.Видимость = Истина;

    ЭлементПолеHTML.Доступность = Истина;

    Возврат Счетчик;

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

Страница и HTML-поле не появляются! Кто-нибудь не знает в чем дело?

  

aleks_default

31 — 22.07.16 — 14:21

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

Для этого создай реквизит формы с типом строка

РеквизитФормы (FormAttribute)

Основной

Синтаксис:

Новый РеквизитФормы(<Имя>, <Тип>, <Путь>, <Заголовок>, <СохраняемыеДанные>)

Параметры:

<Имя> (обязательный)

Тип: Строка.

Имя реквизита.

<Тип> (обязательный)

Тип: ОписаниеТипов.

Тип реквизита.

<Путь> (необязательный)

Тип: Строка.

Путь к создаваемому реквизиту. Не включает имя реквизита.

Значение по умолчанию: Пустая строка

<Заголовок> (необязательный)

Тип: Строка.

Содержит отображаемый текст реквизита.

Значение по умолчанию: Пустая строка

<СохраняемыеДанные> (необязательный)

Тип: Булево.

Реквизит содержит сохраняемые данные.

Истина — сохраняеый реквизит формы.

Значение по умолчанию: Ложь

Описание:

Создает описание реквизита управляемой формы на основе переданных параметров.

  

aleks_default

32 — 22.07.16 — 14:24

потом добавить этот реквизит в форму

УправляемаяФорма (ManagedForm)

ИзменитьРеквизиты (ChangeAttributes)

Синтаксис:

ИзменитьРеквизиты(<ДобавляемыеРеквизиты>, <УдаляемыеРеквизиты>)

Параметры:

<ДобавляемыеРеквизиты> (необязательный)

Тип: Массив.

Массив, содержащий объекты типа РеквизитФормы.

Добавлять можно реквизиты верхнего уровня и вложенные реквизиты, являющиеся колонками.

К добавленным реквизитам верхнего уровня из модуля можно обращаться только с помощью конструкции ЭтаФорма.<Имя реквизита>.

<УдаляемыеРеквизиты> (необязательный)

Тип: Массив.

Массив, содержащий строки, описывающие пути к удаляемым реквизитам.

Удалять можно только ранее программно добавленные реквизиты.

Описание:

Изменяет структуру реквизитов формы.

Сначала выполняется удаление реквизитов. Таким образом массивы добавляемых и удаляемых реквизитов могут содержать реквизиты с одинаковым путём.

Доступность:

Сервер.

  

aleks_default

33 — 22.07.16 — 14:25

Залезь уже куда-нибуль в типовую и посмотри.

  

Deahianaianyrto

34 — 22.07.16 — 15:01

&НаСервере

Функция СоздатьСтраницуНаФорме()

    Счетчик = СгенерироватьИдентификатор();

    ИдентификаторСтраницы = «Группа»+Счетчик;

    ИдентификаторПоляHTML = «ПолеHTMLРезультат»+Счетчик;

    

    ЭлементСтраница = Элементы.Добавить(ИдентификаторСтраницы,Тип(«ГруппаФормы»),Элементы.ВкладкиОКонтрагентах);

    ЭлементСтраница.Вид=ВидГруппыФормы.Страница;

    ЭлементСтраница.Видимость = Истина;

    ЭлементСтраница.Доступность = Истина;

    ЭлементПолеHTML = Элементы.Добавить(ИдентификаторПоляHTML,Тип(«ПолеФормы»),Элементы[ИдентификаторСтраницы]);

    ЭлементПолеHTML.Видимость = Истина;

    ЭлементПолеHTML.Доступность = Истина;

    ЭлементРеквизитФормы = Новый РеквизитФормы(ИдентификаторПоляHTML+»РеквизитФормы», Тип(«Строка»),,,);

    ЭлементПолеHTML.ПутьКДанным = Объект[ИдентификаторПоляHTML+»РеквизитФормы»];

    ЭлементПолеHTML.Вид=ВидПоляФормы.ПолеHTMLДокумента;

    Возврат Счетчик;

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

Ошибка:

{ВнешняяОбработка.LicBusinessUP_2_2_1_8beta_expert.Форма.Форма.Форма(4357)}: Ошибка при вызове конструктора (РеквизитФормы)

    ЭлементРеквизитФормы = Новый РеквизитФормы(ИдентификаторПоляHTML+»РеквизитФормы», Тип(«Строка»),,,);

по причине:

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

  

Горогуля

35 — 22.07.16 — 15:05

так влом руками добавить?

  

Deahianaianyrto

36 — 22.07.16 — 15:06

А не предсказуемо сколько их будет

  

КоньЛапчатый

37 — 22.07.16 — 15:08

Вот пример:

//добавляем страницу

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

        НСтраница.Вид = ВидГруппыФормы.

        

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

        ДобавляемыеРеквизиты = Новый Массив;

        Реквизит = Новый РеквизитФормы(«Вопрос» + Строка(ш), Новый ОписаниеТипов(«Строка»),,, Ложь);

        ДобавляемыеРеквизиты.Добавить(Реквизит);

        ИзменитьРеквизиты(ДобавляемыеРеквизиты);

        

//Для добавленногореквизита создаем элемент на нашей странице

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

        НЭлемент.Вид = ВидПоляФормы.ПолеНадписи;

        НЭлемент.ПутьКДанным = «Вопрос» + Строка(ш);

        НЭлемент.АвтоМаксимальнаяШирина = Ложь;

        НЭлемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет;

        

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

        ЭтаФорма[Реквизит.Имя] = СтрТЗВопр.Вопрос;

  

Горогуля

38 — 22.07.16 — 15:08

ничего, сейчас ты поймёшь, что у второго параметра недопустимое значение, и всё исправишь

  

Deahianaianyrto

39 — 22.07.16 — 15:12

А как прописать ПутьКДАнным по строковому идентификатору реквизита?

  

Горогуля

40 — 22.07.16 — 15:13

(39) а какие варианты ответа вообще?

  

Deahianaianyrto

41 — 22.07.16 — 15:14

{ВнешняяОбработка.LicBusinessUP_2_2_1_8beta_expert.Форма.Форма.Форма(4371)}: Ошибка при установке значения атрибута контекста (ПутьКДанным)

    ЭлементПолеHTML.ПутьКДанным = ЭтаФорма[ИдентификаторПоляHTML+»РеквизитФормы»];

по причине:

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

  

Горогуля

42 — 22.07.16 — 15:15

(41) путь к данным — это строка

  

Горогуля

43 — 22.07.16 — 15:16

тяжко вслепую, понимаю. вот бы где-то был на свете сборник описаний всех свойств и методов…

  

КоньЛапчатый

44 — 22.07.16 — 15:17

(41) посмотри внимательно на мой пример, там всё есть.

  

Deahianaianyrto

45 — 22.07.16 — 15:37

Вот ещё проблемка: как прописать Обработчик ПриНажатии:

ПолеHTMLРезультатПриНажатии()

  

Горогуля

46 — 22.07.16 — 15:39

ну не добавить же обработчик в конце-то концов

  

aleks_default

47 — 22.07.16 — 15:42

(45)

ЭлементПолеHTML.УстановитьДействие(«ПриИзменении», «ПриИзмененииПоляHTML»)

  

aleks_default

48 — 22.07.16 — 15:46

Ну или

ЭлементПолеHTML.УстановитьДействие(«ПриНажатии», «ЕслиЖамкнуть»)

  

aleks_default

49 — 22.07.16 — 15:49

Ну и процедуру соответсвенно прописываешь

&НаКлиенте

Процедура ЕслиЖамкнуть(Элемент)

// бла-бла-бла

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

  

Deahianaianyrto

50 — 22.07.16 — 17:09

Спасибо!

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

Ошибка «Задано неправильное имя атрибута структуры»

Ошибка возникает при попытке добавления элемента в структуру с некорректным идентификатором.

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

Вероятно, в строку идентификатора попал недопустимый символ: точка (.), тире (-) и т.п. Проверьте значение идентификатора в отладчике, либо используя метод Сообщить()

Задано неправильное имя атрибута структуры при проведении документа.

Конкретно, чем она записывается в этой строке, а там уже решайте что делать.

  • Скопировать ссылку
  • Перейти

то ошибка будет всегда , при попытке обратится к недобавленному свойству?

Может я не прав?

  • Скопировать ссылку
  • Перейти

к ошибке не приводит
а этот

  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти

(5) А раньше могло работать если выполнялось только это

А сейчсас ушло в ИНАЧЕ
А там пустая структура без единого ключа ПредДанные
И ясно что выскакивает ошибка при попытке обратиться к несуществующим ключам структуры

  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти

Вы сами писали этот код?
Что-то мне подсказывает что нет, раз вы не видите вот этого

  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти

(17) Вы поставить точку остановки и посмотрите какое значение передается в переменной Назв. Скорее всего у вас или не определено или наименование, например с тире или другим каким то не допустимым символов

Вот тут отладку сделаейте
: Ошибка при вызове метода контекста (Свойство)
Если ПредДанные.Свойство(Назв) Тогда
по причине:
Задано неправильное имя атрибута структуры
Задано неправильное имя атрибута структуры

  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти

Погорячился насчет совсем.
В отладке посмотрите что в этой строке имеете в Назв

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

Дорогие читатели Мир Доступа! Вместе — мы сила! Вместе — мы легион! Если каждый из Нас переведет хотя бы один рубль мы сможем оплатить услуги корректора и хостинг на год вперед! Мы также сможем поднять зарплату нашим постоянным авторам и эффективнее поощрять их работу! Мы высоко ценим труд наших авторов!

Мы хотим радовать Вас и дальше! Благодаря Вам наш проект продолжает оставаться независимым и полезным. Без Ваших пожертвований мы бы никогда не справились. Спасибо Вам и низкий поклон!

С Уважением, главный редактор Мир Доступа

Сообщение задано неправильное имя атрибута структуры часто возникает при попытке добавить элемент в структуру с неверным идентификатором.

В соответствии с описанием по методу «Структура — Insert ()»,идентификатор должен включать в себя в своё уникальное содержание, допускается наличие исключительно букв/цифр/подчеркивания.

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

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

Приведем пример ключа с применением метода «Insert ()»:

Следует рассмотреть и найти требуемое место с помощью идентификатора, который используется для настройки работоспособности.

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

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

Ошибка задано неправильное имя атрибута структуры 1с 8.3: полезные советы

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

Поэтому, в первую очередь, прежде чем углубляться в полную отладку, необходимо перейти на версию 3.1.10 и только после неё попробовать перейти на новую сборку.

Ошибки 1с 8.3 — неправильное имя атрибута

Ошибки в правилах действительно могут возникнуть — дело в том, что оболочка находилась в ZUP старых версий, а после на 3.1.10 никаких ошибок и нареканий не поступало.

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

В некоторых случаях можно перенести другую (даже постороннюю) базу данных в ZUP, к примеру — до версии 3.1.71.77. Сообщение задано неправильное имя атрибута структуры 1с 8.3 в этих случаях также может возникнуть.

Следует помнить, что в заголовках и тексте символы не допускаются. Примечание: всегда решаем задачу с учётом специфики программы. Например — требуется вставить 1/4 ставки. В этом случае необходимо написать строчными буквами «ЧЕТВЕРТЬ СТАВКИ»

Кроме того, в данном случае нужно иметь в виду, что в бухгалтерском расчете нет понятия 1/4 ставка — есть лишь конкретные (уже установленные) ставки заработной платы и фиксированные размеры, а также повышающие коэффициенты.

Что-то сломалось или не работает? Расскажите нам о своей проблеме с ТВ, смартфоном, приложением или другим устройством и мы решим её — пишите свой вопрос в комментариях к этой статье, либо — на электронную почту capatob.homep@gmail.com — мы обязательно ответим на Ваш вопрос и решим его в течении одной недели. Для наших постоянных читателей скоро будем проводить блиц с необычными призами — следите за сайтом каждый день.

Понравилась статья? Поддержите наш IT-журнал любым удобным способом! Пока что мы держимся на чистом энтузиазме, но зато не делаем заказных обзоров 🙂

Автор ruslansat, 21 янв 2016, 14:47

0 Пользователей и 1 гость просматривают эту тему.

Здравствуйте При выгрузке данных для синхронизации из УТ выдает ошибку
{Обработка.КонвертацияОбъектовИнформационныхБаз.МодульОбъекта(14857)}: Ошибка при вызове метода контекста (НачатьЗапись)
ЗаписьСообщения.НачатьЗапись(ЗаписьXML, УзелДляОбмена);
по причине:
Не удалось заблокировать запись. Действие (изменение, удаление или блокировка записи) не выполнено.
Ошибка блокировки объекта. Объект уже заблокирован:
компьютер: WORK-ПК, пользователь: Администратор, сеанс: 6, начат: 21.01.2016 в 16:20:22, приложение: Тонкий клиент

В обратном направлении все нормально принимает данные из бухи.В чем проблема и как её решать?


Смотрите в журнале регистрации что за объект заблокирован. Пользователи в момент проб работают? Попробуйте всех выгнать.

Если я Вам помог, нажми — Спасибо!


В базе никого нет кроме адмнистратора:(

Добавлено: 22 янв 2016, 09:39


В журнале регистрайии еще пишет
маг.Инесса в справочнике контрагентов нет
Ошибка в обработчике события ПослеВыгрузкиОбъекта
   ПВД                    =  Контрагенты
   Объект                 =  маг.Инесса  (Справочник объект: Контрагенты)
   Обработчик             =  ПослеВыгрузкиОбъектаВыборки
   ОписаниеОшибки         =  Ошибка при вызове метода контекста (Вставить): Задано неправильное имя атрибута структуры
   ПозицияМодуля          =  ОбщийМодуль.УправлениеКонтактнойИнформациейКлиентСервер.Модуль(711)
   КСообщенияОбОшибках    =  34


1. ут какая?
2. какие правила обмена данными используются? типовые?
3. что за «маг.Инесса»? — контрагент? пишет, же, что нет в справочнике контрагентов.


  • Главная
  •  — 
  • Форум
  •  — 
  • ТЕХПОДДЕРЖКА
  •  — 
  • ЭКСЕЛОН — Загрузка в 1С из EXCEL
  •  — 
  • Ошибка при вызове метода контекста (Записать)
 

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

Номенклатура_СоздатьОбновить 020: {ВнешняяОбработка.APPLIX_RU_ЗагрузкаИзExcel_ЗМ.МодульОбъекта(70081)}: Ошибка при вызове метода контекста (Записать): Ошибка при выполнении обработчика — ‘ПередЗаписью’: {Справочник.Номенклатура.МодульМенеджера(2911)}: Преобразование значения к типу Булево не может быть выполнено

 

Ошибка при попытке обновить номенклатуру

 

1С:Предприятие 8.3 (8.3.20.1674)
Управление торговлей, редакция 11 (11.5.7.336)
модуль загрузки 16.5.8

Прикрепленные файлы

 

Модуль создал номенклатуру, теперь ее невозможно открыть

ТекстыЗапросов = Новый Массив;
ПараметрыЗапроса = Новый Структура;

ИменаОбъектовМетаданных = Новый Массив;

Для Каждого СсылкиПоТипу Из СсылкиПоТипам Цикл
Тип = СсылкиПоТипу.Ключ;
ОбъектМетаданных = Метаданные.НайтиПоТипу(Тип);
Если ОбъектМетаданных = Неопределено Тогда
ВызватьИсключение
НСтр(«ru = ‘Неверный первый параметр Ссылки в функции ОбщегоНазначения.ЗначенияРеквизитовОбъектов:
          |- Значения массива должны быть ссылками'»);
КонецЕсли;

ПолноеИмяОбъектаМетаданных = ОбъектМетаданных.ПолноеИмя();
ИменаОбъектовМетаданных.Добавить(ПолноеИмяОбъектаМетаданных);

Прикрепленные файлы

 

пришлите ваш файл и скриншоты всех настроек колонок

 
 
 

у нас загрузилось нормально

доступ к базе дадите? попробуем на вашей базе отладкой посмотреть что не так

 

Сергей Юданов

Пользователь

Сообщений: 23
Регистрация: 09.04.2019

#9


0
 

30.05.2022 15:03:02

Разобрались сами.

На некоторые позиции номенклатуры в поле (Вид номенклатуры) было назначено не значение, а почему-то название категории в котором содержались значения.

ПОСЛЕДНИЕ СООБЩЕНИЯ

Сейчас на форуме (гостей: 50)

Всего зарегистрированных пользователей: 2322

Приняло участие в обсуждении: 376

Всего тем: 846

Понравилась статья? Поделить с друзьями:
  • Ошибка получения криптографического контекста код ошибки 8009000d
  • Ошибка плагина криптопро при создании подписи
  • Ошибка при вызове метода контекста worksheets 1c
  • Ошибка плагина skse
  • Ошибка получения криптографического контекста 0х0000042d