1С и AI, полезные инструменты и сервисы, стандарты и паттерны
2.25K subscribers
66 photos
11 videos
8 files
144 links
1С и AI - инструменты и сервисы, стандарты разработки и паттерны, нейронки, cursor, mcp, docker, шаблоны кода и т.д.
Обратная связь, публикации: @usefultools1c_bot
Download Telegram
Автоформатирование кода 1С

Не все нарушения стандартов обязательно исправлять вручную. Обработка «Автоформатирование кода и локализация» умеет автоматически применять 34 преобразования: форматировать код, исправлять структуру модулей, комментарии, локализацию и другие элементы конфигурации.

Мы сопоставили автозамены с конкретными пунктами стандартов. Теперь возле поддерживаемых пунктов отображается тег autoformat со ссылкой на инструкцию.

В ней собраны:

— получение обработки с ИТС;
— пакетный запуск;
— работа с файловой и серверной базой;
— XML-выгрузка и проект EDT;
— получение и фиксация изменений в хранилище;
— настройка отбора стандартов и отдельных пунктов.

Подробнее: https://v8std.ru/diagnostics/autoformat/
👍4
Настройка параметров ibcmd в режиме replicate, а так же СУБД транслятора и СУБД приёмника для оптимальной скорости

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

Начнём с настроек параметров ibcmd в режиме replicate при сценарии миграции базы с MS SQL на PostgreSQL как самом распространённом:

▫️ Количество потоков чтения (--jobs-count) Значение по умолчанию: количество логических ядер процессора компьютера, на котором исполняется ibcmd.

Несколько моментов, которые стоит учесть при подборе начального значения --jobs-count:

1. Утилита ibcmd ограничена одной NUMA, т.е. если у вас на сервере 48 ядер и 2 NUMA, то максимально утилита сможет занять только 48/2=24 ядра.
2. Это потоки на чтение, а есть же ещё и потоки на запись, поэтому для начала нужно поделить наши 24 ядра ещё на 2 и получим уже 12.
3. Поскольку это чтение, то точно имеет смысл включить параллелизм на MS SQL увеличив параметр MAXDOP. А вот насколько его увеличивать тут надо посчитать.
Опять же, если у нас на сервере СУБД 96 ядер, а мы читаем в 12 потоков, то нужно 96/12=8.

▫️ Количество потоков записи (--target-jobs-count) Значение по умолчанию: количество логических ядер процессора компьютера, на котором исполняется ibcmd.

Что нужно учесть при подборе параметра --target-jobs-count:

1 и 2 пункты те же самые что и у --jobs-count, т.е. в итоге получим 12
3. Поскольку это запись, то она всегда однопоточная на СУБД, но после записи у нас начнут создаваться индексы, а PostgreSQL нам позволяет распараллеливать именно эту операцию указывая параметр max_parallel_maintenance_workers (максимальное число рабочих процессов, для CREATE INDEX) и при этом не забываем что «сверху» число параллельных процессов ограничено параметром max_parallel_workers.
Соответственно при 96 ядрах на СУБД PostgreSQL и 12 потоков записи у ibcmd нам можно указать 96/12= 8 у max_parallel_maintenance_workers и max_parallel_workers = 96.

Так же будет очень полезно увеличить параметры work_mem (оперативная память на сеанс для операций ORDER BY) до 2-4 ГБ и maintenance_work_mem (Лимит памяти для CREATE INDEX) до 4-8 ГБ.
Учитывая, что у нас 12 потоков, то 12*4*8 = 384ГБ и это может быть максимум 50% всей доступной оперативной памяти.

▫️ Количество строк в порции данных (--batch-size) Количество строк в порции данных, используемой при репликации таблицы. Значение по умолчанию: 10 000

Казалось бы, ну а тут то что ещё считать, 10 000 вроде должно хватить всем?
Подбор этого параметра можно осуществить только тестами миграции и чтением лога PostgreSQL, в котором фиксируем операции длительнее 0,5 сек (log_min_duration_statement = 500ms) сравниваем скорость записи при умолчательном параметре 10 000, а затем увеличивая его на те же 10 000 пока скорость не начнёт падать.
У нас на серверах этот параметр получился оптимальным по скорости при значении 50 000.

▫️ Объем пакета данных (в байтах) (--batch-data-size). Значение по умолчанию: 10 485 760.
Ну и в целом похожий по смыслу на параметр --batch-size, только теперь в объёме памяти, а не количестве строк. Тут к сожалению, только подбор замером времени полной миграции при разных параметрах.
Опять же у нас оптимальным вышло увеличение и этого параметра в 5 раз до значения 52 428 800.

❗️Напомню, что по моему убеждению большая у вас база или нет определяется не её размером, а размером тех. окна и успеваете ли вы в это тех. окно сделать нужные вам монопольные операции или нет.
Миграция с СУБД на СУБД это одна из самых "больных" операций в части тех. окна и подбор параметров как ibcmd так и обоих, участвующих в этом процессе серверов СУБД может существенно и даже на порядок сократить это самое тех. окно.

Ну и на всякий случай канал в MAX https://max.ru/explorer1c
👍2
Бил бы по рукам, да все линейки уже сломаны.

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

1️⃣ Тянуть данные через весь запрос.

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

2️⃣Используйте для выражения замены в ЕСТЬNULL то, что может быть NULL или вообще вызвать ошибку.

К примеру, надо получить цену из какого-то регистра. Но ведь по соединению может получится так, что цена не найдена. Что тогда говорит насмотренность в таком случае: для левых соединений с негарантированным результатом, то есть вообще для всех, надо использовать функцию ЕСТЬNULL(ДанныеРегистра.Цена, ВыражениеЗамены)

Но тут пытливый мозг говорит: а почему 0? ведь если в регистре её нет, это не значит, что цены не существует, её же можно ещё рассчитать! И рождается великолепное ЕСТЬNULL(ДанныеРегистра.Цена, ДанныеДокумента.Сумма/ДанныеДокумента.Количество)

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

3️⃣Используйте ВЫБРАТЬ РАЗЛИЧНЫЕ чтобы скрыть тот факт, что Ваше соединение - говно.

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

Да и в конце концов не бывает же такого, что пользователь захочет вывести ещё какое-нибудь дополнительное поле, особенно из тех, что будут отличаться. Правда ведь?

4️⃣Для получения актуальных сведений используйте соединение с таблицей регистра сведений, а не его среза последних.

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

А если всё таки идёте против своей природы и обращаетесь к срезу последних - ни в коем случае не покрывайте поля индекса полностью, это для слабаков!

5️⃣Чтобы упростить поиск условий в запросе с большим количеством временных таблиц, накладывайте их, условия, в конце.

Нам не принципиальна выборка лишних данных. В конце концов, не мы же их тянем всё больше и больше с каждым соединением, а машина. А машина, как известно, надорваться не может. Зато все условия в одном месте и очень просто читаются. Профит!

В общем, используйте сами и другим подскажите. Только не долго, новые линейки уже заказал.

#медвежийкодстайл
👍9
Ограничения на использование вложенных запросов в условии соединения

🟡 Рекомендуемый подход - вынести вычисления во временную таблицу и затем соединять уже готовый результат.

🟡 Типовой проблемный сценарий: в условии соединения используется вложенный запрос, чтобы получить «срез последних» на конец предыдущего периода, причем для каждой номенклатуры период может отличаться.

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

🟡 Проверяйте соблюдение стандарта при доработках и перед выпуском релиза.

#std656
https://v8std.ru/std/656/
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
1с. Комьюнити лицензия на macOS. Столкнулся еще раз. Думаю таки актуально.
Удалить файлы предыдущих лицензий.
Удалить 1cv8/1C/1Cv8/1cv8conn.pfl

В терминале

sudo /Applications/1cv8.localized/{Ваша версия}/1cv8.app/Contents/MacOS/1cv8

Если я правильно понимаю то приложение 1с по умолчанию не имеет доступа к папке с лицензиями.
Далее получаем комьюнити как обычно.
Profit!
👍6
Использование ключевых слов "ОБЪЕДИНИТЬ" и "ОБЪЕДИНИТЬ ВСЕ" в запросах

🟡 В общем случае при объединении результатов нескольких запросов используйте ОБЪЕДИНИТЬ ВСЕ, а не ОБЪЕДИНИТЬ.

🟡 Исключение: ситуации, когда удаление дубликатов является обязательным условием корректного результата запроса.

🟡 Причина: ОБЪЕДИНИТЬ удаляет полностью одинаковые строки, и это требует дополнительного времени даже тогда, когда одинаковых строк заведомо быть не может.

🟡 Проверяйте соблюдение стандарта при доработках и перед выпуском релиза.

#std434
https://v8std.ru/std/434/
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🚀 Как провести документ и не «повесить» интерфейс

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

⏱️ В чём проблема?

Полагаю, все знают, что документ, который проводится 20 секунд и дольше, — не самый удачный сценарий.
Особенно в веб-клиенте, где требования к времени отклика выше, чем в тонком клиенте. Если серверный вызов выполняется слишком долго, соединение клиента с информационной базой может быть разорвано.

В рекомендациях 1С приводятся примерно такие значения:

• около 20 секунд — для большинства браузеров и веб-серверов;

• около 8 секунд — для некоторых браузеров.

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

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

⚙️ И вот как это решили в конфигурации

В форме документа стандартное проведение заменили запуском длительной операции.

Документ проводится в фоне, а после завершения операции форма получает результат и обновляется.

🛠 Получается примерно такая схема:

1️⃣ Переопределяем стандартные команды формы: Записать, Провести и Провести и закрыть.

2️⃣ При выполнении команд Провести или Провести и закрыть сериализуем объект документа в двоичные данные и помещаем их во временное хранилище.

3️⃣ Передаём адрес временного хранилища в фоновое задание. Там восстанавливаем объект из двоичных данных и проводим его.

4️⃣ После завершения фонового задания возвращаем результат на клиент и при необходимости обновляем или закрываем форму.

✅ Что получаем в итоге?

Пользователь не смотрит на зависший экран и может заняться чем-то ещё, пока документ проводится.

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

Сам документ от этого быстрее проводиться не станет. Но для пользователя, особенно в веб-клиенте, работа будет выглядеть гораздо приятнее.

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

А вы встречали такой подход?
👍6
Forwarded from Никита Арипов | 1С, DevExp (Никита Арипов)
Большой опрос сообщества 1С

Ландшафт технологий 1С - карта инструментов, которыми пользуется сообщество

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

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

Бот спросит вашу роль и подберет подходящие инструменты. По каждому нужно ответить на два коротких вопроса. Опрос займет от 15 минут, но его можно поставить на паузу и продолжить позже

Пройти опрос
@stateOf1c_bot

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

Если вы работаете с 1С - проходите и отправляйте коллегам

Чем больше будет ответов от разработчиков, аналитиков, тестировщиков и администраторов, тем точнее получится Ландшафт 1С

Буду благодарен за репосты и упоминания - они помогут собрать ответы от самых разных участников сообщества
👍2
Пока искал себе стажёров-программистов 1С, вспомнил, что у меня есть 2 бесплатных курса по 1С.
Вдруг среди вас затесалась молодёжь, бывает же такое.

Один я снимал как раз для стажёров - тех, кто немного умеет программировать, и хочет въехать в 1С (синтаксис, среда, суть работы). Он прям нулевой, начинается с "что откуда скачать". Называется "Подготовишка 1С", лежит в плейлисте https://vkvideo.ru/playlist/-208482299_9

Второй я снял на грант от 1С - мы тогда победили в конкурсе "Новое поколение 1С", и вписались сделать, цитирую: "Практико-ориентированный курс для начинающих программистов 1С. Видеоуроки в открытом доступе с задачами, максимально близкими к реальной жизни, с разбором правильных и неправильных примеров.". Результаты конкурса, кстати, тут - https://1c.ru/newgen2024/winners.jsp (мотайте в самый низ, там будет Первый Бит Челябинск).

А сам курс лежит здесь - https://vkvideo.ru/playlist/-208482299_3
👍10
🍁 Программа INFOSTART TECH EVENT 2026 полностью готова!

Если вы работаете с 1С и хотите понять, какие технологии и подходы уже реально применяют другие команды, 8–10 октября в Санкт-Петербурге пройдет INFOSTART TECH EVENT 2026.

В этом году в программе:

✔️ 7 секций: разработка, DevOps, HighLoad, интеграции, QA, новые технологии и управление техническими командами

✔️ 80% программы про технологии и инженерную практику, еще 20% – про команды и личную эффективность

✔️ ИИ, MCP, 1С:Элемент, архитектура, производительность, инфраструктура, тестирование и другие задачи, с которыми специалисты сталкиваются каждый день

А вот несколько докладов, чтобы понять масштаб тем:

🔥 «AI-ассистент для 1С:Элемент: как специализированные скиллы автоматизируют создание приложений» – Павел Королев

🔥 «Повышение эффективности разработки с помощью ИИ. Хайп или реальность?» – Владимир Конырев

🔥 «Разработка на 1С без конфигуратора и EDT» – Иосиф Правец

🔥 «Чат вместо форм: бизнес-автоматизация 1С на базе ИИ и MCP-серверов» – Владимир Харин

🔥 «DWH FROM MY HEART: Почему 1С „все в одном“ не тянет ИИ и как построить Lakehouse для LLM-агентов» – Сергей Андреев

🔥 «Плагины для 1С:Элемент. Кастомизируем IDE без смс и регистрации» – Александр Волков

🔗 СМОТРЕТЬ ВСЮ ПРОГРАММУ

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

🔗 СМОТРЕТЬ РАСПИСАНИЕ

А еще TECH EVENT – это возможность задать вопросы докладчикам и экспертам, сравнить свой опыт с практикой других команд и вернуться на работу с конкретными идеями, что можно улучшить или попробовать у себя.

❤️ Зовите коллег и приезжайте вместе – так не только веселее, но и выгоднее.

1. Командное участие – скидка до 20%
Отправляйте двух и более сотрудников и платите от 5 до 20% меньше.

2. Билет «2 в 1» со скидкой 10%
Сразу на TECH EVENT 2026 и A&PM EVENT 2026.

🔗 КУПИТЬ БИЛЕТ
Самодостаточность регистров

🟡 При проектировании структуры регистров придерживайтесь правила: регистр должен быть логически независим от регистраторов.

🟡 Для работы должно быть достаточно данных самого регистра.

🟡 Любая логика по данным регистра и любые отчеты по нему не должны обращаться к полям регистратора.

🟡 Кроме того, в распределенной информационной базе регистратора может не быть: движения регистров могут мигрировать между узлами, а регистраторы - нет.

#std477
https://v8std.ru/std/477/
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
📚 Программа A&PM EVENT 2026 готова!

Можно открывать и выбирать, на что идти 12–14 ноября.

➡️ 70% программы – практика:
Мастер-классы, тренинги, круглые столы, деловые игры и управленческие поединки.

➡️
Остальные 30%:
Доклады с реальными кейсами, рабочими инструментами и разбором ошибок.

В программе пять секций:

🟢прикладные навыки аналитика
🟢инструменты аналитика
🟢архитектура, учет и автоматизация на 1С
🟢управление проектами и продуктами
🟢soft skills и управление командой

Конечно, поговорим про тренды в ИИ, работу с требованиями и документацией, Data-Driven, Docs-as-Code, архитектуру, изменения, риски и сложные разговоры с заказчиками.


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

➡️ СМОТРЕТЬ ПРОГРАММУ
📍12–14 ноября, Санкт-Петербург


До 1 октября действует текущая цена на билеты. Потом она вырастет.