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