Имя: Пароль:
1C
 
Проверка корректности решения ошибки.
0 Kelling
 
13.02.26
11:21
Добрый день! У клиента при переводе БД с файловой на клиент-серверную возникает ошибка в модуле НастройкаПравДоступа. Конф. УТ 10.3, Платформа 8.3.18.1208.

Текст ошибки следующий:
{ОбщийМодуль.НастройкаПравДоступа.Модуль(964,4)}: Процедура или функция с указанным именем не определена (Предупреждение)
<<?>>Предупреждение("Документы в периоде ранее " + Константы.ДатаЗапретаРедактирования.Получить() + " изменять запрещено!");
{ОбщийМодуль.НастройкаПравДоступа.Модуль(968,5)}: Процедура или функция с указанным именем не определена (Предупреждение)
<<?>>Предупреждение("Документы в периоде ранее " + Константы.ДатаЗапретаРедактирования.Получить() + " изменять запрещено!");
{ОбщийМодуль.НастройкаПравДоступа.Модуль(983,4)}: Процедура или функция с указанным именем не определена (Предупреждение)
<<?>>Предупреждение("Документы в периоде ранее " + Константы.ДатаЗапретаРедактирования.Получить() + " изменять запрещено!");
{ОбщийМодуль.НастройкаПравДоступа.Модуль(987,5)}: Процедура или функция с указанным именем не определена (Предупреждение)
<<?>>Предупреждение("Документы в периоде ранее " + Константы.ДатаЗапретаРедактирования.Получить() + " изменять запрещено!");

В коде ошибку вызывает эта строка:

Предупреждение("Документы в периоде ранее " + Константы.ДатаЗапретаРедактирования.Получить() + " изменять запрещено!");



Я не занимаюсь программированием, я системный администратор. Через форумы и нейросети нашёл решение, что можно изменить строку с ошибкой на:
Сообщить("Документы в периоде ранее " + Константы.ДатаЗапретаРедактирования.Получить() + " изменять запрещено!");

Это помогло, ошибка ушла, смена открывается, документ записывается. также документы раньше даты запрета не редактируются, но информационного окна нет, там просто кнопки "ОК" и "Записать" не кликабельны.

Однако нашёл ещё один способ, он также работает:

ТекстОшибки = "Документы в периоде ранее " + Константы.ДатаЗапретаРедактирования.Получить() + " удалять запрещено!";
ВызватьИсключение ТекстОшибки;

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

2:

Процедура ПередЗаписьюДокументовПередЗаписью(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт
    Если Отказ Тогда
        Возврат;
    КонецЕсли;
    
    Если НЕ РольДоступна("ИзменениеДатыЗапретаРедактирования") Тогда
        // проверить дату изменяемого документа
        Если Источник.Дата < Константы.ДатаЗапретаРедактирования.Получить() Тогда
            Предупреждение("Документы в периоде ранее " + Константы.ДатаЗапретаРедактирования.Получить() + " изменять запрещено!");
            Отказ = Истина;
        Иначе
            Если (НЕ Источник.ЭтоНовый()) И (Источник.Ссылка.Дата < Константы.ДатаЗапретаРедактирования.Получить()) Тогда
                Предупреждение("Документы в периоде ранее " + Константы.ДатаЗапретаРедактирования.Получить() + " изменять запрещено!");
                Отказ = Истина;
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры



А теперь я не знаю, какой вариант правильный и учитывая, что кнопки вообще не кликабельны, нужен ли этот код? Как правильно поступить?
Буду крайне благодарен за пояснение.
1 1cVandal
 
13.02.26
11:32
монопенисуально, но 2 способ более соответствует подходу писателей типовых
2 Garykom
 
гуру
13.02.26
12:48
Добавить процедуру-обертку Предупреждение() = Сообщить() и все
По сути попытка на сервере (вместо клиента) вызвать запрещенную (не существующую) там Предупреждение()
Можно еще с галками Клиент/Сервер поиграться у общего модуля
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший