TGViewer
Channel Public Channel
1C Portal | Программирование

1C Portal | Программирование

@portal_1c

Присоединяйтесь к нашему каналу и погрузитесь в мир для 1С-разработчика

Связь: @devmangx
Subscribers
5.18K
Photos
332
Videos
357
Links
493
Recent Posts 20 shown
Post #1150 726
1С Напарник против обычного ИИ-агента: кто лучше справляется с реальными задачами разработчиков?

Наткнулся на интересный эксперимент: автор собрал собственного AI-агента на базе LangGraph, Deep Agents и RAG и сравнил его с 1С Напарником на пяти практических задачах. Для поиска информации использовали PostgreSQL, pgvector, исходники типовых конфигураций 1С и интернет-поиск.

Что показало сравнение:

🟡 Технологический журнал — оба предложили настройки, но агент подробнее разобрал диагностику блокировок.
🟡 История версий в БСП — агент описал подключение справочника, а Напарник ответил про другой механизм.
🟡 Отмена проведения документа — агент предложил код проверки зависимых документов, Напарник ограничился общими рекомендациями.
🟡 Версионирование файлов и себестоимость — агент дал более конкретные шаги для решения проблем.

Итог: в этих пяти примерах обычная LLM с качественным поиском и доступом к исходникам оказалась полезнее специализированного помощника. Зато 1С Напарник отвечал быстрее.

Интересный кейс о том, насколько важны для AI-агентов не только сама модель, но и инструменты, RAG и доступ к актуальному коду.

https://habr.com/ru/articles/1092738/

@Portal_1C
  • ❤ 2
  • 😁 1
  • 🤝 1
Post #1149 707
Полезный репозиторий для 1С-разработчиков: BenchmarkOneScript — тестирование производительности кода

Библиотека для измерения производительности кода на OneScript, вдохновлённая BenchmarkDotNet. Вместо ручных замеров времени выполнения можно организовать полноценные бенчмарки и сравнивать результаты.

Что умеет:

🟡 Параметризованные тесты — проверка производительности на разных наборах входных данных.
🟡 Мониторинг памяти — отслеживание выделения памяти во время выполнения.
🟡 Сравнение версий — запуск бенчмарков на разных версиях OneScript.
🟡 Гибкая настройка — конфигурация тестов через аннотации, код или CLI.

Особенно полезно при оптимизации библиотек и скриптов автоматизации: можно сравнивать реализации и оценивать, действительно ли изменения ускоряют выполнение кода.

Важно: инструмент предназначен для OneScript, а не для непосредственного профилирования кода внутри платформы 1С:Предприятие.

GitHub

@Portal_1C
  • 👍 2
  • ❤ 1
Post #1148 667
Быстрый совет по 1С

Если нужно измерить время выполнения запроса или участка кода, используйте ТекущаяУниверсальнаяДатаВМиллисекундах() вместо ТекущаяДата().

Например:
Начало = ТекущаяУниверсальнаяДатаВМиллисекундах();

Результат = Запрос.Выполнить();

Длительность =
ТекущаяУниверсальнаяДатаВМиллисекундах() - Начало;

Сообщить("Время выполнения: " + Длительность + " мс");


В отличие от ТекущаяДата(), которая возвращает время с точностью до секунды, этот метод позволяет измерять интервалы в миллисекундах. Удобно для быстрой диагностики медленных запросов, обработок и регламентных заданий.

Учтите, что это измерение по системным часам, а для точного профилирования производительности лучше использовать специализированные инструменты.

@Portal_1C
  • 🔥 5
Post #1147 690
Пять ошибок в 1С, которые не заметишь даже при успешно пройденных тестах

Документ проводится, код работает без ошибок, тесты зелёные. Казалось бы, всё отлично. Но стоит открыть оборотно-сальдовую ведомость — и выясняется, что учёт уже разъехался. Автор статьи, старший инженер по тестированию 1С в Ozon, разбирает пять реальных проблем:

🟡 Неверный учёт НДС — налог попадает не на тот бухгалтерский счёт.
🟡 Отрицательная себестоимость — ошибка скрывается в настройках учёта, а не в коде.
🟡 Дубли в книге продаж — появляются после обновления конфигурации на документах с историей.
🟡 Некорректное сторно — операция отменена, но часть движений остаётся.
🟡 Ошибки переноса остатков — итоговые суммы сходятся, а аналитика по субконто теряется.

В конце есть практический чек-лист для тестировщиков и разработчиков 1С: что проверять в проводках, регистрах и отчётности, чтобы не пропустить ошибки, которые обычные технические тесты не обнаруживают.

https://habr.com/ru/companies/ozontech/articles/1089048/

@Portal_1C
  • 👍 3
Post #1146 693
Разыменование ссылочных полей составного типа в языке запросов

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

🟡 Если один и тот же запрос используется в разных сценариях, формируйте его текст динамически и подставляйте в ВЫРАЗИТЬ нужный тип в зависимости от контекста.

🟡 Это приведет к дублированию данных и небольшому росту объема хранения, но может существенно повысить производительность и стабильность запроса.

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

https://v8std.ru/std/654/

@Portal_1C
  • ❤ 1
Post #1145 784
Стадия 1С предприятие 🐺

@Portal_1C
  • 😁 16
  • 🥱 1
Post #1144 773
Полезный репозиторий для 1С-разработчиков: Result Pattern вместо бесконечных Попытка...Исключение

1c-tooling/exodus — легковесная библиотека для 1С:Предприятия, реализующая паттерн Result (монада Either).

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

Это особенно интересно для бизнес-логики, где отсутствие данных, ошибка валидации или отказ внешнего API могут быть предусмотренными исходами.

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

Интересная находка для тех, кто хочет сделать обработку ошибок в 1С более структурированной и понятной.

https://github.com/1c-tooling/exodus

@Portal_1C
  • ❤ 4
Post #1143 776
Быстрый совет по 1С

Если нужно найти причину ошибки в сложной цепочке вызовов, не ограничивайтесь ОписаниеОшибки().

Вместо:
Попытка
ВыполнитьОперацию();
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;


Используйте:
Попытка
ВыполнитьОперацию();
Исключение
Информация = ИнформацияОбОшибке();
ТекстОшибки = ПодробноеПредставлениеОшибки(Информация);
ЗаписьЖурналаРегистрации(
"Ошибка обработки",
УровеньЖурналаРегистрации.Ошибка,
,
,
ТекстОшибки
);
КонецПопытки;


ПодробноеПредставлениеОшибки()
позволяет получить не только текст ошибки, но и дополнительную диагностическую информацию, включая стек вызовов.

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

@Portal_1C
  • 💯 6
  • 👍 4
Post #1142 795
Использование объекта РегистрСведенийМенеджерЗаписи

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

🟡 Из-за этого обработчики событий набора записей вызываются и при записи через менеджер записи.

🟡 Чтение записи (или набора записей) из регистра сведений без последующей модификации выполняйте запросом.

🟡 РегистрСведенийМенеджерЗаписи применяйте только когда нужен отбор одновременно по всем измерениям регистра.

https://v8std.ru/std/447/

@Portal_1C
  • 👍 3
Post #1141 806
1С-разработчик должен закончить отчёт до того, как Выгрузить() съест последние 32 ГБ RAM. 😏

@Portal_1C
  • 😁 7
  • 🥱 1
Post #1140 802
Наткнулся на интересный кейс на Хабре: зачем между 1С и внешним API вообще понадобился отдельный Go-сервис

Задача на первый взгляд простая: 1С должна отправлять письма через Yandex 360. Но автор решил не связывать системы напрямую, а вынес всю механику интеграции в промежуточный сервис.

🟡 Go-сервис принимает задания от 1С и сам занимается отправкой;
🟡 состояние очереди хранится в БД, поэтому задания не пропадают после перезапуска;
🟡 предусмотрены retry и защита от повторной обработки одной операции;
🟡 текущее состояние письма и история событий хранятся отдельно;
🟡 RabbitMQ/Kafka специально не добавлялись — для этой задачи хватило БД в роли хранилища состояния очереди.

Отдельно хорошо разобран неприятный сценарий: внешний API принял запрос, но ответ потерялся по timeout. Просто повторить запрос нельзя — можно отправить письмо дважды.

https://habr.com/ru/articles/1088652/

Хороший разбор не столько про Go, сколько про границы ответственности: когда логику интеграции стоит оставить внутри 1С, а когда отдельный сервис действительно упрощает систему, а не становится «микросервисом ради микросервиса».

@Portal_1C
  • 🤔 5
  • ❤ 3
  • 🫡 1
Post #1139 865
Полезный репозиторий для 1С-разработчиков: фича-флаги на OneScript

oscript-library/oneflag — self-hosted сервис для управления feature flags. Проект свежий: репозиторий обновлялся в августе 2026 года.

🟡 включение и отключение функций без изменения конфигурации;
🟡 постепенная раскатка новых возможностей на процент пользователей;
🟡 REST API и собственный dashboard;
🟡 обновление флагов через Server-Sent Events;
🟡 аудит изменений через CloudEvents.

Рядом есть отдельный OpenFeature-провайдер для OneScript, поэтому флаги можно использовать через стандартный OpenFeature API. Оба проекта появились в активно обновляемой экосистеме oscript-library.

Интересная штука для тех, кто хочет принести в разработку вокруг 1С привычный backend-подход: выкатить функцию, включить её только части пользователей и быстро отключить без нового релиза.

@Portal_1C
  • ❤ 1
Post #1138 893
Блокировка данных объекта для редактирования из кода

🟡 Если объект уже заблокирован, платформа выдаст исключение с информацией о блокирующем сеансе.

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

🟡 Для блокировки из встроенного языка используйте метод Заблокировать() у объекта или метод глобального контекста ЗаблокироватьДанныеДляРедактирования().

🟡 Нужно заблокировать объект и, если блокировка получена, изменить данные.

https://v8std.ru/std/490/

@Portal_1C
  • 👍 4
Post #1137 921
Быстрый совет по 1С

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

Вместо:
Запрос.Текст =
"ВЫБРАТЬ
| Регистр.Ссылка
|ИЗ
| РегистрСведений.МойРегистр КАК Регистр
|ГДЕ
| Регистр.Ключ = &Ключ";


используйте:
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| 1
|ИЗ
| РегистрСведений.МойРегистр КАК Регистр
|ГДЕ
| Регистр.Ключ = &Ключ";


Если вам важно только узнать, есть запись или нет, нет смысла получать все подходящие строки. ПЕРВЫЕ 1 позволяет остановиться на одной найденной записи — особенно полезно на больших регистрах и при частых проверках.

@Portal_1C
  • ❤ 2
Post #1136 947
Наткнулся на любопытный кейс: автор прокачал поиск в 1С отдельным движком

sku-search выносит полнотекстовый поиск за пределы 1С и умеет то, чего часто не хватает стандартному поиску:

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

Работает как отдельный локальный сервис: 1С отправляет JSON → сервис ищет по индексу → возвращает результат. Для подключения автор приложил готовое расширение.

https://habr.com/ru/companies/sportmaster_lab/articles/1089212/

@Portal_1C
  • 🔥 5
  • ❤ 1
Post #1135 922
Быстрый совет по 1С

Если в запросе нужно исключить записи, для которых нет значения, не забывайте, что после ЛЕВОГО СОЕДИНЕНИЯ отсутствующее значение будет NULL, а не Неопределено.

Вместо проверки в коде можно обработать его прямо в запросе:
ВЫБРАТЬ
Товары.Ссылка,
ЕСТЬNULL(Цены.Цена, 0) КАК Цена
ИЗ
Справочник.Номенклатура КАК Товары

ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены КАК Цены
ПО Товары.Ссылка = Цены.Номенклатура


ЕСТЬNULL() заменит NULL на указанное значение ещё на уровне запроса.

Удобно, когда результат дальше используется в вычислениях или передаётся в код и вы не хотите отдельно обрабатывать NULL для каждой строки.

@Portal_1C
  • 👍 2
Post #1134 931
Полезный репозиторий для 1С-разработчиков: скачиваем платформу и EDT из командной строки

onec-downloader — CLI-инструмент на Rust для автоматического скачивания дистрибутивов с releases.1c.ru. Вместо ручного поиска нужной версии на портале можно указать продукт и версию прямо в команде.

🟡 скачивание конкретной версии платформы 1С;
🟡 получение последней доступной версии через latest;
🟡 поддержка 1C:EDT;
🟡 фильтрация по ОС, архитектуре и типу дистрибутива;
🟡 автоматическая распаковка скачанных архивов через --extract.

Например:
onec-downloader Platform83@8.3.25.1286


Особенно полезно для CI/CD и автоматической подготовки окружений, где вручную заходить на портал 1С и скачивать нужный дистрибутив совсем не хочется.

GitHub

@Portal_1C
  • 👍 3
  • 🔥 2
  • 💯 1
Post #1132 919
Оптимизация использования оперативной памяти

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

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

🟡 Не проектируйте решение из предположения о неограниченной оперативной памяти.

🟡 Для выявления утечек используйте технологический журнал, добавив в logcfg.xml элемент <leaks>.

https://v8std.ru/std/725/

@Portal_1C
  • ❤ 1
Older posts →

About this channel

How can I read @portal_1c without a Telegram account?
TGViewer shows the public web preview Telegram publishes for 1C Portal | Программирование: recent posts, photos, videos and the subscriber count, with no app, login or account.
How many subscribers does 1C Portal | Программирование have?
1C Portal | Программирование (@portal_1c) has 5.18K subscribers on Telegram, refreshed roughly every 30 minutes.
Does 1C Portal | Программирование know I viewed it here?
No. Public channel previews carry no viewer identity, and TGViewer has no accounts or tracking of what you look up.
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →