?

Log in

No account? Create an account

Previous Entry | Next Entry

В конце января я посетил курс в Учебном центре 1С №1 курс под названием "Разработка распределенных информационных систем в "1С:Предприятие 8" (почитать описание и записаться можно тут). Ведет его замечательный преподаватель и методист, Арутюнов Сергей Рафаэльевич. Курс просто архиполезен для всех, кто сталкивается с необходимостью разделять системы по функциональным областям - базами (РИБ, внешние источники), ролями, RLS-ами, разделителями...

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

  1. В отличие от платформы 8.1, где каждая информационная база могла встречаться в списке ровно один раз, в 8.2/8.3 можно ее вписать столько раз, сколько нужно, обвешав, например, разными параметрами. Соответственно, каждая строка списка теперь несет несколько иной методический смысл - группа ИБ идентифицирует информационную систему, а конкретный элемент списка - точку входа в данную систему. Благодаря обилию средств интеграции с одной стороны и разделителей - с другой, понятия "точка входа" и "информационная база" в общем случае не совпадают.

  2. В платформе 8.3 появилась очень мощная функция, которую, кстати, почему-то проигнорировал в своем обзоре Евгений Гилев - ключ /UsePrivilegedMode , который позволит пользователю с административными правами запустить сеанс в привилегированном режиме. Это позволяет вообще отказаться от роли "ПолныеПрава", и дать администратору роль, в которой будет только галочка "Администрирование". А когда потребуется доступ к данным - он сможет культурно войти с ключом, сделать свое грязное дело и культурно выйти. Важное замечание - ключ не откроет аналог "полного" интерфейса - командный интерфейс будет отображать только то, к чему есть доступ в роли (в описанном случае - ничего), так что Use "Все действия", Luke...

  3. Небольшая заметка касательно ролей - если мы играем доступом к объектам/реквизитам, стандартные реквизиты в 8.3 надо контролировать отдельно - галочки доступа к ним не изменяются, если взвести/снять галочку доступа к самому объекту.

  4. В значениях разделителей не рекомендуется использовать символы + и -, т.к. они используются в строке соединения для указания значений разделителей.

  5. Разделители создают обособленные области памяти, и разделяют, помимо собственно данных, также блокировки, нумераторы и т.д. Так что при использовании разделителей может оказаться ненужным механизм префиксов номеров. Ну и автоматически работающая сквозная автонумерация внутри каждого разделителя еще раз подчеркнет, что не стоит для аналогичных задач использовать RLS (добавлю также от себя, что RLS - это то еще средство внесения тормозов в систему...)

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

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

  8. На любую условность в отображении надо заводить функциональные опции

  9. При использовании стандартных обменов, если загружаются изменения конфигурации, пакет надо считать 2 раза! Первый раз - загрузятся изменения конфы, потом идем в Конфигуратор, применяем их, обновляемся, возвращаемся в режим Предприятия и считываем сообщение еще раз.

  10. В лаунчере функция "Добавить существующую базу" не проверяет существование файловой базы. Этим можно пользоваться для проектирования распределенной системы.

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

  12. Очень мощный метод - УстановитьПривилегированныйРежим(). Работает только на сервере. Позволяет, например, реализовать следующую архитектуру взаимодействия баз: создаем общий модуль, в котором будут интерфейсные процедуры, каждая из них будет начинаться с установки привилегированного режима. Снимать его не обязательно- при завершении процедуры он сбросится автоматически. А внешний пользователь будет иметь право ТОЛЬКО на внешнее соединение :-) Таким образом мы не паримся с его ролями, и контролируем все, что он сможет увидеть, внутри интерфейсных процедур. Общий принцип проектирования: внешняя часть интерфейса должна быть стабильной!

  13. Если мы используем РИБ, то для каждого действия должна быть единственная точка ввода данных! Например, если часть бухгалтерии (какой-нибудь филиал) мы вынесли в периферийный узел, для остальных филиалов также надо создать периферийные узлы, в архивной базе первичные данные вводиться уже не должны!

  14. Платформа 8.3 имеет полновесные конфигуратор и клиент под Linux, что позволяет на линуксовом сервере программно запускать конфигуратор, например, для выгрузки/загрузки базы, методом ЗапуститьПриложение.

  15. Веб-сервисы - единственный способ взаимодействия баз 1С под Linux (ну нету там COM-соединения, это чисто виндовая технология...)

  16. Если не получается подключиться по COM к внешней базе, можно программно проверить, существует ли файл comcntr.dll нужной версии и выполнить regsvr прямо в процедуре.

  17. 1С: Предприятие имеет возможность указания пользовательских параметров запуска в командной строке по ключу /C. Если передаваемую строку параметров парсить в процедуре ПередНачаломРаботыСистемы, можно создать свое API для конкретной конфигурации. Исполняться оно будет на клиенте. Далее можно использовать эти команды, например, в bat-файлах. Получится такой вот аналог фоновых/регламентных заданий на клиенте.

  18. Когда COM-соединение перестает нам быть нужным, надо не забывать его рубить кодом типа Соединение = неопределено. Иначе есть риск, что оно подвиснет, и будет у нас висячее зомби...

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

  20. При использовании веб-сервисов рекомендуется в качестве типа параметров использовать строку - это самый базовый тип, который все понимают :-)

  21. Еще одно преимущество веб-сервисов перед COM - внешнее COM-соединение съест еще 1 лицензию. А подключение к веб-сервису лицензию не ест, т.к. не активируется еще один клиент.

  22. WSСсылки работают только на сервере!

  23. COM-соединение должно служить только для взаимодействия 2 клиентов 1С под Windows. Во всех остальных случаях (например, для связи 2 серверов) рекомендуется использовать вебсервисы.

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

  25. Методически правильно работать с Automation через неглобальный общий модуль.

  26. Хитрость при организации хранилища сопроводительных файлов - если именовать все файлы в папке GUID-ами, то ОС очень быстро ее проиндексирует за счет того, что длина имен файлов будет одинаковой. А сопоставление понятного имени GUID-у будет выполнять 1С. Получается быстро, и база не распухает.

  27. Если мы передаем в процедуру/функцию параметры, которые не планируем изменять, всегда рекомендуется их помечать словом Знач. Дело вот в чем. 1С возвращает назад не только результат функции, но и все параметры, не помеченные как Знач. Еще раз: если мы с клиента вызвали серверную процедуру - она нам вернет все параметры, которые мы ей отдали. А это мало того что трафик, так еще и возможна ситуация, когда с клиента на сервер улетела строка, а прилетела ТаблицаЗначений, которая, как мы помним, на клиенте существовать не может. Пример гипотетический, понято, что это очевидный косяк, но все же...

  28. Механизм внешних источников данных до сих пор сырой.

  29. Новый функционал 8.3 - поддержка иерархии внешних источников данных. Мы задаем поле, содержащее в себе идентификатор родителя. Эту иерархию подхватывают формы списка и СКД.

  30. не разобрал свой почерк :-) Будет еще один повод тебе, мой дорогой читатель, сходить на эти курсы :-)

Тэги: