Имя: Пароль:
1C
 
ТипЗнч(ОбъектФорма.Ссылка.Скопировать()) - как-то не очень
↓ (Волшебник 24.03.2024 23:55)
0 RomaH
 
24.03.24
13:06
&ИзменениеИКонтроль("УстановитьНомерЧекаДокументаВФорме")
Процедура МИ_УстановитьНомерЧекаДокументаВФорме(ОбъектФорма, НомерЧека, ИмяРеквизита)

	Если ТипЗнч(ОбъектФорма) = Тип("ФормаКлиентскогоПриложения") Тогда
		ДокументОбъект = ОбъектФорма.РеквизитФормыВЗначение("Объект");
	Иначе
		#Удаление
		ДокументОбъект = ДанныеФормыВЗначение(ОбъектФорма, ТипЗнч(ОбъектФорма.Ссылка.Скопировать()));
		#КонецУдаления
		#Вставка
		//ДокументОбъект = ДанныеФормыВЗначение(ОбъектФорма, ТипЗнч(ОбъектФорма.Ссылка.Скопировать()));
		ДокументОбъект = ДанныеФормыВЗначение(ОбъектФорма, ТипЗнч(ОбъектФорма.Ссылка.ПолучитьОбъект()));
		#КонецВставки
	КонецЕсли;

	ДокументОбъект[ИмяРеквизита] = НомерЧека;
	ДокументОбъект.ОбменДанными.Загрузка = Истина;
	ДокументОбъект.Записать();

	Если ТипЗнч(ОбъектФорма) = Тип("ФормаКлиентскогоПриложения") Тогда
		ОбъектФорма.ЗначениеВРеквизитФормы(ДокументОбъект,"Объект");
	КонецЕсли;

КонецПроцедуры


заменил "Скопировать" на "ПолучитьОбъект" дабы не отрабатывал алгоритм "ПриКопировании"

но наверняка есть более правильный способ?
1 Волшебник
 
24.03.24
13:09
Объясните, что вообще Вы делаете, какова цель?
2 RomaH
 
24.03.24
13:11
ДанныеФормыВЗначение приводят
код "типовой"
при отладке поймал непонятное выполнение - создание нового документа
создается ОбъектФорма.Ссылка.Скопировать()
хотя надо всего лишь получить тип ДокументОбъект

делаю оптимизацию, так сказать
3 RomaH
 
24.03.24
13:12
ОбъектФорма - может быть разным документом
4 RomaH
 
24.03.24
13:18
может строку найти заменить?
сто-то типа:

СтрЗаменить(ТипЗнч(ОбъектФорма.Ссылка),"ДокументСсылка",ДокументОбъект")

?
5 Garykom
 
24.03.24
15:23
(2) Типовой код не обязательно всегда правильный и без ошибок
Имхо
ДокументОбъект = ДанныеФормыВЗначение(ОбъектФорма, ТипЗнч(ОбъектФорма.Ссылка.Скопировать()));

это какой то ахтунг и непонятно зачем он там

Интересно внутри ДанныеФормыВЗначение что происходит?
6 Garykom
 
24.03.24
13:51
(4) Тип(СтрЗаменить(Строка(ТипЗнч(ОбъектФорма.Ссылка)),"Ссылка.",Объект."))
7 Garykom
 
24.03.24
13:51
(6)+ :)
8 Garykom
 
24.03.24
15:25
(5)+ Что внутри ДанныеФормыВЗначение подразумевал а найдет ли оно по данным формы существующий в базе объект (Документ или Справочник)
Или всегда будет новый .Записать();
9 RomaH
 
24.03.24
16:06
ну до сих пор находило
10 Волшебник
 
24.03.24
17:11
а, понятно... Дурдомите
11 youalex
 
24.03.24
17:48
(5) судя по МИ_ это не совсем типовое
12 youalex
 
24.03.24
17:50
(11) а это префикс расширения, ок
13 Сергиус
 
24.03.24
19:32
(0)[заменил "Скопировать" на "ПолучитьОбъект" дабы не отрабатывал алгоритм "ПриКопировании"]
В чём проблема вообще?
14 AlvlSpb
 
24.03.24
19:46
ДанныеФормыВЗначение(ОбъектФорма.Объект, Тип("ДокументСсылка.ТвойДокумент")
15 Garykom
 
24.03.24
19:47
(13) Вероятно скорость работы чтобы просто по типу Ссылка получить связанный тип Объект
не выполнять бесполезное Объект = Ссылка.Скопировать()
16 RomanYS
 
24.03.24
23:49
(15) вряд ли дело в скорости. Цикла нет, а на одном элементе разницу между получением объекта и копированием не поймаешь (если она вообще есть). Если конечно нет навороченного обработчика ПриКопировании
17 Garykom
 
25.03.24
00:24
(16) А он запросто может быть навороченный
И может быть вызов этой процедуры в цикле (чисто теоретически ибо форма объекта вроде как)

Так что типовой код не оптимальный и ТС правильно хочет
Но лично не понимаю что произойдет с ДанныеФормыВЗначение и затем Записать(), надо проверять практически что с УИД
18 DrZombi
 
25.03.24
06:22
(2) Скопировать делает новый.

ДокументСсылка.<Имя документа> (DocumentRef.<Document name>)
Скопировать (Copy)
Синтаксис:
Скопировать()
Возвращаемое значение:
Тип: ДокументОбъект.<Имя документа>.
Описание:
Создает новый документ копированием существующего.


+ Не очень удачно отыгрывает табличные части. (но может быть это связано с релизом, и у вас все отыграет)
19 Ненавижу 1С
 
25.03.24
08:07
(0)
наверное что-то типа такого:

ТипОбъекта = Тип("ДокументОбъект."+ОбъектФорма.Ссылка.Метаданные().Имя);
ДокументОбъект = ДанныеФормыВЗначение(ОбъектФорма, ТипОбъекта);