Собеседование, интервью, отбор кандидата-программиста
Разработка - Рефакторинг и качество кода
Файлы
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний
Оформите подписку на компанию для решения рабочих задач
Оформить подписку и скачать решение со скидкойВы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
Введ ение
Мне часто приходится участвовать в собеседованиях (отборе) кандидата-программиста. Постепенно пришел к выводу, что написание по техническому заданию новой обработки (отчета) – не лучший вариант:
- Требуется существенное время + среда разработки (компьютер)
- Может вызвать негативную реакцию, раздражение кандидата.
- Для проверки требуется сотрудник высокой квалификации.
- Увеличение длительности отбора увеличивают вероятность отказа кандидата от участия.
Поэтому было решено давать кандидату уже написанный код 1С с ошибками, которые он должен найти.
- Поиск ошибок в чужом коде происходит быстро, читать - с листа.
- Повышает самооценку кандидата.
- Результат можно проверить по шаблону ответов
Благодарю всех коллег, кто морально и материально поддержал мою прошлую статью Отбор кандидата-программиста. Им всем респект и скидка 50% на новые файлы, СМ будут начислены после покупки в чатике как вознаграждение.
Пример одного вопроса
Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
|Сумма(1) / 1000000
|ИЗ
|РегистрСведений.ЦеныНоменклатуры КАК Цены";
Сценарий интервью
Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
|Сумма(1) / 1000000
|ИЗ
|РегистрСведений.ЦеныНоменклатуры КАК Цены";Вопрос: Для чего может быть использован такой запрос?
(Проверяем, насколько кандидат понимает чужой код. Программисты занимаются этим большую часть времени. Обращаем внимание на навыки общения кандидата.)
Ответ: Запрос считает количество записей регистра. Похожим запросом можно считать количество элементов справочника или строк в документе.
Вопрос: Для чего делить на миллион?
(Этот вопрос неочевидный, отвечать необязательно. Для любителей, знатоков и коллекционеров)
Ответ: Деление - чтобы не было ошибки sql переполнения.
Вопрос: Какая ошибка может возникнуть при работе с данными запроса?
(Умение предусмотреть null - очень важное. Если кандидат смог ответить - в его коде будет значительно меньше ошибок)
Ответ: Сумма(1) может быть null.
Вопрос: Как правильно написать запрос?
Ответ: Слово РАЗЛИЧНЫЕ не нужно. Использовать функцию КОЛИЧЕСТВО.
(Рекомендации ИТС: https://its.1c.ru/db/v8std#content:787:hdoc Если кандидат читает ИТС - это хороший знак. С другой стороны, если кандидат ответил ВСЕ вопросы - возможно, он готовился к интервью. Выбирайте сами)
Как видите, даже короткий фрагмент кода может показать уровень квалификации кандидата. В приложенных файлах только вопросы-ответы, комментарии отсутствуют.
Еще пример
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВводОстатковТоваров.Ссылка КАК Ссылка
|ИЗ
| Документ.ВводОстатковТоваров КАК ВводОстатковТоваров
|
|УПОРЯДОЧИТЬ ПО
| ВводОстатковТоваров.Дата";
//10
ТЗ = Запрос.Выполнить().Выгрузить();
НачалоГода = НачалоГода( ТекущаяДата() );
//13
Для Каждого ТЗЦикл ИЗ ТЗ Цикл
//15
Если ТЗЦикл.Ссылка.Дата < НачалоГода Тогда Продолжить; КонецЕсли;
Документ = ТЗЦикл.Ссылка.ПолучитьОбъект();
Документ.ПометкаУдаления = Истина;
Документ.ОбменДанными.Загрузка = Истина;
Документ.Записать(РежимЗаписиДокумента.Запись);
//21
КонецЦикла;
Сценарий интервью
Вопрос: Для чего может быть использован такой код?
Ответ: Для пометки на удаление документов "Ввод остатков товаров" за текущий год.
Вопрос: Что произойдет с регистрами накоплений, движениями товара? Почему?
Ответ: Ничего, код пометит документы, регистры накоплений и движений товара останутся без изменения. Помеченные на удаление документы будут изменять остатки, это очень неприятно. Такая особенность записи в режиме ОбменДанными.Загрузка = Истина.
Вопрос: Как исправить?
Ответ: Вместо строк 18-19-20, использовать УстановитьПометкуУдаления(Истина).
Вопрос: За какой период документы быстрее помечать на удаление: текущий месяц, прошлый месяц, позапрошлый месяц? Почему?
Ответ: При пометке удаления документов происходит очистка регистров и очистка итогов регистров. Регистры остатков имеют рассчитанные итоги на каждый месяц. Например, (если итоги регистров активны) изменение остатков за позапрошлый месяц вызовет изменения таблиц итогов за три месяца. Смотрите Зачем в 1С нужно периодически пересчитывать итоги по регистрам?
Вопрос: В чем проблема в строке 16?
Ответ: Отбор по дате необходимо производить в запросе выборки документов, не допуская объектного чтения.
Вопрос: Если все документы должны быть помечены на удаление, то нужно ли помечать все документы на удаление? Какие отборы должны быть в запросе?
Ответ: На удаление не нужно помечать документы, которые уже помечены на удаление. В запросе должны быть отборы "Где ВводОстатковТоваров.Дата > &НачалоГода И НЕ ВводОстатковТоваров.ПометкаУдаления".
Вопрос: В чем проблема в строке 11 ?
Ответ: Не нужно использовать выгрузку в таблицу, используйте выборку.
// 01 //////////////////////////////////////////////////////////////////////////////////////
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| РеализацияТоваровУслуг.Ссылка
|ИЗ
| Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
|ГДЕ
| НАЧАЛОПЕРИОДА(РеализацияТоваровУслуг.Дата, МЕСЯЦ) = &Январь2025";
// 02 //////////////////////////////////////////////////////////////////////////////////////
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Номенклатура,
| ХарактеристикиНоменклатуры.Ссылка КАК Характеристика
|ИЗ
| Справочник.Номенклатура КАК Номенклатура,
| Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
|ГДЕ
| ЛОЖЬ";
Таблица = Запрос.Выполнить().Выгрузить();
// 03 //////////////////////////////////////////////////////////////////////////////////////
Запрос.Текст =
"ВЫБРАТЬ
| СрезЦен.Регистратор.Ссылка,
| СрезЦен.Номенклатура,
| СрезЦен.Цена
|ИЗ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Завтра, ) КАК СрезЦен
|ГДЕ
| СрезЦен.Регистратор ССЫЛКА Документ.УстановкаЦенНоменклатуры";
// 04 //////////////////////////////////////////////////////////////////////////////////////
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| Сумма(1) / 1000000
|ИЗ
| РегистрСведений.ЦеныНоменклатуры КАК Цены";
// 05 //////////////////////////////////////////////////////////////////////////////////////
Запрос.Текст =
"ВЫБРАТЬ
| Выразить(РеализацияТоваровУслуг.Ссылка КАК Документ.РеализацияТоваровУслуг).Ссылка,
| НАЧАЛОПЕРИОДА(РеализацияТоваровУслуг.Дата, МЕСЯЦ) КАК НачалоМесяца
|ИЗ
| Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
|
|УПОРЯДОЧИТЬ ПО
| НачалоМесяца";
// 06 //////////////////////////////////////////////////////////////////////////////////////
Для каждого Поступление Из ТаблицаЗначений20млнСтрок() Цикл
Для каждого Реализация Из ТаблицаЗначений01млнСтрок() Цикл
Если Реализация.Номенклатура = Поступление.Номенклатура Тогда
Наценка = Реализация.Цена / Поступление.Цена;
Реализация.Наценка=?(Реализация.Наценка < Наценка, Наценка, Реализация.Наценка);
КонецЕсли;
КонецЦикла;
КонецЦикла;
// 07 //////////////////////////////////////////////////////////////////////////////////////
НоменклатураВыбрать = Справочники.Номенклатура.Выбрать();
Пока НоменклатураВыбрать.Следующий() = Истина Цикл
Сообщить( НоменклатураВыбрать.Ссылка + НоменклатураВыбрать.Артикул );
КонецЦикла;
// 08 //////////////////////////////////////////////////////////////////////////////////////
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 9
| Номенклатура.Ссылка КАК Номенклатура,
| ХарактеристикиНоменклатуры.Ссылка КАК Характеристика
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
| ПО (ХарактеристикиНоменклатуры.Владелец = Номенклатура.Ссылка)
|ГДЕ
| ХарактеристикиНоменклатуры.ПометкаУдаления";
// 09 //////////////////////////////////////////////////////////////////////////////////////
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ТоварыНаСкладахОстатки.Номенклатура,
| ТоварыНаСкладахОстатки.КоличествоОстаток
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
|ГДЕ
| ТоварыНаСкладахОстатки.Номенклатура В ИЕРАРХИИ(&ГруппаНоменклатуры)";
// 10 //////////////////////////////////////////////////////////////////////////////////////
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| РеализацияТоваровУслугТовары.ЕдиницаИзмерения,
| МАКСИМУМ(РеализацияТоваровУслугТовары.Ссылка) КАК Ссылка
|ИЗ
| Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
|ГДЕ
| (ВЫРАЗИТЬ(РеализацияТоваровУслугТовары.Коэффициент КАК ЧИСЛО(5, 0))) < РеализацияТоваровУслугТовары.Коэффициент
|
|СГРУППИРОВАТЬ ПО
| РеализацияТоваровУслугТовары.ЕдиницаИзмерения";
// 11 //////////////////////////////////////////////////////////////////////////////////////
//модуль справочника ХарактеристикиНоменклатуры
Процедура ПриЗаписи(Отказ)
ОбработкаПрерыванияПользователя();
Попытка
НачатьТранзакцию();
МойОбъект = Владелец.ПолучитьОбъект();
МойОбъект.Наименование = СокрЛП(МойОбъект.Наименование);
МойОбъект.Записать();
ЗафиксироватьТранзакцию();
Исключение
Предупреждение("Ошибка проведения",5);
ОтменитьТранзакцию();
КонецПопытки;
КонецПроцедуры
// 12 //////////////////////////////////////////////////////////////////////////////////////
&НаКлиенте
Функция ЗначениеВДанныеФормы()
//строка 03
УстановитьПривилегированныйРежим(Истина);
Запрос = Новый Запрос;
//строка 06
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| 1 / Номенклатура.ЕдиницаДляОтчетов.Коэффициент КАК ОбратныйКоэффициент,
| Номенклатура.Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура";
//строка 13
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальная = РезультатЗапроса.Выбрать();
//строка 16
Пока ВыборкаДетальная.Следующий() Цикл
Сообщить( ВыборкаДетальная.Ссылка.Наименование + " " + ВыборкаДетальная.ОбратныйКоэффициент );
КонецЦикла;
//строка 20
УстановитьПривилегированныйРежим(Ложь);
//строка 22
КонецФункции
// 13 //////////////////////////////////////////////////////////////////////////////////////
&НаСервере
Функция ЗначенияРеквизитов(Номенклатура)
ЗначенияРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Номенклатура, "Наименование, ВариантОформленияПродажи");
Если ЗначенияРеквизитов.ВариантОформленияПродажи = Перечисления.ВариантыОформленияПродажи.РеализацияТоваровУслуг Тогда
Возврат ЗначенияРеквизитов;
КонецЕсли;
КонецФункции
&НаКлиенте
Процедура ПоказатьТовары(Команда)
Для Каждого Товар Из Объект.Товары Цикл
ЗначенияРеквизитов = ЗначенияРеквизитов(Товар.Номенклатура);
Если ЗначенияРеквизитов <> Неопределено Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю(ЗначенияРеквизитов.Наименование);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
// 14 //////////////////////////////////////////////////////////////////////////////////////
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВводОстатковТоваров.Ссылка КАК Ссылка
|ИЗ
| Документ.ВводОстатковТоваров КАК ВводОстатковТоваров
|
|УПОРЯДОЧИТЬ ПО
| ВводОстатковТоваров.Дата";
// строка 10
ТЗ = Запрос.Выполнить().Выгрузить();
НачалоГода = НачалоГода( ТекущаяДата() );
Для Каждого ТЗЦикл ИЗ ТЗ Цикл
// строка 15
Если ТЗЦикл.Ссылка.Дата < НачалоГода Тогда Продолжить; КонецЕсли;
Документ = ТЗЦикл.Ссылка.ПолучитьОбъект();
Документ.ПометкаУдаления = Истина;
Документ.ОбменДанными.Загрузка = Истина;
Документ.Записать(РежимЗаписиДокумента.Запись);
// строка 21
КонецЦикла;
Ответы на вопросы смотрите ЗДЕСЬ
Вопрос: Вы советуете НЕ выгружать результат запроса в таблицы значений, а ERP это активно использует.
Ответ: Мы должны верить, что напишем больше и лучше, чем ERP !
Вопрос: Зачем такие тесты, ведь кандидатов можно отбирать, спрашивая про красно-черные деревья и вялые огурцы ?
Ответ: Спасибо, Кузяра! Вы сделали мой день!
Вопрос: Тут уж совсем детский уровень.
Ответ: Здесь спрятано 20 ошибок, не каждый ребенок найдет.
Вопрос: Это код одна сплошная ошибка!
Ответ: Вы нам не подходите. Слишком умных лучше не брать. Подсидят через пару лет. ))
Вопрос: Выжду годик и сам запилю такую публикацию.
Ответ: Через годик у меня уже будет четыре плюсика и одно скачивание !
Вопрос: Зачем мне код с ошибками ?
Ответ: Все хотят быть сеньором-тимлидом, но никто не хочет исправлять чужой плохой код ))
Вопрос: Мне нужно просеять кандидатов через воронку отбора (остаться должен 1%)
Ответ: Вы затеяли "Голодные игры"? Интер есная воронка - но напрашивается аналогия с большим динозавром - пока сигнал от хвоста дойдет до мозга, хвост уже отгрызут :-)
Вопрос: Где Вы берете такой плохой код ?
Ответ: Проекты прошлых лет (шутка).
Найти ошибки в коде - популярная тема на собеседованиях. Например, используется на собеседованиях Вайлдберриз-Тех для программистов Java.
Содержит избранные комментарии из предыдущей статьи Отбор кандидата-программиста.
Благодарю модератора Ирину Пятакову, которая помогает сделать статьи более читабельными. Без нее у меня получилась бы просто куча неструктурированной информации.
Вступайте в нашу телеграмм-группу Инфостарт
См. также
Нейросети Рефакторинг и качество кода Запросы Разработчик 1С 8.3 Абонемент ($m)
Нейросеть написала запрос или процедуру для вашей базы 1С, и непонятно, все ли имена в нём настоящие. Обработка компилирует текст без выполнения, сверяет его с метаданными этой базы и к каждой ошибке пишет настоящее имя, например ВНаличииОстаток вместо выдуманного КоличествоОстаток. Список ошибок с подсказками одной кнопкой копируется обратно в чат с моделью.
10 стартмани
02.11.2026 301 1 nedomolkov.ivan 1
Рефакторинг и качество кода Разработчик 1С:Предприятие 8 Россия Бесплатно (free)
Одна проверка в обработчике кнопки может выглядеть достаточной, пока ту же операцию не вызовут из другого места. На примере управляемой формы разберём, почему так происходит, как разместить проверку в общей серверной функции и чем отличается удобная проверка ввода от обязательного условия выполнения операции.
29.10.2026 337 YA_777378709 0
Рефакторинг и качество кода Разработчик Бесплатно (free)
Рассказываем, почему качественный код – это не техническая прихоть, а актив, который помогает бизнесу быстрее адаптироваться к изменениям и запускать новые фичи без бесконечного преодоления техдолга. Показываем, как объяснить бизнесу ценность рефакторинга через понятные признаки: замедление разработки, неточные оценки, страх перед legacy и хрупкость системы. Разбираем, почему неправильный рефакторинг может быть дороже его отсутствия, какие анти-паттерны ломают процесс и как не превратить улучшения в бесконечную переделку ради переделки. Объясняем, как сделать рефакторинг частью культуры команды: договориться с бизнесом, научить разработчиков видеть проблемные места, закрепить правила и поддерживать улучшения на уровне тимлидов, архитекторов и всей команды.
28.10.2026 448 Pavel791 0
Рефакторинг и качество кода HighLoad оптимизация Системный администратор Разработчик Стажер 1С 8.3 Абонемент ($m)
Если к HTTP-сервису 1С обращаются сразу несколько программ, сколько запросов в секунду он успеет обработать? Я опубликовала простой HTTP-сервис на нашей "подопытной" конфигурации «Нано-УТ» (файловая база, Apache, без прав администратора) и нагрузила его скриптом на Python. Ответ: около 15-16 запросов в секунду, сколько бы клиентов ни обращалось одновременно. Запросы ждут своей очереди, и при 32 клиентах ответ приходит через 2 секунды вместо 64 мс. Заодно разобрала скрипт из первого варианта статьи: он «проверял» сервер, который отвечал по одному, и считал ошибки вместе с успешными ответами. В архиве исправленный скрипт, учебный сервер, HTTP-сервис для 1С и инструкция по запуску.
1 стартмани
23.10.2026 490 Ninel_S 3
Рефакторинг и качество кода Разработчик 1С 8.3 Абонемент ($m)
Запустили Analyzer 1C 2.7.65 на промышленной конфигурации (596 модулей, 13 669 функций) и исследовали перегруженные функции (до 1887 строк), циклические зависимости и экран «Циклы» (кольцо из 64 модулей). Разобрали, почему популярные метрики (McCabe, связность) не представлены в продукте вендора, и составили пошаговый план разделения модуля. Привели проверенный платформой 8.3.27 пример до и после рефакторинга и выявили скрытую ловушку загрузки модулей с точкой в имени.
9 стартмани
19.10.2026 434 Ninel_S 2
Рефакторинг и качество кода EDT СКД Разработчик 1С 8.3 1С 8.5 1С:Бухгалтерия 3.0 Бесплатно (free)
Одиннадцать граблей схем компоновки, которые не видно в конструкторе и не ловит EDT, на реальных отчетах БП КОРП. Формат числа задается в двух местах, и условное оформление варианта перебивает формат поля. Ресурс складывает штуки с часами, и помогает выражение «только когда единица одна». Ресурс пуст в детальных записях, параметр не появляется в шапке без userSettingID, valueListAllowed ломает границы периода, Остатки и СрезПоследних с параметром периода падают с «Несоответствием типов», title без xsi:type дает «Исключение XDTO» при загрузке. В конце код проверки схемы из файла до обновления базы, сводная таблица и чеклист.
16.10.2026 489 Konstmax13 2
Инструментарий разработчика Нейросети Рефакторинг и качество кода EDT Разработчик 1С 8.3 1С 8.5 1С:Бухгалтерия 3.0 Бесплатно (free)
Как ИИ-агент (Claude Code) работает в живом EDT-проекте 1С:Бухгалтерии КОРП 3.0: из чего собрать стенд с MCP-сервером для EDT, как ставить задачи агенту, где он ломает проект и какие проверки это ловят. Реальные случаи: рукописные метаданные, ронявшие конфигуратор; четыре дня зависшего обновления из-за порядка блоков в Rights.rights; ошибки, которые EDT пропускает, а платформа нет; сплошная сверка вместо «вроде работает». В приложении шаблон CLAUDE.md, шаблон правила, чеклист перед обновлением базы и скрипты проверки ролей и схем СКД.
15.10.2026 3403 Konstmax13 11
Рефакторинг и качество кода Тестирование QA Разработчик 1С 8.3 Абонемент ($m)
Инженерный анализ влияния (Impact Analysis) при изменении общего метода в 1С:Предприятии: почему штатный поиск ссылок скрывает 99% зависимостей и как обратный обход графа вызовов выявляет 370 скрытых потребителей на глубине 3 уровней. В статье — верификация сквозной цепочки обмена с маркетплейсом; в архиве-компаньоне — автономный BFS-анализатор на Python, слепки графа и план регрессионного тестирования.
1 стартмани
12.10.2026 300 Ninel_S 0
Как лучше продавать ответы ? По одному или все сразу ?
Ответ: Мы должны верить, что напишем больше и лучше, чем ERP !
А вы сами проверяли быстрее выгрузить или выбрать?
Рекомендую проверить, а не слепо верить статьям ИТС 10 летней давности.
За 10 лет RAM памяти на серверах стало раз 20 больше.
Да и вообще нормальные спецы - скажут вам, ой извините курьер приехал с Озона, перезвоню попозже, и наберете вы библиотекарей, которые читают ИТС, не вдаваясь в суть и будете вы на их фоне самый умный.
Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
|Сумма(1) / 1000000
|ИЗ
|РегистрСведений.ЦеныНоменклатуры КАК Цены";
Сценарий интервью
Вопрос: Для чего может быть использован такой запрос
Ответ: Деление - чтобы не было ошибки sql переполнения.
Согласно статье ИТС как раз предлагали использовать механизм выразить (ВЫРАЗИТЬ(1 КАК ЧИСЛО(17, 0)))
Из за чего ошибка переполнения буфера SQL в платформах *.11-*.12. А ошибка возникала при закрытии месяца как раз из за того что использовали оператор выразить. Так что пишите
count(1) |ИЗ
|РегистрСведений.ЦеныНоменклатуры КАК Ценыи бедет вам счастье.
Когда я начинал, была 6 версия платформы. Потом пришла 7.5 и за ней 7.7 ))
Cейчас у меня 1 терабайт RAM. Сами подумайте, во сколько раз память увеличилась ))
Cейчас у меня 1 терабайт RAM. Сами подумайте, во сколько раз память увеличилась ))
Не знаю что вы там делали на 6-ой платформе. Там конфигуратора то не было.
Хороший знак - это если программист читает программный код типовых конфигураций.
Есть два типа людей (или больше) одни пишут код, другие статьи ИТС
А если город большой, с небоскребами, программист незнакомый ? Какие тестики считаете неунизительными ?
(Этот вопрос неочевидный, отвечать необязательно. Для любителей, знатоков и коллекционеров)
Ответ: Деление - чтобы не было ошибки sql переполнения.
Не знал и знать не хочу.
Вот еще вопросик из разряда попробуй догадайся. Для чего нужна первая и вторая строка в процедуре. Дипсик сказал что это не по феншую, и порекомендовал их удалить.
Процедура СохранитьНастройкиСервер(Знач КлючОбъекта, Знач КлючНастроек, Данные)
КлючОбъекта = СтрЗаменить(КлючОбъекта, """", "");
КлючНастроек = СтрЗаменить(КлючНастроек, """", "");
ХранилищеОбщихНастроек.Сохранить(КлючОбъекта, КлючНастроек, Данные);
КонецПроцедурыВ коде логическая ощибка - на совсем ясно, с какого передаются кавычки в ключах. А там еще символы могут быть какие-нить нестандартные - всё не выпилишь. Так что или нужно передавать только правильные ключи, или нужно всю солому стелить, а не только кавычечную.
Разный уровень умения программировать ?
А чтобы не рисовать примитивные печатные формы - просите достойную заработную плату.
И пребудет с вами сила !
Отнюдь нет - я просто программист, который любит программировать.
А нам выдумывать ничего не пришлось. В коде столько косяков, что без слез на него нельзя было смотреть. Я смотрел и плакалЪ.
Плохой и простой код имеет низкую стоимость владения, производительность компов растет, что нивелирует разницу в алгоритмах, но делает код поддерживаемым. Плохой и сложный код - самый дорогой. Простой и хороший код требует очень хороших специалистов для его разработки, но такого даже у мелкомягких нет. Давай, найди баланс.
ЗЫ: код типовых и простой, и сложный, и ужасный местами, но он работает и обновляется без вмещательства локальных спецов. Все вмешательство определяется юзанием переопределенных модулей и, если нужно, расширений. Если кто-то что-то нетленное вписывает в типовой код, то это просто выброс денег бизнеса на ветер.
Не знаю, про какую ситуацию Вы пишите. Я пишу про свою. Где я плакалЪ?
Я плакалЪ над запросами в цикле. Запускаешь обработку, а она виснет минут на 5ть. Стали копать причину медленной работы. Нашли классическую ошибку.
Я плакалЪ там, где вместо того, чтобы использовать виртуальную таблицу разработчики юзали обычную таблицу движений, где было несколько миллионов записей и получалась выборка по не индексированным полям.
Я плакалЪ там, где код работал несколько часов, а по факту должен был обрабатывывать несколько минут или даже секунд, а пользователи мне говорили "Это ваша 1С-ка тупая" или "Это ваш сервер 1С медленный".
Я плакалЪ там, где видел обработку с кнопками как в самолете и перед тем, чтобы ее использовать мне пришлось прочитать инструкцию, чтобы хоть как-то дойти до следующего шага, чтобы отловить баг...
Но я, например, в таких случаях вообще не плачу. Это дети (программисты) плачут, а родители (работодатели), соответственно, платят. И если функционал чуть сложнее дважды два, то никуда не деться. Та же конвертация, которая вроде как для студентов, не так и проста, если перетаскивать с ее помощью заполнение начальных остатков, а в типовых 1С-ах это как бы сделано...
Не. Все то о чем я писал, это мои слезки над допилами талантливых разработчиков в упп. Типовыми решениями там не пахло. Эти же таланты втирали руководству, что это сервер ваш на 1с медленный. Надо бы его поменять. Но в итоге я от туда ушёл, так как мне за мои таланты там не доплачивали.
У меня сложилось впечатление, что наши таланты ни один работодатель не оценит в полной мере.
И оглянулся я на все дела мои, которые сделали руки мои, и на труд, которым трудился я, делая их: и вот, всё – суета и томление духа, и нет от них пользы под солнцем!
Когда я был маленьким я любил лето. Когда я вырос, я понял, что если у тебя есть деньги, то лето может быть круглый год. Сейчас я люблю деньги.
Это анекдот такой. :-) Если серьезно, то да. Я работаю не за идею. Я работаю за деньги. А что такое деньги? Деньги это возможности. Заплатить за квартиру, вкусно покушать, купить новую машину, съездить в отпуск, получить образование и поднять свои скиллы и т.д.
Я от все никак не пойму. Вы меня пристыдить что ли пытаетесь? :-D Не хотите работать за деньги, а работаете за идею? Ну и отлично. Ваш выбор.
Не. Я не обидчивый. Отомщю, забуду, снова отомщю. (с)
Работать ради денег - это нормально. Деньги - это ресурс. Дают новые возможности для карьеры и роста. Повышают уровень жизни.
Если вы жадный и не хотите платить нормальному специалисту по рынку или выше рынка, ну тогда этот специалист уйдет туда, где будут платить. Законы рынка. ;-)
Уровень жизни - это удовлетворение жизнью. На сколько человек жизнью удовлетворен? Тут вопрос субъективный, отвечают на него честно далеко не все.
Как повысить удовлетворение от жизни? Было какое-то исследование, что самые счастливые - это монахи, даже буддийские монахи, а не все подряд.
При увеличении возможностей растут потребности. Часто они растут быстрее, чем возможности, т.к. потребности - это площадь сферы (вообще все, что можно купить за зарплату), а возможности - это ее радиус (сама зарплата).
Отсюда справедливо, что люди обеспеченные, но не на уровне илонмасков, могут позволить себе далеко не все, что уже хотят, т.к. могут это что-то купить за деньги, но только, условно, одно.
В общем, уровень жизни субъективно (со стороны того, кто этот уровень "имеет" лично) деньгами не измеряется, а объективно (со стороны стороннего наблюдателя) кажется, что вот, мол, у чела все есть, а с фига ли он жену с ребенком из окошка новой квартиры вытолкал...
Мы с вами уже в философию уходим. Да. Деньги не делают людей счастливыми. Иначе самые богатые были бы самыми счастливыми. Но есть ипотека и кредит за машину. Их надо платить.
ЗЫ: основная проблема - это качественный переход от "я хочу" в "у него есть".
ЗЫЗЫ: у меня нет ипотеки, есть сплит на соточку от яндыкса, я там телик покупал и алису на год без переплат. Почти отдал, но я никуда не тороплюсь.
имеются ввиду его девелоперские (ландшафтные?) проекты:
"..предпринял большие дела: построил себе домы, посадил себе виноградники
устроил себе сады и рощи и насадил в них всякие плодовитые дерева;
сделал себе водоемы для орошения из них рощей, произращающих деревья;"
Респект за знание Экклезиаста )) Ничего не меняется под луной ))
"И возненавидел я весь труд мой, которым трудился под солнцем, потому что должен оставить его человеку, который будет после меня.
И кто знает: мудрый ли будет он, или глупый? А он будет распоряжаться всем трудом моим, которым я трудился и которым показал себя мудрым под солнцем. И это – суета!"
Вам респект за интересный материал, за труд(так и хочется сказать под Солнцем))) и за повод вспомнить Книгу книг.
Здесь же речь о том, что его, как о праве собственности, поэтому и говорит, что он делал.
Вы ремонт в квартире делаете, нанимаете рабочих, платите, они уходят, им все равно, Вам нет, потому что это Ваше. Так и говорите потом, мол, я сделал супер ремонт.
2. Про кого дошли до нас вести.
3. Аристарх Самосский в "немного после те времена" был, предположу, что он превосходил Соломона раз в 100. Но да, 500 лет прошло. При том первый, кто про богов прилично рассказал, был Аристотель, на основании его логики первые христианские товарищи очень даже неплохо продвигали свои воззрения. Если их читнуть, то Аристотель там через слово, а про Соломона особо не вспоминают.
Полностью не согласен - современный код типовых запутанный, трудно поддерживаемый и трудно дорабатываемый! Архитектура там отсталая и очень плохо поддающаяся доработкам - и предопределённые процедуры не спасают т.к. их применение в типовых очень ограничено.
Архитектура платформы 1С Предприятие 8 давно не способствует эффективному управлению программным кодом и управлению доработками - не спасают и убогие расширения конфигураций.
И уж тем более - оптимизация всего этого тоже - почти аховая - много... очень много лишнего исполняемого кода и и элементов метаданных и очень большой акцент на написание лишнего кода при доработках! И очень мало повторно используемого кода. Практически отсутствует уровень абстракций!
В типовых так же встречает достаточно много ошибок - их поиск и исправление - та ещё головная боль. так её и меняют постоянно свои алгоритмы - естественно с насаждением новых ошибок - и эффективного инструмента сведения доработок и нового типового кода так же за всё время развития 8-й платформы так и не появилось!
Да - в языке 1С и в структуре метаданных 1С Предприятие 8 не так уж много видов функциональных элементов - выучить не проблема.... но возьмите хотя бы БСП 3 - и из этих элементов там такое наворотили - вот это уже в головое удержать будет достаточно сложно! Возьмите типовую конфигурацию, так она это БСП будет использовать в кость и в гриву - десятки раз дублируя схожие алгоритмы, паттерны и подходы - ко их тоже будет просто куча! Причём в одном месте будет работать - а в другом - легко может быть ошибка в реализации! А уж поиск всех цепочек взаимосвязей - это та ещё песня!
Но да - в это всё приходится разбираться - и вот да -такой навык иметь нужно (приходится) - но это всё уже совсем другая история!
Но тут легко разойтись во мнениях - какая должна быть архитектура программного - для кого-то уровень бейсика /паскаля да даже си - идеален - кому-то уровень джава/дажваскрипта/питона нравится - кому-то и уровень C++ / скала / раст'а кажется слабоватым!
Мне, вот нравится уровень си шарпа / котлина - но и они далеко не идеальны - я ратую за появление и развитие более современных ЯП - пятого поколения - более абстрактных и декларативных, с высоким уровнем как повторного использования кода, так и применения технологий внедрения зависимостей, аспектного программирования, программирования через тестирование и - особенно в прикладном ПО + активное применение AI технологий при разработке в IDE при анализе/рефакторинге/кодогенерации/справке/теоретической, статистической и фактической оценке эффективности (надёжности, производительности, сопроводительности, универсальности...) - это всё уже совсем другой уровень разработки ПО, достойный XXI - XXII века прогресса в IT отрасли!
А уж язык запросов - и 1С и SQL со всеми его расширениями СУБД - это вообще какой-то пережиток прошлого, уже давно нуждающийся в тотальной замене! Чтобы не заморачиваться тонким тюнингом и выворотными конструкциями и тоннами листинга запроса с почти нулевым повторно используемым кодом (оставим в покое процедуры СУБД) и уровень абстракций - так что шаг в лево шаг в право - и надо переписывать кучу таких вот запросов! Несмотря на то - что SQL для своей эпохи - был почти идеален - и сейчас является малочисленным примером декларативного программирования, за что я и ратую!
Работа с СУБД так же должна быть абстрактной, с высоким повторным использованием кода, математики множеств и без необходимости вручную часто тюнинговать код - на то он и декларативный - движок сам должен его тюнинговать - от программиста только требуется коротко и понятно описать - что же нужно выбрать из СУБД! И вообще - что работа на данными в объектной модели, что работа над данными в базе СБУД - в методики описания алгоритмов не должно быть большой разницы (учитывать нужно только особенности доступной функциональности того или иного контекста).
З.Ы.
Уж простите меня за этот, относительно небольшой (по моим меркам) ликбез - не удержался...
Лично я никого не набираю, никуда не летаю. (цЫтата из Алисы) Мне просто нравится составлять тестики.
Хотя не раз слышал от эйчаров, мол, столько липовых резюме, человек красиво напишет, а проверяешь ничего не знает. Говорю, так полно вакансий, которые годами висят, кого ищут непонятно.
Есть компании, у которых такой регламент заложен, без тестового никуда.
Есть еще по регламенту, типа, общение с эйчаром не меньше часа)) и только потом со специалистом. О чем интересно с ней час говорить, непонятно. И как часто бывает этот эйчар не пропускает человека дальше, наверное, у нее есть свои скилы для профессиональной оценки кандидата.
Насчет тестового, есть компании, которые его оплачивают, а есть такие, что предлагают решить "за бесплатно" рабочую задачу или даже не одну, мол, мы же должны понимать, справитесь вы или нет)).
Был случай с БИТом, прислали на двух страницах 3 или даже 4 задачи, все на разработку, деловые)), одна из задач один в один здесь на Инфостарте.
Им тоже хочется есть, текучка, талантливые быстро нарабывают опыт и уходят на постоянку в компании.
Работал во франче почти год(первый же клиент сразу предложил бросай их пошли к нам), два этажа, разные подразделения, 7.7 внедрение-сопровождение, 8 отдельная песня. Вроде собирались иногда все вместе, но в целом каждый в своем кругу. Были отдельно разработчики на проектах, разработчики решений, я их вообще не видел, говорили, что там такой уровень, думал, небожители))
А если город большой, с небоскребами, программист незнакомый ? Какие тестики считаете неунизительными
Рыбак рыбака видит из далека. Если вы за 30-45 минут разговора не можете это понять, значить - вы не рыбак.
Да и тесты у вас отстойные. Получается надо ответить, что земля плоская, чтобы взяли на работу.
Все фигня - #учитеМАТЧАСТЬ
Но статьи можете дальше писать, люблю треш читать перед выходными. Так что плюсую
Проходил собеседования в несколько компаний, в двух из них задали один и тот же вопрос. В первой ответил, сказали что правильно. Во второй ответил так же, сказали что не правильно. Вот так и ходи по собесам.
П.С. в некоторых фирмах вообще верят на слово и ничего не проверяют, так что пройти собеседования иногда проще, чем кажется. Иногда вообще просто смотрят на реакцию человека, даже если ответ не правильный.
У нас паренька взяли на работу разрабом 1С. Он даже конфигуратор не знал, как запустить. Что-то видимо про программирование наплел нашим НР. В итоге ему предложили пойти в техпо. Ну хотя бы попробовать. Тот испугался и решил уволиться.
Скорее всего не было. Но парню все равно дали шанс. Он сам отказался. С нуля в техпо бы его научили. Там ничего сложного ведь нет. Было бы желание.
П.С. это завод. Госконтора. Там специалистов кот наплакал. Зарплаты по низу рынка. Поэтому берут всех подряд.
Погуглил потом что за они, там больше похоже было на поиск ради поиска, да и в целом не очень, так что в принципе ничего не потерял.
С одной стороны, вопросы достойные, если ищем очень хорошего спеца. Но вряд ли таких находят - они, предположу, по собеседованиям не ходят вообще, т.к. их все и так знают. Это как вопрос о том, что значит признак "предопределенный" в регламентном задании. Ну вот зачем этот вопрос? А его задавал один мой коллега.
Сейчас хороших разработчиков не так и много. Не знаю, могу ли я себя назвать "хорошим разработчиком", но на данные вопросы я смотрел, как баран на новые ворота, т.к. для меня сам по себе запрос номер раз бессмысленный. Если бы я нанимался, то я предпочел бы не исправлять этот запрос, а написать его. И, понятное дело, написал бы сразу так, как рекомендует 1С, т.е. "выбрать количество(*) из регистр". И все бы так сделали. И когда я в коде что-то такое вижу, то даже не пытаюсь понять, нафига оно там - просто прохожу мимо, ибо работу пока за меня дипсик и иже с ними не делают на 100%.
ЗЫ: пришло уже время спрашивать другое - относительно того, какой вопрос задать ИИ, чтобы он выдал код. Вот это действительно выходит на первый план. С другой стороны, получив код от ИИ, нужно еще суметь понять, что он требе такое написал. И тут уже чтение кода начинает играть роль. Но не просто чтение, а понимание того, на сколько эффективен алгоритм (n^2, n, log2n, 1).
Возможно, хорошие разработчики пишут запросы всегда заново, всегда правильно.
Но знакомство с кандидатом нужно с чего-то начинать.
Недавно разбирался почему обработки обмена с сайтом через API зависают. Оказывается в HTTPСоединение нужно указывать таймаут, а это прописано в стандартах разработки. Поэтому программисты, которые не учатся, пишут ненадежный код и превращаются в клещей. Это то, что от нас зависит.
ЗЫ: страшное скажу - есть и асинхронные ХТТП ныне с клиента, но они как-то странно работают. Пробовал на одном ресурсе - первый запрос долго, потом все пролетает, потом висит на первом ответе на "ждать", потом все остальные "ждать" отрабатывают мгновенно. Что-то там 1С недопилил.
А стандарты нужны, чтобы был порядок и единообразие, поэтому и хорошо смотреть пример как 1С это делает.
Никто никого не осуждает, непродуктивно это, главное, чтобы человек понимал, что он делает. Современные системы способны многое "простить" и тем не менее.
Мне удалось правильно посеять "разумное, доброе, вечное", а не забросать его мусором ?
[_Fld48] [numeric](10, 0) NOT NULL
)
EXEC sp_spaceused '[dbo].[_InfoRg47]';
| rows |
| 2150000000 |
ВЫБРАТЬ РАЗЛИЧНЫЕ
Сумма(1) / 1000000
ИЗ РегистрСведений.Тестовый
Ошибка выполнения запроса: Ошибка при выполнении операции над данными:
Microsoft SQL Server Native Client 11.0: Ошибка арифметического переполнения при преобразовании numeric к типу данных numeric.
HRESULT=80040E57, SQLSrvr: SQLSTATE=22003, state=8, Severity=10, native=8115, line=1
ВЫБРАТЬ РАЗЛИЧНЫЕ
Сумма(1 / 1000000)
ИЗ РегистрСведений.Тестовый
| Поле1 |
| 2 150 |
Может нет времени или хотят, чтобы взять идеального сотрудника, которых практически нет.
Директор мне в ответ "Мы с первой секунды поняли, что он нам не подходит. Неопрятный внешний вид."
Без шаблонов и бумажек.
Если в конфигурации включен "Автоматический" режим управления блокировками. Если включен "Управляемый" то эта директива ни на что не влияет.
Характеризует вас с положительной стороны ))
Это часть вопросов, есть дополнительные ))
Мудрость не всегда приходит с возрастом, иногда возраст приходит один ))
Специалист подобен флюсу, полнота его односторонняя ))
Несколько фирм. Друзья, знакомые ))
Расскажите, какие вопросы Вы бы хотели видеть ?
ответ на ваш вопрос подразумевается зеркальным, но к сожалению
я не умею отвечать так витиевато, как вы, одновременно ни о чем, и одновременно шутя ))
ладно, проехали - не поняли друг друга - ну и ладно....
Для "витиеватых ответов ниочем" я долго гуглил, искал цитаты, особого умения не нужно.
Подкиньте идею, о чем еще можно спрашивать ?
О чем бы Вы спросили ?
О чем бы Вы спросили ?
у меня что ни новая задача - так целый кладезь мудрости и знаний 1С.
берите задачи из жизни - я могу каждый день новые тестовые задачи давать - потому что они каждый день возникают - не успеваю ими делиться ни в личном блоге, ни на ИС.
К примеру, вчера решал - у вас есть динамический список номенклатуры - стандартная форма списка - в УТ 11.5 - в ней отображены только Наименование и Артикул в пользовательском режиме. Спрашивается, почему не отображается колонка Ссылка, в конфигураторе она отображается. Также по задаче необходимо добавить колонку Производитель (Бренд). На этом постановка задачи завершается. Далее только уточняющие вопросы и путь исследователя.
На мой взгляд и по опыту - надо дать базу, поставить задачу - и смотреть как решает человек.
У вас в вопросах отсутствует "база" - это большой минус. Вы не сможете выявить у кандидата навык понимания алгоритмов на своих примерах-задачах...
Первый вопрос ужасен - у вас платформа сначала просуммирует единицу, и потом вывалится в ошибку нехватки памяти? и тогда зачем делить на 1 млн? или вам надо суммировать не единицу, а 1, деленное на млн? Если у вас остается деление, то зачем предлагать использовать агрегатную функцию Количество()? Задача , оторванная от жизни - ничего хуже нельзя придумать....Программирование и отладка кода - вещи неотделимые при индивидуальном программировании, парное программирование не в счет - когда второй разработчик сначала смотрит код, а потом его тестирует....
По-моему, вам надо убрать скачивание (выглядит не серьезно) - перевести статью в категорию "статьи" - дополнить задачами из жизни (База + бизнесовская задача) = и все будет намного лучше.
До сих пор таких публикаций не было, это обеспечило мне успешный успех ))
Смотрите
я понял вас - то, что вы придумали продукт, который скачали 20 раз по 5 см - хороший результат - это значит, что заинтересованность в этом продукте возникла у 20 людей (кандидатов, руководителей, просто фрилансеров)...кому сложно вывести стартмани, у кого накопилось много....
странно вышло - я думал, что мы тут обсуждаем ваши тестовые , да и не только ваши тестовые ,а в целом....
Я перешел в статью по ссылке "Самые обсуждаемые статьи" - а выходит, что обсуждать тут нечего?
В комментариях народ обсуждает другие темы, я бы хотел более предметно.
Но как говорят, Vox populi vox Dei.
выгрузить результат запроса с последующей загрузкой, например в таблицу движений, уже давным давно быстрее чем выборка. Чем больше строк тем быстрее выполняется именно выгрузка-загрузка. Ресурсы жрет +- одинаково. Хотя в 25 году никого ресурсы не интересуют. Все смотрят только на быстродействие.
Однако если надо просто обойти результат запроса и сделать какие-то действия, то выборка подходит на ура (типо как в обработчиках обновления)
Похожим запросом считают количество записей в справочнике для ответа "Сколько у нас номенклатуры" или "Сколько у нас контрагентов".
Счастливые, беззаботные люди ни о чем не задумываются ))
Тем более что базы с количеством записей в регистре за 2+кк уже начинают дико тормозить и умирать на бюджетном железе (серверном, а не когда из обычного пк с домашней виндой делают сервер). Там даже почистить такой регистр иногда очень проблематично средстами 1с.
была задача. Вживили в ут11 интеграцию с битриксом от самого битрикса. Эта интеграция пишет логи в независимый регистр сведений. Корчое эта шляпа за пол часа наспамила 2+кк записей туда. Пришлось писать фильтр логов, чтоб не спамило ,потому что настройка по очистке тупо чистит записи старше N дней, а тут счет на минуты. НА попытке стандартной очистки регистра средствами 1с 1с тупо вылетала, пришлось трункейтом чистить таблицу прям через скуль. И вот в этом случае количество записей в регистре смотрели как раз через Количество(), а не через расчеты.
Это по факту был единственный случай когда потребовалось узнать количество записей в регистре.
Даже в условной БП, где все на хозрасчетном это максимально бессмысленно. Вывод: вопрос максимально бесполезный, потому что нужен единицам.
Количество номенклатуры\контрагентов\чего угодно считается путем Количество(), даже самый зеленый новичок не будет считать как в примере из поста или используя "сумма(1)".
Вы можете заказать платную консультацию или разработку у автора. Будет создан приватный заказ на «Бирже заказов» для автора.
№ 2322667
Создание 05.05.25 09:30
Обновление 12.05.25 11:35
Просмотры 11608
Загрузки 7
Рейтинг
26
Комментарии 109
Код открыт Да
Рубрики Рефакторинг и качество кода
Кому
Разработчик
,
Стажер
Тип файла Документация (pdf, docx, ...)
Платформа 1С:Предприятие 8
Конфигурация Универсальные
Операционная система Не имеет значения
Страна Не имеет значения
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Абонемент ($m)