Код разработчика в зависимости от опыта работы

14.02.20

Разработка - Рефакторинг и качество кода

Пятничный пост! Как меняется код разработчика в зависимости от опыта работы.

(НЕ)много воды

Это пятничный пост, созданный шутки ради. В прошлый раз мы изучали "хардкод" про регистры бухгалтерии. Сегодня же будет простая тема. Вы не найдете здесь никакой полезной информации. Разве что ловкий ход при работе со SQL Server в конце статьи, но он вряд ли будет новостью для многих.

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

  • Начинающий (Junior)
  • Уже с опытом (Middle)
  • Ведущий разработчик (Senior)
  • Эксперт (Expert)
  • Огромный опыт (Oldschool)

Последний уровень особый и далее Вы узнаете почему.

Все что Вы увидите ниже будет в рамках кода встроенного языка платформы и немного SQL Server. Да, да! Мы чуть-чуть выйдем за рамки "желтой" экосистемы.

Задача

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

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

Вот и решения

Пойдем от простого к сложному с неожиданной концовкой.

Начинающий (Junior)

Для начинающего разработчика такое решение может показаться простым и правильным.

Функция ПолучитьКоличествоНоменклатуры() Экспорт
	
	КоличествоЭлементов = 0;
	
	Выборка = Справочники.Номенклатура.Выбрать();
	Пока Выборка.Следующий() Цикл
		
		КоличествоЭлементов = КоличествоЭлементов + 1;
		
	КонецЦикла;
	
	Возврат КоличествоЭлементов;	
	
КонецФункции

Плюсы:

  • Простое и понятное решение

Минусы:

  • Низкая производительность
  • Сложность в доработке / адаптации под новые требования

А Вы когда-нибудь такое делали? Я да! :)

Уже с опытом (Middle)

Спустя некоторое время разработчик открывает для себя запросы, и мы получаем следующий код.

// Количество элементов в справочнике "Номенклатура"
// 
// Возвращаемое значение:
//   - Число - количество найденных элементов. 
//
Функция ПолучитьКоличествоНоменклатуры() Экспорт
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	КОЛИЧЕСТВО(Номенклатура.Ссылка) КАК КоличествоЭлементов
		|ИЗ
		|	Справочник.Номенклатура КАК Номенклатура";	
	РезультатЗапроса = Запрос.Выполнить();	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	ВыборкаДетальныеЗаписи.Следующий();
	
	КоличествоЭлементов = ВыборкаДетальныеЗаписи.КоличествоЭлементов;
	
	Возврат КоличествоЭлементов;	
	
КонецФункции

Плюсы:

  • Эффективный подсчет количества записей запросом по сравнению с объектной моделью
  • Легкая доработка / адаптация под новые требования
  • Простое и понятное решение

Минусы:

  • Производительность намного лучше предыдущего варианта, но все же для подсчета количества записей выполняется сканирование кластерного индекса. Частое выполнение такого запроса отрицательно сказывается на работе информационной системы.

Решение выглядит не плохо. Можно ли его улучшить?

Ведущий разработчик (Senior)

Спустя некоторое время разработчик получает еще порцию опыта, все больше втягивается в стандарты разработки, а также решает кэшировать количество записей для их эффективного получения.

#Область ПрограммныйИнтерфейс

// Количество элементов в справочнике "Номенклатура" из кэша
//	в базе данных.
// 
// Возвращаемое значение:
//   - Число - количество найденных элементов. 
//
Функция КоличествоНоменклатуры() Экспорт
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ РАЗРЕШЕННЫЕ
		|	КэшПоказателейДляОтчетности.КоличествоЭлементов КАК КоличествоЭлементов
		|ИЗ
		|	РегистрСведений.КэшПоказателейДляОтчетности.СрезПоследних(, ПоказательДляОтчетности = &ПоказательДляОтчетности) КАК КэшПоказателейДляОтчетности";	
	Запрос.УстановитьПараметр("ПоказательДляОтчетности", Справочники.ПоказателиДляОтчетности.КоличествоНоменклатуры);
	РезультатЗапроса = Запрос.Выполнить();	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	
	КоличествоЭлементов = 0;
	Если ВыборкаДетальныеЗаписи.Следующий() Тогда	
		КоличествоЭлементов = ВыборкаДетальныеЗаписи.КоличествоЭлементов;
	КонецЕсли;
	
	Возврат КоличествоЭлементов;	
	
КонецФункции

#КонецОбласти
 
 Остальной код общего модуля

Как мы видим, теперь значения кэшируются в периодическом регистре сведений "Кэш показателей для отчетности". Обновление значения происходит регламентным заданием "Обновить кэш количества номенклатуры" с произвольным расписанием.

Плюсы:

  • Максимальная производительность при получении количества записей
  • Расширенные возможности по хранению историчности значения

Минусы:

  • По сравнению с предыдущими решениями код выглядит значительно сложнее
  • Не смотря на кэширование, все же требуется сканирование кластерного индекса для подсчета количества записей
  • Присутствует некоторая неточность в данных, т.к. требуется постоянное обновление кэша регламентным заданием с некоторым "лагом" по времени

Ради оптимизации решение было усложнено, но недостаток в виде сканирования кластерного индекса все же остается.

Эксперт (Expert)

Но что, если и это нас не устраивает и нам нужно еще оптимизировать получение количества записей. Нужно больше оптимизаций!

#Область ПрограммныйИнтерфейс

// Количество элементов в справочнике "Номенклатура" из собранной статистики СУБД.
// 
// Возвращаемое значение:
//   - Число - количество найденных элементов. 
//
Функция КоличествоНоменклатуры() Экспорт
	
	КоличествоЭлементов = Неопределено;
		
	МетаданныеТаблицы = Метаданные.Справочники.Номенклатура;
	МассивМетаданных = Новый Массив;
	МассивМетаданных.Добавить(МетаданныеТаблицы);
	ИнформацияОСтруктуреБазы = ПолучитьСтруктуруХраненияБазыДанных(МассивМетаданных, Истина);
	НайденныеТаблицы = ИнформацияОСтруктуреБазы.НайтиСтроки(Новый Структура("Назначение", "Основная"));
	Если НайденныеТаблицы.Количество() = 1 Тогда
		
		ИнформацияОТаблице = НайденныеТаблицы.Получить(0);
		ИмяТаблицыБазыДанных = ИнформацияОТаблице.ИмяТаблицыХранения;
		
		СтрокаПодключения = СтрокаПодключенияКБазеДанных();
		СоединениеСБазой = СоздатьСоединениеСБазой(СтрокаПодключения);

		Если НЕ СоединениеСБазой = Неопределено Тогда
			
			Попытка
				
				ТекстЗапроса = ТекстЗапросаКоличествоЗаписейНоменклатуры();
				ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "{TableName}", ИмяТаблицыБазыДанных);
				
				КомандаБД = Новый COMОбъект("ADODB.Command"); 
				КомандаБД.ActiveConnection = СоединениеСБазой; 
				КомандаБД.CommandText = ТекстЗапроса;
				КомандаБД.CommandTimeout = 60;
				
				РезультатБД = КомандаБД.Execute();
				
				Пока НЕ РезультатБД.eof() Цикл
					
					КоличествоЭлементов = РезультатБД.Fields.Item("rows").Value;
					
					РезультатБД.MoveNext();
					
				КонецЦикла;
				
			Исключение
				
				КоличествоЭлементов = Неопределено;
				
			КонецПопытки;
			
			КомандаБД = Неопределено;
			СоединениеСБазой = Неопределено;
			
		КонецЕсли;
		
	КонецЕсли;
	
	Если КоличествоЭлементов = Неопределено Тогда
		КоличествоЭлементов = КоличествоНоменклатурыСлужебный();	
	КонецЕсли;
		
	Возврат КоличествоЭлементов;	
	
КонецФункции

#КонецОбласти
 
 Остальной код общего модуля

На этот раз была применена радикальная оптимизация: для получения количества записей в таблице используется собранная статистика SQL Server, которую СУБД обновляет достаточно оперативно. Чтобы такой подход заработал, придется выполнять SQL-запрос напрямую к базе данных с помощью ADO. Подробнее о реализации смотрите в листинге выше.

Плюсы:

  • Максимальная производительность при получении количества записей таблицы.

Минусы:

  • Сложное решение в части разработки и сопровождения
  • Могут быть незначительные отклонения значения от фактического количества записей на короткий промежуток времени

Фактически, это самое сложное решение как в части разработки, так и в части сопровождения, но зато с максимальной эффективностью.

Огромный опыт (Oldschool)

А теперь представим, что у разработчика огромный опыт с разными версиями платформы 1С, за плечами множество внедрений и успешных проектов. Какое решение в такой ситуации будет реализовано?

Функция КоличествоНоменклатуры() Экспорт
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	КОЛИЧЕСТВО(Номенклатура.Ссылка) КАК КоличествоЭлементов
		|ИЗ
		|	Справочник.Номенклатура КАК Номенклатура";	
	РезультатЗапроса = Запрос.Выполнить();	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	ВыборкаДетальныеЗаписи.Следующий();
	
	КоличествоЭлементов = ВыборкаДетальныеЗаписи.КоличествоЭлементов;
	
	Возврат КоличествоЭлементов;	
	
КонецФункции

Правильно - самое эффективное с точки зрения простоты разработки и скорости работы. Ведь все мы знаем, что предварительные оптимизации - зло.

Весело?

С пятницей, коллеги (если Вы читаете это в пятницу)! И хорошего дня в любом случае.

Мы рассмотрели пять решений одной простой задачи. Как мы видим, даже простейшая задача может быть усложнена в несколько раз и использовать нестандартные подходы при реализации. Чем больше опыта у разработчика, тем сложнее задачи он может решать. Но есть и другая сторона - простые задачи в таких случаях могут решаться слишком сложными способами, которые не всегда обоснованы.

Думаю, если проследите за изменением кода, то все встанет на свои места.

А как бы Вы решали подобную задачу?

Авторские разработки

Вступайте в нашу телеграмм-группу Инфостарт

1С опыт разработчик разработка карьера качество оптимизация

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Нейросети Рефакторинг и качество кода Запросы Разработчик 1С 8.3 Абонемент ($m)

Нейросеть написала запрос или процедуру для вашей базы 1С, и непонятно, все ли имена в нём настоящие. Обработка компилирует текст без выполнения, сверяет его с метаданными этой базы и к каждой ошибке пишет настоящее имя, например ВНаличииОстаток вместо выдуманного КоличествоОстаток. Список ошибок с подсказками одной кнопкой копируется обратно в чат с моделью.

10 стартмани

02.11.2026    287    1    nedomolkov.ivan    1    

2

Рефакторинг и качество кода Разработчик 1С:Предприятие 8 Россия Бесплатно (free)

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

29.10.2026    326    YA_777378709    0    

4

Рефакторинг и качество кода Разработчик Бесплатно (free)

Рассказываем, почему качественный код – это не техническая прихоть, а актив, который помогает бизнесу быстрее адаптироваться к изменениям и запускать новые фичи без бесконечного преодоления техдолга. Показываем, как объяснить бизнесу ценность рефакторинга через понятные признаки: замедление разработки, неточные оценки, страх перед legacy и хрупкость системы. Разбираем, почему неправильный рефакторинг может быть дороже его отсутствия, какие анти-паттерны ломают процесс и как не превратить улучшения в бесконечную переделку ради переделки. Объясняем, как сделать рефакторинг частью культуры команды: договориться с бизнесом, научить разработчиков видеть проблемные места, закрепить правила и поддерживать улучшения на уровне тимлидов, архитекторов и всей команды.

28.10.2026    431    Pavel791    0    

2

Рефакторинг и качество кода HighLoad оптимизация Системный администратор Разработчик Стажер 1С 8.3 Абонемент ($m)

Если к HTTP-сервису 1С обращаются сразу несколько программ, сколько запросов в секунду он успеет обработать? Я опубликовала простой HTTP-сервис на нашей "подопытной" конфигурации «Нано-УТ» (файловая база, Apache, без прав администратора) и нагрузила его скриптом на Python. Ответ: около 15-16 запросов в секунду, сколько бы клиентов ни обращалось одновременно. Запросы ждут своей очереди, и при 32 клиентах ответ приходит через 2 секунды вместо 64 мс. Заодно разобрала скрипт из первого варианта статьи: он «проверял» сервер, который отвечал по одному, и считал ошибки вместе с успешными ответами. В архиве исправленный скрипт, учебный сервер, HTTP-сервис для 1С и инструкция по запуску.

1 стартмани

23.10.2026    485    Ninel_S    3    

2

Рефакторинг и качество кода Разработчик 1С 8.3 Абонемент ($m)

Запустили Analyzer 1C 2.7.65 на промышленной конфигурации (596 модулей, 13 669 функций) и исследовали перегруженные функции (до 1887 строк), циклические зависимости и экран «Циклы» (кольцо из 64 модулей). Разобрали, почему популярные метрики (McCabe, связность) не представлены в продукте вендора, и составили пошаговый план разделения модуля. Привели проверенный платформой 8.3.27 пример до и после рефакторинга и выявили скрытую ловушку загрузки модулей с точкой в имени.

9 стартмани

19.10.2026    431    Ninel_S    2    

2

Рефакторинг и качество кода EDT СКД Разработчик 1С 8.3 1С 8.5 1С:Бухгалтерия 3.0 Бесплатно (free)

Одиннадцать граблей схем компоновки, которые не видно в конструкторе и не ловит EDT, на реальных отчетах БП КОРП. Формат числа задается в двух местах, и условное оформление варианта перебивает формат поля. Ресурс складывает штуки с часами, и помогает выражение «только когда единица одна». Ресурс пуст в детальных записях, параметр не появляется в шапке без userSettingID, valueListAllowed ломает границы периода, Остатки и СрезПоследних с параметром периода падают с «Несоответствием типов», title без xsi:type дает «Исключение XDTO» при загрузке. В конце код проверки схемы из файла до обновления базы, сводная таблица и чеклист.

16.10.2026    471    Konstmax13    2    

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    3375    Konstmax13    11    

11

Рефакторинг и качество кода Тестирование QA Разработчик 1С 8.3 Абонемент ($m)

Инженерный анализ влияния (Impact Analysis) при изменении общего метода в 1С:Предприятии: почему штатный поиск ссылок скрывает 99% зависимостей и как обратный обход графа вызовов выявляет 370 скрытых потребителей на глубине 3 уровней. В статье — верификация сквозной цепочки обмена с маркетплейсом; в архиве-компаньоне — автономный BFS-анализатор на Python, слепки графа и план регрессионного тестирования.

1 стартмани

12.10.2026    297    Ninel_S    0    

2
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. pm74 208 14.02.20 08:17 Сейчас в теме
Оо! про кодинг ! Сейчас станут набИгать.
Пошел за попкорном.
gigapevt; portwein; acanta; bulpi; json; PhoenixAOD; mrChOP93; YPermitin; +8 – Ответить
2. пользователь 14.02.20 08:18
(1) на старт, внимание... !!! :)
portwein; bulpi; awk; PhoenixAOD; +4 – Ответить
4. PhoenixAOD 62 14.02.20 08:25 Сейчас в теме
(2)
Прикрепленные файлы:
vakham; HAMAZ; user746566; bulpi; awk; wowik; YPermitin; +7 – Ответить
6. akpaevj 258 14.02.20 08:52 Сейчас в теме
(2) Count(*) =)
siamagic; json; DrAku1a; purgin; dvissarov5; bulpi; Jimbo; Painted; YPermitin; +9 – Ответить
9. nvv1970 14.02.20 08:58 Сейчас в теме
(6) очень длительная операция на больших таблицах и плохие последствия после вымывания кэша. Статистика СУБД - не универсально, не точно, но рулит.
Решение зависит от контекста.
akpaevj; YPermitin; +2 – Ответить
11. akpaevj 258 14.02.20 09:06 Сейчас в теме
(9) Безусловно, надо исходить из контекста задачи. Просто привёл пример общего, относительно быстрого способа получения количества строк. В ситуациях с колонками с разрешенным NULL Count(ColumnName) не даст ожидаемого результата, поэтому и написал Count(*). Первое - это подсчет значений, второе - подсчет строк.
bulpi; Jimbo; zqzq; YPermitin; +4 – Ответить
50. FesenkoA 61 14.02.20 10:55 Сейчас в теме
А почему уровни роста только вверх начиная с самого простого? Мы с коллегами балуемся иногда, придумывая максимально неоптимальные решения проблемы:

-1 уровень ("да я в этой 1С уже пол года данные вбиваю, не посчитаю что ли"):
Итого=0;
 Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
                |       Номенклатура.ссылка
		|	Сумма(1) КАК КоличествоЭлементов
		|ИЗ
		|	Справочник.Номенклатура КАК Номенклатура
                |СГРУППИРОВАТЬ ПО
	        |Номенклатура.Ссылка";	
	РезультатЗапроса = Запрос.Выполнить().Выгрузить();
        Для каждого строкаТЗ из РезультатЗапроса цикл
              Итого=Итого+РезультатЗапроса.КоличествоЭлементов;
        Конеццикла;
	
	Возврат Итого;
Показать


Коллеги, продолжайте)
vakham; unknown181538; user783353; portwein; igee12; bulpi; wowik; sogesti; acanta; +9 – Ответить
52. acanta 14.02.20 11:02 Сейчас в теме
(50) это не оптимально? Странно.. у меня работает.
YPermitin; +1 – Ответить
56. FesenkoA 61 14.02.20 12:03 Сейчас в теме
(52) Можно отобрать записи из ЖР по добавлении справочника нового. Можно собрать статистику открытия форм и сгруппировать. Можно сделать перекодирование справочника (установить коды) и взять Число(ПоследнийКод)
const000; ipoloskov; bulpi; acanta; YPermitin; +5 – Ответить
208. shard 293 21.02.20 11:36 Сейчас в теме
(56) если в состоянии собрать статистику открытия форм, то опыт уже есть, маловероятно что будет так реализовано. Про перенумерацию и максимальный номер уже ближе. Как вариант еще можно добавить реквизит "номер товара" в конфигурацию, заставить пользователя его заполнять, а для подсчета брать максимальный и вычеркивать неиспользуемые номера в цикле с обязательным применением найтиПоРеквизиту. Написал и самому страшно стало....
villyvonka; +1 – Ответить
223. FesenkoA 61 27.02.20 17:33 Сейчас в теме
(208) Есть такая штука "негативный опыт". Это когда человек научился но "не тому" или неправильно. А статистика открытия форм реализуется проще простого: создаем документ "открытие формы" с регистром накопления "открытые формы", остаточным. при открытии формы - создается документ с событием "открытие, добавление" и проводится, а при правильном закритии - проводится еще раз чтобы зафиксировать время закрытия. Ну а в конце месяца создаем документ "закрытие открытия форм" который делает минусовые движения по регистру... всего то
villyvonka; acanta; +2 – Ответить
210. DrAku1a 1803 24.02.20 14:47 Сейчас в теме
Это шедевр)) Но похоже на путь с 1 на 2 уровень.
211. Hatson 541 26.02.20 16:38 Сейчас в теме
(50)
Сумма(1) КАК КоличествоЭлементов


*Бздынь!*

Количество(1) КАК КоличествоЭлементов

Сумма(1) почему-то иногда вызывает переполнение чего-то там...
54. ImHunter 351 14.02.20 11:32 Сейчас в теме
Олдскульный товарищ, наверное, написал бы:
ВЫБРАТЬ КОЛИЧЕСТВО(1) ... 
silly; ivan811; e.kogan; Hatson; shard; ipoloskov; ice-net; vano-ekt; YPermitin; acanta; +10 – Ответить
61. sikuda 687 14.02.20 12:27 Сейчас в теме
(1) Огромный опыт (Oldschool) - Последний вариант расположенный в модуле с опцией Повторного использования возвращаемых значений ;)
e.kogan; kuzyara; gubanoff; YPermitin; acanta; +5 – Ответить
70. vano-ekt 146 14.02.20 12:55 Сейчас в теме
ВЫБРАТЬ
	КОЛИЧЕСТВО(0) КАК Элементов
ИЗ
	Справочник.Номенклатура


а лучше засунуть в экспортную функцию, куда передавать имя таблицы, чтоб код не повторять
и в привилегированном режиме, мало ли какие RLS'ы включены :-D
"ВЫБРАТЬ 	КОЛИЧЕСТВО(0) КАК Элементов ИЗ "+ИмяТаблицы
almierm; ipoloskov; acanta; +3 – Ответить
209. DrAku1a 1803 24.02.20 14:43 Сейчас в теме
(70)
ВЫБРАТЬ
    КОЛИЧЕСТВО(*)
ИЗ
    Справочник.Номенклатура
ccapt; YPermitin; +2 – Ответить
104. rabid_otter 134 14.02.20 17:29 Сейчас в теме
1) почему эксперт будет лезть в базу, в обход SQL, используя ADO? зачем?
в результате запроса на сервак всегда возвращается 1 число, а не целый список.
зачем? просто потому что можешь? в газенваген такого разработчика.
если Linux используется на сервере приложений 1С? я бы не стал использовать платформозависимые инструменты.

2) мля, кэш на список номенклатуры, вы поехавшие что-ли?
кэширование вызывает массу проблем - показатель надо вечно обновлять делая select count(1) from table.
и что опаснее - посмотреть 1 раз кол-во номенклатуры, или после каждой записи номенклатуры проверять ее количество?
по-моему такое делать надо тупо on request, то есть в отчете.

3) никто еще не сказал что

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
ВыборкаДетальныеЗаписи.Следующий();

КоличествоЭлементов = ВыборкаДетальныеЗаписи.КоличествоЭлементов;

если агрегационную функцию count сделать на пустом справочнике она вернет null, и что будет в количество элементов? null? тут просто без комментариев. 10-часовая версия видео про "лох-пидр"
siamagic; taurus__; const000; bliver; veretennikoff; +5 – Ответить
106. VmvLer 14.02.20 17:34 Сейчас в теме
(104) вам имеет смысл подготовить доклад на конференцию, тема
Чтобы понять конец, ты должен понять начало.
(с)о-з-д-р
107. rabid_otter 134 14.02.20 17:36 Сейчас в теме
(106)
онять начало.
(с)о-з-д-р

лол шта?
108. пользователь 14.02.20 17:37
(107) уважаемый Vmvler Вам говорит, что нужно делиться знаниями на конференциях и проявлять там свой профессионализм :)
109. rabid_otter 134 14.02.20 17:39 Сейчас в теме
(108) ха, эти вещи не требуют глубоких спец. знаний.
214. Hatson 541 26.02.20 16:57 Сейчас в теме
(104)
если агрегационную функцию count сделать на пустом справочнике она вернет null, и что будет в количество элементов? null? тут просто без комментариев. 10-часовая версия видео про "лох-пидр"


Это сакральные знания! Потому что никто еще не видел пустых справочников "Номенклатура" в реальных компаниях )))
villyvonka; Andreeei; YPermitin; +3 – Ответить
216. rabid_otter 134 26.02.20 19:11 Сейчас в теме
(214) все это про защиту от дурака. она должна быть в коде по умолчанию.
3. Msyrkin 14.02.20 08:24 Сейчас в теме
"От большого ума лишь тюрьма да сума"
xantif_2000; Drivingblind; YPermitin; +3 – Ответить
5. sapervodichka 7634 14.02.20 08:46 Сейчас в теме
Ежедневно «стремясь к лучшему, мы часто портим хорошее» (У. Шекспир. "Король Лир"). Поэтому согласен с вами, надо ощущать состояние «вполне достаточно», и не стремиться совершенствовать код без необходимости. «Всегда недостаточно» - это уже горе от ума разработчика, с таким подходом во время не сдать работу.
Andreeei; xantif_2000; bulpi; zqzq; Drivingblind; davdykin; YPermitin; +7 – Ответить
8. пользователь 14.02.20 08:57
(5)
с таким подходом во время не сдать работу.


Внутреннего перфекциониста не все могу похоронить ))))
sapervodichka; +1 – Ответить
7. nvv1970 14.02.20 08:54 Сейчас в теме
Нужно было привилегированный добавить последнему, чтобы исключить лишение соединения.
А так - да. Простота - наше все.
igee12; sapervodichka; YPermitin; +3 – Ответить
10. wowik 896 14.02.20 09:04 Сейчас в теме
Грамоты будут?) я все стадии в жизни делал, мне пожалуйста выпишите все грамоты)
sogesti; YPermitin; +2 – Ответить
12. huxuxuya 409 14.02.20 09:24 Сейчас в теме
Ну вообще правильней тогда уж использовать модуль повторного использования.
И при удалении добавлении элементов справочника обнулять кэш повторно используемых.
YPermitin; +1 – Ответить
14. пользователь 14.02.20 09:27
(12) ОбновитьПовторноИспользуемыеЗначения?

Но она очищает ВСЕ сохраненные значения. Нужно будет к ней пригородить немного костылей, чтобы очищать кэш точечно.
Но вообще да, можно и до рабочего варианта довести.
74. awk 745 14.02.20 13:05 Сейчас в теме
(12)Она обнуляет только кэш текущего сеанса, другие сеансы не сбросятся...
13. Hans 3 14.02.20 09:27 Сейчас в теме
Вариант писать в константу, или регистр сведений при удалении или создании нового элемента это какой уровень?
YanTsys; YPermitin; +2 – Ответить
16. пользователь 14.02.20 09:31
(13) я бы отнес его к уровню между джуном и мидлом, потому что тогда такой тяжелый запрос для подсчета количества будет прям очень "нагибучим" в базе. Если, конечно, справочник достаточно большой.
15. brr 184 14.02.20 09:29 Сейчас в теме
После выпитой чашки кофе родилось такое решение:

Добавить 2 подписки на события, хранить количество номенклатуры в служебном регистре или константе, при добавлении элемента прибавлять количество, а при удалении уменьшать. Сделать отключаемым, при массовой загрузке отключать и количество пересчитывать самостоятельно.
slauter77; YPermitin; +2 – Ответить
17. пользователь 14.02.20 09:33
(15) вариант хорош. Но почему в регистр сведений, а не в регистр накопления тогда? В регистре накопления можно сделать агрегат на весь период и обновлять его для более эффективного получения данных. Регистр оборотный, т.к. остатки по этому показателю никому не нужны :)

Вот это костыли я описал!
18. brr 184 14.02.20 09:36 Сейчас в теме
(17) У нас уже есть рассчитанный итог. Хотя, вариант с оборотным регистром, да еще в режиме разделенных итогов, будет лучше себя чувствовать при параллельной работе пользователей.
YPermitin; +1 – Ответить
19. brr 184 14.02.20 09:39 Сейчас в теме
(18) Нет, оборотный регистр тоже плохо, нужен регистратор, всё усложняется.
YPermitin; +1 – Ответить
21. пользователь 14.02.20 09:40
(19) да, так оно. Один костыль на другой :)
55. YanTsys 12 14.02.20 11:55 Сейчас в теме
(21) Хммм... вроде речь про экспертов шла...
Идея о переносе затратного по времени процесса на отдельные операции идея правильная, но
есть варианты когда контрагенты могут появиться/исчезнуть в базе мимо вызова вашего кода который будет вести подсчет.
Поэтому мне больше всего нравится вариант с константой которая будет меняться в транзакции, или пусть даже ваш вариант с регистром, но при этом дополнительно должно вызываться регламентное задание по расписанию которое будет заполнять константу по запросу.
YPermitin; +1 – Ответить
98. brr 184 14.02.20 16:29 Сейчас в теме
102. YanTsys 12 14.02.20 16:52 Сейчас в теме
(98) Например при восстановлении битых ссылок при тестировании и исправлении базы подписки сработают?
148. brr 184 17.02.20 09:11 Сейчас в теме
(102)Нет, не сработают, такие случаи нужно обрабатывать отдельно
150. YanTsys 12 17.02.20 10:25 Сейчас в теме
(148) Про это я и написал в (55)
20. &rew 55 14.02.20 09:40 Сейчас в теме
Уровень "Просветление". Вывести список и отнять 1)))
Hatson; Alxesp; const000; xantif_2000; nixen88; bulpi; SlavaKron; Painted; wowik; YPermitin; +10 – Ответить
22. пользователь 14.02.20 09:43
(20) эта магия достойна отдельного выступления на Infostart Event в категории Highload!
silly; ccapt; &rew; +3 – Ответить
83. Painted 49 14.02.20 14:12 Сейчас в теме
(20) У большого справочника список можно выводить целый день. За это время новые элементы появятся.
84. пользователь 14.02.20 14:14
(83) &rew как-раз успеем подготовить доклад и выступить.
23. qwinter 686 14.02.20 09:50 Сейчас в теме
Для Oldschool логичнее выбирать пометку удаления, чем ссылку)))
24. пользователь 14.02.20 09:52
91. qwinter 686 14.02.20 14:49 Сейчас в теме
(24) Ссылка 16 байт, Пометка удаления 1 байт. Я конечно понимаю, что это всего лишь 1 мегабайт на миллионный справочник, но современную тенденцию к наплевательскому отношению к оперативной памяти не поддерживаю.
100. akpaevj 258 14.02.20 16:48 Сейчас в теме
(91) При подобных запросах dbengine будет читать данные с диска экстентами (если кеш пуст), так что разницы вообще никакой нет. А на клиент у вас и так всего одна запись вернется. Да и при не подобных запросах разницы не будет. Читаться будут либо страницы, либо сразу экстенты.
28. akpaevj 258 14.02.20 10:07 Сейчас в теме
(23) Для oldschool сразу надо обратить внимание на архитектуру, в ней явно что-то не так. Для ТОЧНОГО подсчета строк, (ничего другого в голову не приходит) можно использовать дополнительный, инкрементный bigint столбец с блокирующим чтением (для точного подсчета, вероятно, всегда придется жертвовать параллельностью). А вообще, я бы обратил внимание на архитектуру.
YPermitin; +1 – Ответить
25. Synoecium 794 14.02.20 09:55 Сейчас в теме
Что-то не понял, зачем сеньор бы городил регламентные задания с регистрами сведений. Решается легко по аналогии с параметрами сеанса. Заводим справочник с кэшированными значениями и признаком актуальности кэша (2 поля: Значение - произвольный тип и Актуальность - булево), на каждый показатель заводим предопределенное значение. Далее в общем модуле делаем функцию получения значения (в нашем примере количество строк в справочнике), если значение актуально, то выдаем его, если неактуально, то пересчитываем (тут будет задержка при первом расчете, зато никаких регл. заданий). Ну и осталось снимать флаг актуальности на значениии, просто вешаем обработку на события удаления и добавления, которое снимает флаг.
Все.
tulakin_s; YPermitin; +2 – Ответить
26. пользователь 14.02.20 09:58
(25) тут надо смотреть на контекст. Но если номенклатура добавляется / удаляется часто, то смысла в таком кэшировании будет мало, потому что оно часто будет неактуальным. Не будет стабильности в скорости получения данных. То оно быстро, то медленно. А если пересчет запущен параллельно от нескольких пользователей и так далее.

Но еще раз напоминаю, что тут нет контекста. Это шуточная статья ))))
27. Dach 440 14.02.20 10:05 Сейчас в теме
"God 'mode"

Идем в БД. Городим у таблицы справочника собственный primary key, который будет равен guid + № п/п. Пишем триггер и хранимку, которая обеспечит его заполнение. Запрещаем удалять из справочника элементы, разрешаем только добавлять и помечать на удаление. Далее селект 1 сорт бай пр. кей аск.

Тоже самое можно будет и на 1С, через подписку и отдельный индексируемый реквизит № п/п

Наслаждайтесь
slauter77; bulpi; wowik; user675801_ev1999; YPermitin; +5 – Ответить
29. пользователь 14.02.20 10:07
(27) добавлю.

Чтобы собственный первичный ключ не слетал при реструктуризации сделаем триггер, который при изменении платформенного ключа / его пересоздании - пересоздавал его с нашими настройками.

P.S. Вот это GOD MODE так GOD MODE.
31. Dach 440 14.02.20 10:15 Сейчас в теме
(29) да, это прям пушка)) короч полет фантазии ничем не ограничен, кроме бюджета )))
user811769; Drivingblind; YPermitin; +3 – Ответить
32. пользователь 14.02.20 10:16
(31) да. Бюджета и забористой травой :) (шутка)
103. YanTsys 12 14.02.20 17:21 Сейчас в теме
(27) Это скорее "Frick mode" :) особенно насчет " Запрещаем удалять из справочника элементы" кроме того если я правильно помню редактирование SQL базы напрямую это нарушение лицензии 1с...
30. psplehanov 14.02.20 10:13 Сейчас в теме
Уважаемый автор, вы забыли еще один распространенный уровень:
Не смог выполнить задачу!
shard; bulpi; EVKash; wowik; sogesti; +5 – Ответить
35. пользователь 14.02.20 10:16
(30) да, это мое фиаско :)

Что-то я не подумал, что так может быть.
46. psplehanov 14.02.20 10:34 Сейчас в теме
(35) Кроличья нора еще глубже.

Вспомнил еще уровень

Функция КоличествоНоменклатуры() Экспорт

Возврат 42;

КонецФункции
siamagic; Hatson; ipoloskov; nixen88; user811769; bulpi; wowik; uno-c; sogesti; +9 – Ответить
47. пользователь 14.02.20 10:38
(46) после такого хочется сразу включать это видео.

https://www.youtube.com/watch?v=1KPbAIjZXHE

Опять)
146. bpc222 2155 17.02.20 08:36 Сейчас в теме
(46)

:))))))))

Не, так это норм еще...
Более продвинутый уровень:

Функция КоличествоНоменклатуры() Экспорт

      Возврат ПолучитьСорокДва();

КонецФункции

Функция ПолучитьСорокДва()

      Возврат 42;

КонецФункции
Показать
kser87; ipoloskov; +2 – Ответить
60. uno-c 276 14.02.20 12:23 Сейчас в теме
(35)Вы скромничаете? )
В статье это между строк: ни один вариант не решает поставленной задачи в большинстве прикладных решений на платформе 1С
YPermitin; +1 – Ответить
36. acanta 14.02.20 10:17 Сейчас в теме
(30) это следующий после олдскульного?
Merkalov; +1 – Ответить
33. Климов Сергей 14.02.20 10:16 Сейчас в теме
Фух, дочитал до конца и меня попустило. Таки я олдскул а не миддл! :)
xantif_2000; KHoroshulinAV; zqzq; +3 – Ответить
37. пользователь 14.02.20 10:18
(33) это достойный уровень!
85. Painted 49 14.02.20 14:19 Сейчас в теме
(33)
Таки я олдскул а не миддл!
Хммм! А какая разница? Код одинаковый. ))
99. Климов Сергей 14.02.20 16:30 Сейчас в теме
(85) Разница принципиальная! Путь достижения цели может быть важнее цели :)
Движение — всё, цель — ничто! (с)
34. vadver 42 14.02.20 10:16 Сейчас в теме
А вот нифига не олдскульный код :)
Настоящий олдскул написал бы так:
	Если ВыборкаДетальныеЗаписи.Следующий() Тогда
	
	        Возврат ВыборкаДетальныеЗаписи.КоличествоЭлементов;
        КонецЕсли;
	
	Возврат 0;

А то мало ли что... :)
e.kogan; rabid_otter; babys; veretennikoff; bulpi; memb3r; user1025849; wowik; uno-c; Merkalov; acanta; YPermitin; +12 – Ответить
38. пользователь 14.02.20 10:18
40. dhurricane 14.02.20 10:23 Сейчас в теме
(34) (38) А вот и нет. Выборка из результата запроса всегда будет иметь ровно одну запись при любом наполнении справочника.
ccapt; uno-c; Климов Сергей; +3 – Ответить
41. vadver 42 14.02.20 10:25 Сейчас в теме
(40) Даже комментировать не буду
43. пользователь 14.02.20 10:26
(40) так это ж шутейка была)
44. dhurricane 14.02.20 10:28 Сейчас в теме
(43) Блин, прошу прощения, детектор шуток барахлит.
uno-c; YPermitin; +2 – Ответить
45. vadver 42 14.02.20 10:30 Сейчас в теме
(43) Некоторое время назад мне пришлось возиться с сильно замусоренным справочником номенклатуры в ERP (около 200 тыс. элементов), в котором еще при внедрении сильно ошиблись с единицами измерения, да еще их и дорабатывали потом...
Так что кому-как, а мне очень-таки жизненный пример ;)
48. Merkalov 12 14.02.20 10:45 Сейчас в теме
(40)
(34) (38) А вот и нет. Выборка из результата запроса всегда будет иметь ровно одну запись при любом наполнении справочника.

*пятница*
Для не очень быстрых как я поясню - выборка в ДАННОМ случае, при ТАКОМ запросе вернет всегда 1 строку, а не любая выборка из любого запроса...
ccapt; babys; pm74; YPermitin; acanta; +5 – Ответить
212. Hatson 541 26.02.20 16:47 Сейчас в теме
(34) покоробило )) А тем временем "скан тэйбл" уже случился и уже как бы пофиг на курсоры.

наилучший вариант был

Функция КоличествоСтрокВТаблице() Экспорт
Возврат 42;
КонецФункции
39. Dach 440 14.02.20 10:20 Сейчас в теме
С утра в пятницу под кофеек запрограммировать сферического коня в вакууме, ммм, что может быть лучше)) Спасибо за отличный пятничнопост, Юрий! Ну а теперь за рутину - ревьюить код джунов и разгребать авгиевы конюшни ошибок в нетленке
YPermitin; +1 – Ответить
42. пользователь 14.02.20 10:26
49. KapasMordorov 429 14.02.20 10:55 Сейчас в теме
Вспомнилась вот эта тема:
Задача с экзамена 1С Эксперт. (частично обсуждение было тут (форум Гилева))

Текст задачи:
"В базе работают 1000 пользователей. Есть регистр сведений в нем 100 млн записей. запрос select count выполняется t= 60 сек. Необходимо сделать так, чтобы данные были получены за t = 1c."

Можете ли Вы подсказать, пожалуйста, в каком направлении мыслить/искать? Преподаватель говорит, есть порядка 12 способов решить задачу.

https://forum.infostart.ru/forum9/topic172403/
62. пользователь 14.02.20 12:35
(49) не читал, спасибо. Надо глянуть)
116. user633166 12 14.02.20 19:29 Сейчас в теме
Рабочая пятница закончилась и иссякла река серьёзного обсуждения :) поста, созданного ради шутки. Спасибо автору - очень интересно наблюдать за такого рода дискуссией... В надежде, что в понедельник увижу продолжение и будет решение, вспомнившейся (49), из постановки которой непонятно, что под 12 способами понимал автор того вопроса, то ли просто получить решение (то, что собственно и в этой публикации является целью и где-то около того вариаций уже прозвучало) или 12 :), способных за секунду добиться желаемого результата? Во втором случае стоит найти его и "заставить" это сакральное знание распространить... Со своей стороны
могу предложить поискать решение по следующему алгоритму: разделить размер таблицы на размер записи.
YPermitin; +1 – Ответить
117. пользователь 14.02.20 19:31
(116) отличная идея. Конечно, точное количество записей мы не получим, но приближенное значение можно. Нужно только учесть BLOB'ы и др.

+. Это идея для статьи! :)
122. user633166 12 15.02.20 09:54 Сейчас в теме
(117) Если ставить "серьёзные" цели, пытаться найти "общее" решение :), то конечно требуется полный разбор, какая там структура записи. Но как мне кажется, что если есть "реальная" такая задача, то для оптимизации имеет смысл "упростить" структуру и все BLOB'ы и др. исключить (переместить в другую таблицу).
118. пользователь 14.02.20 19:34
(116) и спасибо на добром слове.

Честно сказать, я не ожидал такой бурной реакции. Я хотел показать, что часто при росте от джуна до сеньора разработчики используют фичи которые им интересны, но без которых можно было бы решить задачу проще и быстрее. Но интерес делает свое дело и решения в угоду творчеству и экспериментов значительно усложняется. Это не плохо, даже хорошо, но в меру.

Опытные же разработчики, которые весь этот путь уже прошли, решают задачу самым простым и быстрым способом, если этого не требуют другие условия.

Всем добра, кто прочитает этот комментарий :)
Чем меньше токсичности в ИТ, тем лучше! )))
DrBlack; e.kogan; +2 – Ответить
224. ccapt 13.03.20 22:56 Сейчас в теме
если подойти к заданию пунктуально, количество записей известно уже в постановке задачи. другой вопрос, как добиться задержки в одну секунду.
DrBlack; e.kogan; +2 – Ответить
225. e.kogan 1909 17.03.20 15:16 Сейчас в теме
(224) Сразу видно опытного человека )
DrBlack; ccapt; +2 – Ответить
226. ccapt 18.03.20 12:50 Сейчас в теме
и это не говоря о том, что нет никаких ограничений на то, что такое данные
51. DoctorRoza 14.02.20 11:00 Сейчас в теме
Судя по статье, я или Мидл или ОлдСкул!
wowik; YPermitin; +2 – Ответить
58. bugagashenka 206 14.02.20 12:09 Сейчас в теме
(51) ОлдМидл?)
YPermitin; wowik; +2 – Ответить
53. VmvLer 14.02.20 11:28 Сейчас в теме
думаю, скоро можно будет писать код с бодуна.

КолВоТвары = Даша.ОтветНаВопрос("Але гараж, скока у нас номклатур - быра посчитай");

и это будет самое оптимальное решение и не важно как она там посчитает.
user612295_death4321; bulpi; user605780_L.Alexander8; YPermitin; +4 – Ответить
57. bugagashenka 206 14.02.20 12:09 Сейчас в теме
Морозова не удовлетворит решение эксперта)) Так что это скорее претендент :D
59. uno-c 276 14.02.20 12:13 Сейчас в теме
Больше похоже на пятничный тест "кто первый заметит, что нет ни одного правильного решения".
YPermitin; +1 – Ответить
63. пользователь 14.02.20 12:39
(59) нет, нет. В статье ничего такого.

Вообще, все решения рабочие в тои или иной степень.
Но если бы мне такую задачу дали в реальности, то я бы спросил "А зачем?"
68. uno-c 276 14.02.20 12:52 Сейчас в теме
(63)Задача вполне себе практичная: посчитать количество SKU, с которым имела дело контора в своей практике. Например, чтобы в презентацию конторы вставить - чем больше SKU, тем лучше, главное что это правда. Но чтобы не соврать - решать надо именно поставленную задачу.
подсчитать количество элементов справочника "Номенклатура" в информационной базе
69. acanta 14.02.20 12:54 Сейчас в теме
С характеристиками или без?
(68)
71. uno-c 276 14.02.20 12:56 Сейчас в теме
(69)Хотя бы без групп. Элемент справочника создается методом СоздатьЭлемент()
173. maxlab 78 17.02.20 14:51 Сейчас в теме
(63)
в web application стандартная задача. Отследить реальные посещения сайта в течении дня по идентификатору сессии и времени, чтобы исключить накрутки и повторные заходы.
64. TODD22 20 14.02.20 12:43 Сейчас в теме
Oldschool
это "старая школа" а не "большой опыт".
65. пользователь 14.02.20 12:44
(64) имелось ввиду, что со старой школы был приобретен большой опыт.

Ничего плохого не хотел сказать.
67. TODD22 20 14.02.20 12:46 Сейчас в теме
(65)
имелось ввиду, что со старой школы был приобретен большой опыт.

"Старая школа" употребляется в значении "другая школа" которой сейчас нет.
Ничего плохого не хотел сказать.

Да я так просто по занудствовать.
66. acanta 14.02.20 12:46 Сейчас в теме
Ситуация, когда студент спрашивает у преподавателя есть ли технико-экономическое обоснование постановки задачи..
72. pm74 208 14.02.20 13:01 Сейчас в теме
... зачем я первым пост написал
YPermitin; +1 – Ответить
75. пользователь 14.02.20 13:07
(72) рукописи (комментарии) не горят :D
79. pm74 208 14.02.20 13:42 Сейчас в теме
(75) да нет
просто ответ на сообщение так на ИС настроен скобочка (номер поста ) скобочка

поэтому все "олдскульные" запросы валятся мне в сообщения
73. reset2 20 14.02.20 13:05 Сейчас в теме
Затестил. Вариант Junior и Middle по скорости одинаковые
-с одним сеансом
-70.000 элементов в справочнике
-Postgres
97. Jimbo 13 14.02.20 16:16 Сейчас в теме
(73) хотя бы от миллиона надо
76. awk 745 14.02.20 13:10 Сейчас в теме
Олд скул вообще отказался бы реализовывать, сославшись на инструменты разработчика в которых все уже есть...
VasDmi666; YPermitin; +2 – Ответить
77. alex_4x 88 14.02.20 13:15 Сейчас в теме
Мне почему то сразу пришла мысль, что нужно по типу объекта метаданных определить, бывают ли у исследуемого справочника группы, и в зависимости от этого добавлять или не добавлять условие на отбор элементов, ведь вопрос поставлен о количестве элементов, а не записей.
78. starik-2005 3309 14.02.20 13:26 Сейчас в теме
Правильно, "SEL ECT COUNT(*) FR OM t WHERE NOT isGroup" - это просто и без всякой лишней шелухи. И засунуть это в модуль с повторным использованием, чтобы не дергать лишний раз...
siamagic; acanta; +2 – Ответить
80. awk 745 14.02.20 13:48 Сейчас в теме
(78) И как отвечать на вопрос: "Почему у сергея 1 элемент, а у меня два"?
81. пользователь 14.02.20 13:54
(80) отвечать: так вышло. :)
ipoloskov; +1 – Ответить
96. starik-2005 3309 14.02.20 15:09 Сейчас в теме
(80) вчера у них три, а сегодня у меня пять - кто-то что-то добавил. Но количество элементов - это вряд ли то самое значение, которое нужно знать до двадцатой точки после запятой. Тут и приблизительного значения часто достаточно, ибо количество элементов в справочнике - постоянно изменяющееся значение. Если шеф спросил, сколько там у них товаров, то когда он прочитает почту с "идеальным" значением, реальное значение может даже не однажды поменяться...
82. JohnGalt 58 14.02.20 13:59 Сейчас в теме
Синьер даст задание джуну,

А эксперт запросит экспресс-обследование, или, например, докажет нецелесообразность получения этого результата, потому что нужно совсем другое.
86. awson 14.02.20 14:42 Сейчас в теме
Когда разработчик один в компании, и еще с небольшим опытом, то пишет как попало, главное что бы работало. Но когда он работает в команде разработчиков, то уже начинает обращать внимание на код более опытных коллег и начинает стараться писать красиво.
YPermitin; +1 – Ответить
88. пользователь 14.02.20 14:44
(86) подписываюсь под каждым словом!
90. VmvLer 14.02.20 14:48 Сейчас в теме
(86) "красиво" - это не то слово, которое определяет рост опыта элемента команды.
если тело старается писать "красиво", значит оно деградирует.
а вот "рационально" другое дело.
если член команды не видит разницы, то это упырь.
87. brr 184 14.02.20 14:44 Сейчас в теме
На самом деле опыт/длительность работы так себе параметр оценки разработчика, можно всю жизнь рисовать кнопки и не понять зачем в нормальных других языках все носятся с гетерами и сетерами. Или не рисовать кнопки, а вполне себе в одно лицо разрабатывать мощную конфигурацию и опять не понять зачем нужны гетеры и сетеры. :)
YPermitin; +1 – Ответить
89. пользователь 14.02.20 14:45
(87) +

Я в статье так и написал:
"Опыт работы - это не размер стажа в трудовой книжке, а совокупность навыков, приобретенных в процессе решения задач.".
92. brr 184 14.02.20 14:50 Сейчас в теме
(89)Прошу прощения, вынырнул из разработки и заново не перечитал статью.
93. awson 14.02.20 14:52 Сейчас в теме
94. VmvLer 14.02.20 14:58 Сейчас в теме
совокупность навыков - это "хромая кляча" которою за собой таскают и всем говорят, что это, мол,
ломовая лошадь, которая тянет все.

сейчас на практике нужна не старая лошадь, а умение быстро и надежно объездить молодого жеребца
или обломать рога горной лани. но когда клиент просит ковбоя это сделать, то он предлагает
свою клячу-медалистку и потом слышим лепет... не успели, отложили, закрыли.
95. acanta 14.02.20 15:04 Сейчас в теме
Мир конечно не совершенен, но он тоже... Оптимизируется....
101. maxlab 78 14.02.20 16:52 Сейчас в теме
Настоящий oldschool (т.е я :)) еще с оптимизировал бы код

&НаСервереБезКонтекста
Функция КолвоНоменклатуры()
Текст = "ВЫБРАТЬ
        |	Номенклатура.Код КАК Код
        |ИЗ
        |	Справочник.Номенклатура КАК Номенклатура"
;
Запрос = Новый Запрос;
Запрос.Текст = Текст;
Возврат  Запрос.Выполнить().Выгрузить().Количество();
КонецФункции
Показать
105. YanTsys 12 14.02.20 17:33 Сейчас в теме
(101) Судя по всему это Microsoft oldschool ... :)
ipoloskov; +1 – Ответить
110. maxlab 78 14.02.20 17:39 Сейчас в теме
(105) Не-а.... EXPLAIN в руки

Текст = "ВЫБРАТЬ
        |	ВЫРАЗИТЬ(Номенклатура.Код КАК Строка(1)) КАК Код
        |ИЗ
        |	Справочник.Номенклатура КАК Номенклатура";


Так еще оптмальней :)

Не знаю как у мелкософта , но на postgresql конструкция типа sel ect count(*) fr om ... тяжело работает. Проще к статистике обратиться Плюс-минус лапоть узнаешь количество записей в таблице
111. YanTsys 12 14.02.20 17:43 Сейчас в теме
(110) В смысле вы ищете способ максимально эффектно впустую растратить ресурсы? Причем тут oldschool? Это иначе называется...
112. maxlab 78 14.02.20 17:47 Сейчас в теме
(111) За все платить надо. Вопрос - чем жертвовать. Временем ожидания выполнения запроса или засира... оперативной памяти
113. YanTsys 12 14.02.20 17:49 Сейчас в теме
(110)
Не знаю как у мелкософта , но на postgresql конструкция типа sel ect count(*) fr om ... тяжело работает. Проще к статистике обратиться Плюс-минус лапоть узнаешь количество записей в таблице


вы серьезно думаете что перебросить миллионы записей на клиента, загрузить их в таблицу значений, после чего посчитать быстрее чем sel ect count(*) fr om на сервере??? Вы так шутить изволите?
114. maxlab 78 14.02.20 17:54 Сейчас в теме
(110) Ну так... пятница же :)
А если серьезно, можете попробовать. Иногда говнокод работает лучше чем методики от Гуру :)
115. YanTsys 12 14.02.20 17:57 Сейчас в теме
(114) Провокатор :)
Я активно пользуюсь
Запрос.Выполнить().Выгрузить()

но надо же понимать пределы допустимого безобразия :)
119. Newcomer 7 14.02.20 22:50 Сейчас в теме
(101)
Умещать логику в одну строку, мысль правильная, но "Возврат Запрос.Выполнить().Выгрузить().Количество();" - это лютый быдлокод)
Далеко еще до олда, вот так правильно: "Возврат Запрос.Выполнить().Выгрузить()[0].КоличествоЭлементов" (не меняя изначального запроса и игноря пустоту)
В 2000 разовом цикле 8 секунд против 6 минут на 70 000 элементах)
143. bugagashenka 206 17.02.20 05:37 Сейчас в теме
(101) о господи, это не оптимизация! Это хрень полная! Зачем всасывать в хост весь объем данных, если у ВыборкаИзРезультатаЗапроса есть метод количество, который гораздо лучше отработает. От Вашего олдскула у меня свело скулы. Без обид, но я бы такой код не показывал никому.
152. maxlab 78 17.02.20 11:41 Сейчас в теме
(143)
Прозевал Вашу реплику... Отвечу так. Истинный ТРУ Олдскул знает о чем Вы говорите. Но Метод Вами предложенный конечно дает выигрыш по времени извлечения результат (1690 ms), но гораздо затратней по ресурсам. И в хост ничего не сосется :) На клиент возвращается примитивное значение. А что творится в рамках кластера, олдскульного 1С-нига не должно интересовать. Бикоз, если одноэсниг начнет разбираться а что же там на самом деле происходит, он быстро соскочит на ДОТ.НЕТ например.
153. bugagashenka 206 17.02.20 11:47 Сейчас в теме
(152) То есть Вы и правда считаете, что метод Выгрузить не засасывает в хост результат полностью?
154. maxlab 78 17.02.20 11:50 Сейчас в теме
(153)
А мы в какой парадигме дискуссию ведем? И что Вы подразумеваете под хостом?
156. bugagashenka 206 17.02.20 11:50 Сейчас в теме
157. maxlab 78 17.02.20 11:54 Сейчас в теме
(156)
Ну конечно, rphost получит выборку. Это же очевидно! Не очевидно почему загрузка процессора в этот момент прыгает под 80%. Сам удивился.
155. bugagashenka 206 17.02.20 11:50 Сейчас в теме
(152)Допустим, Вы подняли условные 50Гб данных. Скуль считал часть страниц и передал их серверу 1С. Сервер 1С бережно сложилэти данные во временный файл и так, пока не закончится передача от СУБД. Потом метод Выбрать считывает порциями результат и постепенно его подгружает. Метод Выгрузить сразу размещает в памяти хоста весь результат. Именно поэтому Вы можете увидеть любую строку выгруженного результата, а выбранного только последовательным чтением
158. maxlab 78 17.02.20 12:08 Сейчас в теме
(155)
Выше ответил. Но все равно интересный результат.
При
Возврат Запрос.Выполнить().Выгрузить().Количество();
имеем
2464ms 15% 47%
при
Возврат Запрос.Выполнить().Выбрать().Количество();
1700ms 90% 45%
Время, rphost,pgsql
159. bugagashenka 206 17.02.20 12:18 Сейчас в теме
(158)как Вы меряете процессор? База изолирована? Нагрузка на сервере SQL или 1С?
161. maxlab 78 17.02.20 12:22 Сейчас в теме
(159)
Чисто визуально, в момент отработки запроса. Для контроля монитор ресурсов и утилита top. Постгри и сервер 1С на одном железе.
164. bugagashenka 206 17.02.20 12:43 Сейчас в теме
(161)хм, вот чисто из поиска истины попробую дома повторить тест. Странно, что процессор нагружается, там же по сути считывание одного и того же файла с диска. И даже число логически не может быть сильно разного рещультата по процессору
165. maxlab 78 17.02.20 12:48 Сейчас в теме
(164)
О сколько нам открытий чудных
Готовит просвещенья дух

Интересно будет взглянуть на Ваши замеры
168. bugagashenka 206 17.02.20 13:00 Сейчас в теме
(165)постараюсь сделать как можно больше данных, чтобы сравнить
175. bugagashenka 206 17.02.20 18:06 Сейчас в теме
(165) что я могу сказать, Вы были правы насчет потребления процессора. В то же время память оч

Текст запроса


Сюда положил счетчики оборудования, если кому интересно. Смотреть %Загруженности процессора и байт исключительного пользования rphost1800
Интересная статистика получилась, никогда не мог бы подумать, что экономя память приходится жертвовать процессором. Может кто из экспертов подскажет.

17.02.2020 21:58:20 Выгрузить().
17.02.2020 21:58:34 Выбрать()
https://dropmefiles.com/gNPgv

П.С. Виртуалка не настроена и используется как временная песочница и дал я ей только 3 ядра, чтобы на оставшемся смотреть котиков в интернете.
176. maxlab 78 17.02.20 19:39 Сейчас в теме
(175)
Спасибо за проделанную работу!
В заключение пятничного флейма... Не могу согласится с мнением коллег, что длина стажа не имеет значения. Когда 20 лет помедитируешь на творение 1С , аж с самого основания, такие нюансы начинаешь спинным мозгом чувствовать, без всяких рекомендаций от 1С. Даже если и отстаешь от модных фишек платформы. И не всегда, ТО, чему учат в УЦ, нужно слепо применять на проектах в виде гуд практикс
e.kogan; YPermitin; +2 – Ответить
185. bugagashenka 206 18.02.20 05:53 Сейчас в теме
(176) Кстати, обратил внимание, что всплеск нагрузки на процессор составляет порядка 1-2 секунд из 11, которых выполнялась выборка и подсчет. При этом пик находится как раз в момент освобождения памяти.
160. bugagashenka 206 17.02.20 12:20 Сейчас в теме
(158) И можно про нагрузку на rphost, что конкретно имеется ввиду? Хост нагрузил ядро на 90%, все ядра на 90%?
162. maxlab 78 17.02.20 12:24 Сейчас в теме
(160)
Судя по кривым в мониторе, грузится одно ядро на 90%
120. maxlab 78 14.02.20 22:59 Сейчас в теме
(119)
Сейчас проверим :) у кого длиннее олдскульней :) У меня уже 975000 позиций нарандомлено в номенклатуре
121. maxlab 78 15.02.20 00:52 Сейчас в теме
Итак, результаты измерений при 1072000 записей в спр Номенклатура
Железо I7-2600 4 физических ядра, память 16 гектар, сервер 1С и Постгрес 9,2 #изкаропки. Ничего не тюнил. ОС Центос - 7
Запрос ВремяИсполнения Загрузка rpHost Загрузка PostgreSQL
#1 485ms 10% 96%
#2 2464ms 15% 47%
#3 2393ms 34% 48%

Где Запрос #1 - олдскульный от автора
Запросы #2 и #3 - ТРУ олдскульные... можно даже сказать ЛАМПОВЫЕ от меня ... сейчас объясню почему.
Не смотря на то что результат запроса #2 был получен за 2464мс (5раз медленней чем #1), были сэкономлены ресурсы сервера для других
,более важных операций. Экстаполируйте такие ситуации на продакшен эксплуатацию системы. Когда Вы побежите за новым железом ? :)
Замеры средние, каждая выборка по 10 раз. Расход оперативы 25% во всех случаях. Даже не шелохнулось.

Вывод - хоть и пятничная тема, но следует задуматься за счет чего делается оптимизация и нужна ли она повсеместно. За все приходится платить. Или временем или деньгами на гонку вооружений.
123. logarifm 1133 15.02.20 13:26 Сейчас в теме
Не успел ((( к сожалению прочесть в пятницу но думаю сегодня засчитается.
На самом деле информативненько было посомтреть особенно, что относилось к АДО. Ну я с Вами могу поспорить конечно. Вы забыли о главном это какой же реально объем у справочника номенклатуры и какой у него прирост. Поэтому эффективность запроса у мидла вполне адекватная. Во-вторых я сомневаюсь, что эксперт такое бы городил огород с АДО! А с регистром кэшей тоже не так все сладко - его ведь надо еще и записать тем же самым раставить блокировки. Ну да конечно можно записывать в нерабочее время и бла-бла... Не ну однозначно я не говорю, что я эксперт но однозначно запрос 1с будет выигрывать не только в быстроте но и простоте своей значимости. Более того раз уж так хочется его можно разместить в кеш вызова повторного использования. Все зависит от прироста справоника. Это есть над чем поговорить - простая тема, а у дельных спецов я думаю вызовет массу споров. Вот меня заинтриговала Ваша позиция...

З.Ы. Забыл уточнить еще время соединения очень интригующая штука и тут вы с АДО можете проиграть! Выыгриш может и будет только надо понять на каком количестве позиций, а это зависит от многих факторов. Железа , загрузка системы, состояне и актуальнсть статистики . много факторов и каждый раз может же меняться. Так что я Уважаю я Вас как профессионала своего дела но все же как мне кажется это притянуто за уши. Извените если бросил камень в Ваш огород.
acanta; YPermitin; +2 – Ответить
124. пользователь 15.02.20 13:36
(123) хайп улёгся, можно спокойно ответить :)))

Моя позиция проста: решение должно быть рабочим и не усложнять жизнь сопровождению и разработке. Так что все эти решения имеют право на жизнь. Я бы поспорил только с решением джуна :)

Я человек простой - решаю задачи в зависимости от условий, архитектуры. А спорить о реализации - это холивар. Не ко мне :) Коллеги выше много наобсуждали, это к ним. Я бы выбрал простое решение.

Выше отвечал, продублирую здесь:

Честно сказать, я не ожидал такой бурной реакции. Я хотел показать, что часто при росте от джуна до сеньора разработчики используют фичи которые им интересны, но без которых можно было бы решить задачу проще и быстрее. Но интерес делает свое дело и решения в угоду творчеству и экспериментов значительно усложняется. Это не плохо, даже хорошо, но в меру.

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

Всем добра, кто прочитает этот комментарий :)
Чем меньше токсичности в ИТ, тем лучше! )))
SirYozha; +1 – Ответить
125. acanta 15.02.20 13:40 Сейчас в теме
Насчет роста справочников это к внедренцам. При необходимости можно и каждую поставку приходовать отдельной позицией номенклатуры и на каждую продажу заводить нового клиента. Реально такие генераторы справочников были и не раз. Статистика в таких случаях не очень нужна, а вот адо хорошо помогло бы в отчетах за несколько лет.
В принципе партии-серии-договора-соглашения так и работают.
126. logarifm 1133 15.02.20 13:42 Сейчас в теме
Я бы точно сделал запросом и забил на все!
127. lunjio 67 15.02.20 13:52 Сейчас в теме
Не совсем корректный заголовок, автор скорее всего рассматривает частный случай и заголовок должен звучать - Как может … а не утверждающе. Надеюсь это просто фантазии, а не случай из жизни, ибо получать статистику из кэша или напрямую из БД, уже пребор. Все очень относительно, кто-то сразу может понимать, что запросом на количество получать нужно исключая группы и т.п, кто-то за все время работы так и будет пользоваться что-то типа выборкой. Вывод - не надо подводить всех под какую-то градацию и т.п, можно превратиться в Белокаменцева )
128. пользователь 15.02.20 13:56
(127) см. мой комментарий выше.
130. lunjio 67 15.02.20 14:13 Сейчас в теме
(128)
Вы можете своей статьей вводить новичков в заблуждение ) которые будут стремиться к усложнению и заморочкам, вместо простоты и чистоты. Комментарии не все читаю, просто на мой взгляд заголовок статьи и преподносимое содержимое, должно звучать по другому - как может меняться и далее в этом духе. В конце же, сделать заключение, что-то типа не стоит стремиться к вариантам типа кэширования и получения через статистику, поэтому и поэтому. Это мое мнение. Белокаменцева никто не оскорблял, вы так решили)
131. пользователь 15.02.20 14:15
(130) Надо читать статью, а не только заголовок. Тут не желтая пресса.

Ничего не понял, но ладно.

Удачи :) и хорошего дня)
133. lunjio 67 15.02.20 14:39 Сейчас в теме
(131)
Я статью прочитал, пытаюсь объяснить вам свою точку зрения, попытаюсь еще раз:
Ваша градация по количеству опыту и принимаемому решению, это чисто ваша фантазия/видение, на деле, все может различаться, причем кардинально. некоторые программисты могут сразу понимать что к чему, кто-то так и писать такие задачи на уровне выборке. Варианты с кэшом и получением из БД, извиняюсь, чистая фантазия, очень удивлюсь, если встречу такие решения в жизни, должны быть весомые обоснования. Тоесть в вашем видении с опытом у человека меняется стиль кодирования, на каком-то уровне он заморачивается, а потом становится Буддой 1С, к сожалению это не так. Как-то пришлось проводить собеседование одного товарища, 10 лет опыта, дал задание на запрос, где участвовали перечисления, он обращался в перечислениях не по ЗНАЧЕНИЕ() а по Индексу или как там это поле в запросе. Все очень относительно, поэтому на мой взгляд, не стоит проводить такую градацию.
logarifm; YPermitin; +2 – Ответить
134. пользователь 15.02.20 14:58
(133) Все понял, вопрос нет :)
135. lunjio 67 15.02.20 15:01 Сейчас в теме
(134)
Все понял, вопрос нет :)

Надеюсь идею поняли, почему я считаю статья должна говорить о возможном изменении стиля кода, а не утверждать именно такую эволюцию программиста.
Спасибо, вам тоже хорошего и удачного дня )
136. пользователь 15.02.20 15:07
(135) Проблема в том, что статья была в виде шутки и с так и преподносилась. Но все пропустили это мимо и начали серьезное обсуждение.
В том числе и Вы.

Пятница выдалась веселой.

Поэтому у меня и нет вопросов.
129. пользователь 15.02.20 13:57
(127) а Белокаменцева то за что оскорбили?
149. logarifm 1133 17.02.20 10:14 Сейчас в теме
(129)Пургу пишет - ищет хайп. Вначале народ читал эту публицистику в итоге понял, что это ересь какая-то!
132. acanta 15.02.20 14:26 Сейчас в теме
Однажды слышала фразу о том, что база при внедрении была организована так, что теперь из нее невозможно получить никакую осмысленную информацию и требуется другое внедрение. Это не просто плохой код или junior, это провал.
Это конечно, другая сфера, к статье относящаяся слабо, по разному оцениваются последствия. Дешевле или правильнее или интереснее или привычнее сделать другую базу той же УТ 11, где будет по характеристикам и с партнерами. Или обработками перекроить? Или новые приходы-расходы по другому вводить?
И после нескольких таких изменений могут попросить сформировать отчет за несколько лет.
АДО для таких случаев вполне адекватный выбор инструмента.
Это тоже уровни, но уже консультантов.
YPermitin; +1 – Ответить
137. pm74 208 15.02.20 15:19 Сейчас в теме
(0) вижу правильно наванговал

понабежали
acanta; YPermitin; +2 – Ответить
138. пользователь 15.02.20 15:22
(137) я бы даже попросил прогноз курса валют и акций у Вас и доверился бы ему :D
139. pm74 208 15.02.20 15:26 Сейчас в теме
(138)
попросил прогноз курса валют и акций

могу
зы. напоследок выскажусь по сабжу
пофиг какой код абсолютно, важнее идея которую он реализует
140. user633166 12 16.02.20 20:26 Сейчас в теме
(139) я бы всё-таки уточнил :) решает-ли он поставленную задачу
145. pm74 208 17.02.20 08:35 Сейчас в теме
(140)

ну должен решать - само собой

вот на фига вообще номенклатуру считать ?
141. MainUser1C 1 16.02.20 20:35 Сейчас в теме
Я чет не увидел самого ленивого варианта.
Почему бы не отдать все считать серверу SQL как самому производительному в нашей цепочке, при этом код остается доступным и понятным для поддерживания даже джунами.
&НаКлиенте
Процедура Посчитать(Команда)
    ПосчитатьНаСервере();
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ПосчитатьНаСервере()
        //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
    
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   КОЛИЧЕСТВО(Номенклатура.Ссылка) КАК Количество
        |ИЗ
        |   Справочник.Номенклатура КАК Номенклатура";
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        // Вставить обработку выборки ВыборкаДетальныеЗаписи
        Сообщить(ВыборкаДетальныеЗаписи.Количество);
    КонецЦикла;
    
    //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА

КонецПроцедуры
Показать
maxlab; acanta; +2 – Ответить
142. maxlab 78 17.02.20 00:20 Сейчас в теме
(141)
Плохо смотрели... Я не поленился и все "олдскульные" способы проверил на 1005000 записей. По скорости извлечения результата победил Автор! Но на моей тестовой площадке PostgreSQL кратковременно уперся рогами в землю. Поэтому в выигрыше экспермент #2! Так как, не смотря на потерю скорости в 5 раз, были сэкономлены ресурсы сервера для других, не менее важных параллельных! запросов/транзакций :) Только истинные мастера думают о high_load. Но! Судя по Вашему кодингу - Вы настоящий ТРУ Олдскул... круче чем я, даже! Вы единственный, кто догадался заюзать конструктор запросов с обработкой результата.
Хорошего настроения до следующей пятницы. Может еще кто сможет нас развеселить :)
acanta; bugagashenka; +2 – Ответить
144. bugagashenka 206 17.02.20 05:43 Сейчас в теме
Пять плюсцов этом господину за
(142)
Вы единственный, кто догадался заюзать конструктор запросов с обработкой результата.
180. MainUser1C 1 17.02.20 23:26 Сейчас в теме
(142)
странно, будет под рукой сервер протестирую на скорость вариант 2 и мой.
Что же касательно конструктора, то тут пример, как написав одну строчку кода в кратчайшие сроки можно получить результат понятный и доступный для всех. Вот уж олдскулом тут пахнет мало))))))))))
182. maxlab 78 17.02.20 23:33 Сейчас в теме
(180)
Есть другая идея. Взять реальную задачу из ОУ и выполнить ее в самых жестких, с точки зрения оборудования, условиях. И критерием настоящего олдскульного решения будет минимальное время проведения на списание товара, при минимальном потреблении ресурсов процессора. На одном физическом ядре с оперативой в 4 gb. Тактовая частота процессора не имеет значения, потом апроксимируем на время при наличии нескольких решений. в качестве sql сервера - постгрес. Вот это будет веселуха! Могу подкинуть задачку из 1С-Специалист, доведенную до реальных боевых условий
183. MainUser1C 1 17.02.20 23:43 Сейчас в теме
(182)
Не ну если говорить о самых жестких условиях - то это файловая база)))))
И это, мне как то за всю деятельность ни разу не приходилось писать ОУ специалиста на реальных задачах. Зачастую проще предложить шо нить базовое и доработать.
184. maxlab 78 17.02.20 23:47 Сейчас в теме
(183)
Файловая не пойдет. Не те масштабы. Только PostgreSql - только хардкор ;) Не забываем что мы думаем о highload на зачуханном железе 10 летней давности. Обычно у подавляющего большинства клиентов такое стоит
147. user604727 17.02.20 08:54 Сейчас в теме
Только собрался писать ироничный, полный сарказма и едких сравнений ответ про программиста №3 и №4, но вовремя увидел код №5. Поздравляю себя и всех, кто рассуждал также, готовясь быть забаненным. Мы - программисты с огромным опытом.
151. SlavaKron 17.02.20 10:51 Сейчас в теме
(147) Я б почитал
ироничный, полный сарказма и едких сравнений ответ
163. Skopoxod 17.02.20 12:30 Сейчас в теме
А где вариант "не придумал как загуглить задачу и посчитал элементы вручную"?
166. maxlab 78 17.02.20 12:52 Сейчас в теме
(163)
А это ваабще высший пилотаж с точки зрения highload. Прикидываете, миллион пользователей посчитали вручную без взаимных блокировок и прочей мути. А олдскул сэкономил свое время на девочек и 10000$ на новый 32 ядерный проц
167. Indgo 433 17.02.20 12:54 Сейчас в теме
Мамонты пишут - выполнить().выгрузить(). Так как мамонты не верят рекомендациям фирмы 1С
Так же Папонты - всегда используют isnull(..).
169. maxlab 78 17.02.20 13:11 Сейчас в теме
(167)
Не важно как пишут мамонты и папонты. Важно под что заточен человек который называет себя 1С девом. In my opinion, одноэсник должен эффективно решать задачи предметной области используя инструмент под названием платформа 1С. А все что связано с оптимизацией, индексами и прочей ерундой пусть занимается команда Нуралиева, если хочет устоять на рынке. Еще раз повторюсь, если одноэсник начнет разбираться со всеми потрохами что происходят "позади сцены" - он быстро придет к выводу что пора валить.
170. Indgo 433 17.02.20 13:13 Сейчас в теме
(169)
А все что связано с оптимизацией, индексами и прочей ерундой пусть занимается команда Нуралиева, если хочет устоять на рынке.

Ниче не понял, но звучит как то не айс.
Вообще команда Нуралиева - это лишь вершина айсберга. Каждый разраб 1С - есть ячейка судна общества Нуралиева, который непрерывно борется с косяками 1С - чтобы судно не затонуло
171. VmvLer 17.02.20 13:23 Сейчас в теме
(170) внутри айсберга замороженные динозавры в анабиозе и если айсберг отнесет в теплые воды - они выйдут утолит свой голод?
172. maxlab 78 17.02.20 13:38 Сейчас в теме
(170)
Каждый разраб 1С - есть ячейка судна общества Нуралиева, который непрерывно борется с косяками 1С - чтобы судно не затонуло


Вот это и есть главная проблема.

Вспоминается капитан Врунгель. Как вы яхту назовете, так она и поплывет
174. paramedic2 17.02.20 17:18 Сейчас в теме
Простите, но у меня глупый вопрос: а разве на *nix есть COM объекты?
177. пользователь 17.02.20 21:00
(174) нет, нету. Там нужно использовать альтернативные пути. Все от задачи зависит.
178. paramedic2 17.02.20 22:09 Сейчас в теме
(177) Ну тогда гнать надо эксперта поганой метлой за жесткую привязку к винде.
Давно уже 1с слезла с этой иглы и в 2020 году решать задачи методами 2001-2003 годов для эксперта - верх безграмотности.
179. пользователь 17.02.20 22:11
(178)
Прикрепленные файлы:
user774630; +1 – Ответить
181. Tarlich 89 17.02.20 23:29 Сейчас в теме
а что, код такой уже не работает
нн=0;
Пока выборка следующий() цикл
нн=нн+1 ;
-))
186. Tavalik 3465 18.02.20 07:38 Сейчас в теме
Ого! Я олдскул! :)

Так через все "велосипедные" методы уже проходил.

Спасибо за статью, повеселили!
YPermitin; +1 – Ответить
187. пользователь 18.02.20 08:11
(186) спасибо :)

Хорошо, что коллеги с юмором еще есть на просторах сообщества :) А то ведь выше люди очень серьезные в комментариях )))
188. maxlab 78 18.02.20 10:50 Сейчас в теме
(187)
Требую продолжение банкета! :))

Предлагаю Вам поддержать инициативу пенсионера в IT следующего содержания;

- Взять реальную задачу из ОУ и выполнить ее в самых жестких, с точки зрения оборудования, условиях. И критерием настоящего олдскульного решения будет минимальное время проведения на списание товара, при минимальном потреблении ресурсов процессора,памяти и т.д. На одном физическом ядре с оперативой в 4 gb. Тактовая частота процессора не имеет значения, потом апроксимируем на время при наличии нескольких решений.
В качестве sql сервера - постгрес. Вот это будет веселуха!
Могу подкинуть задачку из 1С-Специалист, доведенную до реальных боевых условий.
Файловая система не пойдет. Не те масштабы. Только PostgreSql - только хардкор ;)
Не забываем что мы думаем о highload на зачуханном железе 10 летней давности. Обычно, у подавляющего большинства клиентов такое стоит.
YPermitin; +1 – Ответить
189. пользователь 18.02.20 11:19
(188) звучит весело, но это не Highload :)
190. maxlab 78 18.02.20 11:55 Сейчас в теме
(189)
Ну вот... опять конфликт поколений! ;)) Тогда что-же по Вашему Highload, как если не возможность подключиться к кофемолке на 386SX процессоре с 640кб озу и MFM-овским винтом на 20Гб 10000 пользователям и осуществить одновременно, параллельно списание товара из регистра накопления?
191. пользователь 18.02.20 11:59
(190) да почему конфликт )

Для меня Highload - это много пользователей, высокая нагрузка на все компоненты системы, мониторинг, большая чувствительность к ошибкам в части производительности.

Кофемолка -- ну это не высокая нагрузка. 10000 на кофемолке не взлетят, ядер не хватит))))
192. maxlab 78 18.02.20 12:06 Сейчас в теме
(191) Ну... Вы рассказали о тех же фаберже, только в профиль. Дело в том, когда, 30 лет назад, нас учили искусству обработки данных, профессора говорили нерадивым студентам - Если вы научитесь нырять в пустой бассейн (аналогия с кофемолкой), то в наполненный водой (то о чем Вы говорили) вы будете нырять как чемпионы.
193. пользователь 18.02.20 12:16
(192) не согласен с таким подходом. Это как говорить пилоту АН-2, что раз умеешь на этом самолете летать, то и с Боингом справишься.

Все таки задачи за 30 лет изменились и проблемы уже другие. В противном случае этот сайт был бы посвящён разработке на ASMе :)
194. maxlab 78 18.02.20 12:25 Сейчас в теме
(193) Это расхожее заблуждение молодого поколения. ;) Вспоминается анекдот про молодого и старого быка. Из-за цензуры не буду озвучивать. Представляете, как раз пилот кукурузника справится с Боингом. Потому что он теорию и практику полета впитал с молоком матери. А эта теория одинакова применительно к любому летающему аппарату. Просто у Боинга в кабине больше разноцветных лампочек и автопилотов (конструкторов форм и запросов, применительно к нашему предмету дисскусии)

pS. Главное - это понимание что все старо как мир. Проблемы тогда и сейчас - одни и те-же. Технологические обертки разные, и не всегда то что СЕЙЧАС , эффективней чем то что было ТОГДА. Это философский вопрос.
195. пользователь 18.02.20 12:30
(194) спорить дальше не буду :)
Остановлюсь на позитивной ноте.

Добра Вам!

Пора работать.
196. maxlab 78 18.02.20 12:33 Сейчас в теме
199. TODD22 20 18.02.20 16:52 Сейчас в теме
(194)
Представляете, как раз пилот кукурузника справится с Боингом.

Дилетантское мнение диванного эксперта. У нас на новых самолётах пилоты мало того что обучаются в специализированном учебном центре производителя, летать именно на конкретной модели, так ещё и пол года летают с инструктором имеющем большой налёт именно на этой модели.
YPermitin; +1 – Ответить
200. maxlab 78 18.02.20 18:04 Сейчас в теме
(199)
Вы,мил человек, также далеки от авиации... как я от дивана. Позвольте полюбопытствовать, куда делась целая ватага пилотов гражданской авиации почившего в бозе Советского Союза, когда массово списывали Тушки, Яки и те же кукурузники? Пральна, часть из них пошло на переобучение. Только вот их путь к сертификации пилота по международным правилам был значительно короче и легче, чем нынешнего курсанта. Так шта... Вы не поняли главную мысль - Квалификацию или навык проще восстановить и прокачать на новую модель, нежели приобрести с нуля и прокачать. У старой гвардии (с опытом) однозначно это быстрей получиться.
YPermitin; +1 – Ответить
201. TODD22 20 18.02.20 21:38 Сейчас в теме
(200)
Вы,мил человек, также далеки от авиации...

Ага... далёк, через два стола от меня сидят....
Пральна, часть из них пошло на переобучение.

Именно, переобучились и не за два дня... по этому говорить что каждый пилот кукурузника может управлять боингом это не более чем мнение диванного эксперта.
З.Ы. не всяких пилотов берут. Только тех которые летали на определённом классе самолётов. Это даже с условием переобучения.
Кто доверит пилоту "кукурузника" какой нибудь "гольфстрим" стоимостью 50+ млн долларов.
202. maxlab 78 18.02.20 23:04 Сейчас в теме
(201)
Эх...злой Вы... и самоуверенный. Моя дискуссия с автором вообще не о кукурузниках была. Это всего лишь аллегория. А Вы встряли и не по теме пургу погнали.
https://www.mintrans.ru/mt-heroes/parikoza.html. И таких много... Пересядьте на один стол поближе.
204. TODD22 20 19.02.20 15:03 Сейчас в теме
(202)
И таких много...

Так же как и тех кто разбил боинг. Просто им звезду героя не дают и статьи в интернете не пишут.
197. Cvetic 309 18.02.20 15:59 Сейчас в теме
Я как консультант открыла бы справочник номенклатура - кнопка Еще - Вывести список и посмотрела бы количество строк ))))
shard; ipoloskov; YPermitin; +3 – Ответить
198. пользователь 18.02.20 16:26
(197) отличное решение! :)
203. Power_0N 49 19.02.20 09:50 Сейчас в теме
(197)
Это займёт больше 1с
205. chernov.gigansk.ru 20.02.20 08:00 Сейчас в теме
Функция КоличествоЭлементовСправочника(ИмяСправочника) Экспорт
	
	Запрос = Новый Запрос(
		СтрШаблон(
		"ВЫБРАТЬ
		|	КОЛИЧЕСТВО(Т.Ссылка) КАК КоличествоЭлементов
		|ИЗ
		|	Справочник.%1 КАК Т
		|ГДЕ
		|	НЕ Т.ЭтоГруппа", ИмяСправочника));
	
	Выборка = Запрос.Выполнить().Выбрать();
	Выборка.Следующий();
	
	Возврат Выборка.КоличествоЭлементов;
	
КонецФункции
Показать
oladko; YPermitin; +2 – Ответить
206. babys 91 20.02.20 11:43 Сейчас в теме
А что Справочники.Номенклатура.Количество(Отбор); или Справочники.Номенклатура.Выбрать(Отбор).Количество(); не реализовано? Ай ай ай, а кто же так сделал?

Надо определиться: 1С это бизнес разработка, или всё же язык системного уровня?
YPermitin; +1 – Ответить
207. Vintik-vint 21.02.20 08:16 Сейчас в теме
Всё равно у ЭКСПЕРТа выглядит прикольные :-)
YPermitin; +1 – Ответить
213. Hatson 541 26.02.20 16:51 Сейчас в теме
Эксперту скажут:

ты ж программист 1С!? - ну вот открой свой 1С и пиши там, а в СУБД не лезь, паролей мы тебе не дадим.
YPermitin; +1 – Ответить
215. пользователь 26.02.20 17:03
(213) и что не делай - все равно 1С будет тормозить. А СУБД ни при чем :D
217. rabid_otter 134 26.02.20 19:17 Сейчас в теме
по поводу использования системных таблиц SQL Server = получается зависимость от платформы + когда один и тот же бизнес-запрос получает 2 разных результата, то зачем так делать?
YPermitin; +1 – Ответить
218. пользователь 26.02.20 19:20
(217) почему разный результат должен быть?
И будет ли он одинаковый, если это делать только запросом 1С? :)
219. rabid_otter 134 26.02.20 19:27 Сейчас в теме
(218) результат может быть разный, т. к. это зависит от скорости обновления статистики MS SQL.
плюс - зачем вообще создавать вероятность получения различных результатов в таком случае?
ведь от какого-нибудь дотошного манагера потом услышишь, что "ваша программа неправильно считает кол-во номенклатуры"
220. пользователь 26.02.20 19:32
(219) о какой статистике Вы говорите? DMV dm_db_partition_stats updated никак не связано со статистикой, которую обновляют при регламентном обслуживании СУБД.

Эта DMV содержит внутренне состояние показателей сервера и обновляется мгновенно, практически в реальном времени. Приближенное значение может не соответствовать фактическому количеству записей в таблице при наличии активных транзакций, например. Но и обычный запрос из 1С изменения активный транзакций не учитывает в режиме RCSI.

Так о какой разнице все же идет речь?
221. rabid_otter 134 27.02.20 08:38 Сейчас в теме
(220)
Эта DMV содержит внутренне состояние показателей сервера и обновляется мгновенно, практически в реальном времени.

я не разбираюсь в вопросе статистики MS SQL Server'а, поэтому не могу парировать. раз обновляется в реальном времени, то вариант годный, если не планируется Linux'а.
222. пользователь 27.02.20 08:40
(221) я лишь хотел сказать, что эта статистика может сгодиться более-менее.

Но сам вариант решения конечно с большими минусами. Это и неплатформенные возможности, привязка к ADO, сложности сопровождения и настройки, т..к это потребует доп. знаний.

Для тиражных решений это точно не подойдет. Только для чего-то узкоспециализированного.
Так что решение не идеальное.

Статья была больше для шутки, как разработчики могут усложнять решения. Это же не реальный кейс.
227. sashapere 160 09.06.20 17:08 Сейчас в теме
Мне кажется сложности на ровном месте не стоит создовать, Если оно работает и всех всё устраивает, то чем проще тем лучше
228. MikhailDr 20.07.21 08:11 Сейчас в теме
Решение Senior я бы делал не через регламентное задание, а через подписку на запись элемента справочника
229. zurapa 09.11.21 09:07 Сейчас в теме
Как же это злободневно. На курсах вот так вот часто впаривают за знание, умение, оптимизацию... Тратишь часы, дни, месяцы на это. Ради нескольких секунд, минут выигрыша при оптимизации. А потом на доработке одуреваешь, как же сложно делается простая вещь.

Основная идея создания 1С была в том, чтобы сделать более дружелюбный инструмент разработки, доработки для бухгалтера. Потом туда нагнали программистов-оптимизаторов, которые выбросили все удобные конструкции залезли в SQL и сейчас выпендриваются не поделу. Если нужна скорость, производительность в вычислениях, то 1С точно плохой вариант. И любой разработчик не зашоренный пойдёт в другие языки, другие решения. А 1С разработчик с опытом, но нежеланием изучать что-то ещё, полезет оптимизировать то, что у него под рукой.


Это пожалуй одна из лучших наглядных и простых иллюстраций как разработчики меняются с опытом. И это не только в 1С но и в других языка. Основная же мысль в разработке заключается в том, что не важно на сколько эффективно работает ваш код, если его не сможет доработать другой программист, потому что магия происходящая весьма чудесна и не постижима для магов уровнем ниже Магистра.
230. Hatson 541 28.11.25 14:26 Сейчас в теме
Уровень Yoda:
...ться !!!!
Прикрепленные файлы:
231. siamagic 18.05.26 22:07 Сейчас в теме
(230) Всё проще - автора как и синьера с експертом - на работу не возьмут, это натуральное вредительство писать такую чушь.

У второго и третьего комы - днодна сразу видно что новечки и сыпанутся на линуксе с постгри - где насколько помню не хранится количество строк таблицы.
Первый просто новичок и не понимает что пишет, оптимальным и кроссплатформенным было бы при добавление новой или удаление сохранять значение в константу - мало кода, понятно и быстро.
Для отправки сообщения требуется регистрация/авторизация