Имя: Пароль:
1C
1С v8
Поле объекта не обнаружено, но оно есть!
0 Alex Проблемный
 
20.10.22
14:44
Конфигурация: 1С:Транспортная логистика, экспедирование и управление автотранспортом КОРП, редакция 1.1 (1.1.11.1) НЕ ТИПОВАЯ
Платформа: 8.3 (8.3.20.1674)
база на SQL

В справочнике "Контрагенты" дописан реквизит "ТипКонтрагентаАТ" с типом "ПеречислениеСсылка.хТипыКонтрагентов"
В процедуре ПередЗаписью формы документа "Заказ" есть обращение к процедуре &НаСервереБезКонтекста которая проверяет "ТипКонтрагентаАТ".

&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
...
Если ЭтоНеПлательщик(Объект.Контрагент) Тогда
    Отказ = Истина;
КонецЕсли;
...
КонецПроцедуры

&НаСервереБезКонтекста
Функция ЭтоНеПлательщик(Контрагент)
    Возврат Контрагент.ТипКонтрагентаАТ = Перечисления.хТипыКонтрагентов.НеПлательщик;
КонецФункции

У некоторых пользователей при попытке записать документ "Заказа" начала выходить ошибка: Поле объекта не обнаружено (ТипКонтрагентаАТ), но если они повторяют запись через некоторое время, то всё проходит без ошибок.
Пытался несколько раз воссоздать ошибку - не получилось.

Как победить проблему и в чем она?
1 Волшебник
 
модератор
20.10.22
14:45
Надо проверить тип параметра "Контрагент". Может там Неопределено или какой-нибудь Партнёр
2 1Сергей
 
20.10.22
14:46
мошт расширение отвалилося?
3 Alex Проблемный
 
20.10.22
14:47
(1) Точно! Спасибо! Там м.б. ещё тип справочникСсылка.ПодразделениеОрганизации у которого нет  реквизита "ТипКонтрагентаАТ"
4 SleepyHead
 
гуру
20.10.22
15:49
А разве за такое сейчас не порят вожжами ?

&НаСервереБезКонтекста
Функция ЭтоНеПлательщик(Контрагент)
    Возврат Контрагент.ТипКонтрагентаАТ = Перечисления.хТипыКонтрагентов.НеПлательщик;
КонецФункции
5 1Сергей
 
20.10.22
16:03
(4) А что не так?
6 kubik_live
 
20.10.22
16:07
(5) А если Контрагент=Неопределено или ПустаяССылка?
7 banco
 
20.10.22
17:03
(5) Получение реквизита через точку
https://its.1c.ru/db/v8std/content/496/hdoc
8 Волшебник
 
модератор
20.10.22
17:56
(7) Извращенцы
9 rudnitskij
 
20.10.22
23:54
(0) Кстати, для уменьшения серверных вызовов можно сделать в форме документа Заказ реквизит "ТипКонтрагента", заполнять его при выборе контрагента (когда создается новый заказ интерактивно) или ПриСозданииНаСервере - если открываете существующий документ. Это позволит сравнивать тип контрагента со значением Перечисления.хТипыКонтрагентов.НеПлательщик непосредственно на клиенте, без обращения на сервер
10 Mihasya
 
21.10.22
08:13
(9)
Переменная не определена (Перечисления)
<<?>>Перечисления.АмортизационныеГруппы.ВосьмаяГруппа; (Проверка: Тонкий клиент)
И как ты без вызова сервера решил проверять? ))
Тогда уж и для значения перечисления нужно создавать реквизит на форме...
11 Алексей_Р
 
21.10.22
08:46
(10) ПредопределенноеЗначение(<ИмяПредопределенногоЗначения>) работает на клиенте
12 Mankubus
 
21.10.22
12:03
(11) из СП:
ПредопределенноеЗначение(<ИмяПредопределенногоЗначения>)
......
Вызов метода выполняет обращение к серверу.
13 rudnitskij
 
21.10.22
21:17
(10) ПредопределенноеЗначение("Перечисления.АмортизационныеГруппы.ВосьмаяГруппа") на клиенте доступно. А также все прочие перечисления, все предопределенные элементы и по аналогии с ПредопределенноеЗначение("Справочники.Номенклатура.ПустаяСсылка") все пустые ссылки всех ссылочных объектов
14 rudnitskij
 
21.10.22
21:21
(13) Точнее, ПредопределенноеЗначение("ПеречислениЕ.АмортизационныеГруппы.ВосьмаяГруппа") (не перечисления - как в коде, а перечислениЕ - как в запросе). Аналогично для всех прочих предопределенных объектов
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн