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

0

Все   записи   информационной  базы,  обладающие   1С-пометкой  удаления,   можно  разместить  в  списке значений, вызвав  процедуру  НайтиПомеченныеНаУдаление. Список  найденных  ей  объектов  можно  просмотреть  и   передать   его  (весь  или  сокращенный)  затем  либо процедуре  НайтиСсылки, либо процедуре УдалитьОбъекты.

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

// сЗнач список значений, куда будут размещены записи об объектах,

// помеченных для удаления

// сЗнач2 список объектов, передаваемых процедуре НайтиСсылки перем сЗнач, сЗнач2, тЗнач, ин, значен, пред; ОчиститьОкноСообщений();

сЗнач = СоздатьОбъект("СписокЗначений"); НайтиПомеченныеНаУдаление(сЗнач);

если сЗнач.РазмерСписка() > 0 тогда

// Диалог для проставления пометок в списке см. на рис. 5.62 сЗнач.ОтметитьЗначения(, "Выберите объекты  для поиска ссылок");

// После проставления пометок в списке сЗнач перенесем

// выбранные элементы в список сЗнач2 (рис. 5.63) сЗнач2  = СоздатьОбъект("СписокЗначений");

для ин = 1 по сЗнач.РазмерСписка() цикл

// Если элемент списка не имеет пометки если сЗнач.Пометка(ин) = 1 тогда

значен  = сЗнач.ПолучитьЗначение(ин, пред); сЗнач2.ДобавитьЗначение(значен,  пред);

конецЕсли; конецЦикла; // для

если сЗнач.РазмерСписка() > 0 тогда

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

сЗнач2.ВыбратьЗначение(, "Список для процедуры НайтиСсылки");

// тЗнач таблица, в которую разместим ссылки на удаленные объекты тЗнач = СоздатьОбъект("ТаблицаЗначений");

НайтиСсылки(сЗнач2, тЗнач);

// Просмотр результата. Возможный вариант приведен на рис. 5.64 тЗнач.ВыбратьСтроку(, "Таблица ссылок");

иначе

Сообщить("Список для процедуры НайтиСсылки пуст."); конецЕсли

иначе

Сообщить("Нет записей с 1С-пометкой удаления."); конецЕсли;

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

Рис.  5.62.  Объекты,  отобранные в списке сЗнач  для поиска ссылок

Рис.  5.63.  Список сЗнач2  объектов для поиска ссылок

Рис.  5.64.  Обнаружена  ссылка  на документ  № 4 из справочника  Сотрудники_2

Замечание.  В  процедуре  НайтиСсылки   в   качестве   первого   параметра  можн о   употребить  не  список  значений, а  значение  одного  объекта,  ссылки  на  который  нужно   о бнаружить, например, так:

тЗнач = СоздатьОбъект("ТаблицаЗначений");

док  = СоздатьОбъект("Документ.ИзменениеОклада"); док.НайтиПоНомеру(4);             //                     Ищем документ НайтиСсылки(док.ТекущийДокумент(  ), тЗнач);

// Просмотр таблицы ссылок тЗнач.ВыбратьСтроку(, "Таблица ссылок");

Передаваемый процедуре объект  может  не  иметь пометки  удаления.

Процедура  УдалитьОбъекты проставляет  DBF-пометки  удаления.  Процедура, так  же  как  и  процедура  НайтиСылки, может  принимать  в  качестве  первого  параметра  либо отдельный удаляемый объект, либо список  объектов.  Причем  объекты могут  в  общем-то и  не  иметь  1С-пометок  удаления. Процедура  имеет следующий синтаксис:

УдалитьОбъекты(объект | список_объектов, [проверка], [таблица_ссылок]);

где  первый  параметр это  либо удаляемый объект, либо список  объектов,  возвращаемый,   например,  процедурой  НайтиПомеченныеНаУдаление.   Если   параметр проверка = 1, то  осуществляется поиск  ссылок на  объекты,  заданные первым  параметром   процедуры. Найденные  ссылки  возвращаются   выходным  параметром  таблица_ссылок,    имеющим тип  ТаблицаЗначений.  Причем  объекты,  ссылки  на  которые  обнаружены,  не  удаляются.  Если  же  проверка  = 0, то  ссылки  и  все объекты, заданные  параметром  1, удаляются (разумеется,  в  том  случае,  если  первый  параметр задан  без ошибок).

Удаленные  объекты  получают DBF-пометку  удаления.   Их  физическое  удаление выполняется  в  конфигураторе,  открывающем  подлежащие   упаковке  файлы в  монопольном режиме (разд.  5.5.2).

Пример.  Удаляется документ №  4 об  изменении  оклада.

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

тЗнач  = СоздатьОбъект("ТаблицаЗначений");

док  = СоздатьОбъект("Документ.ИзменениеОклада");

// Ищем документ

если док.НайтиПоНомеру(4) = 0 тогда Предупреждение("Документ под номером 4 не найден.");

конецЕсли;

// Перед удалением проводим поиск ссылок на документ № 4

УдалитьОбъекты(док.ТекущийДокумент(),  1,тЗнач);

// Если есть ссылки, то прежде их просмотрим, а затем примем решение,

// удалять документ или нет

если тЗнач.КоличествоСтрок() > 0 тогда

// Просмотр таблицы ссылок тЗнач.ВыбратьСтроку(, "Таблица ссылок");

если Вопрос("Удалить документ, на который есть ссылки?", "Да+Нет") = "Да" тогда

// Удаляем  документ без поиска ссылок (проставляем DBF-пометку удаления) УдалитьОбъекты(док.ТекущийДокумент());

иначе’

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

иначе

Предупреждение("Документ № 4 удален."); конецЕсли;

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

После удаления в окне сообщений возникнет следующий текст: Удаленные записи:

Документ: ИзменениеОклада Номер: 4 Дата: 29.11.2001

Документ.ИзменениеОклада: удалено объектов 1

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

5.14.    ВЫВОДЫ

1.              Справочник  1С это  в общем  случае  совокупность  нескольких взаимосвязанных DBF-файлов.

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

3.             Периодические реквизиты справочника хранятся в файле 1 SCONST.DBF.

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

5.             Реквизиты,  автоматически формируемые  программой (например  код)  следует делать доступными только для чтения.

6.             Атрибуты Родитель и Владелец  имеют тип Справочник.

7.             Удаление записей  справочника  выполняется в  3 этапа:  на  первом  записи  помечаются  для удаления символом * в поле Ismark таблицы справочника, на втором в специально  выделенном  поле  DBF-файла  таблицы, на  третьем  выполняется упаковка  помеченных для  удаления данных;  записи,  удаление которых  приведет к нарушению  целостности базы данных, нельзя удалить в интерактивном режиме, зато  это  можно   выполнить программно,  употребив  встроенную  процедуру  УдалитьОбъекты.

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

9.              Предопределенную процедуру  ПриЗаписи следует применять для контроля ввод имых данных.

10.       Предопределенная  процедура ВводНового  употребляется для  задания  начальных значений вводимых реквизитов.

11.       Отбор значений справочника возможен только  по реквизитам, имеющим свойства Сортировка и Отбор по реквизиту.

12.       В подчиненном справочнике отображаются только  строки, связанные  с записью, выбранной  в справочнике-владельце.

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

14.       Длинный код по выбору данных следует заменять  запросами.

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

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

17.      Методы    ИспользоватьДату,    ИспользоватьВладельца    и    ИспользоватьРодителя употребляются  для объектов, имеющих тип  Справочник, которые либо возвращаются   функцией   СоздатьОбъект,  либо  являются   компонентами  других объектов, например документов  или  других  справочников, либо возвращаются параметром контекст  функции ОткрытьФорму  или метода ОткрытьПодбор.

6.    ОБЪЕКТЫ  ТИПА ПЕРИОДИЧЕСКИЙ

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

По теме:

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