1С и AI, полезные инструменты и сервисы, стандарты и паттерны

1С и AI, полезные инструменты и сервисы, стандарты и паттерны

@usefultools1c

1С и AI - инструменты и сервисы, стандарты разработки и паттерны, нейронки, cursor, mcp, docker, шаблоны кода и т.д. Обратная связь, публикации: @usefultools1c_bot

2 189подписчиков
🇷🇺

Похожие каналы

Все →

Последние посты

1С и AI, полезные инструменты и сервисы, стандарты и паттерны — пост в ТГ канале

Смена dbowner у базы 1С на PostgreSQLСогласно check-list по настройке 1с рекомендуется «для каждой продукционной информационной базы создавать отдельного пользователя».Так же Информационная безопасность тоже требует чтобы мы работали под уникальными пользователями с каждой базой и при этом у этих пользователей нужен только минимально необходимый набор прав.Казалось бы, что может быть проще? Ну выполним аналог команды MS SQL EXECUTE sp_changedbowner 'ERP'; и готово.Но оказалось что всё не так просто, а иногда и невозможно…❗️Так повелось у многих, что создаём базы не просто из пользователя с правами SUPERUSER, а именно из под пользователя postgres.Какие есть пути решения есть:1. Сменить владельца базы ALTER DATABASE "ERP" OWNER TO "ERP"; Получаем следующие эффекты:❗️Владельцем таблиц остаётся postgres.Ок, мы не робкого десятка и умеем писать скрипты...В цикле бежим по всем таблицам и выполняем ALTER TABLE OWNER TO❗️Но при запуске 1С пишет «База данных непригодна для использования»…Дело в недостаточном разрешении для lc_messagesОк, выполняем grant set ON PARAMETER lc_messages to " ERP ";❗️И всё равно при запуске базы получаем: 42501: ERROR: must be owner of extension mchar🚫И вот тут первое нерешаемое – назначить владельца для расширения невозможно.2. REASSIGN OWNED - Команда затрагивает только объекты в текущей базе данных. Обычно её нужно выполнять в каждой базе данных, которая содержит объекты, принадлежащие удаляемой роли. Как раз то что нужно!!!Если бы мы изначально не создали базу из под пользователя postgresКоманда REASSIGN OWNED BY postgres TO ERP ❗️– не выполнится, с ошибкой: Изменить владельца объектов, принадлежащих роли postgres, нельзя, так как они нужны системе базы данных.⛔️Всё, тупик. К сожалению для баз созданных из под postgres изменить полноценно владельца невозможно!И тут решение только одно – dump/restore базы во вновь созданную, владельцем которой назначен другой пользователь без прав SUPERUSER.Ну а на будущее – после разворачивания сервера Postgr

8 июн. 2026 г.853В Telegram
1С и AI, полезные инструменты и сервисы, стандарты и паттерны — пост в ТГ канале

🔐 Пароль в коде — это не «быстрое решение», это отложенная утечкаПереключаясь с проекта на проект, одной из первых задач становится анализ текущего состояния системы и информационных баз. Смотришь, какая используется конфигурация, насколько она изменена, как реализованы внешние доработки, есть ли интеграции и нестандартные решения.И чаще всего у разных заказчиков сталкиваешься с одними и теми же проблемами:🟣логин/пароль к FTP - прямо в модуле обработки🟣пользователь и пароль к базе - в коде подключения🟣параметры внешних ресурсов, которые уезжают вместе с .epf, конфигурацией или выгрузкой базы▶️Почему это опасно?Я ловлю себя на мысли, что это странно объяснять: кажется, все и так всё понимают. Но, увы, почти каждый проект одно и тоже.Код живёт дольше, чем кажется:🟣Сегодня разработчик «на минутку» прописал пароль прямо в обработке🟣Завтра эту обработку отправили подрядчику🟣Послезавтра выгрузили пустую базу для анализа🟣Потом сделали CF/DT для тестового стендаА пароль всё ещё там. 😆И внезапно вместе с «пустой базой» или «просто внешней обработкой» третьим лицам уезжают реальные доступы: к FTP, почте, API, бухгалтерской базе или внешнему сервису. Проблема не в том, что кто-то специально хотел сделать плохо. Проблема в том, что временные решения очень быстро становятся постоянными - и начинают жить своей жизнью.▶️Безопасное хранение паролейУ 1С на эту тему есть отдельный стандарт:https://its.1c.ru/db/v8std/content/740/hdocСмысл там очень правильный:🟢по возможности не хранить пароли в информационной базе вообще;🟢если хранить всё-таки нужно - не класть их в обычные реквизиты объектов;🟢использовать отдельный объект метаданных с ограниченными правами;🟢если есть БСП - использовать безопасное хранилище паролей;🟢не передавать пароль на клиент и не хранить его в реквизитах формы;🟢читать пароль на сервере непосредственно перед использованием.▶️В БСП для этого есть методы:ЗаписатьДанныеВБезопасноеХранилище()ПрочитатьДанныеИзБезопасногоХранилища()УдалитьДанныеИзБезопасн

26 мая 2026 г.1 080В Telegram

Всем привет! 🖐⭐️ Сейчас много разговоров о новом механизме «Очередь», представленном в платформе 8.5.4.Вендор позиционирует его так: С помощью очередей можно оптимизировать, например, проведение документов, разделив его на действия, выполняемые синхронно в обработчике проведения, и действия, которые обязательно будут выполнены позже. Запрос на выполнение отложенных действий оформляется в виде сообщения очереди.И тут сложились звёзды: я понял, что пора рассказать вам, что… очереди в ERP уже есть 😁➡️ Реализованы они в составе механизма ОтложенныеЗадания.В него входят как специализированные очереди:▪️ЗаданияКРасчетуНормативногоГрафикаПроизводства;▪️ЗаданияКОтражениюЛимитовПоДаннымБюджетирования;так и УниверсальнаяОчередьОперативныхЗаданий.Именно о ней поговорим подробнее.➡️ Как это работает:▪️ Бизнес-код решает, что задачу нужно выполнить отложенно.▪️ Вызывается метод постановки задания в очередь.▪️ Механизм добавляет строку в регистр очереди.▪️ Позже обработка запускается: ➕ либо явно через ...Запустить(...); ➕ либо регламентным заданием ВыполнениеОтложенныхЗаданий.▪️ Управляющий поток выбирает задания из регистра.▪️ Задания группируются по аналитике и разбиваются на порции.▪️ Для каждой порции определяется метод выполнения.▪️ Порция выполняется в текущем сеансе, в управляющем потоке или в рабочих фоновых потоках.▪️ Успешные записи удаляются из очереди, а ошибки остаются для повторной попытки или фиксируются как окончательные.➡️ Пример можно посмотреть в УчетНДСРФ.ЗарегистрироватьЗаданияАктуализацииСчетаФактуры.Там используется:▪️ УниверсальнаяОчередьОперативныхЗаданий.ДобавитьЗадание - добавляет задание в очередь и при необходимости инициирует запуск управляющего потока;▪️ управляющий поток, в свою очередь, вызывает обработчик УчетНДСРФ.ОбновлениеСчетовФактурВыданных.➡️ Доработать механизм достаточно просто.Например:▪️ Откройте перечисление ЗаданияУниверсальнойОчереди и добавьте новый элемент, например МоеНовоеЗадание.▪️ Определите, где будет расположен метод о

14 мая 2026 г.1 100В Telegram
1С и AI, полезные инструменты и сервисы, стандарты и паттерны — пост в ТГ канале

🎹 Менеджер лицензий (rmlic.exe) в 8.5.4Уж очень не хватало этой утилиты. Это шаг к более админскому подходу, а не просто раздаче лицензий платформой. Теперь лицензии можно в собственной утилите:▪️ активировать▪️ мониторить (свободные/занятые)▪️ управлять централизованноЛицензии можно получать через менеджер (в том числе для файловых баз):▪️ локальные лицензии → выдаются на компьютер▪️ сетевые/удалённые → на сеансОграничивать выдачу по:▪️ пространствам лицензирования▪️ информационным базам▪️ продуктамПисать более умные механизмы автополучения лицензий в коде. Добавлены методы:▪️ПолучитьДоступныеМенеджерыЛицензий()▪️ПроверитьДоступностьМенеджераЛицензий()▪️ПолучитьОтветЦентраЛицензирования()И расширены:▪️автоматическое получение лицензий▪️работа с носителямиНовый глобальный объект МониторингЛицензий позволяет прямо из кода анализировать состояние лицензий.Подписаться: TG | MAX#Практика1С #ПримерКода1С #Релиз8_5наПроде

8 мая 2026 г.1 060В Telegram

Когда проводить рефакторинг?Никогда, если:- Код не будет меняться. Например, в одноразовых обработках или устаревшем механизме- Изменение ничего нового не дадут. Рефакторинг ради рефакторинга бесполезен. Важно, чтобы появлялось новое качество. Например, масштабирование станет проще или снизится сложность будущего измененияПозже, если:- Предстоит много работы без мгновенного эффекта. Например, если даже все поменять сложность останется высокой- Рефакторинг окупится не сразу. Например, изменения в этом месте происходят редко и стоимость понимания кода не высока- Его можно делать постепенно и небольшими частямиСразу после, если:- Ожидание следующего удобного случая обойдется дороже. Например, одно и то же изменение нужно внести в несколько мест. Откладывание увеличит риск ошибок и стоимость следующих правок- Без этого вы не чувствуете, что работа завершенаДо, если:- Рефакторинг даст быстрый результат. Например, код станет понятнее или его будет проще менять- Вы точно понимаете, что и как нужно сделать.

4 мая 2026 г.1 210В Telegram
1С и AI, полезные инструменты и сервисы, стандарты и паттерны — пост в ТГ канале

Катастрофическое падение скорости при обновленииВ последнее время флагманские конфигурации 1С выпустили достаточно «тяжёлые» обновления ERP, УХ, KA и т.д.Особенностью этих обновлений, помимо большого количества реструктуризаций объектов так же является большое количество монопольных обработчиков после обновления (это когда идёт «градусник» в пользовательском режиме) и вход в 1С заблокирован.Мы в рамках инцидентов РКЛ уже несколько раз столкнулись с тем, что процесс этого монопольного обновления затягивается на несколько часов или даже суток!Систематизация проблемы показала, что она существует только при использовании MS SQL и при этом полностью отсутствует на PostgreSQL и там этот этап проходит буквально за минуты.Дальнейший анализ показал, что проблема возникает не всегда и не у всех – что с одной стороны сильно затрудняет её решение (так как по классике – такая же нога и не болит), с другой стороны есть что с чем сравнить (тех у кого быстро и тех у кого медленно, при сопоставимом количестве записей в регистрах – чтобы ощутить проблему, этих записей должны быть миллионы и десятки миллионов).Разбор процедур обработчика показал, что происходит регистрация к изменению всех строк определённых регистров для дальнейшей постобработки в фоновом режиме, когда вход пользователей уже возможен, но функционал может быть ограничен.Тонкость регистрации изменений состоит в том, что сначала проверяется есть ли уже такие зарегистрированные изменения (на уровне СУБД это запрос SELECT), и если таковых нет, то происходит уже сама регистрация (на уровне СУБД это запрос INSERT).И по Технологическому журналу 1С мы получали чудовищную деградацию скорости именно при SELECT, если по началу он длился тысячные доли секунды, то затем вырастал до десятков секунд.Разбор плана запроса показал что статистика чудовищно ошибается в предположении сколько строк уже зарегистрировано, например статистика предполагает что их 638 шт, а по факту оказывается 3 564 175 шт.А у тех у кого обновление было быстры

29 апр. 2026 г.1 320В Telegram

https://v8std.ru/mcp/Я тут докрутил mcp к базе стандартов.Можно локально у себя поднять можно готовый подключить.Он по фрагменту кода находит применимые к нему стандартыПолучает стандарты в маркдауне чистом видеПо коду диагностик апк бсл и едт находит описание диагностики и пункт стандарта.Ну и просто умеет искать по произвольным фразам стандарты)

28 апр. 2026 г.986В Telegram

Использование управляемого режима блокировки🟡 В конфигурациях следует использовать управляемый режим блокировок (свойство конфигурации Режим управления блокировкой данных устанавливается в значение Управляемый) и учитывать его особенности.🟡 Они связаны с особенностями механизмов блокировок в самой СУБД и с тем, что СУБД не учитывает физический смысл и структуру объектов метаданных 1С:Предприятия.🟡 Одновременно могут возникать избыточные блокировки на уровне СУБД.🟡 Проверяйте соблюдение стандарта при доработках и перед выпуском релиза.#std460https://v8std.ru/std/460/

25 апр. 2026 г.1 190В Telegram

Спроси меня правильно.Казалось бы, что может быть проще, чем задать НОРМАЛЬНЫЙ вопрос пользователю? А вот оказывается, что для некоторых это сродни ракетостроениюЧтобы не ходить далеко за примером, давайте заглянем в мою любимую 1С и посмотрим, какое сообщение демонстрируется пользователю, если в числовое поле введено значение пусть превышающее максимально допустимое. На случай, если вы забыли или не знали⚠️В поле введены некорректные данные.Варианты продолжения диалога Продолжить ввод - Отменить вводДа, я в курсе, что это больше похоже на предупреждение, да и нет там вопросительного знака, так что вроде технически - это не вопрос. Но логика взаимодействия говорит о том, что вопрос — и еще какой. Просто когда-то очень давно невоспетая ленивая жопа человек, писавший ядро платформы, не добавил И что Вы таки будете с этим делать?И что тут не так?Ну для начала — неинформативно. Так же, как и в случае с простым оповещением, информация - ключ к пониманию. Почему данные некорректны? Добавьте пояснение: Вы ввели лярд в поле, в котором максимальное допустимое значение - 1. Уже понятно и пользователю будет проще сориентироваться, что ему надо сделать.Второе. Неоднозначность трактовки. По мне так Продолжить ввод означает Если нельзя, но очень хочется - то можно. То есть вроде как не лезет, но если поплевать и надавить - войдёт. Но по факту - нет. Меня просто вернёт обратно в место ввода. Где я опять нажму Enter - и опять попаду на тот же вопрос. Он даже не поинтересуется у меня не идиот ли я, если упорно пытаюсь ввести тоже самое кривое значение дважды😔Суть в том, что в этой ситуации вопрос (а это вопрос, мы уже разобрались) - тут не нужен совсем. Нужно оповестить пользователя Вы ввели некорректное значение. Введите число в пределах от 0 до 1.И один вариантОКВообще у вопросов, которые мы задаём пользователю, есть два золотых правила1️⃣Не используйте отрицание в вопросе. Тот самый недопарадоксВы не хотите?Варианты ответаДа, не хочу - Нет, не хочу2️⃣Суммарно в вопросе и вариант

24 апр. 2026 г.1 090В Telegram

Информирование пользователейГрамотное общение с пользователем посредством интерфейса - это про умение продумывать сценарии, логику работы и формулировать мысли.Первое и часто единственное, о чём разработчики хотят общаться с пользователями - об ошибках. Причем только об ошибках пользователей. Но даже в этой необходимой базовой вещи информативности бывает преступно мало. Давайте посмотрим на простом примереЕсть платёжный документ, который надо отправить на согласование. Одна из основных проверок любого платёжного документа - предполагаемая дата оплаты, она же дата платежа.Пользователь нажимает на кнопочку «Отправить на согласование» и получает ошибкуНекорректная дата платежа«Чё ты доебался?» - спросит кто-то, ведь понятно же, что накосячили в дате платежа. Ну ок. А в чём именно? Как исправить? Каким должно быть значение, чтобы всё прошло на ура?Сравните.Указанная дата платежа - 22.04.2026 - не совпадает с установленными платёжными периодами для <Организации>/<Контрагента>/<Типа операции>. Измените дату платежа таким образом, чтобы она совпадала с платёжным периодом. Ближайший доступный период 27-30.04.2026. Или измените статус платежа на «срочный»Да, сообщение получилось длиннее. Но информативнее. Мы сразу выдаём пользователю всю необходимую информацию: какое именно значение является некорректным, почему, что необходимо сделать, чтобы исправить ситуацию - и какие именно действия надо для этого предпринять. В целом, для классических правил описания ошибки не хватает только начать с «Ошибка согласования документа». Но подобное я считаю необходимым только для отложенных или многосоставных действий.На этой стадии ещё неплохо обеспечить согласованность интерфейса со сценарием исправления ошибки, создавайте у пользователя прямую связь с элементом интерфейса. Да, слово "изменить" - универсальное, но всё же👉если для каждого статуса у вас предусмотрена собственная кнопка - используйте название этой кнопки (предположим, в информации для пользователя можно написать "или исполь

21 апр. 2026 г.1 010В Telegram
1С и AI, полезные инструменты и сервисы, стандарты и паттерны — пост в ТГ канале

Зацените какой прикол раскопал в платформеПытаюсь запустить сеанс 1С:Предприятие из конфигуратора, запущенного из EDT. Да, я знаю толк в матрёшках.э 😂А оно не запускается с ошибкой:Существуют активные сеансы работы с данной информационной базой, использующие Платформу 1С:Предприятия другой версии.Используйте для подключения к информационной базе платформу версии 8.3.27.1859.А я как бы на 8.3.27.1859 и запускаю. Именно эта версия у меня обозначена в конфигураторе, эта же версия указана в EDT. А ошибка есть.Знаете в чём косяк? А в том, что в списке баз 1С для этой базы прописана другая версия. И EDT на эту настройку в списке баз кладёт болт и запускает конфигуратор версии, которая указана в EDT. А конфигуратор, запущенный на другой версии, как дурачок пытается выполнить это невыполнимое требование и запускает Предприятие на невалидной платформе.Мммм, покупка нового кресла всё ближе и ближе...P.S. Ну и если я какой-то текст до конца дочитываю, то никогда не обломаюсь поставить свой царский лайк, а, возможно, даже подпишусь на автора

9 апр. 2026 г.1 310В Telegram
1С и AI, полезные инструменты и сервисы, стандарты и паттерны — пост в ТГ канале

🧩 Привилегированный общий модуль в расширенияхВсем знаком модуль, способный выполнять операции с неограниченными правами: для этого достаточно поставить галочку: Привилегированный. На одном из моих проектов такой модуль удобно задействован для логирования.У привилегированного режима есть разные нюансы, например: ▪️не отключает RLS для некоторых видов объектов, включённый перед пакетным запросом с временными таблицами (8.3.11)▪️мог вызвать падение СУБД (8.3.12)▪️не срабатывает во внешних обработках (до сих пор): УстановитьПривилегированныйРежим(Истина); // Отключаем проверку прав доступаПривилегированныйРежим() вернёт ЛожьТак вот, Dmitry Kinash поделился ещё одним непредсказуемым поведением платформы, дословно:А вы знали, что если перехватывать в расширении процедуры из привилегированного модуля, то они выполняются в режиме без привилегий? Дело в том, что в общих модулях в расширениях не предусмотрели свойство "Привилегированный" (Privileged), а потому механизм расширений выполняет код как обычный. Если у вас далее по коду есть проверка привилегий и вы не хотите получить ошибку, то вам придется явно повысить привилегии:#InsertSetPrivilegedMode(True);#EndInsertУчитывайте данные нюансы при проектировании архитектуры.#Практика1С #Лайфхак1Снику

8 апр. 2026 г.1 160В Telegram
1С и AI, полезные инструменты и сервисы, стандарты и паттерны — пост в ТГ канале

🔥 Андрей Соколов: «Как съесть XML с JSON, и не поперхнуться»Как правильно работать с XML и JSON в 1С-интеграциях? Андрей Соколов (ведущий разработчик KORUS Consulting) разобрал оба формата с нуля — и это настоящая кладезь практики:▶️Что внутри:🔵История форматов и модели данных🔵Схемы и конвертация — от простого к сложному🔵Потоковое чтение больших файлов без утечек памяти🔵XDTO — когда нужен жёсткий контроль структуры🔵Производительность и подводные камни, на которых ломаются интеграции🔵И многое другое▶️Кому будет полезно:Всем, кто хотя бы раз мучился с парсингом XML или JSON в 1С. Особенно — тем, кто проектирует интеграции с внешними системами.▶️Смотреть:🔜 YouTube: https://youtu.be/o8ras_BflLk➡️ ВКонтакте: https://vkvideo.ru/video-232435421_456239041Ставьте лайки, комментируйте, делитесь с коллегами — и следите за каналом: скоро выложу и другие доклады с Жёлтого клуба!❓А какие темы интеграции вам были бы ещё интересны? Пишите в комментариях — соберём идеи для следующих встреч! 👇#event@it_lunch🔥 Подписывайся на IT Ланч!

8 апр. 2026 г.1 220В Telegram
1С и AI, полезные инструменты и сервисы, стандарты и паттерны — пост в ТГ канале

Решил тут немного освежить базу по транзакциям. Вообще правила работы с транзакциями хорошо описаны в стандарте 783. Но как показывает практика, не все достаточно хорошо знакомы с этим стандартом, и следуют его рекомендациям. Давайте разберем несколько ключевых особенностей при работе с транзакциями.В 1С вложенных транзакций не бывает. Вы можете написать сколь угодно большую вложенность НачатьТранзакцию() - счётчик 1 НачатьТранзакцию() - счётчик 2 НачатьТранзакцию() - счётчик 3Всё это будет одна транзакция. На сервере приложений будет лишь увеличен счетчик количества транзакций. Фактически транзакция завершиться, когда вы напишите ЗафиксироватьТранзацию() - счётчик 2 ЗафиксироватьТранзацию() - счётчик 1 ЗафиксироватьТранзацию() - счётчик 0 - транзакция фактически будет зафиксированаВ процессе работы, транзакция может завершиться и ошибкой. Причины могут быть самые разные. Поэтому работу с транзакциями нужно оборачивать в попытку. Важно НачатьТранзакцию() должно быть сразу перед Попыткой. НачатьТранзакцию();    Попытка         ДокументОбъект.Записать()         ЗафиксироватьТранзакцию();     Исключение         ОтменитьТранзакцию();         ВызватьИсключение;    КонецПопытки;ВызватьИсключение - рекомендуется вызывать после отмены транзакции, чтобы в случае если наша транзакция является внутренней, пробросить исключение на внешнюю транзакцию, и не дать ей зафиксироваться. В противном случае если этого не сделать, когда мы выйдем на внешнюю транзакцию и попробуем обратиться к базе данных (записать или прочитать), то получим очень веселую ошибку "В данной транзакции уже происходили ошибки". Эта ошибка которую очень сложно отловить, поэтому лучше сразу работать с транзакциями правильно, т.к эта ошибка 100% результат некорректной работы с транзакциями со стороны разработчика.Ошибки в транзакциях бывают восстановимые и невосстановимые. Восстановимые ошибки - это такие ошибки, которые не влияют на работу базы данных, поэтому могут быть обработаны в ис

31 мар. 2026 г.1 300В Telegram

РУБРИКА «ЧёПоСтандартам»Имя, синоним, комментарийСтандарт большой, но подсвечу важные моменты, которые будет полезно вспомнить опытным программистам или узнать новичкам:#std474...Например, неправильно: «Загрузка данных из Эксель», «Загрузка данных из MS Excel»,правильно: «Загрузка данных из Microsoft Excel».....1.5. При этом для стандартных реквизитов Родитель и Владелец, следует всегда указывать синонимы, отличные от синонимов по умолчанию. Для справочника Файлы: правильновложить в синоним прикладной смысл: «Папка» или «Папка с файлом».Другой пример. В то время как для стандартного реквизита Наименование некоторых справочников может вполне подойти синоним по умолчанию «Наименование», в случае со справочником Файлы целесообразнее назначить синоним «Имя файла», а для справочника ФизическиеЛица – дать синоним «ФИО».1.6. В случае, когда есть два (или более) объекта метаданных со схожим назначением, необходимо, чтобы синонимы каждого объекта полностью описывали каждый объект.Например, неправильно давать справочникам следующие синонимы:Банковские счета,Банковские счета контрагентовправильно:Банковские счета организаций,и Банковские счета контрагентов2.3. Имена объектов метаданных не должны превышать 80 символов.3.1. Комментарий задается только в тех случаях, когда необходимо дать участнику разработки конфигурации какие-либо пояснения по данному объекту конфигурации. Например, комментарий к реквизиту справочника может быть таким: "Индексирование поставлено для оптимизации отчетов с отбором по виду контрагента", или: "Используется в регламентированном учете".4. В именах, синонимах и комментариях не допускается использовать букву "ё".По пункту 1.5, а кто-то менял синоним у стандартного реквизита "Владелец"?) 💬Ну и не забываем про поле "Комментарий" у объектов метаданных, практически никогда не встречал его заполнение, а иногда очень хотелось бы, чтобы там была важная информация, отвечающая на вопрос "нафига оно так?")В дополнение к этому стандарту можно почитать #std468 По

31 мар. 2026 г.1 060В Telegram