Имя: Пароль:
1C
1С v8
Получить значение реквизитов формы. Как сделать правильней?
0 new1snik
 
26.12.13
13:42
УПП, обычная форма. Справочник БанковскиеСчета. Нужно получить значение БИК и к/с, которые являются реквизитами формы, на данный момент сделал так:
    Код = СсылкаНаОбъект.Контрагент.ОсновнойБанковскийСчет.Код;
    х = Справочники.БанковскиеСчета.НайтиПоКоду(Код).ПолучитьФорму("ФормаЭлемента");
    х.Открыть();
    БИК = х.ЭлементыФормы.БИКБанка.Значение;
    КС = х.ЭлементыФормы.КоррсчетБанка.Значение;
    х.Закрыть();
Будет ли это слишком косячным решением, если данная операция будет выполняться всего один раз в обработке? И как можно сделать красивее, если значения БИК и к/с не пишутся в регистры(я этого не нашел)?
1 Wobland
 
26.12.13
13:43
а как туда значения попадают?
2 Godofsin
 
26.12.13
13:44
(0) сууууппеееер!
3 Godofsin
 
26.12.13
13:46
БС = СсылкаНаОбъект.Контрагент.ОсновнойБанковскийСчет;
Бик = БС.Код;
КС = БС.КоррСчет;
4 Godofsin
 
26.12.13
13:46
БИК и КС не являются реквизитами формы
5 Wobland
 
26.12.13
13:47
между открыть и закрыть ещё скрин надо снимать
6 Godofsin
 
26.12.13
13:48
+(5) И делать в выгрузку в ДБФ
7 George Wheels
 
26.12.13
13:49
(0) Да. Это будет слишком косячным решением.
8 Wobland
 
26.12.13
13:49
(6) отправлять это веб-сервису, который это дело будет распознавать и возвращать ответ строкой
9 Godofsin
 
26.12.13
13:51
(8) По строке делать запрос на элемент справочника )))
10 GROOVY
 
26.12.13
13:53
(3) Решение, тоже, так себе. 4 неявных запроса породит.
11 Godofsin
 
26.12.13
13:56
(10) Ну надеюсь базу не положит =)
12 hhhh
 
26.12.13
13:58
(10) кеш ведь выручит.
13 Defender aka LINN
 
26.12.13
13:59
(3) БИК - это код БАНКА, а не счета. Да и к/с тоже.
14 Godofsin
 
26.12.13
14:00
(13) точно. Добавить .банк
15 new1snik
 
26.12.13
14:13
Спасибо всем. Работает
16 Wobland
 
26.12.13
14:17
(14) а не владелец?
17 Defender aka LINN
 
26.12.13
14:49
(16) Владелец - контрегнт
18 Kvestin
 
26.12.13
14:51
(10) Так как вашему мнению я точно доверяю.
Скажите, это подтвержденные данные (т.е. смотрели аналогичный код в профайлере) или из общих соображений?

На мой взгляд:
//БС = СсылкаНаОбъект.Контрагент.ОсновнойБанковскийСчет;
1 запрос: получаем запись для контрагента из таблицы справочника Контрагенты с отбором (СсылкаНаОбъект.Контрагент). Из ней сразу имеем ссылку на Основной банковский счет как реквизит
//Бик = БС.Код;
2 запрос: получаем запись в таблице справочника БанковскиеСчета с отбором (Контрагент.ОсновнойБанковскийСчет)
//Тут скорее всего кешируем все данные для выбранного банковского счета
//КС = БС.КоррСчет;
Тут уже получаем данные из кэша (в худшем случае допускаю что еще 1 запрос, если первый раз 1С решила не кешировать)

У меня получается в 2 запроса можно уложиться. Максимум в 3.
19 GROOVY
 
26.12.13
15:01
(18) Не смотрел в профайлере.

БС = СсылкаНаОбъект.Контрагент.ОсновнойБанковскийСчет; - однозначно один запрос с двумя соединениями или соединением и отбором.

Бик = БС.Код; - читаем все по ссылке банковского счета, по сути запрос выбрать * из БС Где БС = &БС

КС = БС.КоррСчет; - полностью согласен.

Итого вместо 1 нормального запроса, мы имеем 2-3 запроса. Возможно выборку в кэш абсолютно не нужных данных.

Я же говорю, решение не оптимальное :)
20 Kvestin
 
26.12.13
15:19
(19) По решению конечно согласен :) Но (0) еще веселее.
21 new1snik
 
26.12.13
15:22
(20)Я еще учусь xD Поэтому часто косячу
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой