«Варп-двигатель» для «среза последних»

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

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

Быстрый срез последних ClickHouse большие данные миллиарды записей интеграция HTTP bcp.exe SQL

Решение, позволяющее получить данные, аналогичные "срезу последних" на два порядка быстрее.

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

   А теперь про «срез последних» регистра сведений 1С и проблемы, с ним связанные. Реализация «среза» в 1С, основанная на стандарте SQL, при росте количества записей начинает заметно тормозить. Мы имеем здесь аналогию со скоростью света - при приближении к определенному количеству записей в регистре, получить результат "среза последних" за приемлемое время уже невозможно.

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

   Чтобы проиллюстрировать ситуацию, перейдем к цифрам, полученным на практике:
Есть независимый и непериодический регистр сведений с исторически сложившейся структурой, которую уже нельзя изменить по различным причинам (место на диске, недопустимо большое время реструктуризации):

   Три измерения (именно в таком порядке):
      Товар (Ссылка, ~20 000 различных значений)
      Магазин (Ссылка, ~10 000 различных значений)
      Дата (ДатаВремя)
   Четыре ресурса (три числовых и ссылка) и один реквизит с типом «Строка».

 

   Количество записей в регистре на текущий момент приближается к двум миллиардам (1 784 781 077). При таком количестве записей реализация «среза последних» на MS SQL, даже при наличии всех необходимых индексов исполняется около двух часов на сервере (Intel(R) Xeon(R) CPU E5-2697 v3 , 128 Гб ОЗУ).

   Чтобы кардинально решить проблему, данные регистра были выгружены в СУБД ClickHouse. Выгрузка из базы MS SQL в формат CSV выполнялась с помощью утилиты bcp.exe параллельно в 12 потоков и заняла полтора часа. Загрузка из файлов CSV в СУБД ClickHouse осуществлялась последовательно и потребовала всего 14 минут.
Все операции выполнялись из интерфейса специально разработанной для работы с ClickHouse конфигурации. База данных с этой конфигурацией использовала два соединения - HTTP с ClickHouse и HTTP - с базой 1С, которая соответствует базе SQL
(для получения структуры хранения базы данных, необходимой для формирования запроса  при вызове bcp.exe).
Конфигурация расширяет возможности интеграции с ClickHouse - добавляет пакетные запросы, управляемые временные таблицы (с автоудалением после завершения пакетного запроса), сжатие данных при обмене по HTTP с ClickHouse и другие необходимые возможности.


   Теперь самое интересное: СУБД ClickHouse полностью не поддерживает стандарт SQL, но имеет свои расширения стандарта, которые позволяют решать многие задачи гораздо эффективнее и элегантнее.

   Был создан cледующий запрос для получения среза последних по данным таблицы в ClickHouse:

SELECT
    *
FROM
    work.itz AS itz
    INNER JOIN
    (
    SELECT
        tovar,
        magaz,
      
 maxIf(itz.dat, itz.dat <= '<ДатаСреза>') AS dat
    FROM
        work.itz
    GROUP BY (tovar, magaz)
    HAVING maxIf(itz.dat, itz.dat <= '<ДатаСреза>') <> '0000-00-00 00:00:00'
    ) AS srez
USING
  (tovar, magaz, dat)

   Здесь work - имя базы, itz - имя таблицы в ClickHouse, наименование остальных полей (tovar, magaz, dat) соответствуют их сокращенной англоязычной транскрипции.  Строка <ДатаСреза> в тексте запроса заменялась конкретной датой перед исполнением запроса (запрос был отправлен через HTTP интерфейс).
   
    В этом запросе ключевым является использование агрегатной функции max с комбинатором If. Комбинаторы как раз и являются специфическим расширением стандарта SQL в ClickHouse, и предоставляют возможности, отсутствующие в стандарте SQL. О комбинаторах в ClickHouse можно прочесть в открытой документации: https://clickhouse.tech/docs/ru/sql-reference/aggregate-functions/combinators/

   И на том же наборе данных, на котором «срез последних» в MS SQL рассчитывался 2 часа, результат приведенного запроса к CУБД ClickHouse был получен через 40 секунд (около 10 миллионов записей).

   Результат был получен быстрее не на десятки процентов, а на два порядка ! При этом СУБД ClickHouse установлена на одном компьютере с такими же характеристиками, что и компьютер для базы MS SQL (Xeon 14 ядер 28 потоков, 128 Гб ОЗУ). Кстати, сравнение сложности «многоэтажного запроса» в MS SQL и запроса из нескольких строк к СУБД ClickHouse также весьма красноречиво выглядит.

   Вот это и есть «варп-двигатель» для «среза последних». Самая быстрая в мире, по независимым оценкам, СУБД ClickHouse и грамотное использование её возможностей для нестандартного решения типовой задачи. А если учесть, что производительность СУБД ClickHouse практически линейно зависит от количества ядер и компьютеров, на которых она развернута, то "срез последних" для больших данных теперь не является нерешаемой проблемой.


   "ClickHouse не тормозит !" - лозунг, которым руководствуются разработчики СУБД из компании Яндекс, полностью оправдывается при решении частной задачи - получении данных "среза последних".

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. bulpi 185 10.08.20 12:37 Сейчас в теме
Не понял :
1)"Есть независимый и непериодический регистр сведений"
А при чем тут срез последних к непериодическому регистру ?

2)Начиная с какого-то релиза, можно хранить срез последних в виде готовой таблицы. И получать почти мгновенно.
fishca; dandykry; dabu-dabu; DrAku1a; nnn123; 7OH; +6 Ответить
2. davdykin 25 10.08.20 12:49 Сейчас в теме
(1)Собственно, ничего не мешает реализовать свой "срез последних", если есть измерение дата.
2. Не совсем понятно, а как хранятся эти таблицы? Ведь если периодичность день - это 365 таблиц в год?
3. hobi 593 10.08.20 13:18 Сейчас в теме
(2) Вот, использовался такой запрос для создания таблицы:
Для колонок подобраны оптимальные кодеки сжатия информации, благодаря этому
таблица занимает мало места на диске. Кроме того, вместо GUID ссылок
использовались коды элементов для идентификации.
Для хранения таблицы ClickHouse автоматически разбивает её в соответствии
с заданным ключом партицирования. В запросе ключом является выражение toYYYYMM(dat),
т.е. разбиение по месяцам. А исполнение SELECT-ов распаралеливает на все доступные ядра
компьютера или, если таблица распределенная, то и на все компьютеры. Сам запрос:
CRE ATE   TABLE work.itz
(
    tovar UInt32   CODEC(T64),
    magaz UInt32   CODEC(DoubleDelta, LZ4),
    dat   DateTime CODEC(DoubleDelta, LZ4),
    kol   Int32    CODEC(DoubleDelta, LZ4),
    proc  Int8     CODEC(T64),
    post  UInt32   CODEC(DoubleDelta, LZ4),
    kolr  Decimal(9, 2) CODEC(DoubleDelta, LZ4),
    autor LowCardinality(String)
)
ENGINE = MergeTree()
PARTITION BY toYYYYMM(dat)
PRIMARY KEY (tovar, magaz)
ORDER BY (tovar, magaz, dat)
SETTINGS index_granularity = 8192
Показать
4. hobi 593 10.08.20 13:23 Сейчас в теме
(2)
Ведь если периодичность день - это 365 таблиц в год?

Периодичность в приведенном примере не день, а секунда. Потому что тип поля dat в данном случае не Date, а DateTime.
5. hobi 593 10.08.20 13:27 Сейчас в теме
(1)
А при чем тут срез последних к непериодическому регистру ?

В данном случае я говорю о функционале, который выполняет получение данных, аналогичных "срезу последнего" по реквизиту с типом ДатаВремя.

(1)
Начиная с какого-то релиза, можно хранить срез последних в виде готовой таблицы. И получать почти мгновенно.

Поскольку механизм хранения и получения данных, аналогичных "срезу последнего" использует внешний сервер (ClickHouse) с интерфейсом HTTP, то с любого релиза. С HTTP даже на 7.7 можно работать.
6. AlanGreenspan 10.08.20 14:00 Сейчас в теме
Как много неприятностей доставляют тормоза при достижении критического количества записей, знаем не понаслышке. Если с Вашим варп-двигателем система летает так, как Вы рассказываете, это маленькая, но очень полезная революция :)
7. hobi 593 10.08.20 14:18 Сейчас в теме
(6)
Если с Вашим варп-двигателем система летает так, как Вы рассказываете

Действительно летает, двигатель от Яндекса. Я просто немного разобрался в нём и понял, как использовать его преимущества при интеграции с 1С. На скриншоте - размеры таблиц, в частности таблица itz с таким большим количеством записей занимает всего 9.4 Гб места на диске.
Вторая таблица (srp) больше 9 миллиардов записей.
Запрос по выгрузке в файл CSV формата левого соединения "среза последнего" на дату из itz с таблицей srp по полям tovar и magaz занял 51 секунду.
В результате получен файл размером 2.7 гигабайта.
Прикрепленные файлы:
8. isaev2016 11.08.20 06:42 Сейчас в теме
А как доливку данных реализовали?
9. hobi 593 11.08.20 09:07 Сейчас в теме
(8)
А как доливку данных реализовали?

Да, заливка как раз и выполнялась с помощью "доливки". Утилитой bcp.exe данные в несколько потоков, по периодам, выгружались в формате CSV в "расшаренную папку" на Ubuntu. Затем полученные файлы последовательно "доливались" в цикле. Если нужно изменить данные за произвольный период, то предварительно нужно удалить данные за этот период. Команда
ALT ER TABLE work.itz DELETE WHERE dat BETWEEN '<Дата1>' AND '<Дата2>' выполняется практически (несколько секунд) мгновенно за любой период, поскольку для таблицы было задано партицирование по месяцам (системе нужно просто удалить несколько файлов партиций и, максимум, в двух удалить часть данных).
ClickHouse и 1С прекрасно дополняют друг-друга. 1С - транзакционная база, но большие объемы данных обрабатывает не очень хорошо. ClickHouse нет транзакций, но практически не имеет ограничений на объемы данных.
10. hobi 593 11.08.20 09:24 Сейчас в теме
(8) Небольшие (для ClickHouse) объемы данных, до нескольких сотен тысяч строк, можно непосредственно с помощью HTTP запроса залить. Т.е. данные для заливки указать в самом HTTP-запросе. Но сотни миллионов быстрее через файл заливать.
11. 7OH 32 12.08.20 00:55 Сейчас в теме
А левое соединение к такому "срезу" непериодического регистра как делать в запросе ?
12. hobi 593 12.08.20 08:51 Сейчас в теме
(11)
А левое соединение к такому "срезу" непериодического регистра как делать в запросе ?

Я в предыдущем своём посте ошибся с тем, какая таблица к какой левым соединением, а исправить пост тут уже нельзя. Собственно, весь код, который формирует результат соединения со срезом (в этом коде уже используется расширение синтаксиса ClickHouse в конфигурации 1С, о котором я говорил в публикации - пакетный запрос, временные таблицы и подстановки). Результат запроса выводится в таблицу <СрезНаДату> с движком File. Т.е. после исполнения запроса получаем файл в формате CSV с заголовками. Пробелы в операторах, типа "DR OP" в коде отсутствуют, их при размещении кода сайт форума зачем-то добавляет. В пакетном запросе вначале создаётся временная таблица со срезом, а затем уже она соединяется с другой. Сам код:


DR OP TABLE IF EXISTS <СрезНаДату>
;
CRE ATE TABLE <СрезНаДату>
(
`Наименование товара` String,
`Код товара` UInt32,
`Номер магазина` UInt32,
`Наименование магазина` String,
`Доля рабочего времени` Decimal(9, 2),
`Количество продаж` Decimal(9, 3),
`Сумма продаж` Decimal(9, 2),
`Количество конечный остаток` Decimal(9, 3),
`Дата остатка в ТЗ` DateTime,
`Остаток в ТЗ` Decimal(9, 3)
)
ENGINE = File(CSVWithNames)
;
CRE ATE TABLE <temp>ost
(
tovar UInt32,
magaz UInt32,
dat DateTime,
kol Int32
)
ENGINE = Memory
;
INS ERT INTO <temp>ost
SEL ECT
tovar,
magaz,
dat,
kol
FR OM
work.itz AS itz
INNER JOIN
(
SEL ECT
tovar,
magaz,
maxIf(itz.dat, itz.dat <= '<ДатаСреза>') AS dat
FR OM
work.itz
GROUP BY (tovar, magaz)
HAVING maxIf(itz.dat, itz.dat <= '<ДатаСреза>') <> '0000-00-00 00:00:00'
) AS srez
USING
(tovar, magaz, dat)
;
INS ERT IN TO <СрезНаДату>
SELE CT
dictGet('dic.tovar' , 'name' , toUInt64(tovar)) AS `Наименование товара`,
tovar AS `Код товара`,
dictGet('dic.magaz' , 'number' , toUInt64(magaz)) AS `Номер магазина`,
dictGet('dic.magaz' , 'name' , toUInt64(magaz)) AS `Наименование магазина`,
dol AS `Доля рабочего времени`,
kol AS `Количество продаж`,
sum AS `Сумма продаж`,
ost AS `Количество конечный остаток`,
ost.dat AS `Дата остатка в ТЗ`,
ost.kol AS `Остаток в ТЗ`
FR OM
work.srp
LEFT JOIN
<temp>ost AS ost
USING (tovar, magaz)
WH ERE
dat = toDate('<ДатаСреза>')
Показать
13. 7OH 32 12.08.20 10:05 Сейчас в теме
(12) То есть живых данных не будет ?
Я бы таки рискнул и регистр переделал.
Не уверен, что постоянная возня + поддержка в будущем того стоит.
14. hobi 593 12.08.20 10:11 Сейчас в теме
(13)
То есть живых данных не будет ?

Про "живые данные" не совсем понятно. Если нужно получить данные в 1С, например в виде таблицы значений, проблем нет.
В конфигурации это уже решено, используется решение hsИнтегратор для обмена с другими базами 1С (через этот механизм, кстати, получается структура хранения базы данных, которая используется для сопоставления имен базы MS SQL с именами метаданных 1С при формировании запроса в bcp.exe. Можно и без bcp.exe получить, так и делается для справочников. Но большие объемы быстрее, чем с помощью bcp.exe, выгрузить не получится) . Можно результат также в ClickHouse в виде таблицы с другим движком сохранить.

Но в данном примере показан вывод в файл CSV, поскольку он используется для загрузки в Power BI.
15. hobi 593 12.08.20 10:28 Сейчас в теме
(13)
Я бы таки рискнул и регистр переделал


На небольших объемах это даст результат. Но попробуйте идеально переделать регистр с несколькими миллиардами записей и получить срез последних. Если бы быстродействие отличалось в разы, это лучший вариант. Но в данном случае отличие на два порядка.
"Варп-двигатель" ученые тоже ведь хотят создать не для того, чтобы в булочную ездить, а перемещаться на очень большие расстояния.
Так и здесь. В реальных базах очень больших таблиц не так уж много, но именно быстрое получение аналитической информации из таких таблиц является проблемой.
Созинов; +1 Ответить
34. hobi 593 14.08.20 02:23 Сейчас в теме
Согласен, нужно провести корректное тестирование. Не предполагал, что будет такой интерес к теме, при сравнении был интересен порядок в быстродействии. Структура хранения данных, действительно, не оптимальна для данного запроса, давно была создана и существует "как есть", изменять не разрешают.

Поэтому предлагаю такой план тестирования, если будут замечания, сообщите.
1. В пустой конфигурации создам регистры srp (она сейчас периодическая до дня) и itz - его сделаю периодическим (до секунды) с кодами, вместо ссылок (в оригинальной базе три ссылочных реквизита заменены в ClickHouse кодами элементов для эффективного сжатия колонок).
2. Перенесу данные из таблиц ClickHouse в базу с этой конфигурацией
3. Выполню запрос, аналогичный описанному выше в (12) , т.е. на конкретную дату левое соединение таблицы srp со срезом последних из таблицы itz на ту же дату. Такой запрос в ClickHouse выполняется за 51 сек, в результате получается файл CSV 2.7 Гб для последующей загрузки в Power BI.

В предлагаемом тесте будут использоваться только механизмы среза последних платформы и типы данных в таблицах разных СУБД будут совпадать, оценка разницы во времени исполнения будет точнее.
16. SlavaKron 12.08.20 12:35 Сейчас в теме
Как, говорите, называется СУБД из компании Яндекс? Просто на 100-й раз тяжело запомнить.
Ta_Da; dandykry; 7OH; +3 Ответить
18. hobi 593 12.08.20 13:44 Сейчас в теме
(16)
Как, говорите, называется СУБД из компании Яндекс?


СУБД ClickHouse https://clickhouse.tech/docs/ru/

А это список компаний, которые работают с большими данными на этой СУБД:
https://clickhouse.tech/docs/ru/introduction/adopters/
17. 7OH 32 12.08.20 13:21 Сейчас в теме
А у вас 2 часа , ну случайно, не скан проходил ?
Не смотрели планы?
---
На большой базе бухгалтерии был запрос, который строился около 3 минут.
После рефакторинга - 2 секунды.
Тоже на два порядка, и при этом типовыми методами.
19. hobi 593 12.08.20 13:50 Сейчас в теме
(17)
Не смотрели планы?


Нет, не смотрел. Но индекс в базе SQL по измерению дата был добавлен. Срез был именно по этому измерению, без каких-либо отборов.
Нужно было получить все данные на дату среза. Т.е. индекс был полностью покрывающим
20. 7OH 32 12.08.20 13:52 Сейчас в теме
(19) в смысле срез без отборов, если у вас регистр не периодический ???
В первую очередь надо было понять, ЧТО у вас происходит, если это реальность, а не реклама.
21. hobi 593 12.08.20 13:59 Сейчас в теме
(20)
в смысле срез без отборов, если у вас регистр не периодический


Чтобы получить данные среза не обязательно нужно использовать механизм из платформы.
В конце концов платформа создаёт запрос для сервера SQL и никто не мешает создать свой собственный
алгоритм среза, сразу для сервера SQL или как, например, здесь:
https://infostart.ru/1c/articles/980323/

И для реализации не обязательно даже использовать стандартное измерение "Период", можно любой другой реквизит, ресурс или измерение
с типом Дата или ДатаВремя. Главное иметь в SQL покрывающий индекс по этому реквизиту, чтобы Scan-а не было.

Стандартное измерение "Период" для периодического регистра сведений используется платформой для автоматического создания индекса Период + ОстальныеИзмерения, который будет покрывающим для запросов по этому измерению
22. 7OH 32 12.08.20 14:09 Сейчас в теме
(21) я к тому веду, что у нас всего в 4 раза меньше записей и это не РС, а бухгалтерия.
И таких проблем нет, нормально строятся и обороты и остатки.
Проблема либо в структуре либо в запросах.
А без измерения, анализа и поиска причины - довольно странно выглядит попытка переноса в "другую" БД.
--
Довольно странно звучит итог - берите вот ЭТУ БД.
А с другими сравнить минимум?
23. hobi 593 12.08.20 14:19 Сейчас в теме
(22)
я к тому веду, что у нас всего в 4 раза меньше записей и это не РС, а бухгалтерия.
И таких проблем нет, нормально строятся и обороты и остатки.
Проблема либо в структуре либо в запросах.
А без измерения, анализа и поиска причины - довольно странно выглядит попытка переноса в "другую" БД.
--
Довольно странно звучит итог - берите вот ЭТУ БД.
А с другими сравнить минимум?


Итога "берите вот ЭТУ БД" здесь нет, как и рекламы. Публикация размещена в разделе "Практика программирования" и она имеет статус "free". Никому ничего не навязываю, не зарабатываю, а делюсь опытом. Если кому-то пригодится, буду рад.

Про регистр оборотов и остатков тоже не говорил, там нет такого экспоненциального замедления, как при получении срезов с большого регистра сведений. Кроме того, пара регистров, которые используются в приведенном выше запросе, занимают примерно одну треть в базе данных и одна из задач - вынести их наружу, чтобы сократить базу. В ClickHouse интересно то, что данные хранятся с очень большой степенью сжатия и занимают раз в десять меньше места.
user1035175; +1 Ответить
24. hobi 593 12.08.20 14:31 Сейчас в теме
(23)
Проблема либо в структуре либо в запросах.


Чтобы получить "срез последних" стандартными средствами SQL (которые использует платформа 1С), нужно сделать левое соединение таблицы с самой собой. Т.е. миллиарды записей с миллиардами.
В ClickHouse комбинатор If вместе с агрегирующей функцией max, позволяет вначале получить миллион записей (Товар, Магазин, Дата максимально близкая снизу к дате среза ) и уже потом соединять с миллиардом.

Чем больше количество дат в регистре, тем больше будет выигрыш. А регистр растет со временем и добавляются новые даты...
Плюс мы имеем большой бонус от быстродействия самой СУБД ClickHouse. База с колоночным хранением быстрее осуществляет поиск данных, причем намного.

Еще к вопросу, почему выбрана СУБД ClickHouse. Вот здесь бенчмарки разных баз данных https://clickhouse.tech/benchmark/dbms/ от самой компании Яндекс, но я не думаю, что публичные данные с какими-то приписками. Сравниваются именно лучшие аналитические базы данных (оптимизированные для поиска данных). Сравнение с транзакционными базами (MS SQL например) при таком основном сценарии работы будет совсем печальным для MS SQL - база оптимизирована для изменения данных
25. 7OH 32 12.08.20 14:54 Сейчас в теме
(24) ну.... если вы в скуле сначала отбор не можете сделать, но продолжайте и дальше в каждое предложение совать название БД , и говорить , что это не реклама )))
На оном отключаю подписку на эту тему.
26. Dilovar9 49 13.08.20 10:54 Сейчас в теме
Возможно я что то пропустил, но как реализовали запросы UPDATE? на сколько мине известно СУБД ClickHouse умеет только читать и добавлять данные.
28. hobi 593 13.08.20 20:59 Сейчас в теме
(26) СУБД ClickHouse уже поддерживает (с некоторыми оговорками) DELETE и UPDATE. По ссылке можно прочитать про "Мутации":
https://clickhouse.tech/docs/ru/sql-reference/statements/alter/:

На данный момент доступны команды:

ALT ER TABLE [db.]table DELETE WHERE filter_expr
Выражение filter_expr должно иметь тип UInt8. Запрос удаляет строки таблицы, для которых это выражение принимает ненулевое значение.

ALT ER TABLE [db.]table UPDATE column1 = expr1 [, ...] WHERE filter_expr


Главное отличие от стандарта SQL, данные удаляются и обновляются не мгновенно. Т.е. Вы даёте команду СУБД, что хотите это сделать, она удалит/обновит через некоторое время. По моим тестам - от 1 до 3 секунд удаляются данные за большой период. Чтобы быть уверенным, что удаление завершено, лучше с тем же условием выполнить SELECT. Если ничего не вернул, значит операция завершена. Для аналитической базы такая особенность некритична.
33. hobi 593 13.08.20 23:01 Сейчас в теме
(26)
Возможно я что то пропустил, но как реализовали запросы UPDATE? на сколько мине известно СУБД ClickHouse умеет только читать и добавлять данные.


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

В самом конце страницы https://clickhouse.tech/docs/ru/operations/settings/settings/#mutations_sync информация, на которую я не обратил вначале внимание:

mutations_sync

Позволяет выполнять запросы ALT ER TABLE ... UPDATE|DELETE (мутации) синхронно.

Возможные значения:

0 - мутации выполняются асинхронно.
1 - запрос ждет завершения всех мутаций на текущем сервере.
2 - запрос ждет завершения всех мутаций на всех репликах (если они есть).

Значение по умолчанию: 0.


И еще цитата из документации:
Синхронность запросов ALTER

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

Для запросов ALTER ... ATTACH|DETACH|DROP можно настроить ожидание, с помощью настройки replication_alter_partitions_sync.
Возможные значения: 0 - не ждать, 1 - ждать выполнения только у себя (по умолчанию), 2 - ждать всех.

Для запросов ALT ER TABLE ... UPDATE|DELETE синхронность выполнения определяется настройкой mutations_sync.
27. Xershi 1154 13.08.20 11:29 Сейчас в теме
Насколько понял это статья рассчитана на уровень выше новичка, но еще не эксперта.
На уровне эксперта статья не выдерживает критики.
Дополните эту информацию иначе статья помойка.
29. hobi 593 13.08.20 21:12 Сейчас в теме
(27)
Насколько понял это статья рассчитана на уровень выше новичка, но еще не эксперта.
На уровне эксперта статья не выдерживает критики.
Дополните эту информацию иначе статья помойка.


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

Если есть конкретные вопросы по интеграции ClickHouse и 1С, по возможности отвечу.
30. Xershi 1154 13.08.20 21:14 Сейчас в теме
(29) дополните статью этой информацией, тогда люди вас правильно поймут, пока у вас были только хайповые заголовки и это цепляет, но потом печалит.
headMade; +1 Ответить
31. hobi 593 13.08.20 21:27 Сейчас в теме
(30)
дополните статью этой информацией, тогда люди вас правильно поймут, пока у вас были только хайповые заголовки и это цепляет, но потом печалит.


Трудно понять, какая именно информация интересует. Полное описание интерфейсов к СУБД есть на сайте первоисточника, лучше и актуальнее всё равно не сделать. Как отправить HTTP запрос и получить результаты, тоже вроде бы известно многим. В общем-то я так и разбирался с СУБД, читал первоисточник, отправлял запросы, смотрел результаты. Потом уже с реальными данными начал тестировать.
И далеко не все возможности этой СУБД тестировал, только те, которые для практических задач были нужны.
32. 7OH 32 13.08.20 21:28 Сейчас в теме
Минимум сравнение с другими бд, с замерам. С анализом плана вашего запроса в оригинале и в результатах.
35. user612295_death4321 14.08.20 21:18 Сейчас в теме
Было бы интересно посмотреть на цифры, если переписать "СрезПоследних" на свой "Срез последних" как из примера из комментариев по ссылке. Кажется сомнительной идеей сразу CH поднимать.
36. wtlz 177 15.08.20 14:38 Сейчас в теме
не совсем понял, какую задачу попытались решить? Срез последних в итоге где используется - в ClickHouse? Или передается назад в 1С?
На днях встретился с похожей проблемой, но регистр периодический, в измерении составной тип ссылка+строка, записей 20 млн, срез последних по одному элементу справочника получался средствами платформы 3 секунды (что очень долго). В итоге удалил записи где в измерении строка, убрал составной тип, добавил вирт. отбор и левое соединение с основной таблицей - теперь срез летает (0,001 с.).
Есть независимый и непериодический регистр сведений с исторически сложившейся структурой, которую уже нельзя изменить по различным причинам (место на диске, недопустимо большое время реструктуризации):

- не думали над вариантом создать новый Периодический РС, удалив из измерений ДатуВремя, в потоках (даже по году) заполнить этот РС и сравнить получение среза последних?
37. 7OH 32 15.08.20 15:26 Сейчас в теме
(36) вам изначально могло помочь просто тип передавать в условии, чтобы не сканировало таблицу
38. wtlz 177 15.08.20 16:47 Сейчас в теме
39. hobi 593 15.08.20 22:01 Сейчас в теме
(36)
не совсем понял, какую задачу попытались решить? Срез последних в итоге где используется - в ClickHouse? Или передается назад в 1С?


Задача от бизнес-аналитиков. Данные, которые им требуются, получаются запросом к периодическому регистру сведений (>9 миллиардов записей), которые должны быть связаны левым соединением (по товару и магазину) с данными, аналогичным срезу последнего по измерению дата в непериодическом регистре (1.7 миллиарда записей). Структуру хранения данных изменять нельзя, возможное технологическое окно гораздо меньше времени реструктуризации (на копии базы время проверили), более длительный простой повлечет миллионные убытки компании (простой автотранспорта и несвоевременная доставка товаров в магазины). При этом данные, которые нужны бизнес-аналитикам, нужны на дату без отборов по товарам и магазинам. Т.е. срез на дату нужен не по одному элементу справочника, а по всем. Результирующая таблица имеет примерно 10 миллионов записей (она используется в качестве источника данных для загрузки в Power BI. Непосредственно в Power BI полные данные не загрузить, объем данных превышает ограничения Power BI)

И вторая задача - вынести эту пару регистров из базы данных 1С, поскольку они занимают треть всего объема базы (база уже ~7.5 терабайт). В базе ClickHouse они заняли примерно в 10 раз меньше места на диске.

Получаемые запросом к этим таблицам данные в виде файла формата CSV используются для загрузки в Power BI. По замерам бизнес-аналитиков время на получение данных в формате CSV сократилось в 120 раз.
40. hobi 593 15.08.20 22:51 Сейчас в теме
(36)
какую задачу попытались решить


Уточнение к (39):
Срез последних к периодическому (день) регистру сведений из 9.3 миллиардов записей левым соединением с данными, аналогичным срезу последних по измерению с типом датавремя в непериодическом регистре сведений из 1.7 миллиардов записей. Левое соединение по измерениям товар и магазин, присутствующим в обоих регистрах. Т.е. срез последних соединяем с эмуляцией среза из другого регистра. Отборы по товарам и магазинам в результате не нужны, выгружаются все данные, поскольку дальнейший анализ результата производится уже средствами Power BI.
41. user1035175 1 16.08.20 08:44 Сейчас в теме
Сколько человеко-часов ушло на решение задачи (+/- 2 слона)?
42. hobi 593 16.08.20 09:14 Сейчас в теме
(41)
Сколько человеко-часов ушло на решение задачи (+/- 2 слона)?


Конкретно на задачу от бизнес-аналитика около 4-х часов ( создан и протестирован запрос, указанный в (12) ), но интеграция с ClickHouse уже была реализована и данные регистров были перенесены в базу ClickHouse ранее в рамках задачи по переносу регистров. Испробованы разные способы переноса, например через HTTP запросами к серверу 1С. Быстрее, чем выгрузка утилитой bcp.exe в файлы и загрузка данных полученных файлов в базу ClickHouse нет (по крайней мере я не знаю). Данные небольшого объема (справочники) удобнее через HTTP переносить, коды элементов можно непосредственно в запросе 1С получить.

Большие объемы рабочей базы накладывают ряд ограничений на возможности оперативного изменения конфигурации. Кроме того, что операции по изменению конфигурации выполняются значительно дольше, с базой работают сотни человек, в ночное время - программные роботы, формирующие документы. Поэтому и начат был поиск альтернативных инструментов, которые помогут снизить нагрузку на базу, перенести исторические данные, логи, в другое место.
А конкретная практическая задача поступила уже после проведения работ по интеграции с ClickHouse.
43. infina15 16.08.20 12:08 Сейчас в теме
Пробовали оконные функции mssql?
44. hobi 593 16.08.20 15:32 Сейчас в теме
(43)
Пробовали оконные функции mssql


Нет, в ClickHouse показалось проще. Имена полей SQL базы 1С только в алгоритме выгрузки используются
(они, кстати, отличаются в разных базах, развернутых из одной конфигурации 1С, по факту в нескольких рабочих базах так и есть).
В дальнейшем алгоритмы обработки уже с использованием имен, которые сами выбрали при создании таблиц ClickHouse.
По этой же причине для имен полей в таблицах ClickHouse используется англоязычная сокращенная транскрипция, хотя можно и кириллицу использовать, например: `Номер магазина`. Но следить за пробелами и апострофами неудобно.

Кроме того, опыта разработки на T-SQL не было, а порог "вхождения" в программирование на ClickHouse для меня оказался ниже и многие вещи, которые в SQL пришлось бы вручную делать для работы с данными больших объемов (например - шардирование, репликация), ClickHouse поддерживает автоматически, на уровне платформы. Также привлекла потенциальная возможность наращивания производительности и обрабатываемых объемов добавлением оборудования. И SQL масштабируется, но CH это делает практически линейно от количества ядер и компьютеров. Пока это не потребовалось, но хорошо, что есть.
45. ildarovich 7268 19.08.20 14:59 Сейчас в теме
(0) Добавлю в эту тему ссылку на свою публикацию: Простой способ индексации интервалов. Поскольку она реализует более общий (не зависящий от СУБД) подход к задаче "среза последних". Поэтому имеет прямое отношение к рассматриваемой теме. Вполне возможно, что на его базе можно было решить эту задачу и без выгрузки в стороннюю СУБД и без реструктуризации, создав дополнительную таблицу (регистр сведений). Но это нужно еще посмотреть.
В данной статье, напротив, используется технологическое решение, связанное с использованием ClickHouse.
Ничего против этого не имею.
Но подавать его как наиболее эффективное решение именно для реализации "среза последних" оснований не увидел. Поскольку, как мне кажется, это колоночная СУБД будет настолько же быстрее и на большинстве других запросов для аналитических задач.
У 1С, кстати, с недавного времени, есть свой колоночный "Ускоритель аналитических запросов", который обрабатывает данные в оперативной памяти и автоматически синхронизируется с основной базой. Правда, 1С нацелила его на корпоративный рынок, что, на мой взгляд, ошибка. Разрабатывал механизм, кстати, выходец из Яндекса.
46. ITSolncev 04.03.21 13:54 Сейчас в теме
Только случайно наткнулся на данную тему.
Очень похоже на рекламу, как там бишь её, СУБД от известной российской ИТ-компании. Прям на языке вертится, а вспомнить не получается.

Автор зарегистрирован на ресурсе 10 лет назад и утверждает, что не имеет опыта разработки на T-SQL. Как-то странно, хотя, всё возможно.

К автору пожелание - улучшить оформление:
- скриншоты;
- выпадающие окна с кодом;
- сравнительные таблицы и диаграммы оформить.

А то реально получается, что заметка опубликована по принципу "джентльменам принято верить на слово".
47. hobi 593 05.03.21 23:02 Сейчас в теме
(46)
(46)
Автор зарегистрирован на ресурсе 10 лет назад и утверждает, что не имеет опыта разработки на T-SQL. Как-то странно, хотя, всё возможно.


Небольшой опыт теперь уже имею, через bcp.exe выгрузку из базы 1С больших объемов данных SQL запросом в CSV с последующей загрузкой в базу ClickHouse (справочники, данные регистров, документы). Убеждать и рекламировать "СУБД от известной российской ИТ-компании" здесь тоже не собираюсь. Скриншот с размерами некоторых таблиц, в которые перенесены данные из базы 1С, и скриншоты интерфейса технологической базы 1С (из которой выполняется загрузка, сверка данных и регламентные расчеты) прикладываю.
На этом скриншоте самая большая таблица > 12 миллиардов записей, в другой базе - данные объединенного журнала регистрации 13-ти больших баз данных 1С имеют размер больше 15 миллиардов записей. И эти данные сейчас уже используются в качестве источника в нескольких критичных по времени исполнения отчетах 1С. В публикации поделился своим небольшим на тот момент опытом, если есть какие-то религиозные предубеждения к другим СУБД, кроме напрямую поддерживаемых платформой 1С, можете игнорировать публикацию. А если есть конкретные вопросы о проблемах, нюансах и сложностях интеграции 1С с данной СУБД, например - быстрая загрузка данных из MS SQL в СУБД, формирование отчетов по данным СУБД с использованием СКД, сверка данных СУБД и 1С, возможности диалекта SQL данной СУБД и адаптация к 1С, система скриптов, исполняющих смешанный код 1С, запросы MS SQL и ClickHouse, отвечу.
Прикрепленные файлы:
48. VVi3ard 50 17.05.21 20:16 Сейчас в теме
Спасибо за статью, не до конца понимаю как выполняется актуализация данных? Добавление новых строк по проведении, удаление при отмене проведения и.т п.
49. hobi 593 18.05.21 10:55 Сейчас в теме
(48)
Данные актуализируются раз в сутки (для целей аналитики этого достаточно).
В рабочей базе 1С выполняется удаленный запрос через механизм hИнтегратор - для каждой даты и типа документов вычисляются суммы по проведенным документам. Это самый простой и быстрый способ сравнения. Контрольные суммы (SHA256) пробовал считать в базе SQL, это надежнее, но получалось дольше в несколько раз.
То же самое выполняется в базе Клик. По всем датам, где обнаружили расхождения, формируются запросы, которые исполняются утилитой bcp.exe (в несколько потоков), выгружаются все данные по проведенным документам за эти даты в формат CSV.
Затем в базе КХ удаляются все данные с расхождениями и загружаются из CSV и запускаются расчеты по изменениям (остатки на каждый день и проч). Перед этим полностью копируются справочники.
На синхронизацию уходит, примерно, полчаса. Различные регламентные расчеты еще часа три. Выполняется по ночам, типичный объем изменений несколько десятков миллионов строк.
Часть данных синхронизируются постоянно, например каждые 3 минуты чеки загружаются с FTP. Скорость загрузки - примерно 10 отчетов из магазинов в секунду, с учетом времени на удаление прежних вариантов за дату от магазинов в базе Клик.
Оставьте свое сообщение

См. также

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

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

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

27.01.2016    80958    Serginio    113    

Снежинка для запроса

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

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

вчера в 08:54    157    kalyaka    0    

Полезные примеры СКД, ч.2

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

Еще несколько примеров решения задач в СКД.

06.04.2021    5896    Neti    7    

Полезные примеры СКД, ч.1

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

Подборка видео по решению различных задач в отчетах на СКД.

30.03.2021    7902    Neti    18    

Звуковое управление в 1С 8.3 Промо

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

В данной статье описано создание библиотеки для звукового управления (выполнение команд голосом) для платформы 1С 8.3. Задача была поставлена так, чтобы модуль функционировал непосредственно на клиенте 1С, осуществляя управление формами, и взаимодействовал с интерфейсом.

16.03.2021    4120    velemir    31    

Обзор полезных методов БСП 3.1.4

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

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

25.03.2021    22548    rayastar    49    

Повышение качества разработки. Статья 4. Почему код становится плохим, и как с этим бороться

Практика программирования Методология управления разработкой Бесплатно (free)

Учебный курс по теории и практике программирования. Бесплатно. В виде структурированного текста. Статья 4. Эта статья посвящена причинам возникновения проблем с качеством кода и методикам их преодоления.

22.03.2021    1210    Артано    5    

Telegram бот на PHP

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

Сделаем простого Telegram бота на PHP.

01.03.2021    5085    John_d    8    

Serverless (Faas) в 1С. Создание и вызов Yandex Cloud Functions Промо

Универсальные функции Практика программирования v8 Бесплатно (free)

"Я не могу просто взять и скопировать код с гитхаба", "у нас 1С микросервисами окружена", "возможностей мало" - частые фразы 1С разработчиков. которым не хватает возможностей платформы в современном мире. Faas, конечно, история не новая, но нас сдерживало 152ФЗ и задержки по пингам. Для того, чтобы действительно использовать в 1С код, к примеру, на Python, надо было приложить усилия. Теперь всё намного проще - берём и используем.

28.12.2020    6020    comol    31    

Не спеша, эффективно и правильно – путь разработки. Часть 3. Практика

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

Черновой вариант книги Никиты Зайцева, a.k.a.WildHare. Разработкой на платформе 1С автор занимается с 1996-го года, специализация — большие и по-хорошему страшные системы. Квалификация “Эксперт”, несколько успешных проектов класса “сверхтяжелая”. Успешные проекты ЦКТП. Четыре года работал в самой “1С”, из них два с половиной архитектором и ведущим разработчиком облачной Технологии 1cFresh. Ну — и так далее. Не хвастовства ради, а понимания для. Текст написан не фантазером-теоретиком, а экспертом, у которого за плечами почти двадцать три года инженерной практики на больших проектах.

29.06.2020    11784    WildHare    33    

Не спеша, эффективно и правильно – путь разработки. Часть 2. Теория

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

Черновой вариант книги Никиты Зайцева, a.k.a.WildHare. Разработкой на платформе 1С автор занимается с 1996-го года, специализация — большие и по-хорошему страшные системы. Квалификация “Эксперт”, несколько успешных проектов класса “сверхтяжелая”. Успешные проекты ЦКТП. Четыре года работал в самой “1С”, из них два с половиной архитектором и ведущим разработчиком облачной Технологии 1cFresh. Ну — и так далее. Не хвастовства ради, а понимания для. Текст написан не фантазером-теоретиком, а экспертом, у которого за плечами почти двадцать три года инженерной практики на больших проектах.

22.06.2020    12108    WildHare    23    

Не спеша, эффективно и правильно – путь разработки. Часть 1. Парадигма

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

Черновой вариант книги Никиты Зайцева, a.k.a.WildHare. Разработкой на платформе 1С автор занимается с 1996-го года, специализация — большие и по-хорошему страшные системы. Квалификация “Эксперт”, несколько успешных проектов класса “сверхтяжелая”. Успешные проекты ЦКТП. Четыре года работал в самой “1С”, из них два с половиной архитектором и ведущим разработчиком облачной Технологии 1cFresh. Ну — и так далее. Не хвастовства ради, а понимания для. Текст написан не фантазером-теоретиком, а экспертом, у которого за плечами почти двадцать три года инженерной практики на больших проектах.

15.06.2020    18478    WildHare    34    

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

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

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

10.12.2016    39311    unichkin    74    

JSON в запросах DaJet QL

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

Практические примеры работы с JSON непосредственно в языке запросов. Перенос курсов валют между УТ и БП. Требуется SQL Server 2016 и выше.

24.04.2020    4265    zhichkin    6    

Визионное программирование

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

Новый способ программирования и его практическая демонстрация.

22.04.2020    5006    mkalimulin    111    

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

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

Продолжаю (и заканчиваю) тему с автоматическим решением инцидентов. Перейдем от теории к практике.

25.02.2020    4723    Repich    9    

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

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

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

15.10.2018    33676    tormozit    105    

Использование машинного обучения для решения инцидентов

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

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

18.02.2020    7604    Repich    17    

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

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

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

27.01.2020    50073    ids79    26    

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

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

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

15.01.2020    35800    John_d    22    

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

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

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

20.09.2012    80665    tormozit    131    

Часовой на страже логов

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

При поддержке решений, которые установлены у большого количества пользователей на различных системах, очень важно вовремя получать подробную информацию о возникших проблемах. О том, как собирать логи и анализировать полученные данные в трекере ошибок Sentry на конференции Infostart Event 2019 Inception рассказал Андрей Крапивин.

13.01.2020    8613    Scorpion4eg    8    

Последовательности событий при проведении документа 1С. Шпаргалка + про формы + про расширения

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

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

30.12.2019    28357    kuzyara    38    

Полезные процедуры и функции для программиста

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

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

07.10.2019    35752    HostHost    41    

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

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

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

11.07.2007    51713    tormozit    51    

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

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

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

01.10.2019    45883    Yashazz    50    

СКД. Отчеты с картинками

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

Решение популярных кейсов с картинками в отчетах на СКД.

25.09.2019    28391    YPermitin    47    

СКД не только для отчетов

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

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

18.09.2019    20905    YPermitin    36    

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

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

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

10.09.2017    48314    tormozit    74    

Оповещения боту из 1С за 31 минуту

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

Поделюсь опытом, как быстро сделать бота с оповещениями в Телеграмм из 1С без лишних затрат.

18.09.2019    19063    feva    43    

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

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

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

06.09.2019    80997    rpgshnik    70    

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

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

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

05.09.2019    66138    ids79    55    

Развитие 1С программиста Промо

Практика программирования Личная эффективность Бесплатно (free)

Делюсь своим опытом и видением развития 1С программиста.

17.10.2018    23819    pashamak    64    

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

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

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

05.09.2019    38467    YPermitin    25    

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

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

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

03.09.2019    28292    YPermitin    81    

Приватный блокчейн и 1С популярно

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

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

02.09.2019    6715    mkalimulin    140    

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

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

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

25.04.2019    16880    m-rv    3    

Кодогенерация и метагенерация в 1С

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

В своем докладе на конференции INFOSTART EVENT 2018 EDUCATION Дмитрий Белозеров рассказал о разработке инструмента, позволяющего программно работать с метаданными 1С и писать скрипты для выполнения тех же действий, которые выполняет разработчик в конфигураторе –  с какими сложностями и нюансами пришлось столкнуться, и что получилось в итоге.

26.08.2019    9424    kirovsbis    28    

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

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

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

17.08.2019    40170    ids79    19    

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

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

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

08.08.2019    125725    ids79    73    

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

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

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

16.04.2019    21584    m-rv    17    

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

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

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

02.08.2019    51183    avalakh    26    

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

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

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

26.07.2019    89132    ids79    14    

Как проводятся документы в типовых конфигурациях от 1С

Математика и алгоритмы Практика программирования Разработка v8::ОУ ERP2 УТ11 Россия УУ Бесплатно (free)

В свое время, когда только начинал шаги в 1С и изучал, как проводятся документы в конфигурациях на платформе 1С по книге "Разработка управляемого интерфейса" (Хрусталева Е.Ю.), и там были представлены примеры совсем далекие от того, как сейчас проводятся документы в современных конфигурациях от 1С.

24.07.2019    33017    skv_79    35    

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

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

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

01.06.2018    34029    m-rv    22    

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

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

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

17.07.2019    43395    ids79    27    

Интеграция сценарного тестирования в процесс разработки

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

Разработчик системы «Тестер» Дмитрий Решитко в своем докладе на конференции INFOSTART EVENT 2018 EDUCATION показывает, что процесс тестирования можно очень плотно интегрировать в процесс разработки, что внедрение тестирования – это возможность развития программиста как такового, позволяющая ему упорядочивать ход мыслей и оставаться «в фокусе». Навыки построения процесса кодирования на стыке с тестированием сокращают время на концентрацию, освобождают от страха перед изменениями и улучшают память разработчика.

08.07.2019    9927    grumagargler    7    

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

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

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

04.07.2019    20922    SeiOkami    52    

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

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

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

05.12.2017    29482    itriot11    34    

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

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

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

25.06.2019    67140    ids79    27    

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

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

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

11.06.2019    28589    dmurk    148