|   |   | 
| 
 | Что можно оптимизировать в ниже приведенном коде и почему? | ☑ | ||
|---|---|---|---|---|
| 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) идёт о двух точках и более. Понятное ведь дело, что без точки никак!     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |