Удалить периодические реквизиты справочника

Приведенный выше пример подойдет, но нужно будет учесть моменты: если элемент -группа, или если значение установлено документом? Удаление нужно поместить в блок «Попытка Исключение КонецПопытки;»

Для свертки баз широко используется такая процедура:

Процедура УдалениеЗначенийПериодическихРеквизитов(ДатаСвертки)

   Сообщить(Строка(ТекущееВремя())+» Удаляем значения периодических реквизитов в справочниках до даты свертки»);        

   
   Периодический = СоздатьОбъект(«Периодический»);

   
   Для т = 1 По Метаданные.Справочник() Цикл

       Состояние(«Удаление значений периодических реквизитов справочника «+Метаданные.Справочник(т).Идентификатор);

       // Список периодических реквизитов

       ПериодическиеРеквизиты = СоздатьОбъект(«СписокЗначений»);

       Для п = 1 По Метаданные.Справочник(т).Реквизит() Цикл

           Если Метаданные.Справочник(т).Реквизит(п).Периодический = 1 Тогда

               // Есть периодический реквизит

               ПериодическиеРеквизиты.ДобавитьЗначение(Метаданные.Справочник(т).Реквизит(п).Идентификатор);

           КонецЕсли;

       КонецЦикла;

       
       Если ПериодическиеРеквизиты.РазмерСписка() > 0 Тогда  

           Сообщить(«Удаление значений периодических реквизитов справочника «+Метаданные.Справочник(т).Идентификатор);

           Справ = СоздатьОбъект(«Справочник.»+Метаданные.Справочник(т).Идентификатор);

           Если Метаданные.Справочник(т).Владелец.Выбран() = 1 Тогда

               // подчиненный справочник (необходимо сначала выбрать владельца)

               Владельцы = СоздатьОбъект(«Справочник.» + Метаданные.Справочник(т).Владелец.Идентификатор);

               Владельцы.ВыбратьЭлементы();

               Пока Владельцы.ПолучитьЭлемент() = 1 Цикл

                   
                   Справ.ИспользоватьВладельца(Владельцы.ТекущийЭлемент());

                   
                   Справ.ВыбратьЭлементы();

                   Пока Справ.ПолучитьЭлемент() = 1 Цикл

                       Для СчетчикЦикла = 1 По ПериодическиеРеквизиты.РазмерСписка() Цикл

                           СтрокаСостояния();

                           ИдРекв = ПериодическиеРеквизиты.ПолучитьЗначение(СчетчикЦикла);

                           //Сообщить(«Текщий период. реквизит = «+ИдРекв);

                           Периодический.ИспользоватьОбъект(Строка(ИдРекв), Справ.ТекущийЭлемент());

                           
                           // оставляем только одно значение периодического реквизита до даты свертки

                           // остальные удаляем

                           
                           Периодический.ОбратныйПорядок(1);

                           Периодический.ВыбратьЗначения(, ДатаСвертки);

                           
                           СчетчикЗначений = 0;

                           
                           Пока Периодический.ПолучитьЗначение() = 1 Цикл

                               Если СчетчикЗначений > 0 Тогда

                                   Периодический.Удалить();    

                               КонецЕсли;

                               
                               СчетчикЗначений = СчетчикЗначений + 1;

                           КонецЦикла;

                           
                       КонецЦикла;

                       
                   КонецЦикла;

               КонецЦикла;

               
           Иначе

               // обычный справочник

               Справ.ВыбратьЭлементы();

               Пока Справ.ПолучитьЭлемент() = 1 Цикл

                   Для СчетчикЦикла = 1 По ПериодическиеРеквизиты.РазмерСписка() Цикл

                       СтрокаСостояния();

                       ИдРекв = ПериодическиеРеквизиты.ПолучитьЗначение(СчетчикЦикла);

                       //Сообщить(«Текщий период. реквизит = «+ИдРекв);

                       Попытка //т.к. для групп многие реквизиты не доступны

                           Периодический.ИспользоватьОбъект(ИдРекв, Справ.ТекущийЭлемент());

                       Исключение

                           //Сообщить(«Невозможно получить реквизит [«+ИдРекв+»] для элемента «+ Справ.Код);

                           Продолжить;

                       КонецПопытки;

                       // оставляем только одно значение периодического реквизита до даты свертки

                       // остальные удаляем

                       Периодический.ОбратныйПорядок(1);

                       Периодический.ВыбратьЗначения(, ДатаСвертки);

                       СчетчикЗначений = 0;

                       Пока Периодический.ПолучитьЗначение() = 1 Цикл

                           Если СчетчикЗначений > 0 Тогда

                               Попытка //нельзя удалить значения, установленные документами

                                   Периодический.Удалить();        

                               Исключение

                                   //ОписаниеОшибки()    

                               КонецПопытки;

                           КонецЕсли;

                           СчетчикЗначений = СчетчикЗначений + 1;

                       КонецЦикла;

                   КонецЦикла;

               КонецЦикла;

           КонецЕсли;

           
       КонецЕсли;

       
   КонецЦикла

   
КонецПроцедуры // УдалениеЗначенийПериодическихРеквизитов()

Для работы с периодическими реквизитами справочников и периодическими константами в системе «1С:Предприятие» версии 7.7 используется специальный агрегатный тип данных — "Периодический". Объекты данного типа предназначены для возможности записи, редактирования и удаления значений периодических реквизитов справочников и периодических констант непосредственно из программного модуля, без необходимости прибегать к интерактивным операциям.

Контекст работы с объектом

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

При создании объекта данного типа функции СоздатьОбъект() в качестве параметра передаётся ключевое слово «Периодический» (англоязычный синоним — «Periodic»):

ВремРеквизиты = СоздатьОбъект("Периодический");

или

TempProp = CreateObject("Periodic");

Атрибуты объекта «Периодический»

Доступ к значению выбранного периодического реквизита справочника или константы предоставляет атрибут Значение объекта "Периодический". Англоязычный синоним имени атрибута — Value.

Доступ к дате значения выбранного периодического реквизита справочника или константы предоставляет атрибут ДатаЗнач объекта "Периодический". Англоязычный синоним имени атрибута — DateVal.

Пример использования атрибутов:

Вал = СоздатьОбъект("Справочник.Валюты");

Вал.НайтиПоКоду(1);
Если Вал.Выбран() = 1 Тогда
   Доллар = Вал.ТекущийЭлемент();
Иначе
   Предупреждение("Не найдена валюта!");
   Возврат;
КонецЕсли;
ПерВал = СоздатьОбъект("Периодический");
ПерВал.ИспользоватьОбъект("ТекущКурс", Доллар);

ПерВал.ОбратныйПорядок(1);
ПерВал.ВыбратьЗначения();
Пока ПерВал.ПолучитьЗначение() = 1 Цикл
   Курс = ПерВал.Значение;
   ДатаКурса = ПерВал.ДатаЗнач;
КонецЦикла;

Как видно из вышеприведённого примера, методика работы с периодическими реквизитами и константами проста:

  1. С помощью функции СоздатьОбъект() создаём объект типа "Периодический".
  2. С помощью метода ИспользоватьОбъект() (см. описание метода ниже) связываем созданный объект "Периодический" с конкретным периодическим реквизитом или константой.
  3. Используя атрибуты и методы объекта "Периодический", начинаем работать с выбранным периодическим реквизитом или константой.

Методы объекта «Периодический»

Связать созданный объект типа "Периодический" с конкретным реквизитом или константой позволяет метод ИспользоватьОбъект(). Англоязычный синоним имени метода — UseObject().

Синтаксис метода:

ИспользоватьОбъект(<ИмяРеквизита>, <Объект>)

где

  • <ИмяРеквизита> — строковое выражение, задающее название (идентификатор) периодического реквизита справочника или название (идентификатор) периодической константы, как они названы в Конфигураторе;
  • <Объект> — необязательный параметр. Значение элемента справочника, для которого задаётся применение объекта "Периодический". Данный параметр требуется задавать только в случае, если <ИмяРеквизита> — периодический реквизит справочника.

Если параметр <ИмяРеквизита> не задан (пустая строка), а параметр <Объект> задаёт элемент справочника, то выборка будет осуществляться по всем периодическим реквизитам для данного элемента справочника.

Задать тип периодическому реквизиту справочника или периодической константе неопределённого типа позволяет метод НазначитьТип(). Англоязычный синоним имени метода — SetType().

Синтаксис метода:

НазначитьТип(<ИмяТипа>, <Длина>, <Точность>)

где

  • <ИмяТипа> — строковое выражение — название типа данных, который назначается периодическому реквизиту справочника или периодической константе неопределённого типа, например, "Строка", "Число", "Справочник.Товары", "Документ.РасходнаяНакладная" и т.п.;
  • <Длина> — необязательный параметр. Числовое выражение — длина поля представления данных. Имеет смысл только при задании числового или строкового типа;
  • <Точность> — необязательный параметр. Числовое выражение — число знаков числа после десятичной точки. Имеет смысл только при задании числового типа.

Пример использования:

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

Тов.НайтиПоКоду(51);
Если Тов.Выбран() = 1 Тогда
   ВыбТМЦ = Тов.ТекущийЭлемент();
Иначе
   Предупреждение("Не найден товар!");
   Возврат;
КонецЕсли;
ПерТМЦ = СоздатьОбъект("Периодический");
ПерТМЦ.ИспользоватьОбъект("ТМЦ", ВыбТМЦ);
ПерТМЦ.НазначитьТип("Справочник.Товары");

Получить значение реквизита или константы, актуальное на заданную дату позволяет метод ЗначениеНаДату(). Англоязычный синоним имени метода — ValueOnDate().

Синтаксис метода:

ЗначениеНаДату(<Дата>)

где <Дата> — выражение типа "Дата", задающее дату, на которую необходимо получить значение реквизита или константы.

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

Пример использования:

К = ПерВал.ЗначениеНаДату(ДатаП);

Найти периодическое значение на заданную дату позволяет метод НайтиЗначение() (англоязычный синоним — FindValue()). Метод возвращает 1, если вызов закончился успешно, или 0, если нет. Режим поиска в случае, если на заданную дату не существует значения периодического реквизита, задаётся параметром <Режим>. Само же полученное при этом значение следует считывать из атрибута Значение объекта "Периодический" (то есть данный метод выполняет позиционирование, как и методы выборки).

Синтаксис метода:

НайтиЗначение(<Дата>, <Режим>)

где

  • <Дата> — выражение, задающее значение даты, на которую требуется найти значение периодического реквизита справочника или периодической константы;
  • <Режим> — числовое выражение, значение которого задаёт режим поиска, если на заданную дату не существует значения периодического реквизита. Если −1 (минус единица) — возвращается значение на предыдущую дату, если 0 — возвращается код завершения неуспешной операции, если 1 — возвращается значение на последующую дату.

Пример использования:

Если ПерВал.НайтиЗначение(ДатаП, -1 ) = 1 Тогда
   К = ПерВал.Значение;
Иначе
   Предупреждение("Значение не найдено!", 3);
   Возврат;
КонецЕсли;

Открыть выборку периодических значений за указанный период позволяет метод ВыбратьЗначения() (англоязычный синоним — SelectItems()). Выборка будет происходить при помощи метода ПолучитьЗначение() среди периодических значений текущего объекта применения, заданного методом ИспользоватьОбъект(). Возвращаемым значением метода ВыбратьЗначения() является число: 1 — если вызов метода закончился успешно, 0 — если нет.

Синтаксис метода:

ВыбратьЗначения(<ДатаНачала>, <ДатаКонца>)

где

  • <ДатаНачала> — необязательный параметр. Выражение типа "Дата", задающее дату начала периода выборки периодических значений. Если параметр не задан, то выборка начинается с самой ранней имеющейся даты;
  • <ДатаКонца> — необязательный параметр. Выражение типа "Дата", задающее дату конца периода выборки периодических значений. Если параметр не задан, то выборка заканчивается самой последней имеющейся датой.

Пример использования метода:

Вал = СоздатьОбъект("Справочник.Валюты");

Вал.НайтиПоКоду(1);
Если Вал.Выбран() = 1 Тогда
   Доллар = Вал.ТекущийЭлемент();
Иначе
   Предупреждение("Не найдена валюта!");
   Возврат;
КонецЕсли;
ПерВал = СоздатьОбъект("Периодический");
ПерВал.ИспользоватьОбъект("ТекущКурс", Доллар);

ПерВал.ОбратныйПорядок(1);
ПерВал.ВыбратьЗначения();
Пока ПерВал.ПолучитьЗначение() = 1 Цикл
   Курс = ПерВал.Значение;
   ДатаКурса = ПерВал.ДатаЗнач;
КонецЦикла;

Установить порядок выборки значений, открытой методом ВыбратьЗначения(), позволяет метод ОбратныйПорядок() (англоязычный синоним — BackwardOrder()), вызов которого должен происходить до вызова метода ВыбратьЗначения(). Возвращаемым значением метода является число: 1 — если вызов метода закончился успешно, или 0 — если нет. Пример использования метода приведён выше.

Синтаксис:

ОбратныйПорядок(<Режим>)

где <Режим> — числовое выражение, результирующее значение которого задаёт режим выборки периодических значений. Если значение равно 0, устанавливается прямой порядок выборки; если значение отлично от 0 — обратный порядок выборки. Параметр является необязательным. Значение по умолчанию — 1.

Открыть выборку периодических значений, установленных указанным документом, позволяет метод ВыбратьПоДокументу() (англоязычный синоним — SelectByDoc()). Выборка будет происходить при помощи метода ПолучитьЗначение() по всем справочникам и реквизитам. То есть при использовании данного метода игнорируется установка объекта применения, задаваемая методом ИспользоватьОбъект(). Возвращаемым значением метода ВыбратьПоДокументу() является число: 1 — если вызов метода закончился успешно, 0 — если нет.

Синтаксис метода:

ВыбратьПоДокументу(<Документ>)

где <Документ> — выражение со значением типа "Документ", указывающее, по какому документу будет производиться выборка.

Пример использования метода:

Процедура ПечатьУстановокДокумента(Док)
   Если Док.Выбран() = 0 Тогда
      Возврат;
   КонецЕсли;
   Таб = СоздатьОбъект("Таблица");
   Таб.ИсходнаяТаблица("ПечатьИстории");
   Таб.ВывестиСекцию("Отчет");
   Ист = СоздатьОбъект ("Периодический");
   Ист.ВыбратьПоДокументу(Док);
   Пока Ист.ПолучитьЗначение() = 1 Цикл
      Таб.ВывестиСекцию("Строка");
   КонецЦикла;
   Таб.Опции(0, 0, 0, 0);
   Таб.ТолькоПросмотр(1);
   Таб.Показать("Отчет");
КонецПроцедуры

Выбрать очередное значение из выборки, предварительно открытой методом ВыбратьЗначения() или ВыбратьПоДокументу(), позволяет метод ПолучитьЗначение() (англоязычный синоним — GetValue()). Само полученное значение следует считывать из атрибута Значение, а дату этого значения — из атрибута ДатаЗнач.

У метода ПолучитьЗначение() нет параметров, а возвращаемым значением является число: 1 — если элемент выбран успешно, 0 — если элемент не выбран (достигнут конец выборки).

Пример использования метода:

Процедура КурсыВалюты(КодВалюты)
   Вал = СоздатьОбъект("Справочник.Валюты");
   
   Вал.НайтиПоКоду(КодВалюты);
   Если Вал.Выбран() = 1 Тогда
      Доллар = Вал.ТекущийЭлемент();
   Иначе
      Предупреждение("Не найдена валюта!");
      Возврат;
   КонецЕсли;
   ПерВал = СоздатьОбъект("Периодический");
   ПерВал.ИспользоватьОбъект("Текущ_курс", Доллар);
   ПерВал.ОбратныйПорядок(1);
   ПерВал.ВыбратьЗначения();
   Пока ПерВал.ПолучитьЗначение() = 1 Цикл
      Сообщить("Курс на " + Строка(ПерВал.ДатаЗнач) + " = " + ПерВал.Значение);
   КонецЦикла;
КонецПроцедуры

Получить документ, который установил значение периодического реквизита справочника позволяет метод ТекущийДокумент() (англоязычный синоним — CurrentDocument()). Данный метод не имеет параметров и используется после получения очередного значения из выборки с помощью метода ПолучитьЗначение().

Пример использования:

Процедура ПечатьИстории(Элем)
   Если Элем.Выбран() = 0 Тогда
      Возврат;
   КонецЕсли;
   Таб = СоздатьОбъект("Таблица");
   Таб.ИсходнаяТаблица("ПечатьИстории");
   Таб.ВывестиСекцию("Отчет");
   Ист = СоздатьОбъект("Периодический");
   
   Ист.ИспользоватьОбъект("", Элем);
   Ист.ВыбратьЗначения();
   Пока Ист.ПолучитьЗначение() = 1 Цикл
      ДокИст = Ист.ТекущийДокумент();
      Если ДокИст.Выбран() = 1 Тогда
         
         Таб.ВывестиСекцию("ПоДокументу");
      Иначе
         
         Таб.ВывестиСекцию("Строка");
      КонецЕсли;
   КонецЦикла;
   Таб.Опции(0, 0, 0, 0);
   Таб.ТолькоПросмотр(1);
   Таб.Показать("Отчет");
КонецПроцедуры

Получить значение текущего элемента справочника позволяет метод ТекущийОбъект() (англоязычный синоним — CurrentObj()). Данный метод не имеет параметров и используется после получения очередного значения из выборки с помощью метода ПолучитьЗначение(). Особенно он полезен при выборке по документу (см. описание метода ВыбратьПоДокументу()).

Пример использования метода:

Процедура ПечатьУстановокДокумента(Док)
   
   Если Док.Выбран() = 0 Тогда
      Возврат;
   КонецЕсли;
   Таб = СоздатьОбъект("Таблица");
   Таб.ИсходнаяТаблица("ПечатьИстории");
   Таб.ВывестиСекцию("Отчет");
   Ист = СоздатьОбъект("Периодический");
   Ист.ВыбратьПоДокумекту(Док);
   Пока Ист.ПолучитьЗначение() = 1 Цикл
      ИстОбъект = Ист.ТекущийОбъект();
      Если ИстОбъект.Вид() = "Товары" Тогда
         
         Таб.ВывестиСекцию("ПоТовару");
      ИначеЕсли ИстОбъект.Вид() = "Клиенты" Тогда
         
         Таб.ВывестиСекцию("ПоКлиенту");
      КонецЕсли;
   КонецЦикла;
   Таб.Опции(0, 0, 0, 0);
   Таб.ТолькоПросмотр(1);
   Таб.Показать("Отчет");
КонецПроцедуры

Получить наименование текущего реквизита справочника позволяет метод ТекущийРеквизит() (англоязычный синоним — CurrentAttribute()). Метод не имеет параметров и возвращает строковое значение — наименование текущего реквизита справочника.

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

Пример использования метода:

Процедура ПечатьУстановокДокумента(Док)
   
   Если Док.Выбран() = 0 Тогда
      Возврат;
   КонецЕсли;
   Таб = СоздатьОбъект("Таблица");
   Таб.ИсходнаяТаблица("ПечатьИстории");
   Таб.ВывестиСекцию("Отчет");
   Ист = СоздатьОбъект("Периодический");
   Ист.ВыбратьПоДокументу(Док);
   Пока Ист.ПолучитьЗначение() = 1 Цикл
      Если Ист.ТекущийРеквизит() = "Товары.Цена" Тогда
         
         Таб.ВывестиСекцию("ПоЦенеТовара");
      ИначеЕсли Ист.ТекущийРеквизит() = "Клиенты.Статус" Тогда
         
         Таб.ВывестиСекцию("ПоСтатусуКлиента");
      КонецЕсли;
   КонецЦикла;
   Таб.Опции(0, 0, 0, 0);
   Таб.ТолькоПросмотр(1);
   Таб.Показать("Отчет");
КонецПроцедуры

Получить номер строки документа, изменившей периодическое значение реквизита справочника, позволяет метод НомерСтроки() (англоязычный синоним — LineNum()). Он не имеет параметров и используется после получения очередного значения из выборки. Особенно полезен при выборке по документу или по всем реквизитам.

Пример использования метода:

Процедура ПечатьИстории(Элем)
   Если Элем.Выбран() = 0 Тогда
      Возврат;
   КонецЕсли;
   Таб = СоздатьОбъект("Таблица");
   Таб.ИсходнаяТаблица("ПечатьИстории");
   Таб.ВывестиСекцию("Отчет");
   Ист = СоздатьОбъект("Периодический");
   
   Ист.ИспользоватьОбъект("", Элем);
   Ист.ВыбратьЗначения();
   Пока Ист.ПолучитьЗначение() = 1 Цикл
      ДокИст = Ист.ТекущийДокумент();
      Если ДокИст.Выбран() = 1 Тогда
         
         НомСтрДок = Ист.НомерСтроки();
         Таб.ВывестиСекцию("ПоДокументу");
      Иначе
         
         Таб.ВывестиСекцию("Строка");
      КонецЕсли;
   КонецЦикла;
   Таб.Опции(0, 0, 0, 0);
   Таб.ТолькоПросмотр(1);
   Таб.Показать("Отчет");
КонецПроцедуры

Выполнить запись периодического значения на заданную дату позволяет метод Записать() (англоязычный синоним — Write()). Если на заданную дату уже существует запись, то она модифицируется. Возвращаемым значением метода будет число: 1 — если вызов метода закончился успешно, 0 — если нет.

До вызова данного метода следует само значение записать в атрибут Значение, а дату этого значения записать в атрибут ДатаЗнач.

Пример использования метода:

Процедура ЗаписьКурсаДоллара(Курс)
   Вал = СоздатьОбъект("Справочник.Валюты");
   
   Вал.НайтиПоКоду(1);
   Если Вал.Выбран() = 1 Тогда
      Доллар = Вал.ТекущийЭлемент();
   Иначе
      Предупреждение("Не найдена валюта!");
      Возврат;
   КонецЕсли;
   ПерВал = СоздатьОбъект("Периодический");
   ПерВал.ИспользоватьОбъект("Текущ_курс", Доллар);
   ПерВал.Значение = Курс;
   ПерВал.ДатаЗнач = РабочаяДата();
   ПерВал.Записать();
КонецПроцедуры

Удалить периодическое значение на заданную дату позволяет метод Удалить() (англоязычный синоним — Delete()). Возвращаемым значением метода будет число: 1 — если вызов метода закончился успешно, 0 — если нет. До вызова данного метода атрибут ДатаЗнач должен содержать дату удаляемого периодического значения.

Пример использования метода:

Процедура ЧисткаКурсов()
   Вал = СоздатьОбъект("Справочник.Валюты");
   
   Вал.НайтиПоКоду(1);
   Если Вал.Выбран() = 1 Тогда
      Доллар = Вал.ТекущийЭлемент();
   Иначе
      Предупреждение("Не найдена валюта!");
      Возврат;
   КонецЕсли;
   ПерВал = СоздатьОбъект("Периодический");
   ПерВал.ИспользоватьОбъект("Текущ_курс", Доллар);
   ПерВал.ВыбратьЗначения();
   Пока ПерВал.ПолучитьЗначение() = 1 Цикл
      Курс = ПерВал.Значение;
      ДатаКурса = ПерВал.ДатаЗнач;
      Если Курс < 1000 Тогда
         ПерВал.Удалить();
      КонецЕсли;
   КонецЦикла;
КонецПроцедуры

Другие статьи по схожей тематике

  • Работа с константами
  • Работа с датами
  • Работа с журналами документов
  • Работа со справочниками в 1С
  • Работа с формами
  • Работы с табличными формами

Может кто подскажет есть справочник  Основные Средства Нужно удалить периодические реквизиты Идентификатор ВосстановительнаяСтоимость как  правильно прописать коде. КонецПроцедуры

Как правильно прописать строку ПерВал.ИспользоватьОбъект(«»тут»»); Идентификатор ВосстановительнаяСтоимость

пробовал Основные.ТекущийЭлемент?

Продам СП, дорого! ИспользоватьОбъект(<?>) Синтаксис: ИспользоватьОбъект(<ИмяРеквизита>,<Объект>) Назначение: Сопоставляет объект типа ‘Периодический’ периодическому реквизиту справочника или периодической константе. Возвращает: 1 — если вызов метода закончился успешно, 0 — иначе. Параметры: <ИмяРеквизита> — строка с названием периодического реквизита справочника или периодической константы; <Объект> — значение элемента справочника, для которого задается применение периодического реквизита (для констант не нужен).

Укажите в каком месте ошибка.

Пишет ПерВал.ИспользоватьОбъект(«ВосстановительнаяСтоимость»,Основные.ТекущийЭлемент); {D:БУХГАЛТЕРИЯ ОТ 13102016ОЧИСТКА.ERT}: Поле агрегатного объекта не обнаружено (ТекущийЭлемент)

Основные.ТекущийЭлемент — ? Странно в одной процедуре, у тебя экран в 10″ что она не помещается целиком? не удивительно.

Проверил работает. Всем Спасибо

Стоп. А выборка не сбивается?

Тэги: 1С 7.7 и ранее

Комментарии доступны только авторизированным пользователям

  • АКТУАЛЬНЫЕ РЕЛИЗЫ 1С
  • ПРИМЕРЫ КОДА НА ПЛАТФОРМЕ 1С
Работа с регистрами сведений в 1С 8.x
  • Как добавить запись в непериодический независимый регистр сведений?
  • Как считать содержимое непериодического независимого регистра сведений «СобственныеКонтрагенты»?
  • Как удалить все записи из независимого регистра сведений?
  • Как удалить записи независимого регистра сведений с отбором по конкретной организации?
  • Как добавить запись в периодический независимый регистр сведений?
  • Как прочитать (изменить) записи в периодическом независимом регистре сведений?
  • Как удалить записи в периодическом независимом регистре сведений?
  • Как в периодическом независимом регистре сведений «КурсыВалют» удалить все записи по валютам с наименованиями «EUR» и «USD», период которых меньше 01 января 2005 года?
  • Как прочитать данные, актуальные на определенную дату, из регистра сведений «Курсы валют» с отбором по нескольким валютам (отбор по измерениям)?
  • Как поменять период у записей периодического независимого регистра, соответствующих ряду условий?
  • Как «сделать периодическим» реквизит уже заполненного справочника?
  • Как добавить записи в регистр сведений, подчиненный регистратору?
  • Как прочитать (изменить) записи в регистре сведений, подчиненном регистратору?
  • Как удалить записи из регистра сведений, подчиненного регистратору?

Как добавить запись в непериодический независимый регистр сведений?

НаборЗаписей = РегистрыСведений.ЗначенияСвойств.СоздатьНаборЗаписей(); 

НаборЗаписей.Отбор.Номенклатура.Установить(ТекущаяНоменклатура); 
НаборЗаписей.Отбор.Свойство.Установить(ТекущееСвойство); 

НоваяЗапись = НаборЗаписей.Добавить(); 
НоваяЗапись. Номенклатура = ТекущаяНоменклатура; 
НоваяЗапись.Свойство = ТекущееСвойство; 
НоваяЗапись.Значение = ТекущееЗначение; 

НаборЗаписей.Записать();          
Как считать содержимое непериодического независимого регистра сведений «СобственныеКонтрагенты»?

НаборЗаписей = РегистрыСведений.СобственныеКонтрагенты.СоздатьНаборЗаписей(); 
НаборЗаписей.Прочитать(); 

// Перебрать записи в цикле… 
Для Каждого Запись из НаборЗаписей Цикл 
	РегистрКонтрагент = Запись.Контрагент; 
	РегистрВидСвязи = Запись.ВидСвязи; 
	РегистрОбъект = Запись.Объект; 
КонецЦикла; 

// … или выгрузить записи в таблицу значений. 
ТаблицаЗаписей = НаборЗаписей.Выгрузить(); 


ВЫБРАТЬ 
	* 
ИЗ 
	РегистрыСведений.СобственныеКонтрагенты          
Как удалить все записи из независимого регистра сведений?

НаборЗаписей = РегистрыСведений.ТорговоеОборудование.СоздатьНаборЗаписей(); 
НаборЗаписей.Записать();          
Как удалить записи независимого регистра сведений с отбором по конкретной организации?

НаборЗаписей = РегистрыСведений.ОбъектыСтроительстваОрганизаций.СоздатьНаборЗаписей(); 
НаборЗаписей.Отбор.Организация.Установить(УдаляемаяОрганизация); 
НаборЗаписей.Записать();          
Как добавить запись в периодический независимый регистр сведений?

НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей(); 

НаборЗаписей.Отбор.Валюта.Установить(ТекущаяВалюта); 
НаборЗаписей.Отбор.Период.Установить(ТекущаяДата); 

НовЗапись = НаборЗаписей.Добавить(); 
НовЗапись.Валюта = ТекущаяВалюта; 
НовЗапись.Период = ТекущаяДата; 
НовЗапись.Курс = ТекущийКурс; 
НовЗапись.Кратность = ТекущаяКратность; 

НаборЗаписей.Записать(Истина);          
Как прочитать (изменить) записи в периодическом независимом регистре сведений?

НаборЗаписей = РегистрыСведений.Валюты.СоздатьНаборЗаписей(); 
НаборЗаписей.Отбор.Период.Установить(ДатаЗаписи); 

НаборЗаписей.Прочитать(); 

Для Каждого Запись Из НаборЗаписей Цикл 
	// Чтение и сообщение данных полей записи. 
	Сообщить(Строка(Запись.Период) + " " + Строка(Запись.Валюта) + " " + Строка(Запись.Курс)); 
	// Изменение данных полей записи. 
	Запись.Курс = 0; 
КонецЦикла; 

НаборЗаписей.Записать();          
Как удалить записи в периодическом независимом регистре сведений?

НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей(); 
НаборЗаписей.Записать();          
Как в периодическом независимом регистре сведений «КурсыВалют» удалить все записи по валютам с наименованиями «EUR» и «USD», период которых меньше 01 января 2005 года?

Запрос = Новый Запрос; 
Запрос.Текст = "ВЫБРАТЬ 
	|	* 
	|ИЗ 
	|	РегистрСведений.КурсыВалют КАК КурсыВалют 
	|ГДЕ 
	|	(КурсыВалют.Период >= ДАТАВРЕМЯ(2005, 1, 1) 
	|	ИЛИ 
	|	НЕ(КурсыВалют.Валюта.Наименование ПОДОБНО ""USD"") 
	|	И 
	|	НЕ(КурсыВалют.Валюта.Наименование ПОДОБНО ""EUR""))"; 


ТаблицаОставляемыхЗаписей = Запрос.Выполнить().Выгрузить(); 

НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей(); 
НаборЗаписей.Загрузить(ТаблицаОставляемыхЗаписей); 
НаборЗаписей.Записать();          
Как прочитать данные, актуальные на определенную дату, из регистра сведений «Курсы валют» с отбором по нескольким валютам (отбор по измерениям)?

Запрос = Новый Запрос; 
МассивВалют = Новый Массив; 
МассивВалют.Добавить(Валюта1); 
МассивВалют.Добавить(Валюта2); 

Запрос.УстановитьПараметр("МассивВалют", МассивВалют); 
Запрос.УстановитьПараметр("ДатаПолучения", ДатаПолучения); 

Запрос.Текст = " 
	|ВЫБРАТЬ 
	|	ВалютыСрезПоследних.Валюта, 
	|	ВалютыСрезПоследних.Курс 
	|ИЗ 
	|	РегистрСведений.КурсыВалют.СрезПоследних(&ДатаПолучения, Валюта В (&МассивВалют)) КАК ВалютыСрезПоследних"; 

ТаблицаКурсов = Запрос.Выполнить().Выгрузить();          
Как поменять период у записей периодического независимого регистра, соответствующих ряду условий?

Процедура ЗаменаПериода() 

	Запрос = Новый Запрос; 
	Запрос.Текст = "ВЫБРАТЬ 
	|	ОтветственныеЛицаОрганизации.Период, 
	|	ОтветственныеЛицаОрганизации.СтруктурнаяЕдиница, 
	|	ОтветственныеЛицаОрганизации.ОтветственноеЛицо 
	|ИЗ 
	|	РегистрСведений.ОтветственныеЛицаОрганизации КАК ОтветственныеЛицаОрганизации 
	|ГДЕ 
	|	ОтветственныеЛицаОрганизации.Период <= ДАТАВРЕМЯ(2005, 1, 1) 
	|	И 
	|	ОтветственныеЛицаОрганизации.СтруктурнаяЕдиница.Наименование | ПОДОБНО "Групп-Трейдинг" 
	|	И 
	|	(ОтветственныеЛицаОрганизации.Должность.Наименование ЕСТЬ NULL 
	|		ИЛИ 
	|		НЕ(ОтветственныеЛицаОрганизации.Должность.Наименование | ПОДОБНО "Продавец" 
	|			ИЛИ 
	|			ОтветственныеЛицаОрганизации.Должность.Наименование | ПОДОБНО "Кладовщик"))"; 

	Результат = Запрос.Выполнить(); 
	Выборка = Результат.Выбрать(); 

	Запись = РегистрыСведений.ОтветственныеЛицаОрганизации.СоздатьМенеджерЗаписи(); 

	Пока Выборка.Следующий() Цикл 
		Запись.Период = Выборка.Период; 
		Запись.СтруктурнаяЕдиница = Выборка.СтруктурнаяЕдиница; 
		Запись.ОтветственноеЛицо = Выборка.ОтветственноеЛицо;

		Запись.Прочитать(); 

		Если Запись.Выбран() Тогда 
			Запись.Период = Дата(2004, 1, 1); 
			Запись.Записать(); 
		КонецЕсли; 
	КонецЦикла; 

КонецПроцедуры;           
Как «сделать периодическим» реквизит уже заполненного справочника?

Запрос = Новый Запрос; 
Запрос.Текст = "ВЫБРАТЬ 
	|	&ДатаУстановки КАК Период, 
	|	Проекты.Ссылка КАК Проект, 
	|	Проекты.Ответственный 
	|ИЗ 
	|	Справочник.Проекты КАК Проекты 
	|ГДЕ 
	|	(НЕ(Проекты.ЭтоГруппа)) И (НЕ(Проекты.Ответственный = &Ответственный))"; 

Запрос.УстановитьПараметр("Ответственный", Справочники.Пользователи.ПустаяСсылка()); 
Запрос.УстановитьПараметр("ДатаУстановки", Дата(2000,1,1)); 

ТаблицаРезультат = Запрос.Выполнить().Выгрузить(); 

НаборЗаписей = РегистрыСведений.ЗакреплениеПроектов.СоздатьНаборЗаписей(); 
НаборЗаписей.Загрузить(ТаблицаРезультат); 
НаборЗаписей.Записать();          
Как добавить записи в регистр сведений, подчиненный регистратору?

НаборЗаписей = РегистрыСведений.ЛимитыВозвратнойТары.СоздатьНаборЗаписей(); 
НаборЗаписей.Отбор.Регистратор.Установить(ВыбранныйРегистратор); 
НоваяЗапись = НаборЗаписей.Добавить(); 
НоваяЗапись.Период = ВыбранныйРегистратор.Дата; 
НоваяЗапись.Номенклатура = ВыбраннаяНоменклатура; 
НоваяЗапись.ДоговорКонтрагента = ВыбранныйДоговор; 
НоваяЗапись.ЛимитПоставщика = 50; 
НаборЗаписей.Записать(); 


НаборЗаписей = РегистрыСведений.ЛимитыВозвратнойТары.СоздатьНаборЗаписей(); 
НаборЗаписей.Отбор.Регистратор.Установить(ВыбранныйРегистратор); 
НоваяЗапись = НаборЗаписей.Добавить(); 
НоваяЗапись.Период = ВыбранныйРегистратор.Дата; 
НоваяЗапись.Номенклатура = ВыбраннаяНоменклатура; 
НоваяЗапись.ДоговорКонтрагента = ВыбранныйДоговор; 
НоваяЗапись.ЛимитПокупателю = 25; 
НаборЗаписей.Записать(Ложь);          
Как прочитать (изменить) записи в регистре сведений, подчиненном регистратору?

НаборЗаписей = РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей(); 
НаборЗаписей.Отбор.Регистратор.Установить(ВыбранныйРегистратор); 
НаборЗаписей.Прочитать(); 
Для Каждого Запись Из НаборЗаписей Цикл 
	// Чтение и сообщение данных полей записи. 
	Сообщить(Строка(Запись.Период) + " " + Строка(Запись.ТипЦен) +" "+ Строка(Запись.Номенклатура) + 
	" " + Строка(Запись.Цена) + " " + Строка(Запись.ПроцентСкидкиНаценки)); 
	// Изменение данных полей записи. 
	Запись.ПроцентСкидкиНаценки = 0; 
КонецЦикла; 
НаборЗаписей.Записать();          
Как удалить записи из регистра сведений, подчиненного регистратору?

Запрос = Новый Запрос; 
Запрос.Текст = " 
	|	ВЫБРАТЬ 
	|	ЦеныНоменклатурыКонтрагентов.Регистратор 
	|ИЗ 
	|	РегистрСведений.ЦеныНоменклатурыКонтрагентов КАК ЦеныНоменклатурыКонтрагентов"; 

Результат = Запрос.Выполнить(); 
Выборка = Результат.Выбрать(); 

НаборЗаписей = РегистрыСведений.ЦеныНоменклатурыКонтрагентов.СоздатьНаборЗаписей(); 
Пока Выборка.Следующий() Цикл 
	НаборЗаписей.Отбор.Регистратор.Установить(Выборка.Регистратор); 
	НаборЗаписей.Записать(); 
КонецЦикла;          

Задайте вопрос программисту 1С

Универсальная обрезка и очистка периодических реквизитов

16.05.2017

    screen

Обработка по обрезке и очистке периодики в справочниках. Реализованы множественные фильтры для элементов и владельцев (если таковые имеются), выбор периодических реквизитов. Находит свое применение при обрезке баз (запоминаем значения на дату обрезки и смело удаляем все документы, которые устанавливают периодические реквизиты справочников ). Кроме того обработка позволяет очищать значения периодических реквизитов за период (например до даты обрезки) — тем самым уменьшить размер 1sconst.dbf — значения периодических реквизитов. Простая, но удобная и полезная.

На уникальность не претендую, но простой в эксплуатации обработки не нашел, пришлось самому написать. Пользуйтесь. Не забываем плюсовать.

Понравилась статья? Поделить с друзьями:
  • Тульская угольная компания официальный сайт
  • Удачная компания рф официальный сайт отзывы
  • Тульская фармацевтическая компания вакансии
  • Удельная 5а поликлиника детская часы работы
  • Тульская фармацевтическая компания директор