РольПоляНабораДанныхКомпоновкиДанных.Остаток

Свойства · Balance

Тип: Булево. Содержит признак того, что поле является полем остатка. Истина - является.

Полное описание, параметры и ограничения

РольПоляНабораДанныхКомпоновкиДанных.Остаток (DataCompositionDataSetFieldRole.Balance)

РольПоляНабораДанныхКомпоновкиДанных (DataCompositionDataSetFieldRole)

Остаток (Balance)

Доступен, начиная с версии 8.1.

Использование:
Чтение и запись.
Описание:
Тип: Булево.
Содержит признак того, что поле является полем остатка.
Истина - является.
Доступность:

Сервер, толстый клиент, внешнее соединение.

Использование в версии:

Доступен, начиная с версии 8.1.

Методическая информация

Практические примеры

Настроить четыре поля бухгалтерского остатка

Одна собственная строка учебного активного счёта: начальный дебет 10, конечный дебет 13, кредитные значения 0. Рецепт показывает контракт схемы, не бухгалтерские проводки.

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

Полный серверный общий модуль собственной учебной базы; настройка схемы не является проведением документов.

Подготовка

  1. В своей отдельной учебной базе 8.5.1.1343 создайте серверный общий модуль УчебныеРолиПолейСКД. Вставьте полный текст одного урока: процедуру и две функции ниже неё.

  2. Вызовите УчебныеРолиПолейСКД.ВыполнитьПример() из серверной команды собственной обработки. Схема и таблицы остаются на сервере, на клиент выводятся только сообщения.

  3. Товары, даты, остатки и номер 50 заданы собственными константами. Код не читает и не изменяет регистры, план счетов, документы или файлы.

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

  5. В первом уроке выполняется СКД. Уроки остатков, измерений, периодов и бухгалтерских ролей отдельно проверяют настройку схемы и её исходные строки; это не доказательство корректных итогов рабочего отчёта.

Процедура ВыполнитьПример() Экспорт
    Схема = СоздатьУчебнуюСхему("ВЫБРАТЬ ""50"" КАК Счет, 10 КАК НачальныйДебет,
    |    0 КАК НачальныйКредит, 13 КАК КонечныйДебет,
    |    0 КАК КонечныйКредит");
    Набор = Схема.НаборыДанных.Получить(0);
    Счет = ДобавитьУчебноеПоле(Набор, "Счет", "Строка");
    Счет.Роль.Счет = Истина;
    Проверено = 0;
    Для Каждого ИмяПоля Из СтрРазделить("НачальныйДебет,НачальныйКредит,КонечныйДебет,КонечныйКредит", ",") Цикл
        ПолеОстатка = ДобавитьУчебноеПоле(Набор, ИмяПоля, "Число");
        РольОстатка = ПолеОстатка.Роль;
        РольОстатка.Остаток = Истина;
        РольОстатка.ГруппаОстатка = "Сумма";
        РольОстатка.ПолеСчета = Счет.ПутьКДанным;
        РольОстатка.ВыражениеВидаСчета = "0";
        Если СтрНачинаетсяС(ИмяПоля, "Начальный") Тогда
            РольОстатка.ТипОстатка = ТипОстаткаКомпоновкиДанных.НачальныйОстаток;
        Иначе
            РольОстатка.ТипОстатка = ТипОстаткаКомпоновкиДанных.КонечныйОстаток;
        КонецЕсли;
        Если СтрЗаканчиваетсяНа(ИмяПоля, "Дебет") Тогда
            РольОстатка.ТипБухгалтерскогоОстатка = ТипБухгалтерскогоОстаткаКомпоновкиДанных.Дебет;
        Иначе
            РольОстатка.ТипБухгалтерскогоОстатка = ТипБухгалтерскогоОстаткаКомпоновкиДанных.Кредит;
        КонецЕсли;
        Сообщить(Набор.Поля.Найти(РольОстатка.ПолеСчета) = Счет);
        Сообщить(РольОстатка.ВыражениеВидаСчета = "0");
        Проверено = Проверено + 1;
    КонецЦикла;
    Сообщить(Счет.Роль.Счет);
    Сообщить(Проверено = 4);
    Сообщить(Набор.Поля.Найти("НачальныйДебет").Роль.ТипБухгалтерскогоОстатка = ТипБухгалтерскогоОстаткаКомпоновкиДанных.Дебет);
    Сообщить(Набор.Поля.Найти("КонечныйКредит").Роль.ТипБухгалтерскогоОстатка = ТипБухгалтерскогоОстаткаКомпоновкиДанных.Кредит);
    Запрос = Новый Запрос(Набор.Запрос);
    Строки = Запрос.Выполнить().Выгрузить();
    Сообщить(Строки.Количество() = 1);
    СтрокаСчета = Строки.Найти("50", "Счет");
    Сообщить(СтрокаСчета.НачальныйДебет - СтрокаСчета.НачальныйКредит = 10);
    Сообщить(СтрокаСчета.КонечныйДебет - СтрокаСчета.КонечныйКредит = 13);
КонецПроцедуры

Функция СоздатьУчебнуюСхему(ТекстЗапроса)
    Схема = Новый СхемаКомпоновкиДанных;
    Источник = Схема.ИсточникиДанных.Добавить();
    Источник.Имя = "УчебныйИсточник";
    Источник.ТипИсточникаДанных = "Local";
    Набор = Схема.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
    Набор.Имя = "УчебныеДанные";
    Набор.ИсточникДанных = Источник.Имя;
    Набор.АвтоЗаполнениеДоступныхПолей = Ложь;
    Набор.Запрос = ТекстЗапроса;
    Возврат Схема;
КонецФункции

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

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

  1. Создать собственное строковое поле Счет и отметить роль Счет. Номер 50 здесь вымышленная метка, не чтение плана счетов базы.

  2. Добавить четыре поля пары начального/конечного дебета/кредита. Всем назначить общую группу Сумма и ПолеСчета, содержащее путь Счет.

  3. ВыражениеВидаСчета = "0" — выражение СКД, возвращающее число 0: активный счёт. Это строка выражения, не число, присвоенное свойству.

  4. ТипОстатка определяет начало/конец, ТипБухгалтерскогоОстатка — дебет/кредит. Это две разные характеристики одного поля.

  5. Проверить связь четырёх ролей с полем счёта и значения собственного запроса. Компоновщик бухгалтерских итогов и запись проводок здесь не вызываются.

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

  1. Пятнадцать булевых проверок дают Истина: восемь внутри цикла и семь после него.

  2. В Строки одна строка, начальный учебный нетто-остаток 10, конечный 13. Этот пример не является оборотно-сальдовой ведомостью.

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

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

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

  1. Числа результата выражения вида счёта: 0 активный, 1 пассивный, 2 активно-пассивный. Строка "50" не является видом счёта.

  2. В рабочем отчёте подставляются настоящее поле счёта и выражение его вида; нельзя назначать всем счетам активный вид по этому учебному примеру.

  3. Развёрнутое сальдо и итоговые группировки требуют отдельной проверки на реальных правилах учёта в копии базы.

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

Описать пару остатков и обнаружить неправильное сложение месяцев

Для BOOK январь 10 → 13, февраль 13 → 11. Пара полей имеет общую группу Количество и разные типы остатка.

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

Полный серверный общий модуль собственной учебной базы; настройка схемы не является проведением документов.

Подготовка

  1. В своей отдельной учебной базе 8.5.1.1343 создайте серверный общий модуль УчебныеРолиПолейСКД. Вставьте полный текст одного урока: процедуру и две функции ниже неё.

  2. Вызовите УчебныеРолиПолейСКД.ВыполнитьПример() из серверной команды собственной обработки. Схема и таблицы остаются на сервере, на клиент выводятся только сообщения.

  3. Товары, даты, остатки и номер 50 заданы собственными константами. Код не читает и не изменяет регистры, план счетов, документы или файлы.

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

  5. В первом уроке выполняется СКД. Уроки остатков, измерений, периодов и бухгалтерских ролей отдельно проверяют настройку схемы и её исходные строки; это не доказательство корректных итогов рабочего отчёта.

Процедура ВыполнитьПример() Экспорт
    Схема = СоздатьУчебнуюСхему("ВЫБРАТЬ ДАТАВРЕМЯ(2026, 1, 1) КАК Период,
    |    ""BOOK"" КАК Товар, 10 КАК КоличествоНачальныйОстаток,
    |    13 КАК КоличествоКонечныйОстаток
    |ОБЪЕДИНИТЬ ВСЕ
    |ВЫБРАТЬ ДАТАВРЕМЯ(2026, 2, 1), ""BOOK"", 13, 11");
    Набор = Схема.НаборыДанных.Получить(0);
    Период = ДобавитьУчебноеПоле(Набор, "Период", "Дата");
    Товар = ДобавитьУчебноеПоле(Набор, "Товар", "Строка");
    Начальный = ДобавитьУчебноеПоле(Набор, "КоличествоНачальныйОстаток", "Число");
    Конечный = ДобавитьУчебноеПоле(Набор, "КоличествоКонечныйОстаток", "Число");
    Период.Роль.НомерПериода = 1;
    Период.Роль.ТипПериода = ТипПериодаКомпоновкиДанных.Основной;
    Товар.Роль.Измерение = Истина;
    РольНачального = Начальный.Роль;
    РольНачального.Остаток = Истина;
    РольНачального.ТипОстатка = ТипОстаткаКомпоновкиДанных.НачальныйОстаток;
    РольНачального.ГруппаОстатка = "Количество";
    РольКонечного = Конечный.Роль;
    РольКонечного.Остаток = Истина;
    РольКонечного.ТипОстатка = ТипОстаткаКомпоновкиДанных.КонечныйОстаток;
    РольКонечного.ГруппаОстатка = "Количество";
    Сообщить(Товар.Роль.Измерение);
    Сообщить(Период.Роль.НомерПериода = 1);
    Сообщить(РольНачального.Остаток И РольКонечного.Остаток);
    Сообщить(РольНачального.ГруппаОстатка = РольКонечного.ГруппаОстатка);
    Сообщить(РольНачального.ТипОстатка <> РольКонечного.ТипОстатка);
    Запрос = Новый Запрос(Набор.Запрос);
    Строки = Запрос.Выполнить().Выгрузить();
    Январь = Строки.Найти(Дата(2026, 1, 1), "Период");
    Февраль = Строки.Найти(Дата(2026, 2, 1), "Период");
    Сообщить(Строки.Количество() = 2);
    Сообщить(Январь.КоличествоКонечныйОстаток = Февраль.КоличествоНачальныйОстаток);
    Сообщить(Январь.КоличествоНачальныйОстаток = 10);
    Сообщить(Февраль.КоличествоКонечныйОстаток = 11);
    Сообщить(Строки.Итог("КоличествоНачальныйОстаток") = 23);
    Сообщить("23 — сумма начальных остатков двух месяцев, НЕ начальный остаток всего интервала.");
КонецПроцедуры

Функция СоздатьУчебнуюСхему(ТекстЗапроса)
    Схема = Новый СхемаКомпоновкиДанных;
    Источник = Схема.ИсточникиДанных.Добавить();
    Источник.Имя = "УчебныйИсточник";
    Источник.ТипИсточникаДанных = "Local";
    Набор = Схема.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
    Набор.Имя = "УчебныеДанные";
    Набор.ИсточникДанных = Источник.Имя;
    Набор.АвтоЗаполнениеДоступныхПолей = Ложь;
    Набор.Запрос = ТекстЗапроса;
    Возврат Схема;
КонецФункции

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

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

  1. Обозначить Товар измерением, Период периодом № 1. Это информация для расчёта остатков по товарам и времени.

  2. Назначить обоим числовым полям Остаток и одинаковую ГруппаОстатка. Начальному и конечному полям задать разные ТипОстатка.

  3. Выполнить исходный константный запрос отдельно от СКД. Найти месяцы по дате, не по непредсказуемому порядку выборки.

  4. Проверить непрерывность 13 = 13. Начальный всего интервала 10, конечный 11; механическая сумма начальных значений 23 не является начальным остатком.

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

  1. Десять булевых проверок дают Истина; затем выводится предупреждение про 23.

  2. В отладчике роли пары содержат группу Количество. Здесь ещё нет ресурсов и итоговых группировок СКД: алгоритм итогов не запускается.

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

Рабочий код настройки пары остатков и контроль исходных данных до построения итогового отчёта.

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

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

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

  3. Правильные роли не исправляют дубли запроса и неправильные связи наборов данных.

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

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

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

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

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