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

09.05.25

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

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

Скачать файл

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

Наименование По подписке [?] Купить один файл
Шаблон ответов для тестового задания
.docx 13,51Kb
19
19 Скачать (5 SM) Купить за 3 050 руб.
по статье infostart.ru/1c/articles/2322667 ответы на вопросы 8 - 14
.docx 21,59Kb
0
0 Скачать (5 SM) Купить за 3 050 руб.
по статье infostart.ru/1c/articles/2322667 ответы на вопросы 1 - 7
.docx 16,86Kb
0
0 Скачать (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С:ЗУП в Инфостарте!

10100 руб.

17.02.2016    169246    611    6    

453

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

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

1 стартмани

16.07.2024    695    1    svbel85    0    

0

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

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

12.07.2024    1098    Koder_Line    0    

1

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

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

24.06.2024    1401    Koder_Line    3    

0

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

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

19.06.2024    1521    Koder_Line    0    

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


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

и

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

попахивает "инфоцыганством".... (новый граница....)
4. vasilev2015 2776 30.01.25 12:56 Сейчас в теме
(3) Код открытый, содержит преднамеренные ошибки.
Этот код обязан вызывать вопросы и неприязнь ))
Сильный программист видит все ошибки самостоятельно, платная подсказка ему не нужна.
5. asadroman 30.01.25 14:20 Сейчас в теме
Это код одна сплошная ошибка!!!
maksa2005; zqzq; +2 Ответить
7. starik-2005 3175 30.01.25 14:21 Сейчас в теме
(5) принят! )))
METAL; klaus38; d4rkmesa; shard; +4 Ответить
9. asadroman 30.01.25 14:25 Сейчас в теме
13. starik-2005 3175 30.01.25 14:32 Сейчас в теме
(9) Я-то не набираю, это делает Николай.
10. vasilev2015 2776 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 3175 30.01.25 14:33 Сейчас в теме
(12) А вы видели когда-нибудь приличное ТЗ?
maksa2005; dsdred; +2 Ответить
15. ixijixi 2014 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. Трактор 1268 30.01.25 14:38 Сейчас в теме
Хитёр! Учтём. Выжду годик и сам запилю такую публикацию.
19. vasilev2015 2776 30.01.25 14:59 Сейчас в теме
(16) через годик у меня уже будет четыре плюсика и одно скачивание !
20. ip0593 20 30.01.25 15:29 Сейчас в теме
(19) формат интересный. но материала мало и стоимость поэтому на мой взгляд завышена.
21. vasilev2015 2776 30.01.25 15:34 Сейчас в теме
(20) Каждый читатель бесплатно получает "тестовый код", который я составлял несколько дней )). Разве это мало ?
22. ip0593 20 30.01.25 15:37 Сейчас в теме
(21) цена же для корпораций) корпорация не сможет за 9 см или 4к рублей с помощью этого файла оценить человека полноценно как мне кажется.
если это будет стоить в разы меньше, то возможно спрос будет и формат можно развивать
23. vasilev2015 2776 30.01.25 15:46 Сейчас в теме
(22) Знакомые работодатели уверяют, что этот тест дает адекватную оценку знаний и способностей. 9 СМ - это 1,5 - 2 тысячи рублей, по бирже. Напишите, какую цену хотите ?
25. ip0593 20 30.01.25 16:11 Сейчас в теме
(23) я могу за 9 см купить. просто кажется что завышена цена.
не больше 5 см.

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

Как раз нет, цена жёстко фиксирована и равна 1550 + 300 * СМ
24. kwazi 718 30.01.25 15:52 Сейчас в теме
Кто это написал?
Возьмем к себе на работу. Оклад 50к.
Nefilimus; stjucha1109; PetrovAnton; +3 Ответить
27. PetrovAnton 10 30.01.25 16:57 Сейчас в теме
Хороший бизнес!
Если бы я публиковал свои примеры рефакторинга, наверно уже миллионером был :)
28. vasilev2015 2776 30.01.25 17:07 Сейчас в теме
(27) Это не рефакторинг, этот код придуман специально для собеседования. Старался "впихнуть" туда как можно больше ошибок, чтобы кандидат смог показать себя максимально.
31. PetrovAnton 10 30.01.25 17:19 Сейчас в теме
(28) А что это если не рефакторинг?
В задаче говнокод. В ответе результат рефакторинга.
У меня такого "придуманного" кода на проекте мама не горюй ;D
32. vasilev2015 2776 30.01.25 17:21 Сейчас в теме
(31) Вам виднее. Сонар используете для рефакторинга ?
33. PetrovAnton 10 30.01.25 17:42 Сейчас в теме
(32) Есть Sonar и Phoenix bsl, через них разработчики сами исправляют свои ошибки. Чтобы не увеличивать техдолг. А легаси рефакторю просто когда сталкиваюсь с говнокодом в рамках какой-нибудь задачи. Так потихоньку и боремся с ним.
VyacheslavShilov; Gurami; vasilev2015; +3 Ответить
35. SerVer1C 887 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 2776 31.01.25 09:24 Сейчас в теме
(38) Как раз здесь я агитирую давать быстрый тест вместо обычной практики "разработайте по ТЗ новый овно-отчет, это займет у вас не больше трех часов". Эта статья - чтобы облегчить жизнь кандидатам.
48. Kir_Plastelinin 31.01.25 13:14 Сейчас в теме
(41) мое сообщение больше относилось к предложенному "усложнению" выше (на которое, собственно, и ответил), т.к. в ней код даже синтаксическую проверку не пройдет.
40. vasilev2015 2776 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 887 31.01.25 11:17 Сейчас в теме
(42)
может быть задача на проведение обновления релиза изменённой конфигурации

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

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

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

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

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

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

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

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

И это я только одну строчку кода обсудил - а, по сути, тут придираться можно к условной "ошибочности" почти каждой номерной строки (и кода около ней). Безусловно - если у кандидата будет более детальная постановка задачи и условий контекста выполнения такого кода - то ситуация может сильно меняться. Безусловно - если кандидат очень опытный - он сам Вам задаст вопросов больше, чем Вы ему! Безусловно - если кандидат супер опытный - он такой подход вообще сочтёт издевательством (ну если его, конечно не берут на должность куратора к группе немощных кодеров), и 1001 раз подумает - а надо ли ему сюда идти!
73. vasilev2015 2776 03.02.25 09:50 Сейчас в теме
(68) Более полный разбор кода дает преимущества, это справедливо. Программист должен чувствовать возможные проблемы лучше, чем стандартная проверка в Сонаре. Допишу в статье "найти ошибки и неточности"
74. Darklight 34 03.02.25 09:54 Сейчас в теме
76. vasilev2015 2776 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 2776 03.02.25 10:23 Сейчас в теме
(77) добавил в статью это уточнение.
90. sashocq 194 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 194 07.02.25 11:04 Сейчас в теме
(93)
Я, наверное, не достаточно уточнил: РАЗЛИЧНЫЕ искажает данные результата.
РАЗРЕШЕННЫЕ здесь скорее всего к месту (зависит от постановки задачи)
95. Darklight 34 07.02.25 11:55 Сейчас в теме
(94) Что Вы имеете в виду под искажением результата?
Вот условия в "ГДЕ" искажают результат?
А соединения таблиц (любые) - могут искажать результат?
А выдача результата отчёта вместо появления ошибки - это искажение результата?

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

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

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

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

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


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

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

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

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

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