Skip to content

Latest commit

 

History

9 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

  1. Как поднять и что настроить

Проект упакован в docker, поэтому для запуска вам необходим сам docker и папка для проекта Установить Docker Desktop можно по ссылке https://www.docker.com/products/docker-desktop/

Клонируйте проект с помощью команды git clone в папку для проекта

Внутри папки BackEnd создайте файл .env, туда необходимо поместить логин и пароль для авторизации 1С:

ApiCredentialsLogin=ВашЛогин ApiCredentialsPassword=ВашПароль

Если ваш http-сервис 1С слушается не на localhost:8080, то эту настройку можно поменять в файле docker-compose.yml в корне проекта (environment -> - ApiCredentials__BaseAddress=http://host.docker.internal:8080/)

После добавления файла окружения перейдите в папку склонированного проекта через терминал/PowerShell и выполните команду: docker compose up --build

Эта команда соберет и запустит проект, nginx начнет раздавать статику фронтенда на http://localhost:3000/ По этой ссылке вы сможете открыть дашборд

  1. Описание выбранного механизма 1С

Я выбрал http-сервис для реализации задачи. Он имеет всего два эндпоинта, один из которых (POST /Request) принимает на вход текст запроса, выполняет его и возвращает результат в виде массива объектов JSON. Запрос POST, а не GET, я сделал для того, чтобы из бэкенда проекта при запросе к 1С в теле запроса передавать текст запроса на языке запросов 1С, который необходимо выполнить. Второй эндпоинт (GET /Remains) формирует отчет по остаткам товаров на складах на текущую дату (дата не сеанса, а сервера 1С) и так же возвращает результат в виде массива объектов JSON.

  1. Как я использовал ИИ

На ИИ (Курсор, Клод) была полностью переложена генерация кода (в редких случаях я выполнял небольшие правки руками, буквально корректировка строки кода). Я сам занимался настройкой окружения, установкой зависимостей, выстраиванием архитектуры проекта. Даже в случае 1С код писал ИИ, а я занимался уже добавлением объектов метаданных, публикацией на сервере. Один из ключевых подходов, который наиболее помогал: выдавать в промпте максимально возможное описание, которое возможно. Не опускать никаких деталей, разжевывать, максимально конкретизировать конечную цель, используемый стек и тд. Чем лучше я мог представить в своей голове, чего именно я хочу увидеть, тем качественнее я получал результат Еще один подход, который помог: просить ИИ рефакторить код и раскладывать его на универсальные и переиспользуемые процедуры/функции. Это позволяло позднее при даче контекста ИИ не переписывать целые модули, а просто добавлять в существующий код новый вызов функции ИИ предлагал неработающие решения на языке 1С, это я заметил, когда сам тестировал сервис. Проблема была незаметна при пробегании глазом: при выборе в запросе полей ссылочного типа они должны были быть форматированы в строчный идентификатор, но процедура неправильно проверяла тип. Позже, уже на стадиях бэкенда и фронтенда, ИИ пару раз забывал использовать переменную, которую сам специально создавал. Эту ошибку я находил еще до чтения кода -- редактор кода сам сразу подсвечивал такие проблемы. Ошибок крупнее этих не было.

  1. Ответы на вопросы на понимание

4.1. Я предпочел механизм http-сервисов сразу по ряду причин. Несмотря на то, что OData не требует расширений конфигурации или изменений в самой конфигурации, он все равно требует настройки, поскольку для его работы необходима установка интерфейса с помощью УстановитьСоставСтандартногоИнтерфейсаOData(). В типовых конфигурациях этот состав можно настраивать с помощью панели администрирования, в самописных может даже понадобиться лезть в код. При желании достучаться до новых таблиц может возникнуть необходимость сначала добавить их в интерфейс. http-сервис хоть и требует вмешательства в конфигурацию, но при должной настройке это вмешательство становится разовым, что в долгосрочной перспективе, на мой взгляд, удобнее. Помимо этого наша задача требует только чтения, а Odata позволяет еще и вносить изменения в базу данных, соответственно, требует более серьезной настройки прав доступа и ролей. Еще один недостаток OData - сильное усложнение и плохая читаемость строки запроса при его усложнении, а если не захотим ее усложнять - получим много лишних данных и ответ от 1С будет медленнее. Кроме того получаем мелкие неудобства в виде фиксированных именований полей (например, Наименование = Description), которые для отображения пользователю придется в коде переименовывать

Web-сервис я предпочел не использовать, поскольку их предназначение семантически -- выполнение процедур, а нам надо просто прочитать данные. + требуется получение wsdl-описания для того, чтобы с ним работать.

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

4.2. Приложение выдаст человекочитаемое сообщение об ошибке, но не упадет, продолжит функционировать (добавлены обработчики ошибок). Продемонстрирую это на видео

4.3. Аутентификация происходит с помощью логина и пароля пользователя 1С (Basic-футентификация) Учетные данные хранятся в файле окружения .env на бэкенде, этот файл добавлен в гитигнор и докеригнор, чтобы нигде не светить эти данные Читал, что еще возможно использование user-secrets, этот функционал предоставляет сам ASP.NET, но не стал прибегать к нему, потому что он сохраняет данные в локальные файлы, мне показалось, что эта практика не очень хороша для прода

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages