Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Что можно оптимизировать в ниже приведенном коде и почему?

Что можно оптимизировать в ниже приведенном коде и почему?
Я
   happysan
 
06.06.20 - 21:40
Что можно оптимизировать в ниже приведенном коде и почему?
Процедура ОбработкаПроведения(Отказ, РежимПроведения)

лкЗапрос = Новый Запрос;
лкЗапрос.Текст = "ВЫБРАТЬ
                 |    РеализацияАвтомобилей.Автомобиль,
                 |    РеализацияАвтомобилей.Стоимость,
                 |    РеализацияАвтомобилей.СтоимостьУЕ,
                 |    РеализацияАвтомобилей.Ссылка
                 |ИЗ
                 |    Документ.РеализацияАвтомобилей.Автомобили КАК РеализацияАвтомобилей";

лкВыборка = лкЗапрос.Выполнить().Выбрать();

Пока лкВыборка.Следующий() Цикл
    
    лкЗапись = Движения.БУ.Добавить();
    
    лкЗапись.СчетДт         = лкВыборка.Ссылка.ДоговорВзаиморасчетов.СчетРасчетов;
    лкЗапись.СчетКт         = ПланыСчетов.БУ.Счет_90_01_1;
    
    лкЗапись.Период         = лкВыборка.Ссылка.Дата;
    лкЗапись.Регистратор         = лкВыборка.Ссылка;
    лкЗапись.Сумма         = лкВыборка.Стоимость;
    
    Если лкЗапись.СчетДт.Валютный Тогда
        лкЗапись.ВалютаДт = лкВыборка.Ссылка.ДоговорВзаиморасчетов.ВалютаУчета;
        лкЗапись.ВалютнаяСуммаДт = лкВыборка.СтоимостьУЕ;
    КонецЕсли;
    
    лкЗапись.Содержание = "Отражена вырузка по автомобилю " + лкВыборка.Автомобиль.Наименование;
    
    лкЗапись.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоБУ.Контрагенты] = лкВыборка.Ссылка.Контрагент;
лкЗапись.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоБУ.ДоговорыВзаиморасчетов] = лкВыборка.Ссылка.ДоговорВзаиморасчетов;
    лкЗапись.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконтоБУ.ВидыДеятельности] = лкВыборка.Ссылка.ВидДеятельности;
    лкЗапись.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконтоБУ.Брэнды] = лкВыборка.Ссылка.Брэнд;
    лкЗапись.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконтоБУ.СтавкиНДС] = лкВыборка.СтавкаНДС;
        
КонецЦикла;    

КонецПроцедуры
   Alres
 
1 - 06.06.20 - 21:51
В запросе специально нет отбора по ссылке? Он же все документы из базы вытянет
   Alres
 
2 - 06.06.20 - 21:54
Запрос к документам конечно так себе.
Постоянное обращение к ссылке через точку - эти поля можно запросом выбрать.

Откуда такая задача?
   BeerHelpsMeWin
 
3 - 06.06.20 - 21:56
(1) и если делать отбор по ссылке - то зачем тогда запрос, не проще ли работать сразу с таб частью?
   NcSteel
 
4 - 06.06.20 - 22:09
(3) Нет не проще.
   happysan
 
5 - 06.06.20 - 22:19
(1) Согласен, принимается.
(2) Тоже сразу на это обратил внимание, принимается.
(4) Согласен.
Что-то ещё заметили?
   Злопчинский
 
6 - 06.06.20 - 22:35
(0) лк в контексте явно излишне, потому как нет большого перемешивания кода оазной принадлежности/видимости.
   Ненавижу 1С
 
7 - 06.06.20 - 22:40
Если все поля, необходимые для записи движений, выбрать в запросе, то весь цикл сведется примерно к следующему:

Движения.БУ.Загрузить(Запрос.Выполнить().Выгрузить());
   Ненавижу 1С
 
8 - 06.06.20 - 22:40
+(7) выбрать все поля и дать им соответствующие алиасы
   happysan
 
9 - 06.06.20 - 22:42
(7)Абсолютно верно, тоже рассматривал этот вариант!
   H A D G E H O G s
 
10 - 06.06.20 - 22:43
Дичь какаято.
Это даже на задачи с собеседования не тянет.
   Ненавижу 1С
 
11 - 06.06.20 - 22:44
+(7) Хотя с субконто вроде не получится
   hhhh
 
12 - 06.06.20 - 22:49
(11) получится. С субконто как раз Загрузить набор с субконто из ТЗ самое простое, не надо заморачиваться. Просто пишешь Загрузить()
   happysan
 
13 - 06.06.20 - 23:02
(12) Можно подробнее?
   Bigcalm
 
14 - 06.06.20 - 23:03
(0)
Получить в запросе все необходимые поля через ВЫРАЗИТЬ, особенно вот это:

Если лкЗапись.СчетДт.Валютный Тогда
        лкЗапись.ВалютаДт = лкВыборка.Ссылка.ДоговорВзаиморасчетов.ВалютаУчета;
        лкЗапись.ВалютнаяСуммаДт = лкВыборка.СтоимостьУЕ;
    КонецЕсли;

лкЗапись.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоБУ.Контрагенты]  - это тоже через запрос.

Вощем все это запихнуть в запрос..
   happysan
 
15 - 06.06.20 - 23:08
(14) Может через ВЫБОР ... КОГДА ... ТОГДА?
   Bigcalm
 
16 - 06.06.20 - 23:10
Ну у тебя же все сущности предопределенные, попробуй через эту конструкцию
   Bigcalm
 
17 - 06.06.20 - 23:17
Я бы через точку ничего не делал)
Временных таблиц в запросе бы наделал, где все составные поля через ВЫРАЗИТЬ вывел.
А потом соединениями вывел бы выборку.
   Bigcalm
 
18 - 06.06.20 - 23:20
Ну и эта, почему запрос к документу?
Может быть есть какой-то регистр?
   Bigcalm
 
19 - 06.06.20 - 23:30
(0) В чем прикол- то? ))
   zak555
 
20 - 06.06.20 - 23:40
лкЗапись.Регистратор         = лкВыборка.Ссылка; 


это надо ?
   happysan
 
21 - 07.06.20 - 00:02
(18)Контекст неизвестен.
   happysan
 
22 - 07.06.20 - 00:03
(20) Под вопросом, задача вырвана из контекста.
   Bigcalm
 
23 - 07.06.20 - 02:38
лкЗапись.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоБУ.Контрагенты] = лкВыборка.Ссылка.Контрагент;
лкЗапись.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоБУ.ДоговорыВзаиморасчетов] = лкВыборка.Ссылка.ДоговорВзаиморасчетов;
    лкЗапись.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконтоБУ.ВидыДеятельности] = лкВыборка.Ссылка.ВидДеятельности;
    лкЗапись.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконтоБУ.Брэнды] = лкВыборка.Ссылка.Брэнд;
    лкЗапись.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконтоБУ.СтавкиНДС] = лкВыборка.СтавкаНДС;

В цикле, каждую итерацию делать запрос к таблице пвх? Может есть смысл иицициализировать эти 4 переменные?
Ну и там верно сказали, подготовить таблицу в запросе, и загрузить ее в движения...
   happysan
 
24 - 07.06.20 - 06:59
(23) Как это будет выглядеть?
   happysan
 
25 - 07.06.20 - 07:12
(23)(24) Вижу так,
Эти строки загоняются в ТЗ, затем запросом получаем выборку из ТЗ, присваяивая нужные псевдонимы полям и загружаем в движения документа:
лкЗапись.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоБУ.Контрагенты] = лкВыборка.Ссылка.Контрагент;
лкЗапись.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоБУ.ДоговорыВзаиморасчетов] = лкВыборка.Ссылка.ДоговорВзаиморасчетов;
лкЗапись.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконтоБУ.ВидыДеятельности] = лкВыборка.Ссылка.ВидДеятельности;
лкЗапись.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконтоБУ.Брэнды] = лкВыборка.Ссылка.Брэнд;
лкЗапись.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконтоБУ.СтавкиНДС] = лкВыборка.СтавкаНДС;
   happysan
 
26 - 07.06.20 - 07:13
(25) Читаем как: "... присваивая нужные псевдонимы полям, и загружаем в движения документа:".
   hhhh
 
27 - 07.06.20 - 09:17
(26) нет. так

ВЫБРАТЬ
                 |    РеализацияАвтомобилей.Ссылка.Контрагент КАК СубконтоДт1,
                 |    РеализацияАвтомобилей.Ссылка.ДоговорВзаиморасчетов КАК СубконтоДт2,
                 |    РеализацияАвтомобилей.Ссылка.ВидДеятельности КАК СубконтоКт1,
                 |    РеализацияАвтомобилей.Ссылка.Брэнд КАК СубконтоКт2,
                 |    РеализацияАвтомобилей.СтавкаНДС КАК СубконтоКт3,
                  |    РеализацияАвтомобилей.Автомобиль,
                 |    РеализацияАвтомобилей.Стоимость,
                 |    РеализацияАвтомобилей.СтоимостьУЕ,
                 |    РеализацияАвтомобилей.Ссылка
                 |ИЗ
                 |    Документ.РеализацияАвтомобилей.Автомобили КАК РеализацияАвтомобилей";

и потом делаешь (7)

а эту хрень из (25) выкинь
   happysan
 
28 - 07.06.20 - 09:29
Всем спасибо (особенно (27))!!!
   happysan
 
29 - 07.06.20 - 09:37
(27) В первых четырёх полях запроса следует убрать "Ссылка".
   такт
 
30 - 07.06.20 - 09:58
(29) конечно убери "Ссылка" и не забудь сюда пожаловаться )
 
 Рекламное место пустует
   Волшебник
 
Модератор
31 - 07.06.20 - 10:00
(29) Это же запрос к табличной части. Поле Ссылка позволяет обратиться к шапке документа.
   happysan
 
32 - 07.06.20 - 15:01
(31) Точно, спасибо, не заметил.
   Cthulhu
 
33 - 07.06.20 - 16:26
(32): а еще, наверное, не заметил, что каждое(!) ".Ссылка." - это неявное выполнение запроса... лучче бы соединить и потом тянуть.
   happysan
 
34 - 07.06.20 - 17:05
(33) Это было сразу замечено, плюс ещё упоминали об этом в (17)?
   Cthulhu
 
35 - 07.06.20 - 18:21
(34): в (17) глупость, которая совсем не про то. (там - про точку (без которой. строго говоря, никак), я - про две точки в варианте, ведущем к неявному запросу). ну и независимо от - ч упомянул о том, что в варианте, декларируемом в качестве решения, есть конкретное упущение (вне зависимости от то. что там и где было "сразу замечено").
   happysan
 
36 - 07.06.20 - 19:07
(35) Так и воспринималась информация, что речь в (17) идёт о двух точках и более. Понятное ведь дело, что без точки никак!


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.