Pull to refresh

Comments 12

Здесь код агенту не нужен, нужны метаданные и возможность выполнить запрос

А как из метаданных понять, почему получилась именно такая сумма ? Название реквизита объяснит алгоритм расчета, условия применения скидок и особенности доработанного проведения ? Выполнить запрос и получить число — это еще не разобраться, откуда оно взялось.

У вас же в начале статьи задача именно такая: чужая конфигурация, нужно понять происхождение чисел. А к концу выясняется, что код для этого не нужен. Удобно получилось: к чему платформа нормально не дает доступа, то объявляем необязательным :)

В lsFusion, например, сервер приложения сам предоставляет MCP с чтением загруженных исходников и выполнением кода. Агент может прочитать бизнес-логику и проверить ее на конкретных данных. Вот пример со скидками в MyCompany: Claude разобрал условия применения скидок, сверил расчет по строкам документа и обнаружил, что у скидки «от 110 рублей» в настройках стоит 11000. А скидка «по карте» вообще не проверяет наличие карты. По названиям объектов он бы прекрасно «понял» ровно противоположное.

Поэтому претензия к выгрузкам вполне обоснованная. Только каким образом консоль запросов с агентом внутри решает описанную проблему доступа к коду ? Или проблема нужна была для первой половины статьи, а продукт нашелся только для второй ?

Разделение вы поймали верное, и в статье оно смазано - соглашусь.

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

Теперь прямо на ваш вопрос: никак. Консоль запросов проблему доступа к коду не решает и не заявлена как ее решение. Раздел “Два разных вопроса” в начале для этого и написан: во второй задаче у меня свой интерес, я делаю инструмент под нее. Про код - в финале сказано, что асимметрия не дает мне покоя, а не что я ее закрыл. Кодовый агент прямо в конфигураторе, без выгрузки - над этим я тоже работаю, и прототип уже есть.

Про lsFusion уточню для тех, кто читает ветку: это не инструмент для 1С, а отдельная платформа разработки со своим языком, где прикладная логика и есть код, загруженный в сервер приложения. Оттуда и свойство, которое вы описываете: исходники уже внутри, выгружать их неоткуда и незачем. Маршрут при этом тот же самый - вы сами пишете, что сервер предоставляет MCP. Разница не в протоколе, а в том, где лежат исходники: в 1С их нативно в сервере нет, и статья ровно про это. Так что на мой финальный вопрос ваш ответ звучит как “сменить платформу”. Тоже ответ, но статья не про это.

А сам разбор, который вы показываете, делится ровно по той границе, которую я и проводил: механизм - из исходников, а построчная таблица - из настроек и данных. В колонке “почему” кода нет ни разу. Исходники понадобились один раз - узнать правило отбора и формулу; дальше по каждому следующему документу работают данные.

И про сами находки. Обе ваши - порог, названный “от 110 рублей”, и скидка, не проверяющая карту, - это по сути один вопрос: какие условия у этой скидки заполнены и почему она применилась к этой строке. В 1С на такой вопрос консоль запросов с агентом внутри отвечает сама, настройки скидок и движения документа читаются запросом, исходники не нужны. Ровно вторая задача из статьи, та самая, ради которой я все это и затеял.

Консоль запросов “Линза” - часть подготовки к тому кодовому агенту в конфигураторе, про который выше. Поиск по готовой базе знаний типовых конфигураций через RAG будет и в консоли, и в агенте - он и отвечает на ваш первый вопрос, как трактовать имена реквизитов. Хотя именно с такими вопросами агент у меня справлялся и без базы знаний.

Исходники понадобились один раз — узнать правило отбора и формулу

Так я ровно об этом и говорю. Один раз понадобились - это уже не "не нужны" :) Если алгоритм заранее известен и соответствует текущей конфигурации, перечитывать его для каждого документа действительно незачем. Только откуда агент его узнал, вы сейчас сами и написали.

В колонке “почему” кода нет ни разу.

А там должен был быть листинг ? Агент прочитал код, применил найденные правила к данным и объяснил результат человеческим языком. Отсутствие исходников в итоговой таблице ничего не говорит об их роли в получении ответа. Иначе можно еще заявить, что запросы не понадобились: их же в таблице тоже нет.

Например, в приведенном разборе скидка называется «по карте», но фактически применяется и без карты. Запрос покажет настройки скидки. А как из одних настроек установить, проверяет ли программа наличие карты, при каких условиях пропускает эту проверку и какое правило выбирает при нескольких подходящих скидках ? Для этого надо знать, как программа эти настройки использует.

Дальше появляется RAG по типовым конфигурациям. Для известной версии типовой конфигурации это вполне может помочь. Только начинали мы с чужой базы. Если в ней изменили алгоритм, а база знаний описывает типовой, как агент обнаружит расхождение ? В статье вас беспокоила устаревшая выгрузка. Почему устаревшее относительно конкретной базы описание вдруг перестает быть проблемой ?

И пример с lsFusion - это демонстрация работающего подхода. Требования сначала сменить платформу, чтобы признать пользу доступа к исходникам, там не было.

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

Я разбираю 1С, а не lsFusion. Демонстрацию могу сделать на любой нетиповой конфигурации - нетиповой 1С.

Консоль работает в нетиповых условиях как раз потому, что читает актуальные метаданные конкретной базы, а не описание откуда-то еще.

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

Ваши же два примера этим и берутся. Порог “от 110 рублей” со значением 11000 находится по реквизитам, это прямое расхождение названия с заполнением. Скидка, не проверяющая карту, находится пробой по данным: смотрим, как она применялась в прошлых документах, и видим, что применялась там, где карты не было.

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

Так, надо перейти уже от чата ИИ-агентов к кожаным мешкам :) . Кстати, Вы чем пользуетесь для ответов ? У меня - GPT-6 Astra с максимальным reasoning, а у Вас какая-то очень странная модель. То есть текст вроде связанный, но смысл плывет.

И работает он ровно в ту сторону, о которой вы спрашиваете - зная, как устроено типовое, агент и отличает нетиповое

Это блин как ? Если я полностью переписал блок типовой, то RAG по документации типовой уже нерелавантен от слова совсем. Зачем вообще к документации обращаться ? Если же там пара правок в проведении, то как не зная этих правок узнать в чем косяк ? А если вообще не типовая, а нетленка написанная с нуля ? Тогда вообще это все бесполезно ?

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

Так, а если дело в коде, то что делать ? Тогда уже надо программиста нанимать ?

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

Я примеры из lsFusion просто привожу, чтобы показать, что можно сделать нормально. И это не нерешаемая задача, если подойти с умом.

Astra вышла пару дней назад, я полагаюсь на старого доброго Claude и на естественный интеллект

Если я полностью переписал блок типовой, то RAG по документации типовой уже нерелавантен от слова совсем

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

Про нетленку с нуля еще проще: там нет типового, с которым сверяться, зато есть регистры, движения и данные. Консоль работает с ними, а не с документацией. RAG дает ей знания как это делать - даже Claude Opus у меня путался в аргументах к виртуальным таблицам регистров - что говорить о нейронках попроще. С RAG - не путаются.

И да, если дело в коде - нужен программист. Только сейчас его зовут на все подряд, включая случаи, где надо было посмотреть одну галочку в настройках. Инструмент, который честно говорит “тут я пас, идите в модуль”, экономит как раз остальные.

Но я Вас понял: 1С плохая, lsFusion хороший. Спорить не буду - я решаю задачу исключительно в контексте 1С, а вы подменяете ее на «не в 1С это решаемо и так». Согласен. Но мне и тысячам программистов, аналитиков и консультантов, в 1С теперь как жить?)

Есть открытые mcp, которые предоставляют семантический поиск по справке и схемам отчетов, помимо структуры метаданных.

У тех, кто использует git, конфигурация всегда в виде файлов и живет.

исходный код внутри MSSQL лежит в таблице dbo.config
я когда-то сам его находил и вытаскивал отттуда время последнего обновления конфигурации на языке 1С, т.к. напарник динамически обновлял 1С много раз в день,
т.е. можно брать его оттуда не выгружая файлы :-)

deepseek:
SELECT
FileName, BinaryData, PartNo
FROM dbo.Config
WHERE FileName
LIKE ‘%CommonModules/МойМодуль/Module%’
ORDER BY PartNo;

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

Первая задача — вопросы про код. Что делает эта процедура, где она еще вызывается, почему после обновления сломалось проведение. Тут агенту нужен текст модулей, а вместе с ним, уже во вторую очередь, и метаданные: понять, о каких объектах в этом коде идет речь.

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

Пришел к выводу, что для кода не нужно что-то изобретать, агенты в популярных средах делают все отлично, им просто нужно дать возможность смотреть данные в живой базе. Такие решения уже есть.
А вот для запуска агента по данным (со стороны пользователя) - сделал свою обработку, которая решает агентский цикл прямо в 1С и заодно защищает данные живой базы от утечки в открытые LLM.

Разделение вы описали ровно то же, что у меня в статье, и по второй задаче мы совпали - агент у нас в консоли запросов тоже работает прямо в 1С, используя агентский цикл, только ему помогают уже собранные на сервере инструменты. Локальная модель ИИ не всем доступна, ценник на железо немалый. Поэтому утечку я закрываю обезличиванием: ссылки и названия агенту не показываются, он видит числа и обезличенные идентификаторы, а дешифратор остается на клиенте.

А с первой не соглашусь. “Агентам в популярных средах не нужно ничего изобретать” верно ровно до того момента, пока код им кто-то дал. Дать его можно только выгрузкой - в xml или чтением из СУБД, неважно: агент все равно работает с копией, снятой на момент, и снимать ее заново надо после каждого изменения. Статья именно про это.

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

Sign up to leave a comment.

Articles