|
Что можно оптимизировать в ниже приведенном коде и почему? | ☑ | ||
---|---|---|---|---|
0
happysan
06.06.20
✎
21:40
|
Что можно оптимизировать в ниже приведенном коде и почему?
Процедура ОбработкаПроведения(Отказ, РежимПроведения) лкЗапрос = Новый Запрос; лкЗапрос.Текст = "ВЫБРАТЬ | РеализацияАвтомобилей.Автомобиль, | РеализацияАвтомобилей.Стоимость, | РеализацияАвтомобилей.СтоимостьУЕ, | РеализацияАвтомобилей.Ссылка |ИЗ | Документ.РеализацияАвтомобилей.Автомобили КАК РеализацияАвтомобилей"; лкВыборка = лкЗапрос.Выполнить().Выбрать(); Пока лкВыборка.Следующий() Цикл лкЗапись = Движения.БУ.Добавить(); лкЗапись.СчетДт = лкВыборка.Ссылка.ДоговорВзаиморасчетов.СчетРасчетов; лкЗапись.СчетКт = ПланыСчетов.БУ.Счет_90_01_1; лкЗапись.Период = лкВыборка.Ссылка.Дата; лкЗапись.Регистратор = лкВыборка.Ссылка; лкЗапись.Сумма = лкВыборка.Стоимость; Если лкЗапись.СчетДт.Валютный Тогда лкЗапись.ВалютаДт = лкВыборка.Ссылка.ДоговорВзаиморасчетов.ВалютаУчета; лкЗапись.ВалютнаяСуммаДт = лкВыборка.СтоимостьУЕ; КонецЕсли; лкЗапись.Содержание = "Отражена вырузка по автомобилю " + лкВыборка.Автомобиль.Наименование; лкЗапись.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоБУ.Контрагенты] = лкВыборка.Ссылка.Контрагент; лкЗапись.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоБУ.ДоговорыВзаиморасчетов] = лкВыборка.Ссылка.ДоговорВзаиморасчетов; лкЗапись.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконтоБУ.ВидыДеятельности] = лкВыборка.Ссылка.ВидДеятельности; лкЗапись.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконтоБУ.Брэнды] = лкВыборка.Ссылка.Брэнд; лкЗапись.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконтоБУ.СтавкиНДС] = лкВыборка.СтавкаНДС; КонецЦикла; КонецПроцедуры |
|||
1
Alres
06.06.20
✎
21:51
|
В запросе специально нет отбора по ссылке? Он же все документы из базы вытянет
|
|||
2
Alres
06.06.20
✎
21:54
|
Запрос к документам конечно так себе.
Постоянное обращение к ссылке через точку - эти поля можно запросом выбрать. Откуда такая задача? |
|||
3
BeerHelpsMeWin
06.06.20
✎
21:56
|
(1) и если делать отбор по ссылке - то зачем тогда запрос, не проще ли работать сразу с таб частью?
|
|||
4
NcSteel
06.06.20
✎
22:09
|
(3) Нет не проще.
|
|||
5
happysan
06.06.20
✎
22:19
|
(1) Согласен, принимается.
(2) Тоже сразу на это обратил внимание, принимается. (4) Согласен. Что-то ещё заметили? |
|||
6
Злопчинский
06.06.20
✎
22:35
|
(0) лк в контексте явно излишне, потому как нет большого перемешивания кода оазной принадлежности/видимости.
|
|||
7
Ненавижу 1С
гуру
06.06.20
✎
22:40
|
Если все поля, необходимые для записи движений, выбрать в запросе, то весь цикл сведется примерно к следующему:
Движения.БУ.Загрузить(Запрос.Выполнить().Выгрузить()); |
|||
8
Ненавижу 1С
гуру
06.06.20
✎
22:40
|
+(7) выбрать все поля и дать им соответствующие алиасы
|
|||
9
happysan
06.06.20
✎
22:42
|
(7)Абсолютно верно, тоже рассматривал этот вариант!
|
|||
10
H A D G E H O G s
06.06.20
✎
22:43
|
Дичь какаято.
Это даже на задачи с собеседования не тянет. |
|||
11
Ненавижу 1С
гуру
06.06.20
✎
22:44
|
+(7) Хотя с субконто вроде не получится
|
|||
12
hhhh
06.06.20
✎
22:49
|
(11) получится. С субконто как раз Загрузить набор с субконто из ТЗ самое простое, не надо заморачиваться. Просто пишешь Загрузить()
|
|||
13
happysan
06.06.20
✎
23:02
|
(12) Можно подробнее?
|
|||
14
Bigcalm
06.06.20
✎
23:03
|
(0)
Получить в запросе все необходимые поля через ВЫРАЗИТЬ, особенно вот это: Если лкЗапись.СчетДт.Валютный Тогда лкЗапись.ВалютаДт = лкВыборка.Ссылка.ДоговорВзаиморасчетов.ВалютаУчета; лкЗапись.ВалютнаяСуммаДт = лкВыборка.СтоимостьУЕ; КонецЕсли; лкЗапись.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоБУ.Контрагенты] - это тоже через запрос. Вощем все это запихнуть в запрос.. |
|||
15
happysan
06.06.20
✎
23:08
|
(14) Может через ВЫБОР ... КОГДА ... ТОГДА?
|
|||
16
Bigcalm
06.06.20
✎
23:10
|
Ну у тебя же все сущности предопределенные, попробуй через эту конструкцию
|
|||
17
Bigcalm
06.06.20
✎
23:17
|
Я бы через точку ничего не делал)
Временных таблиц в запросе бы наделал, где все составные поля через ВЫРАЗИТЬ вывел. А потом соединениями вывел бы выборку. |
|||
18
Bigcalm
06.06.20
✎
23:20
|
Ну и эта, почему запрос к документу?
Может быть есть какой-то регистр? |
|||
19
Bigcalm
06.06.20
✎
23:30
|
(0) В чем прикол- то? ))
|
|||
20
zak555
06.06.20
✎
23:40
|
лкЗапись.Регистратор = лкВыборка.Ссылка;
это надо ? |
|||
21
happysan
07.06.20
✎
00:02
|
(18)Контекст неизвестен.
|
|||
22
happysan
07.06.20
✎
00:03
|
(20) Под вопросом, задача вырвана из контекста.
|
|||
23
Bigcalm
07.06.20
✎
02:38
|
лкЗапись.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоБУ.Контрагенты] = лкВыборка.Ссылка.Контрагент;
лкЗапись.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоБУ.ДоговорыВзаиморасчетов] = лкВыборка.Ссылка.ДоговорВзаиморасчетов; лкЗапись.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконтоБУ.ВидыДеятельности] = лкВыборка.Ссылка.ВидДеятельности; лкЗапись.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконтоБУ.Брэнды] = лкВыборка.Ссылка.Брэнд; лкЗапись.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконтоБУ.СтавкиНДС] = лкВыборка.СтавкаНДС; В цикле, каждую итерацию делать запрос к таблице пвх? Может есть смысл иицициализировать эти 4 переменные? Ну и там верно сказали, подготовить таблицу в запросе, и загрузить ее в движения... |
|||
24
happysan
07.06.20
✎
06:59
|
(23) Как это будет выглядеть?
|
|||
25
happysan
07.06.20
✎
07:12
|
(23)(24) Вижу так,
Эти строки загоняются в ТЗ, затем запросом получаем выборку из ТЗ, присваяивая нужные псевдонимы полям и загружаем в движения документа: лкЗапись.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоБУ.Контрагенты] = лкВыборка.Ссылка.Контрагент; лкЗапись.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоБУ.ДоговорыВзаиморасчетов] = лкВыборка.Ссылка.ДоговорВзаиморасчетов; лкЗапись.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконтоБУ.ВидыДеятельности] = лкВыборка.Ссылка.ВидДеятельности; лкЗапись.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконтоБУ.Брэнды] = лкВыборка.Ссылка.Брэнд; лкЗапись.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконтоБУ.СтавкиНДС] = лкВыборка.СтавкаНДС; |
|||
26
happysan
07.06.20
✎
07:13
|
(25) Читаем как: "... присваивая нужные псевдонимы полям, и загружаем в движения документа:".
|
|||
27
hhhh
07.06.20
✎
09:17
|
(26) нет. так
ВЫБРАТЬ | РеализацияАвтомобилей.Ссылка.Контрагент КАК СубконтоДт1, | РеализацияАвтомобилей.Ссылка.ДоговорВзаиморасчетов КАК СубконтоДт2, | РеализацияАвтомобилей.Ссылка.ВидДеятельности КАК СубконтоКт1, | РеализацияАвтомобилей.Ссылка.Брэнд КАК СубконтоКт2, | РеализацияАвтомобилей.СтавкаНДС КАК СубконтоКт3, | РеализацияАвтомобилей.Автомобиль, | РеализацияАвтомобилей.Стоимость, | РеализацияАвтомобилей.СтоимостьУЕ, | РеализацияАвтомобилей.Ссылка |ИЗ | Документ.РеализацияАвтомобилей.Автомобили КАК РеализацияАвтомобилей"; и потом делаешь (7) а эту хрень из (25) выкинь |
|||
28
happysan
07.06.20
✎
09:29
|
Всем спасибо (особенно (27))!!!
|
|||
29
happysan
07.06.20
✎
09:37
|
(27) В первых четырёх полях запроса следует убрать "Ссылка".
|
|||
30
такт
07.06.20
✎
09:58
|
(29) конечно убери "Ссылка" и не забудь сюда пожаловаться )
|
|||
31
Волшебник
модератор
07.06.20
✎
10:00
|
(29) Это же запрос к табличной части. Поле Ссылка позволяет обратиться к шапке документа.
|
|||
32
happysan
07.06.20
✎
15:01
|
(31) Точно, спасибо, не заметил.
|
|||
33
Cthulhu
07.06.20
✎
16:26
|
(32): а еще, наверное, не заметил, что каждое(!) ".Ссылка." - это неявное выполнение запроса... лучче бы соединить и потом тянуть.
|
|||
34
happysan
07.06.20
✎
17:05
|
(33) Это было сразу замечено, плюс ещё упоминали об этом в (17)?
|
|||
35
Cthulhu
07.06.20
✎
18:21
|
(34): в (17) глупость, которая совсем не про то. (там - про точку (без которой. строго говоря, никак), я - про две точки в варианте, ведущем к неявному запросу). ну и независимо от - ч упомянул о том, что в варианте, декларируемом в качестве решения, есть конкретное упущение (вне зависимости от то. что там и где было "сразу замечено").
|
|||
36
happysan
07.06.20
✎
19:07
|
(35) Так и воспринималась информация, что речь в (17) идёт о двух точках и более. Понятное ведь дело, что без точки никак!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |