Имя: Пароль:
1C
 
Как правильно ПолучитьОбъект() ?
↓ (Волшебник 07.10.2025 13:35)
0 program345
 
07.10.25
07:10
доброго времени суток!
Запросом получаю незакрытые заказы, потом по позициям делаю отмены строк (по условию). У меня получается в цикле

ДокОбъект = Выборка.Ссылка.ПолучитьОбъект();


Насколько критично получение объекта для производительности, если я не изменяю данный объект(когда условие не выполнилось)?
1 Chameleon1980
 
07.10.25
07:39
получай объект только когда нужно
2 Мультук
 
гуру
07.10.25
07:39
(0)

Куча вопросов

1) Почему не используется типовой механизм закрытия ?
В УТ/ЕРП он есть (на форме заказа гиперссылка "Закрыть")

2) Почему заранее, в запросе, нельзя вычислить, нужно что-то делать со строками в заказе или нет

3) Допустим - критично. И что вы будете делать ?
3 dubraver
 
07.10.25
08:17
1. Запросом нужно отбирать только те документы, которые будешь изменять.
2. "Насколько критично получение объекта для производительности" - ПолучитьОбъект() делает запрос к БД и вытягивает все реквизиты объекта. Если у тебя миллионы документов, то лишние дергать из БД не нужно. Отбирай незакрытые заказы за период.
4 Eiffil123
 
07.10.25
08:19
(0) если нет проблем со временем работы механизма - то не критично. Странный вопрос конечно
5 Chameleon1980
 
07.10.25
08:22
если автор хочет узнать много ли ресурсов тратится на получитьобъект - ответ - относительно да
6 program345
 
07.10.25
08:27
(2)

2) в запросе написал, тестирую.
3) я бы обошел ТЧ в цикле, и если хоть в одной строчке условие выполнилось, устанавливал бы переменную Модифицированность = Истина;
Дальше условие

Если Модифицированность Тогда
    ДокОбъект = Выборка.Ссылка.ПолучитьОбъект();
КонецЕсли;

как то так.
7 Eiffil123
 
07.10.25
08:40
(5) качественная оценка, не влияющая ни на что

(6) звучит логично
8 dubraver
 
07.10.25
08:45
(6) "я бы обошел ТЧ в цикле" - если будешь через ссылку из документа получать реквизит, то получишь неявный запрос к БД.
Толку от такой оптимизации не будет. Будет куча лишних запросов к БД. Еще раз, напиши запрос который сразу вернет только те заказы, которые нужно модифицировать.
9 Eiffil123
 
07.10.25
08:46
(8) ну может он ТЧ запросом получил отдельным
10 dubraver
 
07.10.25
08:49
(9) Запрос не возвращает ТЧ. Почитай документацию.
11 Chameleon1980
 
07.10.25
08:54
(7) отличная оценка
12 Мультук
 
гуру
07.10.25
09:19
(10)

Гм-хм. Как это не возвращает ?
А это что ?
Программный код, который перебирает данные шапки, а потом данные таб.частей показать ?



	ВЫБРАТЬ
		ЧекККМ.Ссылка КАК Ссылка,
		ЧекККМ.БезналичнаяОплата.(  
			ВидОплаты КАК ВидОплаты,	
			НомерСертификата КАК ПодарочныйСертификат,
			СуммаПогашенияСертификата КАК СуммаВВалютеСертификата,
			СуммаПогашенияСертификата КАК Сумма
		) КАК ПодарочныеСертификаты
	ИЗ
		Документ.ЧекККМ КАК ЧекККМ
	ГДЕ
		ЧекККМ.Проведен = ИСТИНА
		И ЧекККМ.Дата МЕЖДУ &Дата1 И &Дата2
		И ЧекККМ.Архивный = Истина
13 dubraver
 
07.10.25
09:24
(12) ТЧ- это табличная часть прикладных объектов. Запрос не возвращает часть объекта. Не путайте выборку и часть объекта.
14 Мультук
 
гуру
07.10.25
09:28
(13)

А можно простой пример, когда данные

тзТовары = ПолучитьЗапросом(ссылка);

будут отличаться от ссылка.ПолучитьОбъект().Товары ?
15 Волшебник
 
07.10.25
09:31
(14) У них даже методы разные:
16 dubraver
 
07.10.25
09:33
(14) ТЗТовары - ТаблицаЗначений
ссылка.ПолучитьОбъект().Товары - ТабличнаяЧасть.
Это разные типы значений. Вы троллите?
17 Мультук
 
гуру
07.10.25
09:36
(15)

P.S.
а) Я серьезно. Я изо всех сил не вижу разницы в данных.
И думаю, Мультук, может ты чего-то очевидного не понимаешь ?

б) Ужас какой.
А так ? Теперь вроде как с типами всё хорошо.

тзТовары = ПолучитьЗапросом(ссылка);

будут отличаться от
тзТовары =ссылка.ПолучитьОбъект().Товары.Выгрузить() ?
18 Волшебник
 
07.10.25
09:38
(17) Ну данные одни и те же, конечно. Но в общем случае это разные объекты, потому что типы разные.
19 dubraver
 
07.10.25
09:42
(17)

"Я изо всех сил не вижу разницы в данных." - ну лбом давится зачем, все вам понятно.

ссылка.ПолучитьОбъект().Товары.Выгрузить() - вытянешь из базы весь объект и создашь переменную с ТЗ Товары.

тзТовары = ПолучитьЗапросом(ссылка); - получишь только те данные, с которыми необходимо работать, не вытягивая лишние поля объекта.
20 PR
 
07.10.25
09:50
Как ни ветка от ТС, так прогрессирующий тупизм какой-то
Притом, что сам ТС в (6) пишет, как нужно делать
Нахрена ветка, фиг пойми
21 PR
 
07.10.25
09:51
(17) Для тебя вообще что ли нет разницы, получить копию данных из объекта или объект для редактирования?
Так-то ТС про изменение данных, если че
22 Eiffil123
 
07.10.25
09:57
(13) какая же софистика вместо реального обсуждения вопроса
23 Мультук
 
гуру
07.10.25
10:02
(21)

Для меня есть. А вот для ТС-а ?
Откуда он берёт ТЧ, если ДокОбъект  получает несколько позже ?

(6)
3) я бы обошел ТЧ в цикле, и если хоть в одной строчке условие выполнилось, устанавливал бы переменную Модифицированность = Истина;
Дальше условие

Если Модифицированность Тогда
    ДокОбъект = Выборка.Ссылка.ПолучитьОбъект();
КонецЕсли;
24 dubraver
 
07.10.25
10:06
(22) а какие ваши реальные предложения ТСу ? Я бы начал с прокачки базы у ментора.
25 PR
 
07.10.25
10:14
(23) Это другой вопрос, насколько он грамотно получает данные для анализа
Если тупо получает ТЧ, которую потом анализирует, то в принципе можно и не париться с анализом, нужно ли менять объект, просто всегда получать объект, в случае необходимости менять
А вот если там какой-нибудь запрос, получающий сразу все необходимые данные, тогда другое дело
26 PR
 
07.10.25
10:18
(24) И нахрен ментору нужно туловище из (0)?
Понаслушаются всяких западных волшебных словечек, ходят потом, бряцают ими к месте и не к месту, вместо того, чтобы матчасть учить
27 Eiffil123
 
07.10.25
10:19
(24) в 4 ответил. пусть не занимается преждевременной оптимизацией
28 Eiffil123
 
07.10.25
10:21
(26) ментор - это инфоцыганин, но с более благозвучным названием?
29 PR
 
07.10.25
10:23
(28) Ментор — это человек, который помогает тебе принять правильное решение, наставник
30 Eiffil123
 
07.10.25
10:27
(29) и как мы раньше кодили без этого. жуть просто
31 PR
 
07.10.25
10:28
(30) Мы никогда не кодили без этого, у всех были свои наставники в свое время, у многих они и сейчас есть
32 dubraver
 
07.10.25
10:32
(26) Ментор - в моем понимании это челик (коллега, начальник, платный чел) который будет тебя херачить головой об клавиатуру, за то что ты базу не усваиваешь и не впитываешь знания на рабочих задачах. Когда превратишься в собачку павлова и реакция будет соответствующая, значит все в порядке, отложилось в подкорку.
33 PR
 
07.10.25
11:03
(32) К чему вот эта отсебятина?
Ментор — это более опытный наставник, который помогает тебе в сложных вопросах
Будет ли он в процессе помощи херачить тебя мордой об клаву — это вы сами разберетесь
34 PR
 
07.10.25
11:05
Миста — классический ментор
Многих в процессе помощи херачат об клаву, кстати
35 Eiffil123
 
07.10.25
11:14
(34) просто херачат. без помощи и смс
36 ldo6
 
07.10.25
11:18
Менторы на Мисте есть? Почем час работы?
37 ldo6
 
07.10.25
11:24
(0) ВыбратьПоССылкам надо использовать.
38 PR
 
07.10.25
11:41
(35) Кому-то не в коня корм, да
Таким кажется, что их просто херачат
39 H A D G E H O G s
 
07.10.25
12:32
(37) слышал звон...
40 ldo6
 
07.10.25
12:51
(39) Ты гуру ментор?
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший