Имя: Пароль:
1C
1С v8
Справочники и Регламентное задание
, ,
0 Adm1nSpb
 
30.04.17
22:00
Добрый день!

Столкнулся с проблемой.
Платформа 1С 8.1, База лежит на сервере MSSQL, 1С сервер x64
Есть регламентное задание которое запускается.
После запуска происходит запрос, который получив данные о некотором списке документов, анализирует данные об их контрагентах, вызывая функцию находящуюся в общем модуле этого регл. задания с параметром ссылка на контрагента.

Вот функция


Функция КонтрагентСогласен(Контрагент) Экспорт

    Если Контрагент.Согласен = Истина Тогда
        Возврат Истина;
    иначе
        Возврат Ложь;        
    КонецЕсли;    
КонецФункции


Регламентное задание завершается с ошибкой.
Пишет что {ОбщийМодуль.Модуль()}: Метод объекта не обнаружен (Согласен)

В справочнике контрагенты, имеется реквизит типа булево, названный согласен.

Помогите советом, как совершить проверку данных из регламентного задания? Так понимаю на сервере...
1 Adm1nSpb
 
30.04.17
22:02
*названный Согласен
2 Лефмихалыч
 
30.04.17
22:18
нет метода Согласен() в общем модуле Модуль.
А код - редкое УГ. Начорта это проверять, когда можно сразу из базы просто выбрать всех согласных (или не согласных)?
3 Adm1nSpb
 
30.04.17
22:21
В этом модуле Согласен употребляется лишь в этом куске кода.

Контрагент.Согласен и на эту строку ругается регламентное задание.

В чем может быть причина?
4 Лефмихалыч
 
30.04.17
22:23
в твоем коде и причина. Отсюда плохо видно, что у тебя написано и где.
5 Лефмихалыч
 
30.04.17
22:25
еще - как вариант - в функцию передается не ссылка на элемент справочника. А, например, непределено.
А, если передается таки-ссылка, то за такой код надо руки отрывать. Это запрос в цикле.
6 RomanYS
 
30.04.17
22:44
(2) +100500
(0) код - г.., но ошибка не в нем. Ищи вызов "Согласен("
7 Aleksey
 
01.05.17
04:20
(5) нормальный код, коих в типовых полно. Типа универсализм и масштабируемость. Вдруг ты завтра еще что-то хочешь дополнительно проверить?

И счего вы взяли что согласен это метод? Может это реквизит справочника. Или вообще  Контрагент - это соответствие у которого есть ключ "Согласен" (ну или должен быть)
8 Aleksey
 
01.05.17
04:28
В простейшем случае вставить в начало функции попытку

Функция КонтрагентСогласен(Контрагент) Экспорт
    Попытка
        КонтрагентСогласен = Контрагент.Согласен;
    Исключение
        Возврат ложь;//это не ссылка на контрагента
    КонецЕсли;

    Если КонтрагентСогласен = Истина Тогда
        Возврат Истина;
    иначе
        Возврат Ложь;        
    КонецЕсли;    
КонецФункции
9 Zamestas
 
01.05.17
04:34
(7) "В справочнике контрагенты, имеется реквизит типа булево, названный согласен."
(0) Он точно там имеется?
10 Мимохожий Однако
 
01.05.17
08:52
Например, измени в функции
КонтрагентОбъект=Контрагент.ПолучитьОбъект();
Если КонтрагентОбъект.Согласен = Истина Тогда...
11 Лефмихалыч
 
01.05.17
10:31
(10) и из просто говнокода получишь феерический говнокод
12 Adm1nSpb
 
01.05.17
10:34
(2)(22) Код синтаксически верный. Что вам в нем не нравиться? Не все пишут в вашем стиле, да и не обязаны...
(9) Я бы скриншот привел, но точно говорю - реквизит есть.

Проблема разрешилась странным образом. В функции регламентного задания, вызывающей функцию КонтрагентСогласен(Контрагент) вместо анализа ответа от работы функции КонтрагентСогласен(Контрагент) было написано сразу

Если Контрагент.Согласен = Истина Тогда...

И регламентное задание ошибок не выдало.
Вроде бы и там и там - все верно, но сработал лишь этот вариант...
13 Adm1nSpb
 
01.05.17
10:34
т.е. (2)(11)
14 Лефмихалыч
 
01.05.17
10:36
(12) что за бред ты несешь?
У тебя в (0) именно так и написано - сразу "Если Контрагент.Согласен = Истина Тогда"
15 Adm1nSpb
 
01.05.17
11:19
(14) Вот и я говорю - странно. В функции вызывающей функцию (написанную в (0) в пределах одного общего модуля) - такое условие сработало. В той функции что (0) - нет.
16 Лефмихалыч
 
01.05.17
11:27
(15) проблема в твоем коде, еще раз говорю. Как пишешь, так оно и работает.
Программист всегда исправляет последнюю ошибку.