Имя: Пароль:
1C
Юмор
Нечерные запросы в цикле - какие они?
0 Консультант Баранов
 
29.08.19
09:37
Будет ли обращение к предопределенным данным или представлению ссылки запросом? Или предопределенные данные хранятся в конфе которая лежит у пользователя?

Допустим код

Для каждого стрТовары из тчТовары Цикл

    Если стрТовары.Номенклатура.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Услуга Товары

        Сообщить("Номенклатура"+стрТовары.Номенклатура+" - услуга?");
   КонеЕсли;

КонецЦикла;

стрТовары.Номенклатура.ВидНоменклатуры - это запрос

А вот
Сообщить("Номенклатура"+стрТовары.Номенклатура+" - услуга?");
Перечисления.ВидыНоменклатуры.Услуга

Это запросы?

Можете привести еще примеры не черных запросов?
1 ДенисЧ
 
29.08.19
09:39
При первом обращении к этой номенклатуре - запрос будет. При втором - уже закешируется. Ежов (вроде?) проводил такие эксперименты когда-то...
2 Консультант Баранов
 
29.08.19
09:41
(1) В каком случае при  стрТовары.Номенклатура.ВидНоменклатуры или  Сообщить("Номенклатура"+стрТовары.Номенклатура+" - услуга?");
3 ДенисЧ
 
29.08.19
09:43
(2) Да.
Первая - точно будет обращение в БД и вытягивание всего.
Во втором - не знаю, как сейчас, может они представление оптимизировали.
4 Фрэнки
 
29.08.19
09:43
(2) насколько я понимаю из статей в инете, получение всех свойств объекта с сервера будет по второй точке
5 Фрэнки
 
29.08.19
09:46
т.е. при обращению к свойству объекта через точку провоцируется чтение объекта с сервера. Причем, считываться будет много раз, если будет будет встречаться чтение свойств много раз. Насколько оно закешируется и оптимизируется - тут судить трудно. А обращение будет каждый раз.
6 Фрэнки
 
29.08.19
09:47
стрТовары.Номенклатура - это только использование Представления объекта, которе уже сформировано в тчТовары
7 ДенисЧ
 
29.08.19
09:48
(6) " использование Представления объекта, которе уже сформировано в тчТовары"
Кто тебе такое сказал?
8 EVGA
 
29.08.19
09:52
(0) Сообщить("Номенклатура"+стрТовары.Номенклатура+" - услуга?");
Это однозначно запрос в цикле. не явный, на экзамене спеца по платформе за такое 2 балла снижают
9 Фрэнки
 
29.08.19
09:55
(8) не думаю, что из-за запроса. Тут в сообщить указано неявное преобразование типа, которое мало того, что затратное по времени, но и может быть потенциальным источником ошибок.
10 EVGA
 
29.08.19
09:55
(0) что мешает в запросе к ТЧ получить все представления и значение истины в случае если это услуга. и уже в цикле вывести результат
11 EVGA
 
29.08.19
09:58
(9) именно так. ты в сообщении ссылку на справочник указываешь, она преобразовывается в представление ссылки и пользователю выводит именно представление. это и есть запрос.
12 EVGA
 
29.08.19
10:03
|ВЫБРАТЬ
|    ЗаказКлиентаТовары.Номенклатура.Представление КАК НоменклатураПредставление
|ИЗ
|    Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары
|ГДЕ
|    ЗаказКлиентаТовары.Ссылка = &Ссылка
|    И ЗаказКлиентаТовары.ВидНоменклатуры = Значение(перечисление.ВидыНоменклатуры.Услуга)

а потом уже вывести:

Пока Выборка.Следующий() цикл
Сообщить(""Номенклатура"+Выборка.НоменклатураПредставление+" - услуга");
КонецЦикла;
13 EVGA
 
29.08.19
10:05
(12) там не ЗаказКлиентаТовары.ВидНоменклатуры а ЗаказКлиентаТовары.Номенклатура.ВидНоменклатуры разумеется (в том случае если в тч не выводится этот вид номенклатуры)
14 Фрэнки
 
29.08.19
10:06
(11) Забавно. Мне казалось, что причина тормозов была в чем-то другом ( не в получении Представления запросом, а просто в преобразовании типа, которое тоже тормозное само по себе )
15 Максим Нижегородец
 
29.08.19
10:30
(14) Получение представления - это очень тормозная операция. Но не факт, что тормоза из-за этого. Лучше замерять производительность в конфигурации на тестовой.

Тормозной:
|ВЫБРАТЬ
|    Представление(ЗаказКлиентаТовары.Номенклатура) КАК НоменклатураПредставление
|ИЗ
|    Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары
|ГДЕ
|    ЗаказКлиентаТовары.Ссылка = &Ссылка
|    И ЗаказКлиентаТовары.ВидНоменклатуры = Значение(перечисление.ВидыНоменклатуры.Услуга)

Быстрый:
|ВЫБРАТЬ
|    Номен.Наименование КАК НоменклатураПредставление
|ИЗ
|    Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары
|ЛЕВОЕ СОЕДИНЕНИЕ
|    Справочник.Номенклатура КАК Номен
|ПО
|    Номен.Ссылка = ЗаказКлиентаТовары.Номенклатура
|ГДЕ
|    ЗаказКлиентаТовары.Ссылка = &Ссылка
|    И ЗаказКлиентаТовары.ВидНоменклатуры = Значение(перечисление.ВидыНоменклатуры.Услуга)
16 Фрэнки
 
29.08.19
10:41
(15) да, интересный пример.

Но Представление это же нечто более обобщенное, чем простое Наименование - это для справочника Номенклатура Наименование еще подойдет, но для других случаев возможно придется использовать явные значение иных строковых полей
17 Максим Нижегородец
 
29.08.19
10:55
(16) Да, поэтому эта функция и тормозная. Все функции написанные в SQL примерно в 10 раз медленнее решений обычным запросом.
18 VladZ
 
29.08.19
11:01
(0) Предлагаю называть вещи своими именами. Запрос - это запрос средствами 1с. Обращение к реквизиту справочника (запросы к БД) - это нечто другое.
19 Aleksandr N
 
29.08.19
11:06
(18) Неявный запрос?
20 VladZ
 
29.08.19
11:11
Конструкции вида стрТовары.Номенклатура.ВидНоменклатуры - это дополнительный запрос к БД.  На маленьких объемах проблем с этим не будет. Т.е. решение жизнеспособное.

Но... Если ты так напишешь на собеседовании - тебе скажут "А-та-та!". Хотя, повторюсь, что решение жизнеспособное. И удовлетворит 80% компаний.


Конструкции вида
Сообщить("Номенклатура"+стрТовары.Номенклатура+" - услуга?");  - вроде как к реквизиту не обращаешься. Но (!!!) при обращении к стрТовары программа тащит на клиента все реквизиты справочника. А это тоже обращение к реквизитам.

Моё мнение: решения такого вида возможны для небольшого объема данных (либо что-то разовое). Но на собеседовании нужно понимать, где тебя могут подловить.
21 dmpl
 
29.08.19
11:19
(20) Это смотря куда собеседование. Во франч - это даже плюс. Потом можно будет еще раз деньги срубить за оптимизацию.
22 Фрэнки
 
29.08.19
11:22
(20) все так, но в данном конкретном контексте стрТовары это не справочник, а просто элемент коллекции из тчТовары.
Поэтому в обращении
ДайМнеЗначениеСсылка = стрТовары.Номенклатура
получишь именно ссылку

а в обращении
ДайМнеЗначениеСтрока = "Номенклатура "+стрТовары.Номенклатура+" - услуга?"
получишь неявное преобразование типов с использованием Представления для ссылки.
Можно на большом цикле даже потестировать, что дольше работает
СТРОКА(стрТовары.Номенклатура)
или
стрТовары.Номенклатура.Наименование
Только нужно не забывать, что в общем случае получение Наименование может оказаться нагружена кучей всех остальных свойств. Если свойств будет мало, то скорость может оказаться в пользу Наименования взамен получения Представления
23 Максим Нижегородец
 
29.08.19
11:24
Друзья, я не про оптимизацию вообще (тут написано очень много правильных вещей), а про конкретную функцию ПРЕДСТАВЛЕНИЕ(). Она начиная с 1С 7.7 по 8.3 была мягко говоря не быстрой.
24 Максим Нижегородец
 
29.08.19
11:27
(23) Вот эта конструкция Строка(Справочники.Номенклатура.ПустаяСсылка()) - вызывает функцию Представление().
25 EVGA
 
29.08.19
11:30
(22) на сколько я помню получение Наименования работает несколько быстрее чем получение Представление. Потому что для Представления через "менеджер чего-то там" получается сначала значение Основного представления (по коду или наименованию) а потом уже это само представление. (15) погонял в отладке, выдает замер один в один в клиент-серверном варианте. но опять же, на экзамене за левое соединение там где оно не нужно, снизят балл.
26 dmpl
 
29.08.19
11:48
(25) Получение представления может вызвать тонны кода, в котором (внезапно) тоже могут быть запросы в цикле (для каждой записи в результате запроса). Поэтому если представление нужно не для каждого элемента - эффективнее будет получать его в цикле.
27 Максим Нижегородец
 
29.08.19
11:59
(25) Тестировали меня раз у одного работодателя по схеме франчайзи (1с экзамен). Проверяющий говорит у вас запрос не оптимально написан. Говорю давайте проверим. Проверили мой работает быстрее. Проверяющий - по правилам 1С он не оптимальный.

В общем не взяли меня на ту работу. А левое соединение, если не нужно, то планировщик SQL запроса сам его выкинет (в общем лишним не бывает).
28 VladZ
 
29.08.19
12:00
(27) Это к вопросу "А судьи кто?".
29 Консультант Баранов
 
29.08.19
12:47
Вернемся к теме.



Так я и не понял  ..." + стрТОвары.Номенклатура +" ... - это запрос к БД?



+
Обращение к перечислению это запрос к БД?

Обращение к предопределенному элементу это запрос к БД?

+ Есть ли еще такие неявные конструкции которые являются обращением к БД? Например ПараметрыСеанса или еще какой вариант?
30 dmpl
 
29.08.19
13:17
(29) В Сообщить() это приводит к вызову обработчика ОбработкаПолученияПредставления(), где может выполняться любой код (на усмотрение разработчика конфигурации), в том числе могут быть запросы.
31 Dotoshin
 
29.08.19
13:19
(29) >>Так я и не понял  ..." + стрТОвары.Номенклатура +" ... - это запрос к БД?

Ну если у тебя ".Номенклатура" имеет тип СправочникСсылка, есть какие-то сомнения, что это не запрос к БД?
32 Вафель
 
29.08.19
13:20
такая оптимизация конечно хороша, но обычна она стоит в самом конце реальных косяков
33 Вафель
 
29.08.19
13:21
единственное, что к документам с большими ТЧ лучше через точку не обращаться
34 Консультант Баранов
 
29.08.19
13:29
(32) Вопрос не про оптимизацию. Вопрос больше теоретический. (33) Это понятно. Но в сообщить точки нет. И как насчет предопределенных элементов?
35 EVGA
 
29.08.19
13:30
(26) в том то и смысл, в запросе получили только те записи для которых нужно вывести сообщение, и только для них получили представление
36 dmpl
 
29.08.19
14:23
(35) Поскольку такое происходит не всегда (в частности, в (0) оно нужно только для услуг, а для товаров не нужно) - логичнее по возможности представление получать не в запросе, а в коде, обрабатывающем результат запроса.
37 Консультант Баранов
 
29.08.19
14:27
(36) > оно нужно только

Это абстрактный пример, ничего никому не нужно.

Вопрос не про оптимизацию, а про то, что является запросом и какие бывают еще.
38 ДенисЧ
 
29.08.19
14:28
(37) ЗАпросом является то, в результате чего идёт select в БД
39 Консультант Баранов
 
29.08.19
14:30
(38) Слишком общий ответ. Меня конкретные примеры интересуют.
40 Brrrrrrrr
 
29.08.19
16:47
(15) А 1с разве сама не превратит первый запрос во второй? С учетом того что поле "Номенклатура" не составное
41 gae
 
29.08.19
18:03
(39) Зато весьма точный. Данные лежат в таблицах БД. Если надо что-то оттуда достать - будет запрос. Надо достать наименование, чтобы вывести на экран - будет запрос.
42 Консультант Баранов
 
29.08.19
18:32
(41) Как насчет перечислений, предопределенных элементов?
43 gae
 
29.08.19
19:16
(42) Ссылку на значение перечисления - похоже читает один раз при обращении к перечислению, из таблицы config, и кэширует.
44 Cyberhawk
 
29.08.19
19:17
(43) Каждый раз читает, если обращаешься не через ПредопределенноеЗначение. Если через него, то кэшируется на время сеанса.
45 gae
 
29.08.19
19:21
(44) Фиг знает, в обычном приложении вроде не вижу повторных запросов, если получаю через Перечисления.ИмяПеречисления.ИмяЗначения.
46 Лефмихалыч
 
29.08.19
20:54
(29) Если тчТовары - это табличная часть объекта, то:
1. А = стрТовары.Номенклатура; // нет запроса в БД - объект считан в оперативу со всеми потрохами
2. Б = стрТовары.Номенклатура.ВидНоменклатуры; // есть запрос в БД для получения ссылки на вид номенлатуры
3. В = ""+стрТовары.Номенклатура; // есть запрос для получения представления
47 Лефмихалыч
 
29.08.19
20:56
на счет вот этого
Перечисления.ИмяПеречисления.ИмяЗначения
я хз. Но на практике любые трюки с явным кэшированием значений перечислений не дают никакого прироста производительности в сравнении с кодом без кэширования. Чо там реально с запросами - не проверял, поленился профайлер расчехлять
48 Консультант Баранов
 
30.08.19
05:44
(47) В документации написано:

Перечисления

Для каждого перечисления создается таблица (_Enum<n>) с полями:

    _ID<suff> - идентификатор элемента перечисления;
    _EnumOrder - числовое значение элемента перечисления.


Если у справочника есть предопределенные данные, то создается таблица  проинициализированных областей (_RefSInf) с полями:

    _PDInitialized – признак того, что область проинициализирована;
    _Fld<n> - общие реквизиты данного объекта.
49 Консультант Баранов
 
30.08.19
08:09
Хотя в рекомендациях 1С использование предопределенных элементов допустимо:

Процедура ОбработкаПроведения(Отказ, Режим)



Движения.ОсновнойРегистрБухгалтерии.Записывать = Истина;



Для Каждого ТекСтрокаТовары Из Товары Цикл

Движение = Движения.ОсновнойРегистрБухгалтерии.Добавить();

Движение.СчетДт = ПланыСчетов.ОсновнойПланСчетов.Товары;

Движение.СчетКт = ПланыСчетов.ОсновнойПланСчетов.Поставщики;

Движение.Период = Дата;

Движение.Организация = Организация;

Движение.Сумма = ТекСтрокаТовары.Сумма;

Движение.КоличествоДт = ТекСтрокаТовары.Количество;

Движение.Содержание = "Покупка товара";

Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатура] = ТекСтрокаТовары.Номенклатура;

Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Склады] = Склад;

Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Контрагенты] = Поставщик;



КонецЦикла;

https://its.1c.ru/db/pubapplied/content/189/hdoc
50 ДенисЧ
 
30.08.19
08:49
(46) 1. А = стрТовары.Номенклатура;// нет запроса в БД - объект считан в оперативу со всеми потрохами
@

С какого перепою? В тз лежит только ссылка
51 Консультант Баранов
 
30.08.19
08:57
(50) Так тут и оперирование только ссылкой.
52 rsv
 
30.08.19
09:07
(0)Откройте для себя профайлер чтоли ....потрассируйте
53 ДенисЧ
 
30.08.19
09:12
(51) Где тут? Всё зависит от того, что с этой ссылкой сделать. Если её присвоить другой ссылке - то запроса не будет. Если попытаться от этой ссылки что-то взять - то бедт.
54 Консультант Баранов
 
30.08.19
09:14
(52)> Откройте для себя профайлер чтоли ....потрассируйте

Это что такое?

Да мне особо глубоко не надо. Просто на следующей неделе веду курсы по введению в программирование в 1С, просто примеры запросов в цикле нужны.
55 ДенисЧ
 
30.08.19
09:18
(54) Если ты не знаешь, что такое профайлер - то есть мнение, что тебе вести курсы ещё рановато.
56 Gimalaj
 
30.08.19
09:27
>> "Откройте для себя профайлер чтоли ....потрассируйте" - А что это такое?
в сочетании с
>> на следующей неделе веду курсы по введению в программирование в 1С
- это пять!
57 Фрэнки
 
30.08.19
09:33
мда...
Но проблема еще и в том, что замер производительности в 1С есть, но профайлера как такового в самой 1С нету.
58 Фрэнки
 
30.08.19
09:33
Пятничная тема!
59 ДенисЧ
 
30.08.19
09:34
(57) Профилер - он бдориентированный...
60 EVGA
 
30.08.19
09:34
(56) да ладно, курсы по введению же. читать по методичке, которую тебе предоставят и все, там не надо быть классным спецом. синтаксис да пунктуация...
61 Фрэнки
 
30.08.19
09:35
(59) А с учетом того, что у 1С есть "файловый режим" должен быть и свой. Логично просто, если бы он был
62 13_Mult
 
30.08.19
09:36
(60) И запросы на бумажке рисовать можно ))
63 ДенисЧ
 
30.08.19
10:18
(61) На все 5 вариантов? Это 5 разных профилеров должно быть..
64 VladZ
 
30.08.19
12:35
(54) Гы-гы-гы... И эти люди нас потом учат, как правильно...
65 Лефмихалыч
 
30.08.19
12:57
(50) ну, так и в приведенном МНОЮ коде используется только ссылка, гуид то есть
66 Лефмихалыч
 
30.08.19
12:58
(48) из написанного не следует ни что запрос есть, ни что запросов нет. Нигде не написано, как платформа с метаданными обращается, в какой момент и в каком объеме она их вычитывает из БД
67 Консультант Баранов
 
30.08.19
14:37
(64)> И эти люди нас потом учат, как правильно...

Поделись, где ты такое увидел?
68 Лефмихалыч
 
30.08.19
14:52
(64) это не вас, это баранов
69 gae
 
30.08.19
20:33
(54) Тогда открой для себя замер производительности и лови тормозящие места. Там довольно очевидно ловятся чтения из БД одного и того же по 100 тыс. раз
70 xXeNoNx
 
31.08.19
00:06
(54) а кто сказал что запросы в цикле это плохо?
71 Консультант Баранов
 
31.08.19
02:44
(70) Методологи 1С? Пользователи у которых тормозит? Нет?
72 xXeNoNx
 
31.08.19
10:03
(71) бггг, а можно ссылку на методолгов?
73 xXeNoNx
 
31.08.19
10:14
(71) интересно, а что скажет Белоусов по поводу использования циклов при решении расчетных задач, да и в целом....
74 Сияющий в темноте
 
31.08.19
12:05
спрТовары.Номенклатура преобразуется в текст,и вызывается получение представления обьекта,а это не только запрос,но еще и выполнение кода.
в присвоении,спрНоменклатура=спрТовары.Номенклатура,никакого запроса к бд нет,так как идет присвоение ссылки,ч одним ограничением,что если спрНоменклатура не переменная,а реквизит,то идет преобразование к его типу,и тут или ссылка или вызов получения представления или неопределено,т.к.в 1с перехватить преобразование типа нельзя.

в случае получения спрТовары.Номенклатура.ВидНоменклатуры однозначно будет запрос к бд,и кеширование вас спасет только при втором запуске,т.к.обычно,в табличной части товары дублей номенклатуры нет.
75 Сияющий в темноте
 
31.08.19
12:08
запрос в цикле,сам по себе,не так страшен
но,во-первых,1с не умеет prepare execute,во-вторых,получение обьекта в цикле требует работы с блокировками,чтобы была целостность данных и не зависела от скорости выполнения и параллельнлсти.
76 Лефмихалыч
 
31.08.19
13:26
(70) я
77 xXeNoNx
 
01.09.19
20:50
(76) у Вас есть уникальная возможность посетить курс ТС...
78 xenos
 
01.09.19
21:15
(77) Увлекаешься запросами в цикле? Видно за живое задело.
79 olegves
 
01.09.19
21:20
в цикле нет нечерных запросов, видимо, некоторым лень потрудится сделать запрос вне цикла и обработать результат в цикле
80 Лефмихалыч
 
01.09.19
21:47
(77) дерзишь, шельма
81 xXeNoNx
 
01.09.19
22:18
(80) ни в коем случае, а вот на личности не нужно
82 xXeNoNx
 
01.09.19
22:19
(78) нет, я знаю как их готовить...
83 xXeNoNx
 
01.09.19
23:21
+(82) (78) А Вы?
84 xXeNoNx
 
04.09.19
00:02
?
85 rphosts
 
04.09.19
07:45
(76) ну в общем... если у цикла немного повторений и если эти запросы не создают проблем (нагрузка, блокировки и т.п.) - это не проблема.
86 rphosts
 
04.09.19
07:46
(77) Консультант Баранов читает какие-то курсы?
87 Лефмихалыч
 
04.09.19
07:50
(85) это всегда не проблема, а просто новая задача в будущем. Если ты решил задачу путем запросов в цикле, то ты сделал из одной задачи две.

Запросы в цикле, в особенности неявные, - это само по себе не хорошо и не плохо. Это просто возможность, которую предоставляет платформа. Было бы это безусловно плохо, не было бы такой возможности.
При этом, если ты соорудил запрос в цикле, то это ты не решение сгенерировал, а техдолг, который потом придется отрабатывать.
А так как эта штука приводит не к исключениям, а к деградации производительности, узнаешь ты про что настал момент, когда пришла пора вернуть долги, не явно сразу и напрямую, а через длительный баттхёрт и период отрицания, гнева, непонимания и отчаяния, который тебе понадобится, чтобы найти, где из тебя кровь течёт.

Профессионалы, короче, с этой хернёй предпочитают не связываться, чтобы просто крепче спать и из уважения к коллегам. Потому, что, если отрабатывать придется тебе, то это полбеды, но может статься, что это ты кому-то другому свинью подложил.
88 rphosts
 
04.09.19
07:52
(87) я всё это знаю, но чаще приходится перепиливать уже чужое и когда ищешь место которое проблема - запросы в цикле таковыми являются достаточно редко
89 Провинциальный 1сник
 
04.09.19
07:53
(87) Это вообще спорный вопрос. Что лучше - простой запрос в цикле, который всегда однозначно оптимально выполняется серверов, или пятиэтажный единственный запрос, склонный падать в нестедлуп по миллионным таблицам. В первом случае ты получишь результат за предсказуемое время, во втором - время будет зависеть от фаз луны.
90 Лефмихалыч
 
04.09.19
07:53
(88) а я и не для тебя это писал, а для коллеги, который считает, что носки можно не стирать потому, что они и так прекрасно работают.
91 Лефмихалыч
 
04.09.19
07:55
(89) в том, что я написал, спорных вопросов нет. Перечитай. Я не писал, что запросы в цикле использовать нельзя и что они - абсолютное зло. Я написал, что их использование имеет цену, которую ПРИДЕТСЯ платить, но есть шанс, что - не тебе.
92 rphosts
 
04.09.19
07:57
(89) ну запросы тоже не все умеют писать.... товарища дельфины (да, у нас кое какой софт по работе с железяками пишут на Delphi) крайне негодовали что наш сервер не тянет их запросы... на поверку они там соединяли 14 таблиц в одном запросе пакета!!! Оптимизатор за контрольное время тупо не успевал нормальный план выбрать.
93 Провинциальный 1сник
 
04.09.19
07:59
+(89) Да, и если продолжать тему - то использование временных таблиц в запросе тоже моветон, ибо нарушает декларативную реляционную логику sql-запросов, заменяя её на частично императивную, ибо последовательностью создания временных таблиц управляет автор. То есть, если программировать "математически адекватно", то мы получаем зависимость от "искусственного интеллекта" сервера базы данных.. в противном случае мы его обходим (временными таблицами) - получая _в лучшем_ меньшее быстродействие, но значительно ограничивая потери _в худшем_. Так в этом же смысле запрос в цикле - это как ассемблерная вставка на языке высокого уровня, кусок алгоритма, который непосредственно управляется программистом, а не неким "вычислителем-оптимизатором"...
94 Лефмихалыч
 
04.09.19
08:05
(93) ты чего доказать-то хочешь?
95 Провинциальный 1сник
 
04.09.19
08:06
(94) Что нет зла и добра, есть решение, которое делает программист.
96 rphosts
 
04.09.19
08:44
(95)что за позорный инфантилизм!
Либо есть границы ответственности у каждого либо есть коллегиальная безответственность!
97 Провинциальный 1сник
 
04.09.19
08:53
(96) Я не считаю запросы в цикле злом. Всё зависит от критериев. Если критерием является понятный и простой алгоритм, легко поддерживаемый и расширяемый - то лучше запрос в цикле, чем мегазапрос на 10 экранов. Даже если при этом мы теряем в быстродействии. В то же время, типовые тормозят жутко, несмотря на то что они пишутся по всем "рекомендациям" от 1с и там нет запросов в цикле, зато куча запросов там где не надо, например вместо обращения к контексту происходит запрос к данным объекта и тому подобное..
98 Провинциальный 1сник
 
04.09.19
08:58
(96) Критерии качества кода разные для разных категорий разработчиков. Для фикси главное - писать так, чтобы через год легко вспомнить и доработать, и с четким пониманием применимости кода по быстродействию, не усложняя без необходимости. Для тиражников - писать максимально универсально и эффективно, даже ценой понятности кода, потому что разбирать и поддерживать код будет скорее всего кто-то другой.
99 Фрэнки
 
04.09.19
09:08
(97) ну слишком смелое обобщение, что в типовых 1С нет запросов в цикле. В конечном итоге, неявные запросы все равно встречаются довольно часто.
100 xXeNoNx
 
04.09.19
10:34
(85) согласен, если количество итераций можно контролировать и если выполнение не затрачивает много ресурсов, то можно решать НЕКОТОРЫЕ задачи, цикл в запросе ни плохо, ни хорошо, что бы это использовать, нужно знать все минусы и к чему может привести использование данных конструкций и в корне не согласен с адептами хорошего-белого и черного-плохого
101 Консультант Баранов
 
08.09.19
11:28
(86) Немного расширенный: https://1c.ru/cso-part/rus/partners/training/cso/course?id=1

Единоразово, больше не ожидается.