Имя: Пароль:
1C
 
Функция Вычислить() и расширение
0 егаис
 
23.07.26
16:22
Не пойму, в чем ошибка
УАТ. Пишу через расширение свою функцию печати нового вида путевки.
уатПечать_Мояформа() Экспорт
Печать в УАТ вызываются через Вычислить(ИмяФункцииПечати)

При вызове функции печати из расширения появляется ошибка из вложения.
Расширение не в безопасном режиме, пробовал и в безопасном.
Кэш чистил, не помогло. Имя вызываемой функции и функции в расширении 100% совпадают. В чем ошибка?
1 егаис
 
23.07.26
16:24
странно, вложение не отправилось
2 Ненавижу 1С
 
гуру
23.07.26
16:27
Написано же, что нет такого метода
3 егаис
 
23.07.26
16:28
Есть! В расширении , в модуле менеджера документа.
4 Толич
 
23.07.26
16:30
(0) Сделать в расширении уже имеющуюся функцию - экспортной, нельзя. И кстати количество параметров увеличить тоже нельзя в расширяемой функции.
5 егаис
 
23.07.26
16:30
Имя при вызове совпадает
6 егаис
 
23.07.26
16:30
(4) Это новая функция
7 Lama12
 
23.07.26
16:33
Расширение с какими галками подключено?
8 craxx
 
23.07.26
16:34
(4) Но можно обернуть ее в другую функцию, экспортную. и вызвать
9 егаис
 
23.07.26
16:36
(7) Активно + использовать основные роли. Играл галками (кроме активно конечно), монописуально.
10 Chameleon1980
 
23.07.26
16:41
(9) про "бесопасные" галки спрашивают, скорее всего
11 егаис
 
23.07.26
16:43
(10) Проверялось в первую очередь. Знаю, что Вычислить() выполняется в безопасном режиме.
12 Толич
 
23.07.26
16:45
Вызов функции и сама функция в одном расширении?
13 Ненавижу 1С
 
гуру
23.07.26
16:47
(3) посмотрите отладкой, в каком модуле оно пытается вызваться, возможно модуль другой прописан
14 егаис
 
23.07.26
16:53
(12) Вычислить(ИмяФункцииПечати) вызывается из модулей печати в конфигурации.
Сама ИмяФункцииПечати описана в расширении.
(13) В ошибке видно имя функции. Я даже скопировал имя из ошибки и вставил в расширение.
Придется снимать замок с модуля похоже.
15 Ненавижу 1С
 
гуру
23.07.26
16:55
(14) в ошибке видно имя функции, которой нет. Функция какого модуля вызывается?
16 егаис
 
23.07.26
16:56
(15) Модуля менеджера документа "Путевой лист"
17 Ненавижу 1С
 
гуру
23.07.26
16:58
(16) ты это в отладке увидел или ты хочешь чтобы это было так?
18 YFedor
 
23.07.26
16:59
Может вызывается с клиента
19 Ненавижу 1С
 
гуру
23.07.26
17:02
(18) вот! похоже на правду
20 егаис
 
23.07.26
17:04
(17) Смотри, ММ документа ПЛ, как все устроено

ВЫЗОВ
        ИмяМакета = ТекущийДокумент.ВидПЛ.Метаданные().ЗначенияПеречисления[Перечисления.уатВидыПЛ.Индекс(ТекущийДокумент.ВидПЛ)].Имя;
        ИмяМакета = "ПФ_MXL" + ИмяМакета;
        ТабДокумент = Вычислить(ИмяФункцииПечати);


Все эти функции ИмяФункцииПечати описаны тут же, в ММ
Например
Функция уатПечать_ЭСМ1(ТекущийДокумент, ИмяМакета, ФлагПечати="") Экспорт


Я по аналогии добавляю новую функцию в расширение и ловлю ошибку.
21 егаис
 
23.07.26
17:05
(18) Причем тут клиент, не догоняю
22 Fish
 
гуру
23.07.26
17:07
(21) С клиента модуль менеджера недоступен.
23 YFedor
 
23.07.26
17:21
(20) Я конечно понимаю, что ты выложил не весь код, но в выложенном куске "ИмяФункцииПечати" нигде не определяется.

+

Он же пишет, что не нашел функцию с именем "уатПечать_" ....
Т.е. ему не передали нужное имя функции
24 егаис
 
23.07.26
17:22
ИмяМакета = ТекущийДокумент.ВидПЛ.Метаданные().ЗначенияПеречисления[Перечисления.уатВидыПЛ.Индекс(ТекущийДокумент.ВидПЛ)].Имя;
        Если (ИмяМакета = "_ЭСМ1") Или (ИмяМакета = "_ЭСМ3") Тогда
            ИмяФункцииПечати = "уатПечать" + ИмяМакета + "(ТекущийДокумент, ""уат"" + Сред(ИмяМакета,2,4), 1)";
        ИначеЕсли (ИмяМакета = "_6") Тогда
            ИмяФункцииПечати = "уатПечать" + ИмяМакета + "(ТекущийДокумент, ИмяМакета + ""_пп"", 1)";
        ИначеЕсли (ИмяМакета = "_412_АПК") Тогда
            ИмяФункцииПечати = "уатПечать" + ИмяМакета + "(ТекущийДокумент,ИмяМакета, 1)";
        Иначе
            ИмяФункцииПечати = "уатПечать" + ИмяМакета + "(ТекущийДокумент, ИмяМакета, 1)";
        КонецЕсли;
        ИмяМакета = "ПФ_MXL" + ИмяМакета;
        ТабДокумент = Вычислить(ИмяФункцииПечати);


Т.е. условно ИмяФункцииПечати превращается в уатПечать_ЭСМ1(ТекущийДокумент, ИмяМакета, ФлагПечати="")
25 YFedor
 
23.07.26
17:27
Ни разу не пользовался вызовом функции так чтобы:
Вызывалась функция из того же модуля, где осуществлен вызов, причем вызов из исходного модуля, а вызывается функция из расширения этого же модуля.

Попробуй в копии снять замочек и в месте вызова написать не просто имя функции, а имя с модулем, т.е. не Выполнить("МояФункция"), а Выполнить("Модуль.МояФункция")
26 Timon1405
 
23.07.26
17:28
(22) так уж прямо и недоступен
27 егаис
 
23.07.26
17:38
(25) это Рарус.
28 Ненавижу 1С
 
гуру
23.07.26
19:24
(26) толстый клиент
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой