Имя: Пароль:
1C
 
поле недоступно для записи внешняя обработка
☑
0 Juliaa12344
 
09.11.26
✎
11:37
Коллеги, добрый день.
Проблема во внешней обработке, поле АПХ_Открыт недоступно для записи. При выполнении из модуля объекта, по расписанию.

При этом из формы, при нажатии кнопки, все работает корректно.

Процедура ОбновитьСтатусНаСервере(АдресРезультата = Неопределено) Экспорт
    
    ЗаписьЖурналаРегистрации("АПХ.Статусы магазинов", УровеньЖурналаРегистрации.Информация,,,"Начало выполнения обновления статусов");

    УстановитьПривилегированныйРежим(Истина);
    
    ТекущаяДата = НачалоДня(ТекущаяДатаСеанса());
    Изменено = 0;
    Ошибок = 0;

    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
|    Склады.Ссылка КАК Ссылка,
|    Склады.АПХ_ДатаЗакрытияТочки КАК АПХ_ДатаЗакрытияТочки,
|    Склады.АПХ_ДатаОткрытияТочки КАК АПХ_ДатаОткрытияТочки,
|    Склады.АПХ_Открыт КАК АПХ_Открыт
|ИЗ
|    Справочник.Склады КАК Склады";

    //Запрос.УстановитьПараметр("Ссылка", Объект.Склад);
    
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() цикл

        // Расчет нового значения
        НовыйСтатус = Истина;
        
        Если НЕ ЗначениеЗаполнено(Выборка.АПХ_ДатаОткрытияТочки) Тогда
            НовыйСтатус = Ложь;
        ИначеЕсли НачалоДня(Выборка.АПХ_ДатаОткрытияТочки) > ТекущаяДата Тогда
            НовыйСтатус = Ложь;
        ИначеЕсли ЗначениеЗаполнено(Выборка.АПХ_ДатаЗакрытияТочки)
            И НачалоДня(Выборка.АПХ_ДатаЗакрытияТочки) <= ТекущаяДата Тогда
            НовыйСтатус = Ложь;
        КонецЕсли;
        
        // Запись только при реальном изменении
        Если НовыйСтатус = Выборка.АПХ_Открыт Тогда
            Продолжить;
        КонецЕсли;
        
        Попытка
            
            НачатьТранзакцию();
            
            Блокировка = Новый БлокировкаДанных;
            ЭлементБлокировки = Блокировка.Добавить("Справочник.Склады");
            ЭлементБлокировки.УстановитьЗначение("Ссылка", Выборка.Ссылка);
            Блокировка.Заблокировать();
            
            Склад = Выборка.Ссылка.ПолучитьОбъект();
            Склад.АПХ_Открыт = НовыйСтатус;
            Склад.Записать();
            
            ЗафиксироватьТранзакцию();
            
            Изменено = Изменено + 1;
            
        Исключение
            
            ОтменитьТранзакцию();
            Ошибок = Ошибок + 1;
            
            ЗаписьЖурналаРегистрации("АПХ.Статусы магазинов",
                УровеньЖурналаРегистрации.Ошибка, , Выборка.Ссылка,
                ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
            
        КонецПопытки;
        
    КонецЦикла;
    
    ЗаписьЖурналаРегистрации("АПХ.Статусы магазинов",
        УровеньЖурналаРегистрации.Информация, , ,
        "Изменено статусов: " + Изменено + "; ошибок: " + Ошибок);    

    ЗадержкаСекунд = 3;
    СтрокаЗапроса = "ping -n 1 -w "+Формат(1000 * ЗадержкаСекунд, "ЧДЦ=0; ЧГ=") + " 127.255.255.255";
    WshShell = Новый COMОбъект("WScript.Shell");
    WshShell.Run(СтрокаЗапроса, 0, -1);
КонецПроцедуры
1 Волшебник
 
09.11.26
✎
11:54
оСклад = Выборка.Ссылка.ПолучитьОбъект();
оСклад.АПХ_Открыт = НовыйСтатус;
оСклад.Записать();
2 paramedic
 
09.11.26
✎
11:54
Права-то смотрели? У пользователя, от которого выполняется фоновое задание и заданные в вашем расширении АПХ?
3 Мультук
 
гуру
09.11.26
✎
11:59
(1)

Это был жирный намёк на область видимости переменных в модуле обработки.

Склад как Объект.Склад
Склад как локальная переменная


P.S.
1С кстати, ничего по поводу делать не собирается ?
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.