Добавляет строку в конец табличной части.
Синтаксис
Добавить()Примеры платформы
Процедура УстановитьВедущиеРасчеты(ВидРасчета, ВедущиеВидыРасчета)
ВР = ВидРасчета.ПолучитьОбъект();
ВР.ВедущиеВидыРасчета.Очистить();
Если ВедущиеВидыРасчета <> Неопределено Тогда
Для каждого Элемент Из ВедущиеВидыРасчета Цикл
НоваяСтрока = ВР.ВедущиеВидыРасчета.Добавить();
НоваяСтрока.ВидРасчета = Элемент.Значение;
КонецЦикла;
КонецЕсли;
ВР.Записать();
КонецПроцедурыПолное описание, параметры и ограничения
ВедущиеВидыРасчета.<Имя плана видов расчета>.Добавить (LeadingCalculationTypes.<Chart of calculation types name>.Add)
ВедущиеВидыРасчета.<Имя плана видов расчета> (LeadingCalculationTypes.<Chart of calculation types name>)
Добавить (Add)
Доступен, начиная с версии 8.0.
Синтаксис:
Добавить()
Возвращаемое значение:
Тип: ВедущиеВидыРасчетаСтрока.<Имя плана видов расчета>.
Описание:
Добавляет строку в конец табличной части.
Доступность:
Сервер, толстый клиент, внешнее соединение.
Примечание:
Использование метода допустимо только в том случае, если табличная часть получена из свойства объекта. Если табличная часть получена из свойства ссылки (или выборки), то использование этого метода будет вызывать ошибку выполнения.
Пример:
Процедура УстановитьВедущиеРасчеты(ВидРасчета, ВедущиеВидыРасчета)
ВР = ВидРасчета.ПолучитьОбъект();
ВР.ВедущиеВидыРасчета.Очистить();
Если ВедущиеВидыРасчета <> Неопределено Тогда
Для каждого Элемент Из ВедущиеВидыРасчета Цикл
НоваяСтрока = ВР.ВедущиеВидыРасчета.Добавить();
НоваяСтрока.ВидРасчета = Элемент.Значение;
КонецЦикла;
КонецЕсли;
ВР.Записать();
КонецПроцедуры
Использование в версии:
Доступен, начиная с версии 8.0.
Методическая информация
Практические примеры
Найти одну строку и все совпадения: ведущие виды
Зависимости перерасчёта: изменение ведущего вида может потребовать перерасчёта зависимого, но этот пример не запускает его. Дубликат намеренно создаётся только в памяти, чтобы показать отличие Найти от НайтиСтроки.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Создайте НОВУЮ пустую файловую базу, имя корня УчебныеРасчеты85. Не изменяйте рабочие ЗУП/КА2/УНФ/УТ/БП. Пример технический: зарплата, налоги и выплаты не рассчитываются.
Планы видов расчёта → Добавить: УчебныеНачисления85. ТипКода Строка, ДлинаКода 10, ДлинаНаименования 100. ИспользованиеПериодаДействия включено; ЗависимостьОтВидовРасчета=ПоПериодуДействия.
В настройке базовых планов видов расчёта выберите только сам УчебныеНачисления85. Это позволяет учебным видам ссылаться на другие виды того же плана. Предопределённые виды, пользовательские реквизиты и табличные части не создавайте.
Модули объекта/менеджера оставьте пустыми, регистры расчёта и бизнес-алгоритмы не добавляйте. Обновите конфигурацию БД и создайте серверный ВыполнитьПример() Экспорт собственной обработки.
Фрагмент вставляется внутрь процедуры. Все виды и строки зависимостей создаются только в памяти; Записать, блокировки, удаления объектов и привилегированный режим не вызываются.
Случайные ссылки зависимостей — ПЛАНОВЫЕ идентификаторы, соответствующих сохранённых видов нет. Они нужны для разбора типизированных списков, а не для запуска расчёта.
Описание = Метаданные.ПланыВидовРасчета.Найти("УчебныеНачисления85");
Если Описание = Неопределено Тогда
ВызватьИсключение "Создайте собственный план УчебныеНачисления85";
КонецЕсли;
Если Описание.ТипКода <> Метаданные.СвойстваОбъектов.ТипКодаПланаВидовРасчета.Строка
Или Описание.ДлинаКода <> 10 Или Описание.ДлинаНаименования <> 100
Или Не Описание.ИспользованиеПериодаДействия
Или Описание.ЗависимостьОтВидовРасчета <> Метаданные.СвойстваОбъектов.ИспользованиеБазыПланаВидовРасчета.ПоПериодуДействия Тогда
ВызватьИсключение "Настройки учебного плана не соответствуют подготовке";
КонецЕсли;
Если Описание.БазовыеВидыРасчета.Количество() <> 1
Или Не Описание.БазовыеВидыРасчета.Содержит(Описание) Тогда
ВызватьИсключение "Выберите только собственный план как базовый";
КонецЕсли;
Менеджер = ПланыВидовРасчета.УчебныеНачисления85;
Премия = Менеджер.СоздатьВидРасчета();
Премия.Код = "BONUS";
Премия.Наименование = "Учебная премия";
Премия.ПериодДействияБазовый = Истина;
Премия.ДополнительныеСвойства.Вставить("Метка", "Не реальное начисление");
ПервыйВид = Менеджер.ПолучитьСсылку(Новый УникальныйИдентификатор);
ВторойВид = Менеджер.ПолучитьСсылку(Новый УникальныйИдентификатор);
ТретийВид = Менеджер.ПолучитьСсылку(Новый УникальныйИдентификатор);
Список = Премия.ВедущиеВидыРасчета;
Первая = Список.Добавить();
Первая.ВидРасчета = ПервыйВид;
Вторая = Список.Добавить();
Вторая.ВидРасчета = ПервыйВид;
Третья = Список.Добавить();
Третья.ВидРасчета = ВторойВид;
Одна = Список.Найти(ПервыйВид, "ВидРасчета");
Если Одна = Неопределено Тогда
ВызватьИсключение "Не найдена собственная добавленная зависимость";
КонецЕсли;
Сообщить(Одна.ВидРасчета = ПервыйВид);
Отбор = Новый Структура("ВидРасчета", ПервыйВид);
Все = Список.НайтиСтроки(Отбор);
Сообщить(Все.Количество() = 2);
Сообщить(Список.Найти(ТретийВид, "ВидРасчета") = Неопределено);
Сообщить(Список.НайтиСтроки(Новый Структура("ВидРасчета", ТретийВид)).Количество() = 0);
ИзМассива = Все[0];
Сообщить(Список.Индекс(ИзМассива) >= 0);
ИзМассива.ВидРасчета = ТретийВид;
Сообщить(Список.Получить(Список.Индекс(ИзМассива)).ВидРасчета = ТретийВид);
Сообщить(Все[0].ВидРасчета = ТретийВид);
Сообщить(Список.НайтиСтроки(Отбор).Количество() = 1);
Сообщить(Все.Количество() = 2);Разбор по шагам
Ищем по точному полю ВидРасчета и типизированной ссылке, а не по строке названия несуществующего вида.
Найти возвращает одну строку или Неопределено; обязательно проверяем отсутствие результата до обращения к свойству.
НайтиСтроки возвращает массив всех подходящих строк. Первоначально в нём два совпадения.
Элементы массива — живые строки этой части, не независимые копии. Изменение через массив видно в исходной части.
Массив не является динамическим фильтром: после изменения содержит те же две строки, а новый поиск даёт одну.
Как проверить результат
Девять логических сообщений дают Истина.
Повторный поиск первого вида находит одну строку. Ранее полученный массив содержит две, одна уже с ТретийВид.
Ожидаемый результат
Показаны отсутствие результата, дубликаты и различие между массивом живых строк и повторным отбором.
На что обратить внимание
Дубликаты — только учебный эксперимент в новом объекте; пригодность такого определения для записи не проверяется.
ВидРасчета — ссылка, не строковое наименование. Не читайте Наименование у случайного планового UUID.
Сохранение изменения рабочего объекта потребовало бы отдельного решения; здесь записи нет.
Зависимости перерасчёта: изменение ведущего вида может потребовать перерасчёта зависимого, но этот пример не запускает его.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Вставить, переместить и удалить собственную строку: ведущие виды
Зависимости перерасчёта: изменение ведущего вида может потребовать перерасчёта зависимого, но этот пример не запускает его. Работаем с двумя строками нового определения Премия в памяти, не с сохранённой ссылкой.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Создайте НОВУЮ пустую файловую базу, имя корня УчебныеРасчеты85. Не изменяйте рабочие ЗУП/КА2/УНФ/УТ/БП. Пример технический: зарплата, налоги и выплаты не рассчитываются.
Планы видов расчёта → Добавить: УчебныеНачисления85. ТипКода Строка, ДлинаКода 10, ДлинаНаименования 100. ИспользованиеПериодаДействия включено; ЗависимостьОтВидовРасчета=ПоПериодуДействия.
В настройке базовых планов видов расчёта выберите только сам УчебныеНачисления85. Это позволяет учебным видам ссылаться на другие виды того же плана. Предопределённые виды, пользовательские реквизиты и табличные части не создавайте.
Модули объекта/менеджера оставьте пустыми, регистры расчёта и бизнес-алгоритмы не добавляйте. Обновите конфигурацию БД и создайте серверный ВыполнитьПример() Экспорт собственной обработки.
Фрагмент вставляется внутрь процедуры. Все виды и строки зависимостей создаются только в памяти; Записать, блокировки, удаления объектов и привилегированный режим не вызываются.
Случайные ссылки зависимостей — ПЛАНОВЫЕ идентификаторы, соответствующих сохранённых видов нет. Они нужны для разбора типизированных списков, а не для запуска расчёта.
Описание = Метаданные.ПланыВидовРасчета.Найти("УчебныеНачисления85");
Если Описание = Неопределено Тогда
ВызватьИсключение "Создайте собственный план УчебныеНачисления85";
КонецЕсли;
Если Описание.ТипКода <> Метаданные.СвойстваОбъектов.ТипКодаПланаВидовРасчета.Строка
Или Описание.ДлинаКода <> 10 Или Описание.ДлинаНаименования <> 100
Или Не Описание.ИспользованиеПериодаДействия
Или Описание.ЗависимостьОтВидовРасчета <> Метаданные.СвойстваОбъектов.ИспользованиеБазыПланаВидовРасчета.ПоПериодуДействия Тогда
ВызватьИсключение "Настройки учебного плана не соответствуют подготовке";
КонецЕсли;
Если Описание.БазовыеВидыРасчета.Количество() <> 1
Или Не Описание.БазовыеВидыРасчета.Содержит(Описание) Тогда
ВызватьИсключение "Выберите только собственный план как базовый";
КонецЕсли;
Менеджер = ПланыВидовРасчета.УчебныеНачисления85;
Премия = Менеджер.СоздатьВидРасчета();
Премия.Код = "BONUS";
Премия.Наименование = "Учебная премия";
Премия.ПериодДействияБазовый = Истина;
Премия.ДополнительныеСвойства.Вставить("Метка", "Не реальное начисление");
ПервыйВид = Менеджер.ПолучитьСсылку(Новый УникальныйИдентификатор);
ВторойВид = Менеджер.ПолучитьСсылку(Новый УникальныйИдентификатор);
Список = Премия.ВедущиеВидыРасчета;
Первая = Список.Добавить();
Первая.ВидРасчета = ПервыйВид;
Вторая = Список.Вставить(0);
Вторая.ВидРасчета = ВторойВид;
Сообщить(Список.Количество() = 2);
Сообщить(Список.Индекс(Вторая) = 0);
Сообщить(Список.Получить(0) = Вторая);
Сообщить(Вторая.НомерСтроки = 1);
Сообщить(Не Вторая.Предопределенный);
Список.Сдвинуть(Первая, -1);
Сообщить(Список.Индекс(Первая) = 0);
Сообщить(Первая.НомерСтроки = 1);
Если Вторая.Предопределенный Тогда
ВызватьИсключение "Предопределённые строки не удаляем";
КонецЕсли;
Список.Удалить(Вторая);
Сообщить(Список.Количество() = 1);
Сообщить(Список.Получить(0).ВидРасчета = ПервыйВид);Разбор по шагам
Добавить помещает первую строку в конец. Вставить(0) ставит вторую перед ней.
Индекс начинается с 0, а НомерСтроки с 1. После перемещения позицию вычисляем заново, не храним устаревший индекс.
Сдвинуть принимает саму строку и отрицательное смещение к началу. Перемещение не меняет ссылку ВидРасчета.
Предопределенный проверяем до удаления. У собственных добавленных строк он Ложь; у строк конфигурации может быть Истина.
Удалить получает строку этой же коллекции. Удаляется только зависимость в памяти, не вид расчёта в базе.
Как проверить результат
Девять логических сообщений дают Истина; остаётся одна строка с ПервыйВид.
В сохранённых видах и расчётных регистрах нет новых данных. Новое определение не записывалось.
Ожидаемый результат
Разобраны позиция, номер строки, перемещение и безопасная граница удаления строки зависимости.
На что обратить внимание
Мутирующие методы недоступны у частей, полученных из ссылки или выборки: нужен объект.
Удаление предопределённой строки может сделать запись вида невозможной. Не экспериментируйте на рабочем объекте.
Плановые ссылки не соответствуют сохранённым начислениям; этот пример не рассчитывает деньги.
Зависимости перерасчёта: изменение ведущего вида может потребовать перерасчёта зависимого, но этот пример не запускает его.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.