Заказы на доработку 1С (сервис удаленной работы)

Хранилище

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

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Использование прикладных объектов и универсальных коллекций значений          
Vofka Подменю пользователя
сообщение 20.09.10, 13:22
Сообщение #1

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13947
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3634.6

Сортировка строк таблиц значений

--------------------------------------------------------------------------------

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

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

Vofka Подменю пользователя
сообщение 20.09.10, 13:22
Сообщение #2

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13947
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3634.6

Использование объекта РегистрСведенийМенеджерЗаписи

--------------------------------------------------------------------------------

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

Во всех остальных случаях объект РегистрСведенийМенеджерЗаписи следует применять только тогда, когда выполнение операций с регистром сведений требует использования отбора одновременно по всем измерениям. При этом менеджер записи использует для выполнения записи два набора записей, устанавливая им соответствующие значения отборов. Поэтому обработчики событий набора записей вызываются и тогда, когда для записи данных используется менеджер записи.

В остальных случаях следует использовать объект РегистрСведенийНаборЗаписей. С точки зрения производительности использование менеджера записей в некоторых случаях будет столь же эффективным, как и использование набора записей, а в некоторых - менее, так как будут выполняться лишние действия.

Правильно:

Набор = РегистрыСведений.ЗначенияПравПользователя.СоздатьНаборЗаписей();  
Набор.Отбор.НаборПрав.Установить(ЗначениеНабораПрав);  
Для Каждого СтрокаТаблицы ИЗ ТаблицаЗначенийПрав  Цикл
     Запись           = Набор.Добавить();  
     Запись.НаборПрав = ЗначениеНабораПрав;  
     Запись.Право     = СтрокаТаблицы.Право;  
     Запись.Значение  = СтрокаТаблицы.Значение;  
КонецЦикла;  
Набор.Записать();




Неправильно:

Для Каждого СтрокаТаблицы ИЗ ТаблицаЗначенийПрав  Цикл 
     ЭлементРегистраСведений = РегистрыСведений.ЗначенияПравПользователя.СоздатьМенеджерЗаписи();  
     ЭлементРегистраСведений.НаборПрав = ЗначениеНабораПрав;  
     ЭлементРегистраСведений.Право     = СтрокаТаблицы.Право;  
     ЭлементРегистраСведений.Значение  = СтрокаТаблицы.Значение;  
     ЭлементРегистраСведений.Записать();  
КонецЦикла;

Vofka Подменю пользователя
сообщение 20.09.10, 13:23
Сообщение #3

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13947
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3634.6

Копирование строк между таблицами значений (табличными частями и т.п.) произвольной структуры

--------------------------------------------------------------------------------

При копировании строк между различными таблицами значений (табличными частями и т.п.) со схожим составом колонок следует использовать метод глобального контекста ЗаполнитьЗначенияСвойств().

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

Правильно:

Для каждого СтрокаТаблицыИсточника Из ТаблицаИсточник Цикл 
     СтрокаТаблицыПриемника = ТаблицаПриемник.Добавить();  
     ЗаполнитьЗначенияСвойств(СтрокаТаблицыПриемника, СтрокаТаблицыИсточника);  
КонецЦикла;




Неправильно:

Для каждого СтрокаТаблицыИсточника Из ТаблицаИсточник Цикл 
     СтрокаТаблицыПриемника = ТаблицаПриемник.Добавить();  
     Для каждого Колонка Из ТаблицаПриемник.Колонки Цикл
          КолонкаТаблицыИсточника = ТаблицаИсточник.Колонки.Найти(Колонка.Имя);  
          Если КолонкаТаблицыИсточника <> Неопределено Тогда
               СтрокаТаблицыПриемника[Колонка.Имя] = СтрокаТаблицыИсточника[Колонка.Имя];  
          КонецЕсли;  
     КонецЦикла;  
КонецЦикла;

Vofka Подменю пользователя
сообщение 20.09.10, 13:23
Сообщение #4

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13947
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3634.6

Порядок записи движений документов

--------------------------------------------------------------------------------

Не рекомендуется использовать явную запись наборов записей регистров(с помощью метода Записать()) в процедурах обработки проведения документов. Запись должна производится неявно системой, при завершении процедуры проведения.

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

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

Vofka Подменю пользователя
сообщение 20.09.10, 13:24
Сообщение #5

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13947
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3634.6

Получение представлений для ссылочных значений в табличном документе

--------------------------------------------------------------------------------

При формировании табличного документа запрещено в качестве параметров ячеек с типом заполнения "Параметр" указывать ссылочные значения, поскольку в этом случае в момент вывода данных в табличный документ будет выполнено многократное обращение к базе данных для получения представлений этих значений.
Поэтому в качестве параметров следует указывать сами представления.

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

При этом следует иметь ввиду, что при получении представлений для полей непосредственно в самом запросе (через поле Представление или функцией Представление(<Имя поля>)) выполняется неявное соединение с таблицей объекта, для которого получаются представления. Для полей составного типа - несколько соединений, для каждого из типов, входящих в состав. Это может приводить к увеличению времени выполнения запроса (и как следствие, общего времени формирования итогового документа), а при большом количестве типов – к невозможности его выполнения в клиент-серверной версии из-за ограничения Microsoft SQL Server, по которому в запросе не может участвовать больше 256 таблиц. Такие случаи также могут быть исключением для данного правила, в них представления для ссылочных значений допускается получать в момент их вывода в табличный документ.

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

Vofka Подменю пользователя
сообщение 20.09.10, 13:24
Сообщение #6

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13947
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3634.6

Программное создание прикладных объектов

--------------------------------------------------------------------------------

Для программного создания прикладных объектов следует использовать методы соответствующих менеджеров (СоздатьЭлемент(), СоздатьДокумент(), СоздатьНаборЗаписей() и т.д.).
Для программного создания прикладных объектов, у которых существует соответствующие менеджеры объектов, использование конструктора (оператор встроенного языка Новый) запрещается.

Правильно:

ДокументПриходная = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();




Неправильно:

ДокументПриходная = Новый("ДокументОбъект.ПоступлениеТоваровУслуг");

Vofka Подменю пользователя
сообщение 20.09.10, 13:24
Сообщение #7

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13947
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3634.6

Особенности контекста выполнения на сервере и в режиме внешнего соединения

--------------------------------------------------------------------------------

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

1. Запрещено использование объектов, имеющих тип данных, не доступный на сервере и во внешнем соединении:
• ТабличныйДокумент
• ТекстовыйДокумент
• ДиалогВыбораФайла
• все другие типы, использование которых невозможно на сервере 1С:Предприятие и во внешнем соединении.

2. Запрещено использование средств, отвечающих за диалог с пользователем:
• Предупреждение()
• Вопрос()
• методы работы с формами и прочие, для которых специально указано (в документации), что они не доступны на сервере и/или во внешнем соединении.

3. Запрещается вызов экспортных процедур других общий модулей, у которых не установлен признак компиляции на сервере и/или во внешнем соединении.

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

#Если Клиент Тогда 
    Сообщить(Сообщение);
#КонецЕсли




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

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

7. Для внешнего соединения: Текст модулей объектов следует писать таким образом, чтобы при работе во внешнем соединении (в частности, при работе WEB-приложения), обеспечивалась работоспособность всей прикладной логики, с учетом того, что часть объектов недоступна для использования во внешнем соединении, например, использование средств диалога с пользователем. Недопустимо размещать в общих модулях процедуры и функции, которые недоступны во внешнем соединении, и без которых невозможна запланированная методика использования и работы объектов.

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 19.03.24, 4:17
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!