Продвинутый курс. Мастер-группа Q&A Block0
Эта запись посвящена второму потоку продвинутого курса.
Мы собрали некоторые вопросы участников первого потока, которые будут полезны вам при изучении 0-го блока.
Глава 2.
1. Автоматическая установка.
В Главе 2 урок 3. Идет рассказ об автоматической установке платформы, и утверждается, что не требуются права локального администратора для обновления.
Попытка смоделировать автоматическую установку платформы на клиенте с WindowsXP для учетной записи с ограниченными правами по описанной методике провалилась с сообщением “Не обнаружена установленная версия 1С:Предприятия”.
Если же запуск производился от имени учетной записи с правами администратора, то все отработало как описано в видео.
Может есть какие то нюансы при настройке учетной записи с ограниченными правами?
Глава 3.
1. Соединения, сеансы и рабочие процессы.
Если запустить 1С:Предприятие 8.2 в режиме Конфигуратора и/или Толстого клиента, то в информации о сеансе показываются параметры рабочего процесса: Рабочий сервер, Порт, Процесс ОС, Номер соединения.
Если запустить Тонкий клиент, то параметры рабочего процесса не отображаются, в списке соединений номера сеанса нет.
Пока не совсем ясно, как связаны Соединение, Сеанс и Рабочий процесс для разных вариантов запуска 1С.
Глава 4.
1. Увеличение числа рабочих процессов влияет на производительность сервера на многопроцессорных системах?
На платформе 8.1 я сталкивался с ситуацией, когда один процесс грузит лишь одно ядро, а остальные ядра простаивают. При этом процесс оказывался перегружен, т.е. используемое ядро было постоянно занято на 100%. Добавление рабочих процессов на сервере существенно увеличивало загрузку процессора из 8 ядер.
2. Балансировка нагрузки кластера.
Поскольку заявлено, что менеджер кластера серверов предприятия сможет динамически переключать пользователя на более мощный/свободный рабочий процесс, то получается, что сервер предприятия выполняет также функции балансировки нагрузки. Работало ли это в платформе 8.1? Для каких случаев это работает в платформе 8.2 – только Тонкий клиент или балансировка нагрузки поддерживается и для других режимов работы платформы?
3.Использование памяти 32-разрядных систем.
Использую сервер с 24 Гигами памяти оперативной, сервер 1С 32 разрядный, SQL 2008 SP1 64-х разрядный….мною не было замечено что на сервере используется только 2 гига памяти, пользователей больше 40… Так ли нужен 64-х разядный сервер 1С (с ключем защиты 64-х), если сервер и так справляется ?
4.Теоретические вопросы по кластеру 1С.
Если поднять центральный и дополнительный физические сервера – нужно два ключа?!.. Если сделать еще два резервных – нужно 4 ключа?!.. Можно поднять главный 64, а дополнитлеьный 32?!.. Можно основные на win, а резервные на lin?!..
5.Файловый vs Клиент-сервер.
Как можно сравнить производительность работы в клиент-серверном варианте (не файловый вариант БД) и работы под терминалом (файловый
вариант БД), чтоб убедить клиента в необходимости покупки лицензии на
сервер 1С.
6.Использование памяти rphost.
В процессе работы сервера объем использования памяти процессами Rphost растёт, в этом можно убедиться наблюдением во времени использования памяти в диспетчере задач.
То есть в понедельник процессы Rphost занимают 500 Мб, в среду 700 мб, в субботу 1 Гб, что по – моему мнению сказывается на производительности.
Выходил я из данной ситуацию перезапуском службы сервера 1С.
Есть ли штатные средства 1С осуществляющие этот перезапуск автоматически, если есть, то при каких условиях (параметрах) будет отрабатывать данный функционал?
7. Если я правильно понимаю, то понятие соединение сервера предприятия платформы 8.1 в платформе 8.2 было разделено на 2 понятия: соединение и сеанс.
В уроках говорится о том, что если соединение рвется, то сеанс будет еще 20 минут ожидать восстановления соединения.
О каком соединении идет речь?
Об объекте «Соединение» сервера/кластера?
Ведь также было сказано, что соединение вручную (или каким либо другим способом) не добавляется. Кроме того, в показанной демонстрации (урок 14, часть 4, блока 0, Продвинутый курс) при удалении соединения через консоль Конфигуратор завершился аварийно…
В каких случаях тогда переподключение произойдет незаметно для пользователя?
8. Можно ли размещать сервер приложений и СУБД на системах с различными разрядностями? Если да, то куда какую лучше разместить?
9. Использование Linux.
Мы хотим для нескольких расположенных в разных местах города (не связанных в локальную сеть) точек обеспечить доступ к единой базе, построив следующую архитектуру сервер приложений Linux веб-сервер Apache субд Postgree клиент Linux: обеспечить доступ через интернет через веб-интерфейс или тонкого клиента На сайте 1с написано, что особенности рабочих серверов под управлением Linux не могут взаимодействовать с СУБД Microsoft SQL Server, не поддерживается работа с СОМ-объектами, аутентификация на сервере выполняется по протоколу Kerberos, не доступна работа с Интернет-соединением. Значит ли последний пункт , что обеспечить доступ через интернет при такой инфраструктуре будет нельзя и работать через интернет можно только на Windows сервере? И что не будет работать стандартный обмен между , скажем, бух и торг, настроенные через прямое подключение к базе?
10. Место расположения информационных файлов СУБД.
Речь идёт о СУБД Microsoft SQL Server.
При создании новой информационной базы платформа 8.2 может автоматически создать пустую базу и зарегистрировать её в кластере серверов.
Это удобно, но есть проблема. При таком варианте файлы БД *.ldf и *.mdf попадают в каталог по умолчанию. В моём варианте это C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data. Это не всегда приемлемо и может возникнуть необходимость перенести эти файлы в более подходящее место.
При уже созданной базе, в SQL Server Management Studio сменить место расположения не получается – поле с указанием соответствующего пути недоступно для редактирования.
Можно ли каким-либо образом перенести эти файлы в другое место? Или хотя бы указать Microsoft SQL Server где следует создавать новые базы? Конечно, можно создать новую базу в нужном месте и перенести туда данные с помощью выгрузки-загрузки. Но при реальной, достаточно большой базе это может занять длительное время.
11. Смещение дат.
При создании ИБ на сервере 8.1 с параметрами по умолчанию у параметра “Смещение дат” значение: 0 При создании ИБ на сервере 8.2 с параметрами по умолчанию у параметра “Смещение дат” значение: 2000 Для чего вообще нужен такой параметр, как смещение и в каких случаях его нужно менять, а в каких – использовать значение, установленной по умолчанию? Почему в 8.2 значение этого параметра изменилось, ведь версия SQL-сервера не меняется? Можно ли менять смещение прямо у БД на сервере SQL и в каких случаях?
12. Подключение к базе СУБД.
Можно ли к одной базе на SQL сервере одновременно подключиться с двух РАЗНЫХ кластеров 1С?
У меня такое случайно получилось, когда мы переносили сервер с 32 разрядной машины на 64 разрядную, у меня тогда просто отвисла челюсть.
Два разных кластера 1С одновременно работали с одной базой на SQL.
Прокомментируйте, пожалуйста, такую “архитектуру”.
Глава 5.
1.Регистрация доступа в ЖР к реквизитам табличных частей.
Не понял как использовать метод УстановитьИспользованиеСобытияЖурналаРегистрации(“_$Access$_.Access”, …) для регистрации доступа к реквизитам табличных частей документов, справочников. Что касается самих справочников, регистров и т.п. то в видео все довольно наглядно, а вот с ТЧ загвоздка – как ни бился – ошибка… Вообще предусмотрено ли использование этого метода для ТЧ?
2. Вопросы по ЖР.
Возможно но ли к существующему журналу добавить другой журнал, например, совместить два журнала с разных периодов?
Что делать если историю изменения смотреть хочется, но файлы на столько большие что получение из них информации тормозят систему в целом?
Если ли смысл хранить журнал по периодам? Будет ли быстрее доступ к данным/запись если выставить к примеру период равный день или месяц?
3. Регистрация события «Доступ».
В описании полей регистрации для описания использования доступа в журнале регистрации приведен текст:”Тип: Массив. Поля, которые в случае участия их в результате выборки запроса, будут выведены в таблицу значений (поле Данные.Данные события журнала регистрации).Поля регистрации задаются массивом, элементом которого является либо строка – имя поля, либо массив строк – имен полей. Первый уровень массива определяет набор ключевых полей, которые будут зарегистрированы.Если элементом массива является массив строк, то в этом массиве описываются альтернативные ключевые поля.В случае возможности вывода нескольких альтернативных ключевых полей выводится поле с меньшим индексом.“
Можно ли расшифровать написанное?
Поскольку не совсем понятно следующее:” …Если элементом массива является массив строк, то в этом массиве описываются альтернативные ключевые поля.В случае возможности вывода нескольких альтернативных ключевых полей выводится поле с меньшим индексом.”
Глава 9.
1. Обновление типовой конфигурации.
Создал подписку на событие ОбработкаПроведения для документа, например, Поступление товаров.
Добавил новый регистр накопления. В подписке дописал движение по этому регистру.
При обновлении конфигурации выводится сообщение, что поменялись данные документа, а именно Движения.
Как можно добавить такую схему в типовую конфигурацию, чтобы не мешать обновлению?
Как правильно обновлять конфигурацию в таких ситуациях?
2. Алгоритм обновления.
В “алгоритме обновления” Вы рекомендовали для обновления рабочей базы использовать “сравнение и объединение конфигураций”. Давайте рассмотрим такой случай: в новой конфигурации поставщика был удален объект, например документ. Соответственно, выполняя обновление на рабочей базе через “сравнить и объединить”, используя созданный нами cf файл, механизм не будет в автоматическом режиме проставлять галочку, с целью удалить объект. То есть он “сравнит и объединит” с приоритетом основной конфигурации. Таким образом, мы должны дважды анализировать изменения в конфигурациях: на этапе обновления копии базы и второй раз, когда выполняем “сравнение и объединение” на рабочей базе. А при загрузке конфигурации из файла, мы бы обезопасили себя и не пришлось выполнять двойную работу.
Глава 13.
1.Вызов серверных методов с клиента.
Для общего модуля галочка вызов сервера получается нужна в основном для поддержки Толстого клиента?
Я понял по урокам её не рекомендуете использовать?
2.Повторное использование значений.
До конца неясно, как работает этот режим – что, если у функции ОМ есть параметры и они другие по сравнению с прежним вызовом функции?
Кеш сохраняет наряду с возвращаемым значением еще и значение параметров, при которых оно было получено?
А если внутри тела функции есть условия, результат которых изменился с предыдущего вызова этой функции? Пока больше вопросов об этом режиме, чем понимания его назначения…
3.Использование инструкций препроцессору.
Создаю в ОМ экспортную процедуру Тест() без указания директивы компиляции. В теле процедуры описываю следующий код:
#Если Клиент Тогда
ПоказатьОповещениеПользователя(“Это клиент!”);
#ИначеЕсли Сервер Тогда
Сообщить(“Это сервер!”);
#КонецЕсли
Процедура Тест() будет скомпилирована и на клиенте, и на сервере. А инструкции препроцессора «вырежут» для каждой стороны соответствующий код. НО! Оба раза вызывается Оповещение! Как серверу удалось вызвать код, предназначенный для клиента???
Дальше – больше. Убираем у нашего ОМ флажок «Клиент». Теперь, по идее, процедуры Тест() на клиенте вообще не должно быть и при нажатии на кнопку «Ордер» появится ошибка… Ан нет! Снова появляется оповещение!!! Тем временем, как код, вызывающий оповещение, при таких настройках ОМ вообще никогда не должен был бы выполняться.
Что это все такое?
4.Передача с клиента на сервер.
В уроке 24 говорится о возможности передачи между клиентом и сервером списка значений. Но ведь элементами списка могут быть не только примитивные типы данных!
Например, элементом списка будет ДокументОбъект. Передача такого списка в 8.1 приводила к ошибке передачи мутабельного значения, и насколько я понимаю, в 8.2 будет тот же эффект.
Хорошо, что будет тогда, если наоборот, передавать с сервера на клиент список, элементом которого будет являться, скажем, таблица значений? Тоже мутабельное значение или здесь возникнет уже другая проблема?
Глава 15.
1. Групповая разработка конфигураций.
После просмотра главы о групповой разработке впечатление о механизме хранилище конфигурации сложилось как о каком-то довольно таки «тяжелом» инструменте. Данное первое впечатление обманчиво? Пока заинтересовало лишь использование хранилища конфигурации одним разработчиком, для хранения версий дорабатываемой конфигурации. При использовании же данного механизма именно для групповой разработки, мне кажется, он оправдает себя только именно при четко модульной разработке\доработке какой-либо конфигурации. Когда есть несколько человек, у которых есть свой «кусок», они захватываютего и в волю с ним резвятся, перекидывая потом все это в хранилище для актуализации данных у других разработчиков. Захват же мелких блоков, таких как формы\макеты, иногда, конечно же, может быть удобен и оправдан, но опять же, по моему мнению, в большинстве случаев это дополнительные действия, которые могут «напрягать» и даже замедлять в целом процесс разработки\доработки конфигурации. Используете ли вы сами в своей работе механизм групповой разработки? Насколько прав\не прав я в своих мыслях?
Глава 16.
1. Скрыть невидимые по умолчанию.
Для командного интерфейса конфигурации в уроках главы не объяснено назначение кнопки «Скрыть невидимые по умолчанию» слева от поля «Отбор по ролям». В помощи описано, что при нажатии на эту кнопку «…скрываются команды, для которых не установлена общая видимость, и группы без команд.» По поводу общей видимости понятно – система просто уберет те подсистемы, у которых не установлен флаг «Видимость». А что означает «группы без команд»? Как следует из урока 7 по командному интерфейсу конфигурации, имеется в виду скрытие групп команд, в которых нет ни одной команды. Но разве в панели разделов бывают группы?
Глава 17.
1. Параметры функциональных опций.
Если честно, из уроков не совсем понял каким образом происходит связь объектов «ФО» и «Параметры ФО». Работать работает, но осознания не пришло…
2. Хранение функциональной опции.
Ограничения на тип места хранения значения ФО нет. Но сказано что для управления интерфейсом годятся только реквизиты с типом «Булево». А почему бы тогда разработчикам не ограничить список выбора источника только типом «Булево»?
В каких-то ситуациях (не для управления интерфейсом) могут использоваться другие типы?
3. Хранение опции в регистре.
Как реализуется хранение функциональной опции в регистре сведений?
Глава 21.
1. Механика работы RLS.
Есть у нас объект Поступление товаров. Мы для него сделали ограничение, написав запрос с описанием секции “где”. Вот эта секция цепляется к выборкам по данному документы в целом? или к каждому? Или по другому… После соединения запроса с секцией “где”, запрос нам должен вернуть все документы к которым доступ разрешен? Или же он цепляется в момент запроса к конкретной записи документа и она либо возвращается либо нет.
2. Текст запроса RLS.
Cуществует ли возможность отловить текст RLS после преобразования из шаблона? Не преобразованный в SQL текст запроса в профайлере, а еще 1С-ный. Шаблоны в типовых решениях как правило универсальные со множеством директив препроцессору, а нужно
разобраться с какой-то конкретной ситуацией.
3. Недопустимые конструкции.
Пример взят из конфигурации Управление торговлей 11.0.5.4. (шаблон “ПоЗначениям”). Начнем с начала шаблона.
// Проверка правильности параметра Модификатор.
#Если НЕ (“#Параметр(3)” = “НеОграничиватьДоступКГруппам” ИЛИ “#Параметр(3)” = “”) #Тогда
// Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа.
НеверныйМодификатор: #Параметр(3)
#КонецЕсли Т.е. фактически RLS после преобразования шаблона может начаться с этой строки (RLS начинается сразу с шаблона)-
НеверныйМодификатор: <Имя параметра>
Как это работает и для чего используется? Будет выведена ошибка с этим текстом?
4. Использование псевдонимов.
Пример далее по тому же шаблону.
Т ИЗ Т // Т – псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов).
Откуда взялась эта “Т”? Ее по тексту до этого не было, а текущая таблица в шаблонах обозначается #ТекущаяТаблица…
5. Использование параметров сеанса.
Насколько оправданно использовать ПараметрСеанса типа фиксированный массив в RLS, если рассматривать его как замена вложенного запроса. Т.е. если в рамках сеанса результат некой выборки не меняется, но она часто используется в RLS – имеет ли смысл выводить выборку в
ПараметрСеанса. И есть ли разумные пределы/ограничения размеров такого массива.
6. Использование #ТекущаяТаблица.
Можно ли в условиях препроцессора каким-либо образом проверять имя таблицы?
Например: #Если “”#ТекущаяТаблица”” = “Справочник.Склады” #Тогда (такой вариант, к сожалению, не работает).
7. Проблемы с вложенным запросом.
Для документов поступления и реализации попробовал установить следующий шаблон на чтение :ТекущаяТаблица ИЗ #ТекущаяТаблица КАК ТекущаяТаблицаГДЕ (НЕ 1 В (ВЫБРАТЬ … ИЗ #ТекущаяТаблица.Товары КАК Товары ЛЕВОЕ СОЕДИНЕНИЕ …)
Возникла ошибка типа “таблица #ТекущаяТаблицаТовары не найдена”.
Если использовать конструкцию #ТекущаяТаблица.#Параметр(1), где в параметр передается “Товары”, то получается тоже самое.
Работающим оказался только вариант Документ.#Параметр(1).Товары, где в параметр передается имя документа.
С чем связано такое поведение системы?
8. Ошибки в запросе RLS.
В уроке 17 при настройке запроса РЛС для справочника Контрагенты явно видна ошибка в тексте запроса: написано «Справчоник» вместо «Справочник». Однако синтаксический контроль не ругается на этот запрос. Более того, он корректно отрабатывает в пользовательском режиме! Как такое может быть?
Из практики работы с РЛС в 1С:Предприятие 8.1 могу предположить, что указанная в уроке часть запроса «Контрагенты Из Справчоник.Контрагенты КАК Контрагенты» вообще эквивалентна строке «Контрагенты». Т.е. в запросе РЛС не обязательно указывать, откуда выбирать данные, т.к. система сама знает, к какой таблице проверяются права доступа. И первым словом в таком запросе всегда идет либо псевдоним обрабатываемой таблицы (как в уроке), либо слово «ГДЕ».
Например, можно просто написать запрос РЛС «МояТаблица ГДЕ МояТаблица.Поле1 = 100» и этот запрос можно установить в РЛС ДЛЯ ЛЮБОЙ ТАБЛИЦЫ, лишь бы в ней было поле «Поле1» (по возможности, но необязательно, числового типа :) ). Таким образом, можно достигнуть такой универсальности, что единожды написанное правило (шаблоном) раскопировать по всем таблицам без изменений!
9. Привилегированный режим.
В рамках Базового курса был вопрос, о вызове кода другого модуля из привилегированного режима. Как оказалось, метод обычного модуля, вызванного из привилегированного, выполняется в привилегированном режиме.
В уроке 31 описывается метод программной установки привилегированного режима для заданного участка кода УстановитьПривилегированныйРежим().
В Синтакс-помощнике об этом методе сказано следующее: «Если в процедуре или функции вызовов метода с параметром Ложь сделано больше, чем вызовов с параметром Истина, то будет вызвано исключение.».
Из этого делаю вывод, что метод можно вызывать несколько раз, причем вложено друг в друга, так?
Кроме того, если внутри кода, для которого программно установлен привилегированный режим, вызвать другой метод (этого же модуля, экспортный метод другого модуля) , то вызванный метод будет выполняться также в привилегированном режиме и повлиять на это никак нельзя?
Во вложенном методе УстановитьПривилегированныйРежим(Ложь) не выполнишь, т.к. устанавливался он в вызывающем методе, верно?
10. Безопасный режим.
Что важнее – УстановитьБезопасныйРежим() или УстановитьПривилегированныйРежим() ? В уроке безопасный режим устанавливается ДО установки привилегированного режима. А что будет, если вызвать после? Привилегированный режим отключится?
Как ведет себя безопасный режим при вызове других методов? Во вложенных методах он работает, будучи установленным в вызывающих или его нужно заново устанавливать во вложенном методе? Смущает некий счетчик, описанный в Синтакс-помощнике, который увеличивается/уменьшается при установке/снятии безопасного режима.
Счетчик безопасного режима (описанный в Синтакс-помощнике) при завершении метода, в котором явно установлено использование этого режима, автоматически уменьшается на единицу? Выходит, можно сделать 1000 вызовов метода УстановитьБезопасныйРежим() при начале работы системы, чтобы безопасный режим работал как можно дольше во всей конфигурации? (Чтобы счетчик имел заведомо большое число, которое не скоро обратится в 0)
11. RLS по строкам документов.
Существует справочник, например «Подразделения»
Указываются в табличных частях документов
По этому справочнику строиться ограничение доступа через RLS
Существует некий РС, в котором храниться информация, для какого пользователя какие подразделения доступы
Если пользователю доступно некое подразделение, то и данные по этому подразделению ему видны
Необходимо чтобы пользователи видели только те строки, к подразделениям которых у них есть доступ
Возможно ли сделать такое ограничение через настройку RLS?Если нет, то как лучше реализовать такое ограничение?
Глава 23.
1. Какие преимущества формата FastInfoset?
Глава 24.
1. Обмен данными. Схема “Место создания и центр”.
В 7.7 был механизм “Место миграции” элементов. Я мог для общих справочников выставить «Все ИБ», для конкретных – «Место создания и центр». Как подобное сделать в 8-ке? Предполагаю, что Для общих справочников выставить авторегистрацию Для справочников у которых в 7.7 было место создания и центр убрать авторегистрацию изменений и заполнять программно получателя Центральную базу при записи на перифирии. И в каждом таком справочнике заводить реквизит для обозначения места создания
Глава 26.
1. Транзакции и попытка…исключение.
Пожалуйста, объясните смысл сообщения об ошибке “В данной транзакции уже происходили ошибки”.
Как искать, исправлять, обходить ошибки при появлении такого сообщения?
В одном из видео вы говорите об обновлении не типовой конфигурации. С Ваших слов я понял что готовый CF файл лучше загружать чем объединять. Я провел простой эксперимент взял типовую конфигурацию БП 2.0 релиз 16, добавил в справочники Контрагенты один реквизит «НовыйРеквизит» и заполнил его значение в нескольких элементов справочника. После чего взял другой релиз БП 2.0 17. Тоже добавил туда же реквизит копиров из первой базы. После чего выгрузил CF файл уже не типового 17 релиза. А в первой базе сделал загрузку, после чего зашел в предприятия и увидел что во всех элементах значения «НовыйРеквизит» было пустым. Если делать объединить то все хорошо. Что скажите ?
Кажется, что эксперимент не совсем честный.
У вас есть модифицированный 16 релиз.
Нужно взять cf этого релиза, обновить его до 17-го. Получить cf.
Далее выполнить загрузку.
После этого данные не пропадают?
Сделал как вы сказали – да действительно теперь все хорошо. но все же хочется понять с чем это связано? теоритически конфигурации одинаковы или я не прав?
Нет, конфигурации разные. Ведь ИД объектов (реквизитов) разные.
В вашем случае система удаляет один реквизит и добавляет другой.
Еще было бы здорово, если как раньше, скачал файл, ссылка цвет меняла.
Вебмастер ответил, что ссылка должна менять цвет на некоторое время.
Далее примерно через сутки отметка может сброситься из-за особенностей работы наших серверов.
У вас цветового выделения нет сразу после скачивания?
Пожалуйста, верните возможность групповой закачки в DM. Это же просто жуть скачивать по одному файлу.
Вебмастер работает над этой задачей..