Последние сообщения

#1
7.7 / Re: Алгоритм формирования CDX
Последний ответ от Харлампий Дымба - Сегодня в 01:42
(0) Вот сегодня ковырял план счетов.
1. Сохранил - файл итогов (1SBKTTL) вырос в два раза, файл индекса не изменился.
2. Сделал выгрузку-загрузку - файл итогов уменьшился в два раза, файл индекса увеличился в два раза.
3. Удалил индекс, зашел монопольно - файл индекса уменьшился в два раза.
Какого спрашивается для одного и того же файла итогов (2) и (3) 1С строит разные файлы индексов?

По поводу же ускорения индексации - самый тупой (ну и прелестный в своей непосредственности) путь - это запустить несколько одновременных сеансов 1с, чтобы каждый из них индексировал свой кусочек индексных файлов рабочей базы.
Гипотетический рецепт такой (для 8 процессоров):
/всё можно написать непосредственно на 1с 7.7/
  • Удаляем в рабочей базе все CDX.
  • Создаем 8 папок с пустыми файлами 1CV7.MD, копируем туда из рабочей папки 1CV7.ORD, ну и 1cv7flt.lst до кучи.
  • Ранжируем по размерам таблицы DBF в рабочей папке и формируем 8 более-менее одинаковых потоков, типа:
    Поток 1: 1,8,9,16,17..
    Поток 2: 2,7,10,15,18.. etc
  • Готовим для каждой папки(потока) свой 1Cv7.DD: парсим построчно текущий рабочий 1Cv7.DD - оставляем для каждого из 8 только те таблицы, которые входят в соответствующий поток. При этом номера таблиц "TABLE no" можно не менять, и (важно!) в DBTableName меняем относительный путь к файлу на абсолютный, типа вместо SC72 ставим C:\Users\User\Desktop\Base1C\SC72. Т.е. указываем путь к DBF файлу рабочей базы.
  • Ну и запускаем 8 сеансов 1С пакетно с ключом ReIndex=Y - получим все индексные файлы сразу в рабочей базе

Итого: получаем ускорение в те же 8 раз ;D . А если процессоров 16 - то и в 16. И при этом индекс построен типовым движком 1с и ему можно верить, не то что иишное "Вы совершенно правы, давайте исправим?".

Ну, если честно, тяжело придумать DBF базу для которой на нормальном железе индексация идёт больше пары минут. Она или упирается в 2 гига своими DBF и просится в SQL, или что-то где-то сильно перемудрили с галками "Отбор", там где они совсем не нужны.

#2
Смотрел, но нагло протупил, не обратив внимания (почему?!) на "с учетом флДобавлятьСтрокиТЗ2".
Спасибо за пинок!
#3
Дружественные проекты / Re: ИТЗ, не соображу какое сое...
Последний ответ от xav - Сегодня в 00:27
Приветствую
В справке для конфигуратора не все методы описаны. Посмотрите здесь, метод "Разность", там довольно понятно.
#4
Есть две ИТЗ с номенклатурой:
ИТЗБаза и ИТЗПрайс.
И там и там есть колонка "Артикул" (ключ соединения).

Вопрос1: Не могу сообразить/подобрать какой метод ИТЗ применить и что слева, а что справа, чтобы получить подмножество ИТЗБаза, в котором останутся только те позиции, которых нет в ИТЗПрайс..? ни одно из описанных в доке соединений не подходит (по моему разумению)... Можно ли одним соединением или надо в несколько приемов/соединений делать?

Спасибо.
#5
7.7 / Re: Алгоритм формирования CDX
Последний ответ от Ветер в поле - Вчера в 11:01
Сорри, что немного не по теме...
Ускорение индексирования актуально для больших баз. Но я в упор не вижу смысла в файловых базах при размере больше нескольких ГБ. Нет возможности бэкапа в течении дня, производительность существенно ниже, чем у SQL, нет многих возможностей, которые есть у того. У ДБФ только пара преимуществ - более быстрый доступ к единичным объектам (доступ через точку) и более быстрая запись. А еще у ДБФ отвратительная безопасность - всякие шифровальщики прекрасно шифруют файлы базы (проверено, к сожалению).
Да, необходимо часть функционала переписывать, чтобы перейти на SQL. У меня на это пара месяцев ушло. Необходимо было получить ускорение для доступа к множеству справочников. Я написал класс ЗапросКСправочнику, который радикально увеличил скорость и удобство работы со справочниками. Причем ускорение было даже для ДБФ, пусть и не столь радикальное. В этом решении я как и в Прямом Запросе использовал 1С++ для SQL и SQLite для ДБФ. Но из-за процедурного способа управления запросом, а не разбора текста запроса, я радикально снизил затраты на подготовку. В итоге даже тупое использование по типу создал объект, наложил условия, выполнил запрос, обработал результат поднял скорость до 1500 запросов в секунду. А ведь оптимизация (создать один раз объект и использовать параметрический запрос) позволяет в 3 раза поднять скорость.

Вот пример использования параметрического запроса:
НачВремя = _GetPerformanceCounter();
	
	НачДатаРождения = '15.12.1978';
	
	оСпр = СоздатьОбъект("ЗапросКСправочнику");
	оСпр.Инит("Пациенты");
	оСпр.ДобавитьРеквизиты("ТекущийЭлемент,Код");
	
	Для К = 0 По ВыбКолвоЭлем - 1 Цикл
		оСпр.ДобавитьУсловие("ДатаРождения", НачДатаРождения + К, "=", , 1);
		тзЭлем = оСпр.ВыполнитьЗапрос();	
		
		тзЭлем.ВыбратьСтроки();
		Пока тзЭлем.ПолучитьСтроку() = 1 Цикл
			
		КонецЦикла;
	КонецЦикла;
	
	КонВремя = _GetPerformanceCounter();
	
	Предупреждение("Отработано за " + (КонВремя - НачВремя) / 1000 + " с.");
	
КонецПроцедуры
#6
7.7 / Re: Алгоритм формирования CDX
Последний ответ от alyuev - 12 августа 2026, 18:00
Кое-что вот тут обсуждалось:
https://www.1cpp.ru/forum/YaBB.pl?num=1241013307/0#0 - " Кодировка и Порядок сортировки в 1С ДБФ"
https://www.1cpp.ru/forum/YaBB.pl?num=1240102224/all - "Индексы при вставке записей"

Из тещих результатов:

ЧАСТЬ 7. Измеренные показатели
[th] Показатель [/th]
[th] Значение [/th]


 Таблиц  344 
 Объём DBF  31,14 ГБ 
 Объём CDX  ~4 ГБ 
 Записей  218 460 937 
 Ключей  ~405 800 000 
 Скорость сборки  1,46 с на миллион ключей на ядро 
 Штатная переиндексация 1С  ~1800 с 
 Наша, 8 потоков  151 с 
 Ускорение  12x 


Узкое место — чтение диска: 211 МБ/с при восьми потоках против 364 МБ/с в
один поток. Самая долгая таблица
SC8135
(22 тега, 45,9 млн ключей) занимает
102 с и задаёт нижнюю границу, пока распараллеливание идёт по таблицам.


Но самое главное - пока это больше эвристика, нежели четкий алгоритм. Т.е. ИИ вывел алгоритм эмпирически по существующим данным + кое-что с форумов + файлы заголовков, как писал выше. Тестирую. Индексы создаются, в 1С заходит, не ругается; справочники, журналы - открываются без вопросов. Отборы работают. Но еще нужны тесты...
#7
7.7 / Алгоритм формирования CDX
Последний ответ от alyuev - 10 августа 2026, 14:15
Всем привет. Всё в отпусках? Никто ничего не пишет.... :-)

Такой вопрос - есть ли где-то расписанный алгоритм, как 1С формирует индексы при переиндексации?
Есть возможность ускорить процесс в 10 раз за счет распараллеливания процесса. Вместо 30минут будет делать 3.
Но при анализе разбор всё время натыкался на разные нюансы.

Сначала ИИ пытался проанализировать некоторые базы и CDX, которые я ему давал. Он что-то распарсил, сделал сверщик. Но потом я подумал и дал ему определения функций, которые есть в 1С-ных родных DLL и там он нашел в двух файлах dbeng32.h и bkend.h (из 1CHEADERS) полезное - нашел там таблицы кодировок, подключился к библиотекам, выгрузил их все, определил, что есть файл 1CV7.ORD - там 2 таблицы символов для правил сортировки. У нас в конфигураторе стоит кодировка базы как CUSTOM - но как оказалось, сверщик всё равно после переиндексции находил расхождения с оригинальными CDX при использовании этих таблиц. И всё равно пришлось ему допиливать алгоритм построения индекса, чтобы не было расхождений. И это завязка только на текущую базу. На другой - надо будет опять искать алгоритм сортировки.

Вот и хотелось бы узнать, может кто уже ковырял в этом направлении?
#8
Дружественные проекты / Re: Реанимация сборки 1С++
Последний ответ от cr - 20 июля 2026, 15:59
Цитата: trdm от 17 июля 2026, 09:17НАДО БЫ КУДА-НИТЬ ЗАКИНУТЬ ИНТЕЛЛОВСКИЙ КОМПЙЛЕР, рядом положить.
а то его непонятно как качать
Нужен репозитарий для всего наследства 7.7. На гитхабе и гитлабе.
#9
Дружественные проекты / Re: Реанимация сборки 1С++
Последний ответ от alyuev - 17 июля 2026, 13:56
Можно с rutracker качать. Например, - https://rutracker.org/forum/viewtopic.php?t=3021912 - ISO образ
#10
Дружественные проекты / Re: Реанимация сборки 1С++
Последний ответ от trdm - 17 июля 2026, 09:17
НАДО БЫ КУДА-НИТЬ ЗАКИНУТЬ ИНТЕЛЛОВСКИЙ КОМПЙЛЕР, рядом положить.
а то его непонятно как качать