Получить остаток до собственного движения, не включая его

Учебные задачи

Две реальные собственные записи различаются временем: 09:00 и ровно 10:00. Сравниваются границы одного и того же момента.

Где и как запускать

Сервер собственной учебной обработки / обычная форма, толстый клиент.

Подготовка

  1. Только собственная учебная база. Создайте документ УчебныйРегистраторГраницы без реквизитов и без обработчиков проведения. Создайте регистр накопления УчебныеКнигиГраницы вида Остатки, измерение КодКниги Строка 40, ресурс Количество Число 12.0. Единственный регистратор — этот собственный документ.

  2. В движениях документа разрешите регистр УчебныеКнигиГраницы. Основной блок — тело серверной процедуры / кнопки обычной формы в толстом клиенте. Дополнительная функция находится отдельно в том же модуле.

  3. Ручной запуск ЗАПИШЕТ собственный новый учебный документ и две его записи: приход 3 в 09:00, приход 5 в 10:00. Для каждого запуска создаётся отдельный ключ UUID; прежние собственные и рабочие записи не заменяются.

  4. Колонки результата метода менеджера Остатки запрашиваются по именам измерения и ресурса: КодКниги, Количество. Это не запрос к виртуальной таблице с именем колонки КоличествоОстаток.

КодКниги = СоздатьСвоиДвиженияГраницы();
Отбор = Новый Структура("КодКниги", КодКниги);
Момент = Дата(2026, 1, 11, 10, 0, 0);
ДоМомента = Новый Граница(Момент, ВидГраницы.Исключая);
СМоментом = Новый Граница(Момент, ВидГраницы.Включая);
До = РегистрыНакопления.УчебныеКнигиГраницы.Остатки(ДоМомента, Отбор, "КодКниги", "Количество");
После = РегистрыНакопления.УчебныеКнигиГраницы.Остатки(СМоментом, Отбор, "КодКниги", "Количество");
Сообщить("Исключая движение в 10:00: " + Строка(До.Итог("Количество")));
Сообщить("Включая движение в 10:00: " + Строка(После.Итог("Количество")));
Тот же модуль: создать только свои движения под новым ключом
Функция СоздатьСвоиДвиженияГраницы()
    КодКниги = Строка(Новый УникальныйИдентификатор);
    Документ = Документы.УчебныйРегистраторГраницы.СоздатьДокумент();
    Документ.Дата = Дата(2026, 1, 11, 9, 0, 0);
    Документ.Записать();
    Набор = РегистрыНакопления.УчебныеКнигиГраницы.СоздатьНаборЗаписей();
    Набор.Отбор.Регистратор.Установить(Документ.Ссылка);
    Для Номер = 0 По 1 Цикл
        Движение = Набор.Добавить();
        Движение.Активность = Истина;
        Движение.Период = Дата(2026, 1, 11, 9 + Номер, 0, 0);
        Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
        Движение.КодКниги = КодКниги;
        Движение.Количество = 3 + Номер * 2;
    КонецЦикла;
    Набор.Записать();
    Возврат КодКниги;
КонецФункции

Разбор по шагам

  1. Подготовьте собственные документ и регистр.

  2. Создайте две записи функцией и ограничьте чтение их новым ключом.

  3. Сравните Исключая и Включая для ровно 10:00.

Как проверить результат

  1. Для данных опыта ожидается 3 до граничного движения и 8 с ним. Исключая не означает вычитать секунду: меняется вид границы, а момент остаётся тем же.

  2. В Остатки передаётся настоящий Граница. У обычной Дата в этом методе есть отдельное правило получения остатка на начало дня; поэтому она не подставляется вместо границы.

  3. BSL, запись документа и регистра при сборке HTML не выполнялись.

Ожидаемый результат

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

На что обратить внимание

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

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.