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

Публикация № 1195044

Разработка - Практика программирования

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

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

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

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

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


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


*Бздынь!*

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

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


а лучше засунуть в экспортную функцию, куда передавать имя таблицы, чтоб код не повторять
и в привилегированном режиме, мало ли какие RLS'ы включены :-D
"ВЫБРАТЬ 	КОЛИЧЕСТВО(0) КАК Элементов ИЗ "+ИмяТаблицы
almierm; ipoloskov; acanta; +3 Ответить
209. DrAku1a 1314 24.02.20 14:43 Сейчас в теме
(70)
ВЫБРАТЬ
    КОЛИЧЕСТВО(*)
ИЗ
    Справочник.Номенклатура
ccapt; YPermitin; +2 Ответить
104. oleganatolievich 145 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-часовая версия видео про "лох-пидр"
taurus__; const000; bliver; veretennikoff; +4 Ответить
106. VmvLer 14.02.20 17:34 Сейчас в теме
(104) вам имеет смысл подготовить доклад на конференцию, тема
Чтобы понять конец, ты должен понять начало.
(с)о-з-д-р
107. oleganatolievich 145 14.02.20 17:36 Сейчас в теме
(106)
онять начало.
(с)о-з-д-р

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


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


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

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

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

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

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

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

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

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

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

P.S. Вот это GOD MODE так GOD MODE.
31. Dach 295 14.02.20 10:15 Сейчас в теме
(29) да, это прям пушка)) короч полет фантазии ничем не ограничен, кроме бюджета )))
user811769; Drivingblind; YPermitin; +3 Ответить
32. YPermitin 8570 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. YPermitin 8570 14.02.20 10:16 Сейчас в теме
(30) да, это мое фиаско :)

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

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

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

Возврат 42;

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

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

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

:))))))))

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

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

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

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

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

      Возврат 42;

КонецФункции
Показать
ipoloskov; +1 Ответить
60. uno-c 145 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; dinopopyys; zqzq; +3 Ответить
37. YPermitin 8570 14.02.20 10:18 Сейчас в теме
(33) это достойный уровень!
85. Painted 32 14.02.20 14:19 Сейчас в теме
(33)
Таки я олдскул а не миддл!
Хммм! А какая разница? Код одинаковый. ))
99. Климов Сергей 14.02.20 16:30 Сейчас в теме
(85) Разница принципиальная! Путь достижения цели может быть важнее цели :)
Движение — всё, цель — ничто! (с)
34. vadver 38 14.02.20 10:16 Сейчас в теме
А вот нифига не олдскульный код :)
Настоящий олдскул написал бы так:
	Если ВыборкаДетальныеЗаписи.Следующий() Тогда
	
	        Возврат ВыборкаДетальныеЗаписи.КоличествоЭлементов;
        КонецЕсли;
	
	Возврат 0;

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

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

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

Функция КоличествоСтрокВТаблице() Экспорт
Возврат 42;
КонецФункции
39. Dach 295 14.02.20 10:20 Сейчас в теме
С утра в пятницу под кофеек запрограммировать сферического коня в вакууме, ммм, что может быть лучше)) Спасибо за отличный пятничнопост, Юрий! Ну а теперь за рутину - ревьюить код джунов и разгребать авгиевы конюшни ошибок в нетленке
YPermitin; +1 Ответить
42. YPermitin 8570 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. YPermitin 8570 14.02.20 12:35 Сейчас в теме
(49) не читал, спасибо. Надо глянуть)
116. user633166 9 14.02.20 19:29 Сейчас в теме
Рабочая пятница закончилась и иссякла река серьёзного обсуждения :) поста, созданного ради шутки. Спасибо автору - очень интересно наблюдать за такого рода дискуссией... В надежде, что в понедельник увижу продолжение и будет решение, вспомнившейся (49), из постановки которой непонятно, что под 12 способами понимал автор того вопроса, то ли просто получить решение (то, что собственно и в этой публикации является целью и где-то около того вариаций уже прозвучало) или 12 :), способных за секунду добиться желаемого результата? Во втором случае стоит найти его и "заставить" это сакральное знание распространить... Со своей стороны
могу предложить поискать решение по следующему алгоритму: разделить размер таблицы на размер записи.
YPermitin; +1 Ответить
117. YPermitin 8570 14.02.20 19:31 Сейчас в теме
(116) отличная идея. Конечно, точное количество записей мы не получим, но приближенное значение можно. Нужно только учесть BLOB'ы и др.

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

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

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

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

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

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

Вообще, все решения рабочие в тои или иной степень.
Но если бы мне такую задачу дали в реальности, то я бы спросил "А зачем?"
68. uno-c 145 14.02.20 12:52 Сейчас в теме
(63)Задача вполне себе практичная: посчитать количество SKU, с которым имела дело контора в своей практике. Например, чтобы в презентацию конторы вставить - чем больше SKU, тем лучше, главное что это правда. Но чтобы не соврать - решать надо именно поставленную задачу.
подсчитать количество элементов справочника "Номенклатура" в информационной базе
69. acanta 14.02.20 12:54 Сейчас в теме
С характеристиками или без?
(68)
Оставьте свое сообщение

См. также

3 онлайн-курса по 1С-программированию: обмен данными, расчетные задачи и бухгалтерские задачи с 12 мая по 8 июля 2020 г. Промо

Практика программирования v8 Бесплатно (free)

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

22.04.2020    4688    23    Infostart    2    

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

Роли и права v8 1cv8.cf Абонемент ($m)

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

1 стартмани

25.02.2020    2102    0    user633166    8    

Регистры бухгалтерии. Настройки, субконто и движения с субконто

Бухгалтерский учет Механизмы бухгалтерского учета v8::БУ Бесплатно (free)

Описание основных настроек регистров бухгалтерии, работы виртуальных таблиц "Субконто" и "Движения с субконто" и кое-что еще.

10.02.2020    8767    0    YPermitin    6    

Мастер полнотекстового поиска

Поиск данных v8 v8::УФ 1cv8.cf Абонемент ($m)

Набор инструментов для работы с полнотекстовым индексом платформы 1С. Стандартные и расширенные возможности.

2 стартмани

07.02.2020    5762    41    YPermitin    28    

Использование программных перечислений, ч.1: строковые константы Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

Часто ли у вас возникает необходимость в коде выполнять сравнение на строку?

10.12.2016    35535    0    unichkin    45    

Программная работа с настройками СКД

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

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

27.01.2020    19321    0    ids79    26    

Помощник работы с идентификаторами объектов

Инструментарий разработчика v8 1cv8.cf Абонемент ($m)

Инструмент для расширенного анализа идентификаторов объектов.

2 стартмани

24.01.2020    6597    23    YPermitin    25    

[СКД] Программное создание схемы компоновки данных

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Сделаем отчет на СКД полностью программно, без использования макета "схема компоновки данных".

15.01.2020    18629    0    John_d    22    

Вспомогательные инструкции в коде 1С Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

Помогаем редактору кода 1С помогать нам писать и анализировать код.

15.10.2018    28001    0    tormozit    100    

Транслятор запросов 1С в SQL

Производительность и оптимизация (HighLoad) Администрирование СУБД v8 1cv8.cf Абонемент ($m)

Инструмент для трансляции запросов платформы 1С в SQL, а также их диагностики.

10 стартмани

07.01.2020    10485    77    YPermitin    89    

Последовательности событий. Шпаргалка

Практика программирования v8 Россия Бесплатно (free)

Собрал информацию о событиях/подписках/расширениях в одном месте.

30.12.2019    13541    0    kuzyara    33    

30 задач. Странных и не очень

Практика программирования v8 Бесплатно (free)

30 задач на знание языка программирования 1С и некоторого поведения платформы. Маленьких. Странных и не очень.

02.12.2019    14666    0    YPermitin    72    

Оформление и рефакторинг сложных логических выражений Промо

Практика программирования v8 Россия Бесплатно (free)

В сложных логических выражениях нередко самому автору спустя какое-то время тяжело разобраться, не говоря уже о других программистах. Предлагаемая методика позволяет повысить наглядность таких выражений путем оформления в виде И-ИЛИ дерева и одновременно выполнять их рефакторинг.

20.09.2012    75467    0    tormozit    129    

Как передать IP адрес, который вызвал HTTP запрос в 1C (для веб-сервера Apache)

Практика программирования v8 Бесплатно (free)

Столкнулся с задачей получения IP адреса, который вызывает http сервис 1С. Итак, решение:

22.11.2019    6862    0    Sibars    19    

Командный интерпретатор для 1С

Сервисные утилиты v8 1cv8.cf Абонемент ($m)

Инструмент для выполнения команд CMD / PowerShell из 1С.

2 стартмани

15.11.2019    10027    20    YPermitin    41    

Пакетная выгрузка / загрузка внешних отчетов и обработок

Прочие инструменты разработчика Менеджеры внешних отчетов v8 1cv8.cf Абонемент ($m)

Пакетная выгрузка / загрузка внешних отчетов и обработок для массовый манипуляций с ними.

2 стартмани

04.11.2019    7792    25    YPermitin    22    

Запись значения в поле ввода/формы со срабатыванием события ПриИзменении Промо

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Иногда возникает необходимость после записи значения в какое либо поле ввода/формы вызвать для него обработчик события ПриИзменении, а о вызове самого события приходится только мечтать. В этой статье приводится программный способ вызова этого события.

11.07.2007    46368    0    tormozit    38    

Обозреватель криптографии

Инструментарий разработчика Защита ПО v8 Абонемент ($m)

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

2 стартмани

21.10.2019    8692    11    YPermitin    10    

Таблица значений. Нюансы

Практика программирования v8 Бесплатно (free)

Обзор некоторых аспектов использования общеизвестного инструмента 1С.

01.10.2019    28319    0    Yashazz    45    

[Шпаргалка] Программное создание элементов формы

Практика программирования Работа с интерфейсом v8 1cv8.cf Бесплатно (free)

Программное создание практически всех популярных элементов формы.

06.09.2019    39927    0    rpgshnik    62    

Как сделать из &НаКлиентеНаСервереБезКонтекста почти &НаКлиентеНаСервере Промо

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Как сделать метод формы, доступный на клиенте и на сервере одновременно, и сохранить при этом удобство разработки

10.09.2017    42395    0    tormozit    74    

Агрегатные функции СКД, о которых мало кто знает

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Пользуетесь ли Вы всеми возможными агрегатными функциями, которые предоставляет система компоновки данных? Если Вы используете только: СУММА, КОЛИЧЕСТВО, МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ, то эта статья для Вас.

05.09.2019    42089    0    ids79    54    

Регистры бухгалтерии. Общая информация

Практика программирования Математика и алгоритмы v8 v8::БУ БУ Бесплатно (free)

Общая информация о внутреннем устройстве регистров бухгалтерии.

05.09.2019    24526    0    YPermitin    24    

Три костыля. Сказ про фокусы в коде

Практика программирования v8 Бесплатно (free)

Три интересных (или странных) костыля в коде, которые могут помочь в повседневных и не очень задачах.

03.09.2019    23203    0    YPermitin    80    

Выгрузка документа по условию Промо

Практика программирования Разработка v8 Бесплатно (free)

Что делать, если документы нужно выгружать не все подряд, а по какому-то фильтру: статусу, дате, набору условий... А что если он соответствовал этим условиям, а потом перестал? А если потом опять начал? Такие ситуации заставили попотеть не одного программиста.

25.04.2019    15437    0    m-rv    2    

Анализ производительности APDEX

Производительность и оптимизация (HighLoad) v8 1cv8.cf Бесплатно (free)

Отчет для просмотра и анализа замеров производительности в конфигурациях на базе БСП.

31.08.2019    9866    2    YPermitin    7    

Отслеживание выполнения фонового задания

Практика программирования Универсальные функции Разработка v8 1cv8.cf Бесплатно (free)

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

17.08.2019    28396    0    ids79    16    

Путеводитель по истории релизов

WEB v8 1cv8.cf Абонемент ($m)

Отчет по истории выпуска релизов и анализа информации по обновлениям.

5 стартмани

13.08.2019    11717    10    YPermitin    18    

Как прикрутить ГУИД к регистру сведений Промо

Практика программирования Перенос данных из 1C8 в 1C8 Разработка v8 Бесплатно (free)

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

16.04.2019    19207    0    m-rv    17    

Функции СКД: ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Подробное описание и использование внутренних функций системы компоновки данных: Вычислить, ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив, ВычислитьВыражениеСГруппировкойТаблицаЗначений.

08.08.2019    65712    0    ids79    40    

Фоновое выполнение кода в 1С - это просто

Практика программирования v8 1cv8.cf Бесплатно (free)

Как легко запускать выполнение в фоне, не прибегая к долгому описанию фоновых процедур.

02.08.2019    29426    0    avalakh    22    

СКД - наборы данных и связи между ними, создание собственной иерархии, вложенные отчеты

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Набор данных объект. Использование в схеме компоновки нескольких наборов данных. Различные варианты связи наборов: объединение, соединение. Использование иерархии в отчетах на СКД. Создание собственной иерархии, иерархия детальных записей. Использование вложенных схем в отчетах на СКД.

26.07.2019    49179    0    ids79    11    

Как сделать запрос на изменение данных Промо

Практика программирования v8 v8::Запросы 1cv8.cf Бесплатно (free)

В статье приведены особенности внутренней архитектуры и примеры работы с расширением языка запросов 1С.

01.06.2018    28873    0    m-rv    21    

Просмотр и анализ структуры базы данных (отчет на СКД)

Инструментарий разработчика v8 v8::СКД 1cv8.cf Абонемент ($m)

Отчет для просмотра и анализа структуры базы данных с поддержкой файловых баз (ограниченный режим), а также баз на SQL Server и PostgreSQL.

5 стартмани

24.07.2019    18598    157    YPermitin    27    

СКД - использование расширений языка запросов, секция ХАРАКТЕРИСТИКИ

Инструментарий разработчика Практика программирования v8 v8::СКД Бесплатно (free)

Автоматическое и не автоматическое заполнение полей компоновки данных. Использование расширений языка запросов для СКД «{…}», секция ВЫБРАТЬ, секция ГДЕ, параметры виртуальных таблиц. Автоматизированное использование дополнительных данных в запросе: секция ХАРАКТЕРИСТИКИ.

17.07.2019    31603    0    ids79    27    

Регистры сведений. За кулисами

Практика программирования Разработка v8 1cv8.cf Бесплатно (free)

Небольшие заметки по внутреннему устройству регистров сведений.

09.07.2019    23853    0    YPermitin    13    

Метод формирования движений в типовых регистрах нетиповыми регистраторами Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

Вариант решения задач с проведением по типовым регистрам нетиповыми регистраторами. Зачем - чтобы при сравнении конфигурации не обращать внимание на свойства регистров и исключить вероятность допущения горькой оплошности при обновлении информационных баз, заменив типы регистраторов основной конфигурации типами конфигурации поставщика. Для программных продуктов, имеющих в своем составе метаданных документ "Корректировка регистров"("Корректировка записей регистров").

05.12.2017    26897    0    itriot11    34    

"Меньше копипаста!", или как Вася универсальную процедуру писал

Практика программирования Разработка v8 v8::СКД 1cv8.cf Бесплатно (free)

Программист Вася разбирает подход создания универсальных методов на примере программного вывода СКД.

04.07.2019    17773    0    SeiOkami    50    

Создание отчетов с помощью СКД - основные понятия и элементы

Практика программирования Математика и алгоритмы v8 v8::СКД Бесплатно (free)

Основные принципы работы СКД. Понятия схемы компоновки и макета компоновки. Описание основных элементов схемы компоновки: наборы данных, поля, вычисляемые поля, ресурсы, параметры.

25.06.2019    46149    0    ids79    25    

Многопоточное ускорение однопользовательских нагрузок в 1С + Microsoft SQL Server 2017

Практика программирования Производительность и оптимизация (HighLoad) v8 v8::Запросы Бесплатно (free)

Взаимодействие с Microsoft SQL Server нередко вызывает трудности у 1С-ников, а потому интересны любые моменты, связанные с его использованием. О своем опыте работы с новым SQL Server 2017 участникам конференции Infostart-2018 рассказал директор ООО «Аналитика софт» Дмитрий Дудин.

11.06.2019    22879    0    dmurk    144    

Использование классов .Net в 1С для новичков Промо

Практика программирования Разработка внешних компонент Универсальные функции v7.7 v8 Бесплатно (free)

Руководство для новичков. Написав статью http://infostart.ru/public/238584/, я понял, что многие не понимают того, что написано. Поэтому в этой статье постараюсь более подробно остановиться на азах и без кода на вражеском языке (C#)

27.01.2016    73502    0    Serginio    108    

Регистры накопления. Структура хранения в базе данных

Практика программирования Разработка v8 1cv8.cf Бесплатно (free)

Структура хранения регистров накопления в базе данных для платформы 1С:Предприятие 8.x. Первая часть в серии публикаций.

16.05.2019    38545    0    YPermitin    30    

Выполнение внешней обработки в фоновом задании

Практика программирования Разработка v8 1cv8.cf Бесплатно (free)

Подробное описание подхода к созданию длительной операции на основе внешней обработки. Реализация протестирована на 1С 8.3.12.1714 (x64).

11.05.2019    26697    0    Eret1k    23    

О расширениях замолвите слово...

Практика программирования Разработка v8 Бесплатно (free)

О чём стоит задуматься при принятии решения о создании расширения конфигурации…

07.04.2019    32164    0    ellavs    126    

Автоматические и управляемые блокировки применительно к типовым конфигурациям 1С Промо

Математика и алгоритмы Практика программирования v8 v8::blocking 1cv8.cf Бесплатно (free)

Основные принципы работы с режимами автоматических и управляемых блокировок в 1С Предприятие 8. Теория и применение в типовых конфигурациях: БП, УТ, ЕРП

10.11.2018    32478    0    ids79    40    

Git-репозитории для 1С-кода (опыт использования при небольших проектах)

Практика программирования v8 Бесплатно (free)

Инструкции по взаимодействию с Git-репозиторием, которые писались для тех наших программистов, которые вообще никогда не работали с Git (руководства в духе "Как получить код из git-репозитория?", "Как отправить код в git-репозиторий")...

28.03.2019    25334    0    ellavs    88    

Трюки с внешними источниками данных

Практика программирования Разработка v8 1cv8.cf Бесплатно (free)

Некоторые трюки для преодоления ограничений внешних источников данных.

14.03.2019    28962    0    YPermitin    53    

Возможности типовых шаблонов ограничения доступа на уровне записей (RLS)

Практика программирования БСП (Библиотека стандартных подсистем) Роли и права v8 v8::Права Бесплатно (free)

Краткий обзор применения типовых шаблонов ограничения доступа на уровне записей в конфигурациях, созданных на базе БСП: #ПоЗначениям, #ПоНаборамЗначений, #ПоЗначениямРасширенный, #ПоЗначениямИНаборамРасширенный

03.02.2019    34735    0    ids79    9    

Тестер: частые вопросы Промо

Практика программирования v8 Бесплатно (free)

Ошибкам бой - тесты норма жизни!

25.07.2018    27573    0    grumagargler    26