1с 8 регистры сведений записать ложь

Обновлено: 07.07.2024

март - документом был введен в регистр один фокусный ассортимент
июнь - был введен другой фокусный ассортимент
июль - был введен третий фокуксный асссортимент
.
сентябрь - что бы ввести фокусный ассортимент на сентябрь документом, нужно предварительно отменить его у всей предварительно введенной номенклатуры

Отчетом нужно смотреть какой был фокусный ассортимент у номенклатуры в любой из выбранных месяцев. То есть при вводе фокусного ассортимента, нужно при обработке проведения отменять предыдущий. Делать это предварительно перепроводя предыдущий документ со значением ложь для номенклатуры? Или в донном случае не нужно для регистра задавать регистратор? Документ нужен в люббом случае. Как лучше сделать?

(4) Так видите в чем дело? Я записываю в регистр фокусный ассортимент номенклатуры:
|
Получается что он и будет там храниться со значением истина, а следующим документом я помещаю туда новый фокусный ассортимент, соответственно предыдущий нужно установить в значение ложь. А так получается что вся номенклатура там будет со значением истина лежать. Как отчеты то делать потом?
Не совсем понимаю тогда необходимость регистра для этой задачи, можно и документами просто ограничиться.
Решение в данном случае, - в обработке проведения документа, полшучать предыдущий документ, устанавливать номенклатуру в его табличной части в значение ложь и перепроводить его, будет верно?

(9)Нет. Верно будет так спроектировать регистр, чтобы не патчить все документы при проведении. Ты подумал, что произойдет, если какой-нить жутко умный пользователь в сентябре перепроведет например январь?

У регистра есть период, есть периодичность - этого недостаточно для получения необходимых данных?

(10) Получая данные на любуюу дату в выборку будут попадать вся номенклатура из регистра, так как у неё ФА=Истина у всей, так она попадает в регистр. Нужно как то устанавливать значение ФА=Ложь, это будет актуальная номенклатура на текущую дату. Что было актуальной в предыдущие периоды можно будет выбирать из документов.

В документе можно поставить запрет перепроведения если есть последующие документы.

Пока не соображу как правильно сделать. Период и периодичность в этом случае наверное не помогут, важно значение ФА (булево) номенклатуры, табличной части документа.

(11) То есть что в регистре ФА=Истина - это актуальный фокусный ассортимент номенклатуры. Он может меняться из периода в период.
Подчинение регистратору в данном случае наверное не подойдет.
Думаю сделать регистр с периодичностью день например. И записывать в него каждый раз 2 тч, 1- ФА=истина (Текущий фокусный ассортимент), 2- ФА=ложь (Предыдущий фокусный ассортимент) все на дату документа!

Тут куча вариантов.

Можно в том же документе садить проводки по всей остальной номенклатуре со значением ложь.

Можно выбирать записи только максимального периода.

Забудь про запросы по документам. Либо уж делай всё на документах и не парься с регистрами.

(14) Решил делать так:

Регистр независимый, периодичность день.

Документ 2 Тч.
1Тч актуальный фокусный ассортимент на дату документа.
2Тч Предыдущий фокусный ассортимент для установки в ложь на дату документа.

При проведении одна номенклатура устанавливается ФА=Истина на дату документа. Другая в ФА=Ложь, предыдущая не актуальная номенклатура на дату докумнета. Но она остается актуальной в предыдущем периоде для истории.

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

Создать менеджер регистра сведений достаточно просто, например:

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

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

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

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

Структура независимого регистра сведений

Переменные, которые присваиваются полям регистра в моем случае это реквизиты управляемой формы 1С.

Относительно периода замечу, что платформа самостоятельно изменит текущую дату на дату начала периода, который установлен в свойстве периодичность регистра сведений (если периодичность месяц, а в период передана дата 21.12.2017, то запишется 01.12.2017).

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

Метод Прочитать считывает данные регистра по указанным измерениям и периоду, а метод Выбран возвращает Истину, если есть запись с указанными полями, и Ложь, если такой нет.

В этом случае наш код изменится.

В этом случае мы присваиваем значения ключевым полям (измерениям) и периоду. А после применяем метод Прочитать. Данный метод считывает записи с регистра по указанным ключевым полям (измерениям) и периоду. Если есть записи с данным набором полей, то метод Выбран возвращает Истину, иначе – Ложь. В Вашем примере, если метод Выбран вернул значение Ложь (записей нет), то мы присваиваем значения измерениям и ресурсу и записываем.

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


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

  1. Очень доступный и понятный язык изложения
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Поймете идеологию управляемого приложения 1С
  4. Узнаете, как разрабатывать управляемое приложение;
  5. Научитесь разрабатывать управляемые формы 1С;
  6. Сможете работать с основными и нужными элементами управляемых форм
  7. Программирование под управляемым приложением станет понятным


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

можно оплатить вручную:

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

В 1С:Предприятии 8 все регистры, кроме регистров сведений, всегда связаны с регистраторами. Регистры сведений могут быть независимыми или также подчиненными регистратору. В этом разделе мы опишем работу с регистрами, подчиненными регистраторам.

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

Однако в 1С:Предприятии 8 существует возможность изменять записи регистров без участия документа. При этом следует учитывать, что каждая запись регистра всегда подчинена одному и только одному регистратору (документу). Поэтому с точки зрения "времени жизни" записи всегда подчинены конкретным регистраторам. Однако, записи могут изменяться без участия самого документа. Главное, чтобы в них имелась ссылка на документ.

Для изменения записей регистров, подчиненных регистраторам, используются наборы записей. При этом всегда используется отбор по регистратору. То есть совокупность записей, подчиненных одному регистратору, является "гранулой" изменения регистра. Нельзя добавлять или удалять отдельные записи. Можно только считывать и записывать записи по регистратору.

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

Таким образом, чтобы изменить записи регистра необходимо:

  • создать набор записей;
  • установить отбор по определенному регистратору;
  • прочитать набор;
  • изменить записи набора;
  • записать набор.

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

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

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

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

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

Разработка любой конфигурации потребует использования регистров сведений! Чтобы упростить запись и чтение данных в регистре сведений, Вы можете использовать универсальные функции:

Разместил: all4cf  Версии: | 8.x | 8.2 УП | 8.3 |  Дата: 13.08.2015   Прочитано: 29828

Распечатать

Похожие FAQ

Еще в этой же категории

Как изменить запись регистра сведений?  34
НаборЗаписей = РегистрыСведений.НумерацияДоговоров.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Период.Установить(НачалоГода(Дата)); НаборЗаписей.Отбор.Организация.Установить(Организация); НаборЗаписей.Прочитать(); Если НаборЗаписей.Количество Как добавить запись в периодический независимый регистр сведений?  15
// Добавление записей в периодический независимый регистр сведений НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Валюта.Установить(ТекущаяВалюта); НаборЗаписей.Отбор.Период.Установить(ТекущаяДата); НовЗапис Как добавить записи в непериодический независимый регистр сведений?  12
НаборЗаписей = РегистрыСведений.ЗначенияСвойств.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Номенклатура.Установить(ТекущаяНоменклатура); НаборЗаписей.Отбор.Свойство.Установить(ТекущееСвойство); НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапи Как добавить записи в независимый регистр сведений?  10
Для добавления отдельной записи в регистр сведений, не подчиненный регистратору, можно использовать объект РегистрСведенийМенеджерЗаписи. имя . Например, для того, чтобы в независимый регистр сведений ЗначенияСвойствОбъектов с измерениями Объект, Открыть запись регистра сведений по ключу.  10
// Создание структуры значений СтруктураФормы = Новый Структура; СтруктураФормы.Вставить(" Пользователь" , Пользователь); СтруктураФормы.Вставить(" Настройка" , Элемент.ТекущаяСтрока); // Почему-то нужно создавать запись через массив (по друго Посмотреть все в категории Регистры сведений

Читайте также: