Имя: Пароль:
1C
1С v8
Почему тонкий клиент не видит процедуру?
0 Omskdizel
 
12.01.26
07:18
Возможно баян, но я ответа не нашел.
1С:Предприятие 8.3 (8.3.25.1520)
Внешняя обработка.
Модуль формы:

&НаКлиенте
Процедура ОбработатьФайл(Команда)
	
	Путь = "D:\Базы\Возвраты.xlsx";
	Таб = Новый ТабличныйДокумент;
	Таб.Прочитать(Путь);
	Номер = 2;
	
	Пока СокрЛП(Таб.Область("R" + Формат(Номер, "ЧГ=0") + "C1").Текст) <> "" Цикл
		
		ДатаОплаты = СокрЛП(Таб.Область("R" + Формат(Номер, "ЧГ=0") + "C12").Текст);
		
		Если ДатаОплаты = "" Тогда
			Номер = Номер + 1;
			Продолжить;
		КонецЕсли;
		
		Отказ = Ложь;
		
		НомерДоговора 		= СокрЛП(Таб.Область("R" + Формат(Номер, "ЧГ=0") + "C1").Текст);
		ДатаДоговора 		= ПолучитьДату(СокрЛП(Таб.Область("R" + Формат(Номер, "ЧГ=0") + "C2").Текст), Отказ);
		Фамилия 			= СокрЛП(Таб.Область("R" + Формат(Номер, "ЧГ=0") + "C3").Текст);
		Имя 				= СокрЛП(Таб.Область("R" + Формат(Номер, "ЧГ=0") + "C4").Текст);
		Отчество 			= СокрЛП(Таб.Область("R" + Формат(Номер, "ЧГ=0") + "C5").Текст);
		НаименованиеУслуги 	= СокрЛП(Таб.Область("R" + Формат(Номер, "ЧГ=0") + "C6").Текст);
		СтоимостьУслуги 	= Число(СокрЛП(Таб.Область("R" + Формат(Номер, "ЧГ=0") + "C7").Текст));
		НомерТелефона 		= СокрЛП(Таб.Область("R" + Формат(Номер, "ЧГ=0") + "C9").Текст);
		ДатаЗаявления 		= ПолучитьДату(СокрЛП(Таб.Область("R" + Формат(Номер, "ЧГ=0") + "C11").Текст), Отказ);
		
		Наименование = Фамилия + ?(Имя = "", "", " " + Имя) + ?(Отчество = "", "", " " + Отчество);
		
		Контрагент = СоздатьКонтрагентаНаСервере(Наименование, НомерТелефона);
		Договор = СоздатьДоговорНаСервере(Контрагент, НомерДоговора, ДатаДоговора);
		
		Номер = Номер + 1;
		
	КонецЦикла;
	
КонецПроцедуры


В модуле обработки (в модуль формы тоже пробовал положить)

&НаСервере
Функция СоздатьКонтрагентаНаСервере(Наименование, НомерТелефона)
	
	Возврат Неопределено;
	
КонецФункции

&НаСервере
Функция СоздатьДоговорНаСервере(Контрагент, НомерДоговора, ДатаДоговора)
	
	Возврат Неопределено;
	
КонецФункции


Выдает ошибку:
{ВнешняяОбработка.ЗагрузкаВозвратов.Форма.Форма.Форма(53,16)}: Процедура или функция с указанным именем не определена (СоздатьКонтрагентаНаСервере)
        Контрагент = <<?>>СоздатьКонтрагентаНаСервере(Наименование, НомерТелефона); (Проверка: Тонкий клиент)
{ВнешняяОбработка.ЗагрузкаВозвратов.Форма.Форма.Форма(54,13)}: Процедура или функция с указанным именем не определена (СоздатьДоговорНаСервере)
        Договор = <<?>>СоздатьДоговорНаСервере(Контрагент, НомерДоговора, ДатаДоговора); (Проверка: Тонкий клиент)


Уже везде потыкался, ничего найти не могу. Возможно сплю, ибо ночь. Подтолкните в нужном направлении плиз.
1 Timon1405
 
12.01.26
00:28
2 Omskdizel
 
12.01.26
00:41
(1) Я дико извиняюсь, но это к чему? Немного пояснений можно?
3 Web00001
 
12.01.26
04:26
(2)Форма ничего не знает про сам объект. Реквизит "Объект", это не сам объект, а его представление. В (1) код как получить объект обработки, чтобы стали доступны методы(процедуры функции), которые в нем описаны. Функции описанные на форме, должны быть видны без приседаний. Единственное, что если контекст тебе не нужен, то на сервере должно быть без контекста.
4 Волшебник
 
12.01.26
07:17
(0) В модуле формы размести
5 Asmody
 
12.01.26
07:23
[в модуль формы тоже пробовал положить] – врёшь
6 Chameleon1980
 
12.01.26
08:57
у тебя в базе есть такая-же подключенная БСП обработка?
7 Omskdizel
 
12.01.26
10:47
(3) Я не настолько хорош в понимании механизмов внутрянки, но есть простой аргумент. Когда создаешь команду в обработке, выскакивает окошко, где и как создать, типа "Создать на клиенте" или "Создать на клиенте и процедуру на сервере". И все работает без такого костыля. Прямо в модуле формы. Я даже не поленился и открыл старые свои обработки. В них все замечательно сосуществует в одной куче. Разница с нынешней только в том, что я сделал просто процедуру на клиенте. Ну и на сервере не процедуры, а функции. Но это же не должно влиять. Я безусловно попробую предложенный вариант, возможно он даже заработает, но глубоко уверен, что должно работать и без подобного извращения.
(6) Не понял вопроса
8 Omskdizel
 
12.01.26
10:51
(4) Малость оффтопа. Пишу редко и вечно забываю какими тегами код обрамлять. В Правилах и Описании про это сейчас нет ни слова. Раньше, помню, было. Можно этот важный пункт добавить куда-нибудь?
9 Rovan
 
гуру
12.01.26
10:52
ТабДок.Прочитать - доступен только на сервере !

1С:Предприятие 8.3 (8.3.25.1520)
а конфигурация какая ?
10 Anchorite
 
12.01.26
11:08
(8) Рядом с полем "Добавить сообщение" галочка "оформление", там с картинками.
11 Omskdizel
 
12.01.26
11:19
(9) Неправда ваша, дяденька! Объект доступен везде, на Прочитать ограничение только по формату читаемого и только в мобильном клиенте.
(10) Не поверите, пробовал. Можете сказать, какая из кнопок занимается выделением кода?
12 Omskdizel
 
12.01.26
11:21
(9) Хотелось бы безотносительно конфигурации. Технически - Бухгалтерия предприятия, редакция 3.0 (3.0.181.18)
13 Маленький Вопросик
 
12.01.26
11:25
Ты запаролить модуль чтоли хочешь обработки? Сервером через объект обращайся к своей функции
14 Rovan
 
гуру
12.01.26
11:27
15 Гипервизор
 
12.01.26
11:28
(11) Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.
16 Маленький Вопросик
 
12.01.26
11:28
(14) +
17 Omskdizel
 
12.01.26
12:15
(14)(15)(16) Ребят, нет проблем с чтением xls. Он замечательно читается, все данные берутся. Проблема с вызовом серверных функций. Приведенный код абсолютно рабочий, кроме вызова сервера.
(15) Не знаю, где вы это берете, но у меня у ТабличныйДокумент написано:
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
18 Omskdizel
 
12.01.26
12:18
(14) Я не проверял, но простая логика не дает мне покоя. Мы узнаем путь к файлу на клиенте. А потом, по этому локальному пути открываем файл на сервере? Ну, например, получили мы путь как у меня в коде "D:\Базы\Возвраты.xlsx". Но это путь клиентской машины. На сервере то он как откроется по такому пути?
19 Omskdizel
 
12.01.26
12:25
(13) Не понял вопроса. Я хочу с клиента вызвать серверную функцию, чтобы она совершила ряд сугубо серверных деяний и вернула ссылку на результат своей работы. Это стандартное желание программиста. При чем тут запаролить? Как я обращусь сервером, если серверная функция не видна?
20 Omskdizel
 
12.01.26
12:29
Короче, я не понимаю, что не нравилось системе.
Сделал процедуру в модуле объекта. Не видит.
Перенес процедуру в модуль формы - заработало!
Переделал в функцию - опять работает.
Я похоже всех впустую перебаламутил, в чем очень извиняюсь. Сейчас буду допиливать.
21 Гипервизор
 
12.01.26
12:30
(17) Очень хорошо, что нет проблем с чтением xls, с этим я и не спорю. Но есть разница между доступностью ТабличныйДокумент и ТабличныйДокумент.Прочитать().
22 Волшебник
 
12.01.26
12:36
(8) тег <PRE>
23 Timon1405
 
12.01.26
13:00
(20) в МО процедура экспортная должна быть, в МФ не обязательно
24 Omskdizel
 
12.01.26
13:21
(22) Спасибо. Как бы еще это запомнить :) Методом научного тыка подобрал квадратнаяскобочка1Сквадратнаяскобочка.
25 Omskdizel
 
12.01.26
13:14
(23) Вроде пробовал и это не помогло. Но у меня похоже 1С была не в духе, раз такую дичь творила.
26 Chai Nic
 
12.01.26
14:05
(25) Контекст модуля объекта не объединяется автоматически с контекстом управляемой формы. Даже реквизит формы Объект не предоставляет этого контекста.

Чтобы получить доступ к контексту объекта в форме, нужно использовать костыль РеквизитФормыВЗначение("Объект"), и уже от полученного объекта вызывать процедуру или функцию из модуля объекта.
AdBlock убивает бесплатный контент. 1Сергей