Главная » 1С Предприятие » УПРАВЛЕНИЕ ЗАПИСЯМИ ИЗ ПРОГРАММЫ

0

Управлять   записями   справочников,   то   есть   добавлять,  удалять,  редактировать, выбирать, искать и сортировать записи, можно, пользуясь имеющимися в  1С методами Для  справочников. В этом  разделе  мы  рассмотрим  методы, имеющие отношение  к добавлению, редактированию и удалению записей.

5.5.1.1.             ДОБАВЛЕНИЕ     ЗАПИСЕЙ

Новый элемент  и  группа добавляются в  справочник соответственно методами Новый и НоваяГруппа. Они применимы только  с переменными типа Справочник, определенными функцией  СоздатьОбъект. Для записи нового элемента употребляется метод Записать.

Пример.  В  справочнике Сотрудники_2 создается  группа  03  Цех,  в   которую  заносится информация  о сотруднике этого  цеха.

процедура Выполнить()                     //              Связана с кнопкой  Пуск обработки Проба перем  сСотр_2, кодЦеха;

ОчиститьОкноСообщений(); кодЦеха = 3;

// Определяем переменную сСотр_2 как объект типа Справочник с разновидностью

// типа Справочник.Сотрудники_2

сСотр_2  =  СоздатьОбъект("Справочник.Сотрудники_2"); если сСотр_2.НайтиПоКоду(кодЦеха, 0) = 1 тогда

Предупреждение(" Цех с кодом  " + кодЦеха  + " уже есть."); возврат;

конецЕсли;

сСотр_2.НоваяГруппа();                   //           Создаем новую группу сСотр_2.Код = кодЦеха;                  //           и определяем ее реквизиты сСотр_2.Наименование = "0" + Строка(кодЦеха) + " Цех"; сСотр_2.3аписать();                      //                      Записываем новую группу

// Текущим элементом является только что созданная группа 03 Цех

// Чтобы  занести сотрудника в эту группу, необходимо применить

// метод ИспользоватьРодителя. Его параметром должно быть значение группы,

// имеющее тип Справочник, возвращаемое, например, методом ТекущийЭлемент

// или задаваемое именем объекта-справочника

сСотр_2.ИспользоватьРодителя(сСотр_2);

//или

// сСотр_2.ИспользоватьРодителя(сСотр_2.ТекущийЭлемент());

// Записываем периодический реквизит Оклад на рабочую дату

// Этот оператор должен  быть размещен до вызова метода Новый сСотр_2.ИспользоватьДату(РабочаяДата());

сСотр_2.Новый();                       //               Создаем новый элемент

// Атрибут Код, если его не определить, будет вычислен автоматически

// Мы же определим код явно, равным, например, 301 сСотр_2.Код  = Число(Строка(кодЦеха * 100)) + "1" ;

// Определяем иные реквизиты нового элемента сСотр_2.Наименование = "Безверхний Игорь Петрович"; сСотр_2.0клад = 3100;

сСотр_2.3аписать();                     //              Записываем новый элемент

// Просмотр результата ОткрытьФорму("Справочник.Сотрудники_2.ФормаСписка");

конецПроцедуры

Результат  приведен на рис. 5.26.

Рис. 5.26. Новое подразделение и новый сотрудник

5.5.1.2.            ПЕРЕНОС  ЗАПИСИ   В  ДРУГУЮ   ГРУППУ

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

у

сСотр_2  = СоздатьОбъект("Справочник.Сотрудники_2");

// Находим группу, в которую переносится сотрудник если сСотр_2.НайтиПоКоду(3, 0) = 1 тогда

// Запоминаем ссылку на найденную группу гр = сСотр_2.ТекущийЭлемент();

// Находим сотрудника

если сСотр_2.НайтиПоКоду(301, 0) = 1 тогда если сСотр_2.Родитель = гр тогда

Предупреждение(сСотр_2.Наименование + " уже работает  в " + гр); возврат;

конецЕсли;

// Меняем для нового сотрудника значение атрибута Родитель,

// присваивая ему значение переменной гр, имеющей тип Справочник сСотр_2.Родитель = гр;

сСотр_2.3аписать();              //         Записываем измененный элемент Предупреждение(сСотр_2.Наименование + " переведен в " + гр);

// Просмотр результата

ОткрытьФорму("Справочник.Сотрудники_2.ФормаСписка"); иначе

Предупреждение("Сотрудник не найден."); конецЕсли;

иначе

Предупреждение("Группа не найдена."); конецЕсли;

конецПроцедуры // Выполнить

Замечание.  Поскольку   в   каждой  группе  код  ее  подчиненного  элемента  связан с кодом  группы,  то при  переносе  элемента  из одной  группы  в  другую необходимо соответствующим  образом  изменять  код  элемента.   Алгоритм вычисления нового кода  приведен в  разд.  5.8.2.2.  При  интерактивном  перемещении  элемента из одной  группы   в  другую  его  код  следует  модифицировать в  предопределенной  процедуре ПриПереносеЭлементаВДругуюГруппу  модуля   формы  списка  справочника.   Порядок ее употребления рассмотрен  в  разд.  5.12.6.

5.5.1.3.              РЕДАКТИРОВАНИЕ     ЗАПИСЕЙ

Редактированию  записи  предшествует  ее  поиск, который  может  быть  выполнен  одним из  четырех следующих методов: НайтиЭлемент,  НайтиПоКоду,  НайтиПоНаименованию и НайтиПоРеквизиту.

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

Периодический реквизит также  можно  изменить простым присваиванием или  методом  УстановитьАтрибут.  Однако  предварительно до  поиска элемента  методом  ИспользоватьДату  нужно   установить дату  записи  такого   реквизита.  Если  в  коде  метод ИспользоватьДату ни разу для справочника не применялся, то для изменения значения периодического реквизита можно  использовать метод Установить.

Пример. Изменяется  фамилия сотрудника, код которого равен 203, и  его оклад.

процедура Выполнить()                     //              Связана с кнопкой Пуск обработки Проба перем сСотр_2, новФИО;

ОчиститьОкноСообщений();

новФИО = "Костина Ольга Владимировна";

сСотр_2  = СоздатьОбъект("Справочник.Сотрудники_2");

// Записываем периодический реквизит Оклад на рабочую дату сСотр_2.ИспользоватьДату(РабочаяДата());

// Ищем во всем справочнике

если сСотр_2.НайтиПоКоду(209, 0) = 1 тогда

если СокрЛП(сСотр_2.Наименование) = новФИО тогда Предупреждение("Старая и новая фамилии совпадают."); возврат;.

конецЕсли;

сСотр_2.Наименование = новФИО;

сСотр_2.0клад = 2900;

//

Новый оклад

сСотр_2.3аписать();

//

Записываем изменения

иначе

Предупреждение("Сотрудник не найден."); конецЕсли;

// Просмотр результата ОткрытьФорму("Справочник.Сотрудники_2.ФормаСписка");

конецПроцедуры // Выполнить

Тот  же результат  получим, заменив  присваивания  на  метод  УстановитьАтрибут:

сСотр_2.УстановитьАтрибут("Наименование",  "Костина Ольга  Владимировна"); сСотр_2.УстановитьАтрибут("Оклад",   2900);

Также   вместо  методов  ИспользоватьДату и  УстановитьАтрибут можно  для  периодического  реквизита Оклад  применить вызов

сСотр_2.0клад.Установить(РабочаяДата(), 2900);

Замечание.   Если  не  задана  дата  периодического  реквизита,  то  возникнет  ошибка, сопровождаемая  сообщением

Не определена дата! Элемент не может быть записан!

5.5.1.4.             УДАЛЕНИЕ   ЗАПИСЕЙ

Запись  можно  снабдить  пометкой для  удаления, употребляемой  в  1С  или  в  DBFфайлах, применив метод  Удалить соответственно  с аргументом 0 или  1. Снять  пометку 1С  позволяет   метод  СнятьПометкуУдаления.  Метод-функция  ПометкаУдаления  вернет  1, если  элемент имеет 1С-пометку удаления, или 0 -в  противном случае.

Пример.  Помечается для удаления в  смысле   1С группа  01  /1  и  все ее  подчиненные элементы.  Затем  снимается  отметка   об  удалении  с  элемента этой  группы, имеющего код  112.

процедура Выполнить()                     //              Связана с кнопкой Пуск  обработки Проба  перем сСотр_2;

ОчиститьОкноСообщений();

сСотр_2  = СоздатьОбъект("Справочник.Сотрудники_2");

// Ищем во всем справочнике

если сСотр_2.НайтиПоНаименованию("01 /1" , 0) = 1 тогда

// Если выбрана кнопка "Да"

если Вопрос("Пометить для удаления группу", 4) = 6 тогда

сСотр_2.Удалить(0);               //         Помечаем всю группу

// Ищем во всем справочнике

если сСотр_2.НайтиПоКоду(112, 0) = 1 тогда если сСотр_2.ПометкаУдаления() = 1 тогда

сСотр_2.СнятьПометкуУдаления(); конецЕсли;

иначе

Предупреждение("Сотрудник не найден."); конецЕсли;

конецЕсли; иначе

Предупреждение("Подразделение не найдено."); конецЕсли;

// Просмотр результата ОткрытьФорму("Справочник.Сотрудники_2.ФормаСписка");

конецПроцедуры // Выполнить

Источник: Бартеньев О. В. 1С:Предприятие:  программирование для  всех.  Базовые объекты и расчеты на одной дискете. М.: Диалог-МИФИ, 2005. 464 с.

По теме:

  • Комментарии