Отбор кандидата-программиста

16.02.25

Функциональные - Управление персоналом (HRM)

Как лучше организовать отбор?

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Шаблон ответов для тестового задания
.docx 13,51Kb
15
15 Скачать (5 SM) Купить за 3 050 руб.

Мне часто приходится участвовать в собеседованиях (отборе) кандидата-программиста. Постепенно пришел к выводу, что написание по техническому заданию новой обработки (отчета) – не лучший вариант:

  • Требуется существенное время + среда разработки (компьютер)
  • Может вызвать негативную реакцию.
  • Для проверки требуется сотрудник высокой квалификации.
  • Увеличение длительности отбора увеличивают вероятность отказа кандидата от участия.

Поэтому было решено давать кандидату уже написанный код 1С с ошибками, которые он должен найти.

  • Поиск ошибок в чужом коде происходит быстро, читать - с листа.
  • Повышает самооценку кандидата.
  • Результат можно проверить по шаблону ответов

Ниже образец кода 1С с ошибками, применяемый для собеседования. Шаблон ответов приложен к публикации. Цена файла предназначена для крупных корпораций, не для персонального использования )) Этот текст - обладает вескими достоинствами:

1) Короткий
2) Быстрый
3) Самодостаточный. Каждая неточность (ошибка) поясняется самим текстом или ИТС.
4) Дает оценку кандидата по шкале от 0 до 20.

Не каждый ребенок найдет здесь 20 неточностей (ошибок), да ? Кандидат должен сделать максимально глубокий разбор с учётом всех возможных нюансов и контекстов кода 1С.

&НаКлиентеНаСервере
Функция ЗаполнитьЗначенияСвойств() //01
	
Запрос = Новый Запрос; //03
Запрос.Текст = 
"ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ //05
|	ВыручкаИСебестоимостьПродажОбороты.Регистратор.АдресДоставки КАК АдресДоставки,
|	ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаНоменклатуры.Номенклатура КАК Номенклатура, //07
|	ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаНоменклатуры.Характеристика КАК ХарактеристикаНоменклатуры,
|	ВыручкаИСебестоимостьПродажОбороты.КоличествоОборот * ЦеныНоменклатурыСрезПоследних.Цена КАК СуммаОборот //09
|ИЗ
|	РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(&ДатаНачала, &ДатаОкончания, Регистратор, ) КАК ВыручкаИСебестоимостьПродажОбороты //11
|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаОкончания, ВидЦены = &ВидЦены) КАК ЦеныНоменклатурыСрезПоследних
|		ПО ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаНоменклатуры.Характеристика = ЦеныНоменклатурыСрезПоследних.Характеристика //13
|ГДЕ
|	ЦеныНоменклатурыСрезПоследних.Номенклатура В(&ГруппаНоменклатуры) //15
|	И ВыручкаИСебестоимостьПродажОбороты.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг";
 //17
Запрос.УстановитьПараметр("ВидЦены", ВидЦены);
Запрос.УстановитьПараметр("ДатаНачала", НачалоМесяца( ТекущаяДата() ) ); //19
Запрос.УстановитьПараметр("ДатаОкончания", КонецДня( ТекущаяДата() ) + 1 );
Запрос.УстановитьПараметр("ГруппаНоменклатуры", ГруппаНоменклатуры); //21
РезультатЗапроса = Запрос.Выполнить();	
ТЗ = РезультатЗапроса.Выгрузить(); //23
НачатьТранзакцию();
//25
Для Каждого СтрокаДанных ИЗ ТЗ Цикл
	Сообщить( СтрокаДанных.АдресДоставки + " " + СтрокаДанных.Номенклатура + " " + СтрокаДанных.СуммаОборот ); //27
КонецЦикла;
//29
ЗафиксироватьТранзакцию();
//31	
КонецФункции;

 

Собеседование тестирование интервью кандидат прием на работу

См. также

Управление персоналом (HRM) Бухгалтер Пользователь Платформа 1С v8.3 Бухгалтерский учет Управленческий учет Платные (руб)

1С:Зарплата и управление персоналом 8 – программа для полной автоматизация учета и управления сотрудниками на предприятии. Базовая, КОРП и ПРОФ версии. Возвращаем до 15% бонусами! Заказывайте 1С:ЗУП в Инфостарте!

9100 руб.

17.02.2016    167505    586    6    

433

Управление персоналом (HRM) Пользователь Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Управленческий учет Абонемент ($m)

Отчет формирует актуальный список сотрудников на указанную дату и для каждого из сотрудников выводит указанный в параметрах отчета показатель.

1 стартмани

16.07.2024    579    1    svbel85    0    

0

Управление персоналом (HRM) Пользователь Платформа 1С v8.3 1C:Бухгалтерия Бесплатно (free)

В данной статье мы рассмотрим сроки по выполнению адаптации, опрос по адаптации и ответственных за адаптацию в программе 1С: Персонал.

12.07.2024    989    Koder_Line    0    

1

Управление персоналом (HRM) Пользователь Платформа 1С v8.3 1C:Бухгалтерия Управленческий учет Бесплатно (free)

В данной статье мы рассмотрим создание и оформление оргструктуры компании и штатное расписание в программе 1С: Персонал.

24.06.2024    1228    Koder_Line    3    

0

Управление персоналом (HRM) Пользователь Платформа 1С v8.3 1C:Бухгалтерия Управленческий учет Бесплатно (free)

В данной статье будет описано то, как именно вести организационную структуру предприятия внутри подсистемы «1С: Предприятие Персонал». Будет рассказано о том, какие разделы важны и для чего используются при оформлении и контроле оргструктуры компании внутри системы 1С.

19.06.2024    1273    Koder_Line    0    

1

Управление персоналом (HRM) Пользователь Платформа 1С v8.3 1C:Бухгалтерия Бесплатно (free)

В данной статье будет описано то, как внутри системы «1С:Предприятие Персонал» можно проводить анкетирование и опросы сотрудников. А именно, будут разобраны все этапы: как готовить вопросы к таким тестированиям, как создавать и редактировать сами анкеты и передавать их опрашиваемым, а также то, как происходит анализ результатов и само тестирование.

23.04.2024    1603    Koder_Line    0    

1
Вознаграждение за ответ
Показать полностью
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. ixijixi 1992 30.01.25 12:24 Сейчас в теме
+1
ВЫРАЗИТЬ(ВыручкаИСебестоимостьПродажОбороты.Регистратор КАК Документ.РеализацияТоваровУслуг).АдресДоставки КАК АдресДоставки


+2
&НаКлиентеНаСервере
2. vasilev2015 2744 30.01.25 12:37 Сейчас в теме
Пожалуйста, не нужно писать о проблемах в общем чатике ))
А то статья обесценится, вынужден буду комментарии закрыть.
6. starik-2005 3157 30.01.25 14:21 Сейчас в теме
(2)
вынужден буду комментарии закрыть
Не, ну так вообще неинтересно будет )))
Greeen84; +1 Ответить
8. vasilev2015 2744 30.01.25 14:25 Сейчас в теме
34. SerVer1C 874 31.01.25 08:36 Сейчас в теме
(2) В таком случае придётся ставить минус всей публикации, если вижу в ней недочеты, а возможности высказать это в комментариях нет.
VyacheslavShilov; +1 Ответить
36. vasilev2015 2744 31.01.25 08:57 Сейчас в теме
(34) Желание улучшать публикации похвально, но кроме публичных комментариев в современном мире есть другие каналы связи. Так что логически обоснованной необходимости ставить минус нет ))
37. SerVer1C 874 31.01.25 09:00 Сейчас в теме
(36) Уверяю вас, что есть!! Часто бывают случаи, что обсуждать публикацию надо именно совместно, потому что моё личное видение на проблему не всегда может коррелировать с мнением остального сообщества.
3. quazare 3880 30.01.25 12:48 Сейчас в теме
"Цена файла предназначена для крупных корпораций, не для персонального использования"

и

Запрос.УстановитьПараметр("ДатаНачала", НачалоМесяца( ТекущаяДата() ) ); //19
Запрос.УстановитьПараметр("ДатаОкончания", КонецДня( ТекущаяДата() ) + 1 );

попахивает "инфоцыганством".... (новый граница....)
4. vasilev2015 2744 30.01.25 12:56 Сейчас в теме
(3) Код открытый, содержит преднамеренные ошибки.
Этот код обязан вызывать вопросы и неприязнь ))
Сильный программист видит все ошибки самостоятельно, платная подсказка ему не нужна.
5. asadroman 30.01.25 14:20 Сейчас в теме
Это код одна сплошная ошибка!!!
maksa2005; zqzq; +2 Ответить
7. starik-2005 3157 30.01.25 14:21 Сейчас в теме
(5) принят! )))
klaus38; d4rkmesa; shard; +3 Ответить
9. asadroman 30.01.25 14:25 Сейчас в теме
13. starik-2005 3157 30.01.25 14:32 Сейчас в теме
(9) Я-то не набираю, это делает Николай.
10. vasilev2015 2744 30.01.25 14:26 Сейчас в теме
(7) Слишком умных лучше не брать. Подсидят через пару лет. ))
11. asadroman 30.01.25 14:29 Сейчас в теме
(10) Ладно хоть не "умный слишком".
12. lada2011 30.01.25 14:29 Сейчас в теме
Вопросы на собеседовании
1 Вы можете разрабатывать без технического задания.
а уж потом задачи
al5prog; vasilev2015; +2 Ответить
14. starik-2005 3157 30.01.25 14:33 Сейчас в теме
(12) А вы видели когда-нибудь приличное ТЗ?
maksa2005; dsdred; +2 Ответить
15. ixijixi 1992 30.01.25 14:37 Сейчас в теме
(14) Ну это уже перебор!
Прикрепленные файлы:
0x00; maksa2005; +2 Ответить
17. lada2011 30.01.25 14:46 Сейчас в теме
(14) Видел, сам писал.
Директор; "На складе необходимо внедрить систему адресного хранения, пиши как будет склад работать". Написал, директор одобрил словами; "Я понял . Делай!".
Сделал.
18. asadroman 30.01.25 14:47 Сейчас в теме
(14) Вот оно приличное ТЗ.
Прикрепленные файлы:
maksa2005; locman_69; +2 Ответить
16. Трактор 1265 30.01.25 14:38 Сейчас в теме
Хитёр! Учтём. Выжду годик и сам запилю такую публикацию.
19. vasilev2015 2744 30.01.25 14:59 Сейчас в теме
(16) через годик у меня уже будет четыре плюсика и одно скачивание !
20. ip0593 20 30.01.25 15:29 Сейчас в теме
(19) формат интересный. но материала мало и стоимость поэтому на мой взгляд завышена.
21. vasilev2015 2744 30.01.25 15:34 Сейчас в теме
(20) Каждый читатель бесплатно получает "тестовый код", который я составлял несколько дней )). Разве это мало ?
22. ip0593 20 30.01.25 15:37 Сейчас в теме
(21) цена же для корпораций) корпорация не сможет за 9 см или 4к рублей с помощью этого файла оценить человека полноценно как мне кажется.
если это будет стоить в разы меньше, то возможно спрос будет и формат можно развивать
23. vasilev2015 2744 30.01.25 15:46 Сейчас в теме
(22) Знакомые работодатели уверяют, что этот тест дает адекватную оценку знаний и способностей. 9 СМ - это 1,5 - 2 тысячи рублей, по бирже. Напишите, какую цену хотите ?
25. ip0593 20 30.01.25 16:11 Сейчас в теме
(23) я могу за 9 см купить. просто кажется что завышена цена.
не больше 5 см.

ну и 4200 это вряд ли стоит) на скриншоте видно цену.
Прикрепленные файлы:
26. vasilev2015 2744 30.01.25 16:35 Сейчас в теме
(25) установил цену 5 СМ )) покупайте ))
Цена в рублях вообще с потолка берется, я ей не управляю.
29. ip0593 20 30.01.25 17:10 Сейчас в теме
(26) куплю чтобы поддержать вашу затею)
30. vasilev2015 2744 30.01.25 17:15 Сейчас в теме
39. SerVer1C 874 31.01.25 09:20 Сейчас в теме
(26)
Цена в рублях вообще с потолка берется

Как раз нет, цена жёстко фиксирована и равна 1550 + 300 * СМ
24. kwazi 676 30.01.25 15:52 Сейчас в теме
Кто это написал?
Возьмем к себе на работу. Оклад 50к.
Nefilimus; stjucha1109; PetrovAnton; +3 Ответить
27. PetrovAnton 8 30.01.25 16:57 Сейчас в теме
Хороший бизнес!
Если бы я публиковал свои примеры рефакторинга, наверно уже миллионером был :)
28. vasilev2015 2744 30.01.25 17:07 Сейчас в теме
(27) Это не рефакторинг, этот код придуман специально для собеседования. Старался "впихнуть" туда как можно больше ошибок, чтобы кандидат смог показать себя максимально.
31. PetrovAnton 8 30.01.25 17:19 Сейчас в теме
(28) А что это если не рефакторинг?
В задаче говнокод. В ответе результат рефакторинга.
У меня такого "придуманного" кода на проекте мама не горюй ;D
32. vasilev2015 2744 30.01.25 17:21 Сейчас в теме
(31) Вам виднее. Сонар используете для рефакторинга ?
33. PetrovAnton 8 30.01.25 17:42 Сейчас в теме
(32) Есть Sonar и Phoenix bsl, через них разработчики сами исправляют свои ошибки. Чтобы не увеличивать техдолг. А легаси рефакторю просто когда сталкиваюсь с говнокодом в рамках какой-нибудь задачи. Так потихоньку и боремся с ним.
VyacheslavShilov; Gurami; vasilev2015; +3 Ответить
35. SerVer1C 874 31.01.25 08:54 Сейчас в теме +0.1 $m
Есть предложение: исправьте код
РезультатЗапроса = Запрос.Выполнить();	
ТЗ = РезультатЗапроса.Выгрузить(); //23
НачатьТранзакцию();
//25
Для Каждого СтрокаДанных ИЗ ТЗ Цикл
	Сообщить( " " + СтрокаДанных.АдресДоставки + " " + СтрокаДанных.Номенклатура + " " + СтрокаДанных.СуммаОборот ); //27
КонецЦикла;
//29
ЗафиксироватьТранзакцию();
Показать

на
РезультатЗапроса = Запрос.ВыполнитьПакет();	
Выборка = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); //23

Попытка //25

Если Выборка.Следующий(Истина) Тогда //27
	НачатьТранзакцию();
	//29
	Для Каждого СтрокаДанных ИЗ Выборка
		Сообщить СтрокаДанных.Сумма + " " + СтрокаДанных.Номенклатура + " " + СтрокаДанных.АдресДоставки ; //31
	КонецЦикла;
	//33
КонецЕсли
//35
КонецПопытки;
//37
ЗафиксироватьТранзакцию();
Показать
38. Kir_Plastelinin 31.01.25 09:13 Сейчас в теме
(35) мы вам перезвоним. p.s. ну нельзя же так издеваться над кандидатами)
bolikov; stjucha1109; +2 Ответить
41. vasilev2015 2744 31.01.25 09:24 Сейчас в теме
(38) Как раз здесь я агитирую давать быстрый тест вместо обычной практики "разработайте по ТЗ новый овно-отчет, это займет у вас не больше трех часов". Эта статья - чтобы облегчить жизнь кандидатам.
48. Kir_Plastelinin 31.01.25 13:14 Сейчас в теме
(41) мое сообщение больше относилось к предложенному "усложнению" выше (на которое, собственно, и ответил), т.к. в ней код даже синтаксическую проверку не пройдет.
40. vasilev2015 2744 31.01.25 09:21 Сейчас в теме
(35) использую в следующих версиях
42. Darklight 34 31.01.25 11:10 Сейчас в теме +0.1 $m
(35) Мне кажется Вы тут переборщили. Такой код даже не скомпилируется. Считаю, что для проверки кандидата стоит давать не просто нормально компилирующийся код. Но вполне нормально (т.е. без явных ошибок) выполняющийся - хотя бы в монопольном режиме на файловой базе. Естественно - исправить надо условно для базы на 10К сеансов дёргающих код по сотню раз в секунду! :-D

Кстати, вот, тут ещё имеет смысл разделять весь процесс исправления на три задачи:

1. Просто оптимизировать ошибки - чтобы код "не падал", или умел падать корректно, когда иначе никак в многопользовательской клиент-серверной среде (да и без неё - в 1С Предприятие 8 будет 1001 повод упасть на ровном месте, особенно когда нет чёткого представления о том, как вызывается такой код - если это не явная интерактивная работа в УФ), но с приоритетом на надёжность (а нюансов по входным данным может быть множество, даже на микрообъёмах)

2. Оптимизация кода уже с приоритетом на скорость работы и скорость внесения такой доработки (с сохранением безотказности, насколько будет возможно) при работе, в условно, не очень сильно загруженной среде, но, с неизвестными объёмами входных данных, потенциально, как малыми, так и крайне большими

3. Оптимизация кода, когда, в основном, работа идёт с данными умеренно среднего объёма, но в очень конкурентной "пользовательской" среде - когда вероятность многократных ежесекундных пересечений по данным близка к 100%, а число сеансов более 10К, число серверов в кластере, более 10-ка

Это я к тому, что оптимизировать/исправлять можно практически любой код, и увлечься в этом процессе очень сильно - но нужно чётко понимать требуемые границы результата/времени и целевой вектор направления такой оптимизации!
Да и вообще, одно дело - это код, условно, проведения или интерактивной работы документа, в т.ч. в форме списка. Другое дело - это часто запускаемый отчёт, и третье дело - это отчёт, выполняемый по сложной схеме, ночью, с с рассылкой результата. Или это какие-либо фоновые процессы. Или это код регл. обработки, запускаемый несколько дней в месяц, но вешающий всю базу на 8 часов, а то и больше!

Но тут, конечно, тогда надо разделять и того - кого Вы ищите:
0. Стажёра/начинающего программиста
1. Просто эффективного опытного кодера
2. Аналитика-разработчика
3. Архитектора-эксперта
(4. а ведь ещё это может быть и внедренец/консультант - но это уже другая тема; как тема тестирования)

Для них всех нужны свои задачи, и разный объём области анализа/вмешательства.

Но, вообще, идея проверять знания на готовой кодовой базе - вполне себе неплохая, и имеет право применения в практике крупных компаний, да и мелких тоже!

Кстати, ещё одним хорошим методом (если это актуально, конечно) - может быть задача на проведение обновления релиза изменённой конфигурации (с или без применения git или трёхстороннего сравнения - это уже индивидуально) для специально подготовленной заковыристой конфигурации, с разумным числом изменений. Ну или просто задача слияния нескольких конфигураций. А если в базе ещё будет и несколько дополнительных (доработанных) отчётов/печатных форм, или просто отдельных клонов форм объектов метаданных - так вообще будет шикардос (по идеи - на этом должны засыпаться более половины кандидатов - просто не обратив на это внимание - а ведь, это очень важно понимать, ну и глубокая внимательность тут хорошо проверяется)!
43. SerVer1C 874 31.01.25 11:17 Сейчас в теме
(42)
может быть задача на проведение обновления релиза изменённой конфигурации

"Спасибо, мы вам перезвоним позже..."
Некоторые недобросовестные конторы так используют кандидатов для выполнения своих легких задач )
45. Darklight 34 31.01.25 11:30 Сейчас в теме
(43)
Некоторые недобросовестные конторы так используют кандидатов для выполнения своих лёгких задач )

Я специально сделал акцент на том, что это должна быть специально подготовленная конфигурация. С ограниченным числом изменений (специально подобранными для моделирования тех или иных заковыристых практических ситуаций - эдакая квинтэссенция) и таким же заранее подготовленным чек-листом!
Не надо ставить рабочую задачу - она изначально должна быть тестовой - и это должно быть видно. Можно вообще использовать не типовую небольшую конфигурацию. Чтобы и кандидату показать - что это только тест, за разумное время - скажем за 1 час, не более (в идеале - минут 20-30 уже профи должно хватить, с объёмом не стоит перебарщивать, хотя, безусловно, при обновлении объёмы играет важную роль - когда долго обновляешь, устаёшь и "глаз замыливается" - и вообще - обновление сложных конфигураций это сам по себе хороший повод провести и оптимизацию и автоматизацию части процесса, и настроить автотесты - но это всё уже совсем другая тема, всё-таки сейчас речь только про тестирование навыков кандидата - так что только полностью ручной хардкор на внимательность и умение разбираться в алгоритмах; и только на малых объёмах). А сильно изменённые рабочие конфигурации могут обновляться всего на один шаг обновления релиза - не один день, с сотнями изменённых элементов метаданных. С тысячами изменённых строк кода/ячеек/элементов форм. Это сразу будет видно - и так делать, конечно, нельзя!
44. vasilev2015 2744 31.01.25 11:21 Сейчас в теме
мой код (кажется) компилируется ))
наверное тест имеет разумные ограничения "от джуна до мидла" ))
и да, мне отчасти неловко (или даже завидно), что комментарий (42) больше основной статьи ))
46. Darklight 34 31.01.25 11:33 Сейчас в теме
(44)
мой код (кажется) компилируется ))

Приведённый Вами в сабже - скорее всего - да (хотя там есть отсылки к определениям, вне приведённой кодовой базы, ну и в 1С Предприятие 8 не строго типизированный ЯП, так что тут ошибки могут ещё и в рантайме всплыть - и это вообще хороший вопрос от кандидата - стоит ли заморачиваться с проверкой входных типов - или есть гарантия их корректности) - но я ответил на пост, с предложенным альтернативным кодом!

Кстати, сразу не обратил внимание, тут ещё и нюансы с правами доступа могу быть - что тоже никак не оговорено. Хоть в запросе и явно написано "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ" - но, ведь, это не панацея от всех проблем с доступом, а лишь отчасти для RLS! А если ещё и профили доступа КОРП лицензий приплести.... В общем - вопросы решения проблем с доступом тут тоже явно требуют уточнения: либо надо решать - и тогда "подводных камней" можно много заложить, либо не надо и ограничиваемся явно заданной/или специально не заданной конструкцией "ВЫБРАТЬ РАЗРЕШЕННЫЕ "!

и да, мне отчасти неловко (или даже завидно), что комментарий (42) больше основной статьи ))

Не обращайте внимание, к сожалению, это моя плохая привычка - я люблю писать ёмкие комментарии :-(
47. vasilev2015 2744 31.01.25 12:38 Сейчас в теме
(46) РАЗРЕШЕННЫЕ - может быть лишним или нет, в зависимости от настроек RLS. Кандидат должен это знать. Такая задумка.
49. Darklight 34 31.01.25 14:55 Сейчас в теме
(47) Насколько я знаю - лишним "РАЗРЕШЕННЫЕ" редко бывает (разве что явно/неявно включён привилегированный режим; или ставят данную директиву не в выборке верхнего уровня - а где-то в подзапросах (хотя это будет ошибка выполнения)). Вот отсутствует - часто! Но Вы же его сразу явно написали в возвращаемой выборке - вот это мне странным показалось. Ну или я сам чего-то не понимаю. Не могу придумать ситуацию, где в 8.3 явно не надо писать такое ключевое слово, и не знаю про какие-то недостатки - может просветите, я что-то забыл? Может Вы хотели, чтобы ситуации, когда не все данные доступны - пользователь явно об этом был проинформирован (условно - отработал какой-то особый программный код)? Но это уже специфика - и о ней надо предупреждать программиста!

Другое дело - какой-то навороченный пример, где результат собирается из временных таблиц, в разных режимах привилегированных модулей. Я вот, забыл, как будет вести себя временная таблица в таком случае.
Ранее, данные возвращались, пока не доходило до выборки в объектную модель - там в значениях ссылочных полей уже были записи "Объект не найден". Сейчас, вроде как, возникает ошибка при вызове запроса. У меня не используется RLS - вот я не знаю как сейчас!
50. vasilev2015 2744 31.01.25 15:25 Сейчас в теме
(49) в тесте есть конечно явные ошибки, но есть и неоднозначные места, которые позволяют задать дополнительные вопросы, вывести кандидата на разговор.
51. Darklight 34 31.01.25 16:12 Сейчас в теме
(50)Любопытно как Вы будете пытаться вывести на разговор программиста, в строке 05 которую он трогать не будет
52. vasilev2015 2744 31.01.25 16:21 Сейчас в теме
(51) кандидат, который напишет "05. слово Разрешенные используют, если в базе используют RLS" получит преимущество перед тем, кто ничего не напишет. Кто напишет подробнее все строки - тот и молодец ))
68. Darklight 34 03.02.25 09:22 Сейчас в теме
(52) Вы ждёте от кандидата полного разбора написанного Вами кода?
Или, всё же, "баг ревью"?
Ничего не имею против обоих подходов, но надо понимать, что это разные вещи, и кандидату должна правильно ставиться задача - или Вы медиумов ищите?

А, впрочем, дело ваше... в какой-то степени можно написать и условно верные конструкции, в расчёте на то, что кандидат сочтёт их явно ошибочными - и удалит!
Но, на мой взгляд, в строке 05 - кандидату в режиме чисто "код ревью" не нужно ничего ни исправлять ни комментировать! Тем более, если у него нет данных о настройке ролей метаданных и установке опций в ИБ
Несмотря на то, что в этой строке есть ещё одна директивы "РАЗЛИЧНЫЕ", которая, так же как и "РАЗРЕШЕННЫЕ" в данном коде, ничего особо плохого не делает, но.... может быть нужной, в зависимости от фактической структуры измерений "ЦеныНоменклатуры" .

И это я только одну строчку кода обсудил - а, по сути, тут придираться можно к условной "ошибочности" почти каждой номерной строки (и кода около ней). Безусловно - если у кандидата будет более детальная постановка задачи и условий контекста выполнения такого кода - то ситуация может сильно меняться. Безусловно - если кандидат очень опытный - он сам Вам задаст вопросов больше, чем Вы ему! Безусловно - если кандидат супер опытный - он такой подход вообще сочтёт издевательством (ну если его, конечно не берут на должность куратора к группе немощных кодеров), и 1001 раз подумает - а надо ли ему сюда идти!
73. vasilev2015 2744 03.02.25 09:50 Сейчас в теме
(68) Более полный разбор кода дает преимущества, это справедливо. Программист должен чувствовать возможные проблемы лучше, чем стандартная проверка в Сонаре. Допишу в статье "найти ошибки и неточности"
74. Darklight 34 03.02.25 09:54 Сейчас в теме
76. vasilev2015 2744 03.02.25 09:55 Сейчас в теме
(74) предложите свою формулировку ))
Номер в строке - это не показатель ошибки, это просто нумерация. Чтобы было удобнее код обсуждать.
77. Darklight 34 03.02.25 10:08 Сейчас в теме +0.1 $m
(76) Мне сложно сделать так предположение. Я выше описал - что в подходе к поиску кандидата может быть много разных вариантов. И мне не ясен - какой нужен Вам.
Хотя бы уточнили ключевые особенности метаданных, самой ИБ, и нагрузке на неё. Я, которые влияют на принятие решений.
Я, вот, не сразу понял (пришлось перебрать пару конфигураций), что тут, вероятно конфигурация УТ 11.4 (КА 2.4, ERP2.4 - нужное подчеркнуть), т.к *.5 версии указанных метаданных нет; и это ещё без учёта того, что это может быть и не типовая конфигурация вовсе, или доработанная типовая - а значит и структура метаданных может быть иной! А архитектура метаданных в Ваших задачах и, вероятно, в Вашем подходе - скорее всего, имеет важное значение.
Даже в данном примере в типовой конфигурации (скажем УТ - в строке 5 - ключевое слово "РАЗРЕШЕНО" формально лишнее но:
1. Только если в ИБ нет ошибок в регистре "ЦеныНоменклатуры", когда одна характеристика может быть по нескольким номенклатурам
2. В результате запроса может быть очень большая выборка данных - кода лишняя свёртка может быть неоправданной!
3. Не нужно думать о том, что архитектура регистра "ЦеныНоменклатуры" в будущем может поменяться - скажем, появятся ещё измерения аналитики - впрочем, тут всё не однозначно - ведь изменения архитектуры - могут быть разными - и такими, что директивой "РАЗРЕШЕНО" не отделаешься - а скорее даже замаскируешь более серьёзную проблему!
Но - это вообще уже общая проблема к формированию кода запросов в 1С Предприятие 8 - всё устарело и очень примитивно!
Но - это, уже скорее, вопросы к строкам 13 и 15, чем к 5.


Ну и, уточнили, что же нужно от кандидата - простой "код ревью" или "глубокий разбор с учётом всех возможных нюансов и контекстов"
78. vasilev2015 2744 03.02.25 10:23 Сейчас в теме
(77) добавил в статью это уточнение.
90. sashocq 193 06.02.25 23:05 Сейчас в теме
(68) директивы "РАЗЛИЧНЫЕ", которая, так же как и "РАЗРЕШЕННЫЕ" в данном коде, ничего особо плохого не делает

Вообще-то как раз делает ооочень плохое: в общем случае результат запроса будет некорректным, но выявить это тестовым путём (на 2-3 позициях) будет нереально. Из головы можно легко сгенерировать тестовые данные, на которых результат будет неверным.
93. Darklight 34 07.02.25 10:59 Сейчас в теме
(90) Можете пояснить. У меня давно не было проект с применением RLS - и я совершенно не могу понять, как, именно в данном запросе, наличие "РАЗРЕШЕННЫЕ" может возвращать некорректный, особенно, когда в контексте постановки отсутствуют сведения, позволяющие оценить корректности результата, тем более, когда не ясно как настрое RLS (ну допустим - как в типовой, которая, кстати так же не указана, ну допустим УТ 11.4 - подходит по метаданным)

Директива "Разрешённые" действует на всю выборку (она здесь одна), насколько мне не изменяет память - RLS для виртуальных таблиц применяется на результат виртуальной таблицы регистра - т.е. при наличии директивы "РАЗРЕШЁННЫЕ" в нём уже будут только разрешённые записи.
ВОЗМОЖНО ИМЕННО ТУТ Я НЕ ПРАВ И ЭТО РУШИТ ВСЕ ДАЛЬНЕЙШИЕ РАССУЖДЕНИЯ!

РегистрНакопления.ВыручкаИСебестоимостьПродаж
РегистрСведений.ЦеныНоменклатуры

Имеют не пересекающиеся условия ограничений RLS в самих регистрах
По справочникам они пересекаются только по "Номенклатура" и "Характеристики" (там нет RLS на чтение, а если и было бы - то при отсутствие разрешения - то ссылки внутри запросов всё-равно были бы верными - это не нарушило бы логику (строки с такими ссылками отфильтровались бы уже при возврате результата).

Итого - если будет какой-то запрет на доступ к записям "РегистрНакопления.ВыручкаИСебестоимостьПродаж" - то строк не будет, и по ним не будет и цен (т.к. левое соединение)
Если будет запрет на доступ к записям
РегистрСведений.ЦеныНоменклатуры
То строк не будет - значит - по ним не будет цен
Но вот тут будет нюанс

Исходно в запросе такое условие
ГДЕ
	ЦеныНоменклатурыСрезПоследних.Номенклатура В(&ГруппаНоменклатуры) //15

Оно само по себе, вероятно не корректное - но тут, опять же - зависит от логики (а о ней данных нет)
Есть вероятность противоречия с

ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаОкончания, ВидЦены = &ВидЦены) КАК ЦеныНоменклатурыСрезПоследних
		ПО ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаНоменклатуры.Характеристика = ЦеныНоменклатурыСрезПоследних.Характеристика //13

И тут даже не дело в том, что соединение идёт по "Характеристике" - с точки зрения логики - это не проблема!
"Противоречие" тут только между "ЛЕВОЕ СОЕДИГНЕНИЕ РегистрСведений.ЦеныНоменклатуры" и "ГДЕ ЦеныНоменклатурыСрезПоследних."

И его разрешение - напрямую зависит от требуемой логики (которая не указана)
1. Либо в результат должны попадать данные выручки только с доступными/установленными ценами (0 - считается) - тогда вместо "ЛЕВОГО" было бы лучше использовать "ВНУТРЕННЕЕ СОЕДИНЕНИЕ", но, в целом - для логики это не принципиально (в данном примере)!
2. Либо в результат должны попадать все данные выручки (по отбору), а сумма по виду цен должна считаться только в когда цена доступна (оставим в покое отличия значений NULL и 0 - так как в данном примере это не принципиально) - тогда у нужно исправить условие "ГДЕ" на "ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаНоменклатуры.Номенклатура В(&ГруппаНоменклатуры)" - это уже будет принципиально!
Оставим в покое пока регистр сведений ключей аналитики - осуждаем только логику!
Поэтому рассмотрение доступа имеет смысл только после внесения правки по какому-то из вышеприведённых вариантов!

Тогда, возвращаемся к вопросу о доступе
В 1. случае у нас логически требуется объединение доступа к двум регистрам - оно так и будет - в результате будут записи, доступные в обоих регистрах - т.к. с доступные данные выручки по которым доступны цены.
В 2. случае у нас логически точно нужны доступные данные выручки, а вот что там с логикой цен - пример не поясняет. Моё мнение - что надо разделять случай - когда цены не заданы и когда цены не доступны!
Вот, только я не знаю простых путей, как это сделать в 1С - так или иначе в обычных запросах - что незаданные цены, что отсечёные по RLS - возвращаться не будут (а снятие директивы РАЗРЕШЕННЫЕ - только во втором случае сгенерирует ошибку доступа).
Решение - только выполнить выборку цен в с установкой привилегированного режима - и соединить её с выборкой без с действующим RLS - тогда можно найти отсекаемые RLS записи - цены - и, например, по ним отдельно сформировать вспомогательную врем. таблицу с аналитикой ключа соединения - а итоговой выборке - соединиться с ней - и, скажем, выводить вместо суммы текст "<Нет доступа бла бла бла>"
В чуть более простом виде можно было бы просто определять только сам факт ограничения доступа в выборке - и лишь отдельно сообщать - что по некоторым записям, где нет суммы - вероятно нет доступа , а не отсутствие заданной цены.
В общем - тут многое зависит от требуемой логики! А она не ясна в ни в постановке задачи, ни в, скажем, через анализ идентификаторов в самом коде!

Вот у меня нет актуального опыта по реальным задачам с RLS - и мне трудно самостоятельно склониться к тому или иному решению, и варианту логики!
Но, лично я бы остановился на варианте 2. - т.е. выводим всю выручку - без учета ограничений цен - т.е. когда цена не задана и не доступна - выводим ноль - тут сам вывод таких строк должен насторожить пользователя (чем их отсутствие) - а вывод тут явно для пользователя (скорее всего так показан отчёт - через "сообщить").

А, вот, если мы уберём "РАЗРЕШЕННЫЕ" - то в лоб, просто получим ошибку нарушения прав доступа! Что - по сути - неработоспособный алгоритм!

Ну или я тут совсем заблуждаюсь - тогда дайте пруф!
94. sashocq 193 07.02.25 11:04 Сейчас в теме
(93)
Я, наверное, не достаточно уточнил: РАЗЛИЧНЫЕ искажает данные результата.
РАЗРЕШЕННЫЕ здесь скорее всего к месту (зависит от постановки задачи)
95. Darklight 34 07.02.25 11:55 Сейчас в теме
(94) Что Вы имеете в виду под искажением результата?
Вот условия в "ГДЕ" искажают результат?
А соединения таблиц (любые) - могут искажать результат?
А выдача результата отчёта вместо появления ошибки - это искажение результата?

Да - в опросах ограничения доступа много нюансов именно по части постановки задачи.
Вот об этом я в этой тем уже много раз писал - не ясны требования - от того и исправления могут быть совершенно различны - вот и уже написал тут в комментариях - тут придраться к необходимости исправления и самому варианту исправления можно почти в любой строке
96. sashocq 193 07.02.25 17:35 Сейчас в теме
(95) Я имею ввиду, что судя по тексту запроса создаётся впечатление, что нужны суммы продаж товара по адресам доставки. Так вот, если у нас были продажи
Адрес  | Товар  | Цена | Колво
Адрес1 | Товар1 |  200 |    3
Адрес1 | Товар1 |  150 |    4
Адрес1 | Товар1 |  200 |    1

то суммы будут такие:
Адрес1 | Товар1 | 600
Адрес1 | Товар1 | 600
Адрес1 | Товар1 | 200

Если же добавить РАЗЛИЧНЫЕ, то одинаковые строки схлопнутся:
Адрес1 | Товар1 | 600
Адрес1 | Товар1 | 200

и это будет неправильным результатом.

Вопрос группировки с итогами мы здесь не рассматриваем.
97. vasilev2015 2744 07.02.25 20:16 Сейчас в теме
(96) (95) Коллеги, я пытался в текст впихнуть как можно больше ошибок, поэтому с "Различные" ситуация неоднозначная. В жизни так не пишут. Но конкретной причины нет, все причины различные (каламбурчик). Человек, должен испытать неприязнь и дискомфорт, когда увидит эту конструкцию. Такая задумка художника.
98. Darklight 34 10.02.25 09:38 Сейчас в теме
(96) Здесь Вы правы. Просто сначала написали про две директивы "РАЗРЕШЕННЫЕ" и "РАЗЛИЧЕНЫЕ". А я обсуждал только "РАЗРЕШЕННЫЕ", не обратив внимание на "РАЗЛИЧЕНЫЕ".

Безусловно "РАЗЛИЧЕНЫЕ" - может искажать результат, и применение данной директивы, вообще, не так часто уместно.
В указанном примере автора, на самом деле - есть более явные ошибки - правильное исправление которых ведёт за собой снятие любой потребности в данной директиве - а если её оставить, после данных исправлений, то она уже не будет искажать результат - но, будет несколько снижать его производительность (это снижение порой может быть относительно заметным, но очень редко бывает очень существенным - обычно, в таких случаях есть куда более серьёзные ошибки в архитектуре запроса или данных) - в любом случае, она будет лишней

На своей практике, я крайне редко встречал реальную потребность в применении данной директивы (кроме одного явного паттерна*). Чаще всего нужна какая-либо агрегация.

* - Эта директива частенько бывает нужна в части запросов условий "ГДЕ" (не только "ГДЕ", любых условий): "ГДЕ Чтото В (ВЫБРАТЬ РАЗЛИЧНЫЕ ЧтоТо из Чегото)" - такие конструкции, хоть и не являются самыми оптимальными, но в целом, современные СУБД вполне умеют достаточно хорошо их оптимизировать (были бы подходящие индексы с источнике "Чегото") на больших таблицах (мелкие и так прекрасно отработают) - но это не касается 1С - везде, где реально обработкой будет заниматься платформа - она не умеет это эффективно оптимизировать (она вообще, почти ничего не умеет сама оптимизировать)!
Поэтому, в общем случае лучше избегать "ГДЕ Чтото В (ВЫБРАТЬ РАЗЛИЧНЫЕ ЧтоТо из Чегото)" (просто не так часто это целесообразно - способы этого избежать могут дать меньшую производительность - поэтому этот паттерн априори нельзя считать ошибочным)
53. kwazi 676 31.01.25 17:25 Сейчас в теме
Я не могу передать данный документ в HR.
В документе не хватает ранжирования вопросов по категориям сложности.
54. vasilev2015 2744 31.01.25 17:37 Сейчас в теме
(53) Да, трудно сделать ранжирование вопросов по сложности. Тема холиварная. Кроме этого, нужно учитывать значимость той или иной темы для конкретного работодателя. Например, для организаций 500+ быстродействие важнее, чем для небольших.
55. vasilev2015 2744 01.02.25 10:13 Сейчас в теме
(53) Давайте сделаем шкалы ? Результат теста может выглядеть так: Внимательность = 5, Быстродействие = 3, Общие знания = 2. Что скажете ? Три шкалы устроит ?
57. kwazi 676 01.02.25 13:54 Сейчас в теме +0.1 $m
(55) для себя я разбил по другому: начальный уровень, средний, высокий. думаю кадровику этого хватит. Ну и расписал подробнее ответы. Для нас тут текста достаточно, чтобы понять смысл. А для неспециалиста маловато.
vasilev2015; +1 Ответить
56. Bukaska 140 01.02.25 11:20 Сейчас в теме
Глаза мои кровью налились, читать такое. Пристрелила бы таких в реальности. Можно мне пулю в висок?!))))
58. vasilev2015 2744 01.02.25 15:52 Сейчас в теме
(56) Елена, что Вас беспокоит ? Очень серьезно отношусь к любой критике.
82. Bukaska 140 03.02.25 14:21 Сейчас в теме
(58) Да я про сам код.. что там настрочен))) Жесть канеш)))
85. vasilev2015 2744 03.02.25 15:12 Сейчас в теме
(82) в этом коде преднамеренно сделаны ошибки и неточности.
86. Bukaska 140 03.02.25 16:10 Сейчас в теме
(85) Да я поняла.. но тут уж совсем детский уровень.
пусть я как специалист - недоросль для большинства работодателей. Но вот такой код мне аж "Глаза режет"

Я бы предпочла немного другой уровень кода.... более так сказать скрытный..
Например разница параметров в виртуальной таблице и секции где
Обращение к переменным.. МояПеременная, объект.Переменная, Элементы.Переменная ну и все такое....
А тут уж очень намуровано.. но разве что только если все 100% ошибок разом требовать)))
Darklight; +1 Ответить
88. vasilev2015 2744 03.02.25 20:41 Сейчас в теме
(86)
совсем детский уровень


Не могу согласиться. Этот текст - обладает вескими достоинствами:

1) Короткий
2) Быстрый
3) Самодостаточный. Каждая неточность (ошибка) поясняется самим текстом или ИТС.
4) Дает оценку кандидата по шкале от 0 до 20.

Не каждый ребенок найдет здесь 20 неточностей (ошибок), да ?
89. Bukaska 140 03.02.25 22:03 Сейчас в теме
(88)
Бог с ним, пусть будет по вашему))) Спорить не буду)))
59. bolikov 20 01.02.25 18:13 Сейчас в теме
Присоединяюсь к (56). Надоели подобные проверяльщики. Думают, что их узенькое окошко знаний должно совпасть со знаниями кандидата. Вчера идиот, не знающий, в каком формате хранятся файлы в фокспро и вобще что это такое dbf пытался устроить мне стресс-тест по решению в уме задач по составлению запросов. У вас отключили интернет и встроенную справку в 1с заодно? У вас наступил апокалипсис и надо реалтайм составлять запросы чтобы срочно исправлять какие-то проблемы? В комплекте с этим обычно идет предложение рассказать о каких-то выдающихся задачах, которые привели к каким -то замечательным результатам, о написанных с нуля конфигурациях. От таких разработчиков реально горе бизнесу и именно такие вылазят в начальники. Моя выдающаяся задача что я в одно лицо поддерживал работоспособность всего зоопарка в крупной организации и программировал все что потребуется в течении 10 лет и экономил кучу денег. Если предупреждать проблемы заранее, то не надо мега знаний, чтобы потом исправлять косяки и наворачивать новые проекты. Сертификат 1С специалист зачем придумали? Им мало сертификата, надо еще извратиться и поиздеваться над кандидатом. Благодарю Господа, что сразу показывает дурь людей, с которыми потом пришлось бы работать.
Дмитрий74Чел; Artem.Po; user1415910; ZOMI; xsazar; kuzyara; sys1c; +7 Ответить
60. vasilev2015 2744 01.02.25 18:49 Сейчас в теме
(59) Уважаемый коллега ! Когда 25 лет назад я получил свой первый сертификат, умные люди мне сказали, что это только начало карьеры. Цель этой публикации - сделать тестирование более удобным для кандидата и для работодателя. Думаю, ваше плохое настроение скоро пройдет, желаю успеха.
65. Bukaska 140 03.02.25 00:13 Сейчас в теме
(59) Ой ну у вас и накипело. Спокойнее надо на всех смотреть. Никого не изменишь, народ есть как есть)))
61. alex_sayan 56 02.02.25 14:19 Сейчас в теме
Ну крупные корпорации не вчерашних джунов набирают. Такие вопросы подойдут разве что для отсева слабеньких программистов
62. vasilev2015 2744 02.02.25 15:28 Сейчас в теме
(61) Нужны более сложные вопросы ? Хардкор, только хардкор ?
Поделитесь своим рецептом, как проводите собеседования ?
63. alex_sayan 56 02.02.25 18:58 Сейчас в теме
(62) да причем тут хардкор? В корпоративной разработке на первый план врываются другие вещи. Опыт групповой разработки, соблюдение стандартов, понимание как и зачем следить за качеством кода. Ну и само собой хайлоад, в больших компаниях он на каждом шагу
64. gybson 02.02.25 20:14 Сейчас в теме
"Для проверки требуется сотрудник высокой квалификации."
"Мне часто приходится участвовать в собеседованиях"

Чет тут не сходится.

Но это путь в никуда. Только оценка опыта работы. Даже если он все проекты сделал с ЧатГПТ и пленным индусом, но сделал же.
66. maksa2005 556 03.02.25 07:41 Сейчас в теме
Мне по случаю попался такой тест 2 года назад от одной фирмы в которую я хотел пойти.суть 1 в 1.
67. vasilev2015 2744 03.02.25 09:11 Сейчас в теме
(66) Фирма находится СПб ? Мои знакомые давно используют этот тест ))
69. maksa2005 556 03.02.25 09:23 Сейчас в теме
(67) нет. Этот шаблон я так понял везде практикуют)
70. SlavaKron 03.02.25 09:26 Сейчас в теме
ТЗ = РезультатЗапроса.Выгрузить(); //23
Что не так?
71. vasilev2015 2744 03.02.25 09:37 Сейчас в теме
(70) Ощущение неправильности чем-то похоже на совесть. Посмотрите в стандартах ИТС, я не буду здесь комментировать эту строчку.
72. SlavaKron 03.02.25 09:50 Сейчас в теме
(71) Спасибо за комментарий, я в принципе ожидал такой ответ. Интересно мнение сообщества.
На скрине, к слову, глобальный поиск по типовой ERP 2.5.
Прикрепленные файлы:
75. vasilev2015 2744 03.02.25 09:54 Сейчас в теме
(72) нужно верить, что каждый из нас сможет написать больше и лучше, чем ERP 2.5 ))
79. Darklight 34 03.02.25 10:26 Сейчас в теме
(72) Вы бы внимательнее посмотрели - почему там "Выгрузить"! Тут многое зависит от контекста!

ТЗ = РезультатЗапроса.Выгрузить(); //23

Для Каждого СтрокаДанных ИЗ ТЗ Цикл
	Сообщить( " " + СтрокаДанных.АдресДоставки + " " + СтрокаДанных.Номенклатура + " " + СтрокаДанных.СуммаОборот ); //27
КонецЦикла;

Конкретно в данном примере "Выгрузить" абсолютно не уместно!

А насчёт типовых - если бы вы знали, как часто я раньше говорил WTF смотря на этот код! Увы - типовые - далеко не эталон качественного кода! Сейчас, я уже смерился, и даже стал писать код - похожий на типовой - ибо - просто что-то лучшее - никому не нужно - особенно на фоне такого типового кода - который затмит любую "красоту" - да и сложно вписывать что-то красивое - во структуре чего-то уродского - не трогая эту структуру!
Bukaska; vasilev2015; +2 Ответить
80. SlavaKron 03.02.25 10:32 Сейчас в теме
(79) Да какой тут контекст – пример то абсурдный и ошибки совершено не связаны. Тут явно одразумевается, что Выгрузить() само по себе плохо.
84. Bukaska 140 03.02.25 14:27 Сейчас в теме
(80) Ну по мне так есть ситуации, когда кроме как выгрузить.. больше некуда деться. А вообще.. выборка неплохо работает.
Тем более что выборка вроде выбирает данные построчно, а выгрузка вешает сразу всю память.. хотя могу и ошибаться. Поэтому я бы к выгрузке прибегала бы только в крайнем случае)
87. Darklight 34 03.02.25 16:16 Сейчас в теме
(80) Как выше написал - многое зависит от контекста. В данном контексте - это может быть с вероятностью близкой к 100% будет хуже, чем Выбрать.Следующий(). И с ненулевой вероятностью вообще может приводить к краху клиента в каких-то отдельных выборках.
На самом деле, в большинстве случаев (я бы сказал в 60%, а в типовом подходе к программированию - свыше 85% без каких-либо явных изменений в подходе) - Выбрать.Следующий() будет предпочтительнее - вопрос в реальном выигрыше будет динамическим и его эффективность, скорее всего в 80-90% будет незначительной. Но будет где-то как минимум около 10% где это будет реально важно!
Поэтому 1С по стандарту настывает на повсеместном применении Выбрать.Следующий(). А Выгрузить() - только там, где это реально нужно (ну или заведомо выборка будет очень маленькая с гарантией отсутствия бурного роста)!

На самом деле - я бы рекомендовал почти всегда создавать запрос через "конструктор с обработкой" - он сразу сформирует и обход запроса (в т.ч. "иерархического", т.е. с Итогами) с применением Выбрать.Следующий() - что очень удобно - т.е. это уже заметная экономия времени и нервов программиста!

Так что данный вопрос можно считать исчерпанным!

Но....

Лично я бы больше отдавал предпочтения именно ТаблицеЗначений и Выгрузить. И.... в типовом коде, реально часто именно такой подход. Причём на входе может быть и Выбрать.Следующий() - а потом наполняется ТаблицаЗначений (чуть реже - в ДеревоЗначений).
Почему?

Потому что в 1С Предприятие 8 - ТаблицаЗначений - это эдакая универсальная коллекция (да ещё и с динамической структурой) объектов данных (строки). И нужно это что бы не только получить данные из выборки запроса - но и сформировать совмещённые данные в т.ч. с постобработкой - т.е. данные в типовых 1С8 в большинстве случаев сильно дообрабатываются в объектном режиме на сервере! И проссходит это в ТаблицаЗначений, где ещё и колонки могут расширяться уже после заполнения (хотя... может сейчас в типовых этогго стабо меньше?); а сама таблица так же может несколько раз копироваться! И, порой, затем, подставляться как параметр для очередного запроса (для формирования временной таблицы)!
ИМХО - это тихий ужас! Но это реальность!

Более того - Вы думаете в типовых как-то позаботятся о больших выборках... НЕТ! Там, как раз считают, что напиши они Выбрать.Следующий() вместо Выгрузить() - и всё уже будет зашибись! А в итоге так и будут формировать и большие таблицы значений, и большие наборы записей регистров.... Даже в ERP2, кажется, так ничего и не сделали для порционной обработки данных!

И, думаете, Вы, вот так сами сможете от этого всего отказаться - и писать правильно? НЕ-А - не сможете! Так как платформа 1С Предприятие 8 и БСП категорически этому не буду содействовать!

Я Вам так скажу - для действительно эффективной обработке данных на стороне сервера - в 1С Предприятие (видимо уже не 8.x) категорически не хватает таких современных паттернов как:
1. Обработка данных на стороне СУБД (в тех возможностях, которые даёт расширенный ЯП управления данными в СУБД) - пока в 1С завезли только добавление данных во временные таблицы без выгрузки в объектную модель - вещь очень полезная, но одной её недостаточно, и в типовых она пока не используется!


2. Поточная, вернее даже конвейерная, работа с данными - когда можно вообще не заморачиваться насчёт разделения данных на порции - а просто создавать, скорее декларативным путём, цепочку фильтрации и обработки данных (сами алгоритмы обработки - не обязаны быть декларативными) - а платформа сама будет определять порции данных для буферизации! Отчасти - некоторую эмуляцию можно и на текущей платформе организовать - уже было бы хорошо - но это целый серьёзный фреймворк-библиотека!

3. Нужно применение актуальных паттернов проектирования для ООП и Функционального программирования (в идеале - АОП тоже - но это отдельная тема; в идеале - и со статической типизацией - но это не обязательно, хотя могло бы сильно повысить производительность, особенно с применением макропрограммирования и статической м динамической кодогенерации - но это всё тоже другие темы). Чтобы можно было более эффективно обрабатывать поточную обработку данных, с их абстрагированием и отрывом от контекста.

4. Простая многопоточная обработка данных (явная и неявная - когда код цепочки обработки изначально пишется так, что ориентирован на многопоточность, без явного декларирования этой многопоточности) - и я не про длительные операции и фоновые задания (хотя не обязательно и про честную многопоточную параллельность). Хотя, отчасти, и библиотеками, ко-что, можно было бы надстроить и над 1С Предприятие 8 на фоновых и регламентных заданиях - скорее уже, например по модели отложенного проведения - когда первичное проведение лишь формирует базовую структуру проведения - а уже она дальше обрабатывается в отдельных фоновых процессах. Аналогично и для сложных отчётов/обработок - когда одного запроса будет мало!

5. И вообще. Нужен общий декларативный подход определения процессов какой-либо обработки данных. Чтобы единообразно (но возможно разрозненно) сначала декларировать все требования к данным + все необходимые процессы обработки этих данных (изначально - порционные). А уже платформа - пущай сама собирает из этой декларации итоговый код оптимальной выборки данных и его оптимальной обработки - порциями и с минимальным числом циклов! Более того - по возможности, оставляя данные прям на стороне СУБД, манипулируя ими, по возможности там же! И оттуда же - возможности - формируя движения по регистрам и иные записи в БД - без лишних перетаскиваний данных на сторону сервера приложений!
Но да - какие-то процессы могут оставаться на стороне сервера приложений - и для них могут порционно выгружаться данные из временных таблиц, а потом, так же порционно, при необходимости, загружаться, в т.ч. не целиком - а только по изменившимся строкам и колонкам! А для самого кода - это всё должно быть абстрактно - он не должен знать (заботиться, узнать - конечно, может) с чем он работает - с выборкой из базы данных, (в т.ч. временной таблицы), или, скажем, с ТаблицаЗначений (или иной коллекцией данных, хранимых в объектной модели)!

6. А на закуску! Код вообще должен быть не просто более декларативным - но и более абстрактным!
Зачастую, алгоритм вообще не должен много знать о реальной архитектуре, условно, метаданных. А работать с абстрактными кирпичиками. Условно "соединяя" их друг с другом разными операциями или накладывая на них разные условия - требования! Применяя и разные методики приведения структуры/представления одних кирпичиков к другим! А сами кирпичики - тоже, вполне заранее готовы быть к различным взаимодействиям друг с другом - это заранее в них должно быть декларативно, по возможности, настроено!
Банально хотя бы источников данных (условно - виртуальных таблиц в широком смысле), которые можно было бы кастомно определять в конфигурации (и в коде тоже было бы неплохо) + группы полей (просто инфо-структуры) которые можно было бы легко использовать вместе с источниками данных + поддержка ряда основных операций над ними - и уже было бы счастье! И да - при желании - это всё можно было бы построить и на 1С Предприятие 8

Но.... это 100% меняет всю архитектуру обработки данных в 1С Предприятие. Всё что нарабатывали десятилетиям - вылетает в трубу - ибо это всё зло и давно устарело!
81. vasilev2015 2744 03.02.25 10:33 Сейчас в теме
83. Bukaska 140 03.02.25 14:25 Сейчас в теме
(79) По мне так выборка за глаза и за уши..
К чему эти танцы с Выгрузить() ради того чтоб Сообщить()... ужс дикий)))
Пы-сы.. в выгрузке я не спец.. как то привыкла больше орудовать выборкой)))
101. muskul 12.02.25 03:55 Сейчас в теме
(70) ну типо зачем выгружать в тз если выборку можно делать через запрос
91. sashocq 193 07.02.25 00:10 Сейчас в теме
У меня получилось 22 пункта.

Я не стал добавлять пункт про возможное использование в //27 функции ПодставитьПараметрыВСтроку (на мой взгляд, это вкусовщина и здесь особо лучше не станет), но добавил пункт про отступы строк кода внутри функции (хотя, возможно это просто проблемы движка Инфостарта).
Так же ничего не отметил про ВЫБРАТЬ РАЗРЕШЕННЫЕ, т. к. они тут, похоже, к месту. Хотя, в рамках дискуссии можно было бы поинтересоваться постановкой задачи: корректно ли будет если пользователю не выйдет информация по реализациям, которые ему нельзя видеть.

Какие 20 пунктов у автора я не знаю. Допускаю, что может какие-то пункты свёрнуты в 1. Но нет желания списывать свои SM ради удовлетворения любопытства.
Автору могу продать свой список :-)
92. vasilev2015 2744 07.02.25 08:48 Сейчас в теме
(91) Покупать должны организации, это им нужно. Разница 10% неважна, кандидаты смогут показать свою квалификацию.
Оставьте свое сообщение