Глобальный контекст.ТранзакцияАктивна

Методы · TransactionActive

Получить текущее состояние транзакции.

Синтаксис

ТранзакцияАктивна()
Полное описание, параметры и ограничения

Глобальный контекст.ТранзакцияАктивна (Global context.TransactionActive)

Глобальный контекст (Global context)

ТранзакцияАктивна (TransactionActive)

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

Синтаксис:
ТранзакцияАктивна()
Возвращаемое значение:
Тип: Булево.
Истина - в системе имеется активная транзакция, Ложь - в текущий момент в системе не имеется активных транзакций.
Описание:

Получить текущее состояние транзакции.

Доступность:

Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.

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

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

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

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

Настроить порядок трёх аналитик нового счёта в памяти

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

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

Полный обычный клиентский общий модуль УчебныеСубконто85, только толстый клиент; все помощники включены, полный модуль Пульта отдельно. Не выполнялся.

Подготовка

  1. Создайте НОВУЮ отдельную файловую базу 8.5.1.1343, имя конфигурации УчебныеСубконто85, совместимость НеИспользовать, обычное приложение и толстый клиент. Не рабочую БП/КА2 и не её копию. Здесь база и код не запускались: runtimeVerifiedScenarios=0.

  2. Планы видов характеристик → УчебныеАналитики85: тип значений только Строка(30), переменная длина. В Предопределённые создайте три собственных элемента НЕ группы: имя АналитикаА, код A, наименование Учебная аналитика A; АналитикаБ, код B, наименование Учебная аналитика B; АналитикаВ, код C, наименование Учебная аналитика C. Их тип значения — Строка(30). Дополнительные значения, свои реквизиты и табличные части не создавайте.

  3. Планы счетов → УчебныеСчета85: ДлинаКода=10, ДлинаНаименования=100, ВидыСубконто=УчебныеАналитики85, МаксКоличествоСубконто=3. Признаки учёта субконто и обычные признаки учёта отсутствуют, собственные реквизиты/табличные части и предопределённые счета отсутствуют. Все объектные и менеджерские модули пустые.

  4. Никаких регистров бухгалтерии, документов, подписок и расширений. Предопределённые аналитики — подготовленные элементы своего стенда; 1С может создать их при обновлении своей базы. Это не создание нами рабочих аналитик и не записи счёта из примера.

  5. Создайте неглобальный общий модуль УчебныеСубконто85: Клиент (обычное приложение)=Да, Сервер=Нет, Привилегированный=Нет, другие клиентские флаги=Нет. Вставляйте полный основной модуль выбранного урока целиком. Все три имеют ВыполнитьПример; для другого урока заменяйте весь текст.

  6. Создайте обработку УчебныеСубконто85, обычную основную форму Пульт с кнопкой Выполнить, действие ВыполнитьНажатие. Полный отдельный модуль этой формы приведён ниже. Дайте своему учебному пользователю доступ к своим планам, предопределённым аналитикам и обработке.

  7. F7, сохранение и обновление только своего нового стенда. В будущем толстом клиенте запустите Пульт. Каждый вызов создаёт новый незаписанный счёт в памяти; Код, Наименование и остальные обязательные поля счёта для записи здесь не заполняются, поскольку Записать не вызывается.

  8. Итог и Свернуть у ВидыСубконто оставлены для совместимости и, по справке, не имеют прикладного смысла. Третий урок — контролируемая демонстрация границы API, не вычисление бухгалтерских итогов и не способ изменить виды аналитики в рабочем учёте.

Процедура ВыполнитьПример() Экспорт
    Счет = СоздатьСвойСчет();
    Аналитики = ПолучитьСвоиАналитики();
    Субконто = Счет.ВидыСубконто;
    СтрокаА = Субконто.Добавить();
    ЗаполнитьСвоюСтроку(СтрокаА, Аналитики[0], Ложь);
    СтрокаВ = Субконто.Добавить();
    ЗаполнитьСвоюСтроку(СтрокаВ, Аналитики[2], Ложь);
    СтрокаБ = Субконто.Вставить(1);
    ЗаполнитьСвоюСтроку(СтрокаБ, Аналитики[1], Истина);
    ПроверитьСвоиСтроки(Субконто, Аналитики, СвоиФлаги(Ложь, Истина, Ложь));
    Если Субконто.Найти(Аналитики[1], "ВидСубконто") <> СтрокаБ Тогда
        ВызватьИсключение "Поиск своей аналитики Б не вернул настоящую строку";
    КонецЕсли;
    Отбор = Новый Структура("ТолькоОбороты", Ложь);
    Найденные = Субконто.НайтиСтроки(Отбор);
    ИндексА = Найденные.Найти(СтрокаА);
    Если Найденные.Количество() <> 2 Или ИндексА = Неопределено Или Найденные.Найти(СтрокаВ) = Неопределено Тогда
        ВызватьИсключение "Нужны две исходные строки не только оборотных аналитик";
    КонецЕсли;
    Найденные[ИндексА].ТолькоОбороты = Истина;
    Если Не СтрокаА.ТолькоОбороты Тогда
        ВызватьИсключение "НайтиСтроки должен хранить ссылки на исходные строки";
    КонецЕсли;
    СтрокаА.ТолькоОбороты = Ложь;
    Субконто.Сдвинуть(СтрокаВ, -2);
    Порядок = Новый Массив;
    Порядок.Добавить(Аналитики[2]);
    Порядок.Добавить(Аналитики[0]);
    Порядок.Добавить(Аналитики[1]);
    ПроверитьСвоиСтроки(Субконто, Порядок, СвоиФлаги(Ложь, Ложь, Истина));
    Субконто.Сортировать("ТолькоОбороты Убыв, НомерСтроки Возр");
    Порядок.Очистить();
    Порядок.Добавить(Аналитики[1]);
    Порядок.Добавить(Аналитики[2]);
    Порядок.Добавить(Аналитики[0]);
    ПроверитьСвоиСтроки(Субконто, Порядок, СвоиФлаги(Истина, Ложь, Ложь));
    ДругойСчет = СоздатьСвойСчет();
    ДругаяСтрока = ДругойСчет.ВидыСубконто.Добавить();
    ЗаполнитьСвоюСтроку(ДругаяСтрока, Аналитики[0], Ложь);
    Если Субконто.Индекс(ДругаяСтрока) <> -1 Тогда
        ВызватьИсключение "Строка другого счета не должна принадлежать нашей таблице";
    КонецЕсли;
    Субконто.Удалить(СтрокаВ);
    Порядок.Удалить(1);
    ПроверитьСвоиСтроки(Субконто, Порядок, СвоиФлаги(Истина, Ложь));
    Субконто.Очистить();
    Если Субконто.Количество() <> 0 Или ДругойСчет.ВидыСубконто.Количество() <> 1 Тогда
        ВызватьИсключение "Очистка должна затрагивать только свою таблицу памяти";
    КонецЕсли;
    Сообщить("А, Б, В добавлены, найдены и переставлены; своя таблица очищена, другой черновик сохранил строку. Счета не записывались.");
КонецПроцедуры

Процедура ПроверитьСвойКонтекст()
    Если Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости.НеИспользовать Тогда
        ВызватьИсключение "Нужен собственный стенд УчебныеСубконто85 платформы 8.5.1.1343";
    КонецЕсли;
    Если ТранзакцияАктивна() Тогда
        ВызватьИсключение "Учебный вывод не должен выполняться внутри чужой транзакции";
    КонецЕсли;
КонецПроцедуры

Функция СоздатьСвойСчет()
    ПроверитьСвойКонтекст();
    МДПлана = Метаданные.ПланыСчетов.Найти("УчебныеСчета85");
    МДАналитик = Метаданные.ПланыВидовХарактеристик.Найти("УчебныеАналитики85");
    Если МДПлана = Неопределено Или МДАналитик = Неопределено Тогда
        ВызватьИсключение "Подготовьте собственные планы счетов и аналитик";
    КонецЕсли;
    Если МДПлана.ВидыСубконто <> МДАналитик Или МДПлана.МаксКоличествоСубконто <> 3
        Или МДПлана.ПризнакиУчетаСубконто.Количество() <> 0 Тогда
        ВызватьИсключение "Нужен свой план с тремя субконто без дополнительных флагов";
    КонецЕсли;
    Счет = ПланыСчетов.УчебныеСчета85.СоздатьСчет();
    Если Счет.ВидыСубконто.Количество() <> 0 Тогда
        ВызватьИсключение "Новый собственный счет должен иметь пустую таблицу";
    КонецЕсли;
    Возврат Счет;
КонецФункции

Функция ПолучитьСвоиАналитики()
    Аналитики = Новый Массив;
    Аналитики.Добавить(ПланыВидовХарактеристик.УчебныеАналитики85.АналитикаА);
    Аналитики.Добавить(ПланыВидовХарактеристик.УчебныеАналитики85.АналитикаБ);
    Аналитики.Добавить(ПланыВидовХарактеристик.УчебныеАналитики85.АналитикаВ);
    Для Каждого Аналитика Из Аналитики Цикл
        Если Аналитика.Пустая() Тогда
            ВызватьИсключение "Предопределенные аналитики должны иметь непустые ссылки своего плана";
        КонецЕсли;
    КонецЦикла;
    Если Аналитики[0] = Аналитики[1] Или Аналитики[0] = Аналитики[2] Или Аналитики[1] = Аналитики[2] Тогда
        ВызватьИсключение "Три свои аналитики должны различаться";
    КонецЕсли;
    Возврат Аналитики;
КонецФункции

Процедура ЗаполнитьСвоюСтроку(СтрокаСубконто, Аналитика, ТолькоОбороты)
    СтрокаСубконто.ВидСубконто = Аналитика;
    СтрокаСубконто.ТолькоОбороты = ТолькоОбороты;
    СтрокаСубконто.Предопределенное = Ложь;
КонецПроцедуры

Функция СвоиФлаги(Первый, Второй, Третий = Неопределено)
    Флаги = Новый Массив;
    Флаги.Добавить(Первый);
    Флаги.Добавить(Второй);
    Если Третий <> Неопределено Тогда
        Флаги.Добавить(Третий);
    КонецЕсли;
    Возврат Флаги;
КонецФункции

Процедура ПроверитьСвоиСтроки(Субконто, Аналитики, Флаги)
    Если Субконто.Количество() <> Аналитики.Количество() Или Флаги.Количество() <> Аналитики.Количество() Тогда
        ВызватьИсключение "Не совпал полный размер своей таблицы";
    КонецЕсли;
    Для Индекс = 0 По Аналитики.Количество() - 1 Цикл
        СтрокаСубконто = Субконто.Получить(Индекс);
        Если СтрокаСубконто <> Субконто[Индекс] Или Субконто.Индекс(СтрокаСубконто) <> Индекс
            Или СтрокаСубконто.НомерСтроки <> Индекс + 1
            Или СтрокаСубконто.ВидСубконто <> Аналитики[Индекс]
            Или СтрокаСубконто.ТолькоОбороты <> Флаги[Индекс] Или СтрокаСубконто.Предопределенное Тогда
            ВызватьИсключение "Не совпали порядок, вид, флаг оборотов или принадлежность собственной строки";
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры
УчебныеСубконто85.Пульт

УчебныеСубконто85 → Обработки → УчебныеСубконто85 → Формы → Пульт → Модуль

Полный модуль собственной обычной формы, не выполнялся.

Процедура ВыполнитьНажатие(Кнопка)
    УчебныеСубконто85.ВыполнитьПример();
КонецПроцедуры

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

  1. СоздатьСвойСчет проверяет платформу и свой стенд, связь с планом аналитик, предел три вида и отсутствие дополнительных флагов. СоздатьСчет создаёт новый объект, не получает записанный счёт по ссылке.

  2. Три ссылки берутся из своих предопределённых АналитикаА/Б/В, заданных в подготовке. Непустая ссылка не подменяется произвольным UUID или неизвестным входным объектом.

  3. Строки специальной таблицы имеют ВидСубконто как ссылку на план характеристик и два отдельных Булево. Предопределенное=Ложь относится к строке счёта, не к тому, является ли сама аналитика предопределённым элементом плана.

  4. Индекс начинается с 0, НомерСтроки — с 1 и readonly. Полный валидатор сверяет обе адресации, принадлежность строки, вид и оба флага; НомерСтроки не присваивается вручную.

  5. Мутирующие методы допустимы у таблицы объекта. У таблицы ссылки или выборки они вызовут ошибку: ни ссылку на записанный счёт, ни неизвестную таблицу урок не принимает.

  6. Добавить помещает строку в конец, Вставить(1) — на вторую позицию. Все три поля новой строки заполнены явно; исходный порядок А, Б, В с флагами Ложь, Истина, Ложь.

  7. Найти получает конкретную ссылку Б и явное имя ВидСубконто. НайтиСтроки получает Структуру отбора ТолькоОбороты=Ложь и возвращает массив ссылок на А и В, не копии.

  8. Находим индекс СтрокаА в массиве результатов, не предполагая порядок отбора. Меняем флаг у Найденные[ИндексА] и проверяем тот же флаг у СтрокаА; затем возвращаем Ложь. Это контроль живой связи результата поиска.

  9. Сдвинуть(СтрокаВ,-2) даёт В,А,Б. Сортировать по оборотам вниз и текущему номеру вверх даёт Б,В,А; номера после перестановок пересчитываются.

  10. Строка отдельного второго счёта с той же аналитикой А имеет Индекс=-1 в первом. Совпадение значений не означает принадлежность коллекции.

  11. Удалить принимает настоящую СтрокаВ; её после удаления не читаем. Проверяем Б,А, затем Очистить даёт 0, а другая таблица по-прежнему содержит одну строку.

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

  1. Будущий тест: F7 и запуск Пульта только в своём новом стенде. Каждый вызов начинается с нового счёта и пустой таблицы; здесь BSL не выполнялся.

  2. Если не созданы свои предопределённые имена, подготовьте их и обновите только свой стенд. Не заменяйте их чужими ссылками из БП или КА2.

  3. В коде нет Записать счёта, проводок или регистров бухгалтерии. Удаление/очистка затрагивает только новые строки памяти, не записи базы.

  4. Полные контрольные последовательности: А,Б,В → В,А,Б → Б,В,А → Б,А → пусто. Флаги каждой аналитики и Предопределенное=Ложь должны сохраняться.

  5. В будущем изменении кода уберите возврат флага А после НайтиСтроки: следующий полный контроль должен обнаружить иной набор флагов. Это не повод менять сортировку для маскировки ошибки.

  6. Другой счёт после очистки первого имеет одну свою строку; оба остаются незаписанными.

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

Будущий опыт сверяет полный состав собственного незаписанного счёта в памяти и границы специальной таблицы. Рабочая база, проводки и счета не меняются. runtimeVerifiedScenarios=0.

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

  1. ВидыСубконто — специальная таблица счёта, не таблица сумм бухгалтерского регистра. Изменение её порядка влияет на позиции аналитик, не на остатки.

  2. ТолькоОбороты и Предопределенное — разные флаги. Ссылка на предопределённый вид не делает автоматически предопределённой добавленную нами строку счёта.

  3. Методы объекта памяти не сохраняют счёт. Этот черновик намеренно не подготовлен к записи; не добавляйте Записать ради проверки примера.

  4. Статические Python/HTML-проверки и сверка установленной справки не являются компиляцией и запуском в 1С. runtimeVerifiedScenarios остаётся 0.

  5. Найти возвращает одну строку либо Неопределено, НайтиСтроки — массив. Чужую строку нельзя подставлять как позицию своей коллекции.

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

Разобрать, почему Итог и Свернуть не дают бухгалтерского результата

Контролируемый опыт на трёх строках показывает формальный итог номеров и группировку по всем реальным колонкам. Справка прямо предупреждает: эти методы у ВидыСубконто оставлены для совместимости и не имеют прикладного смысла.

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

Полный обычный клиентский общий модуль УчебныеСубконто85, только толстый клиент; все помощники включены, полный модуль Пульта отдельно. Не выполнялся.

Подготовка

  1. Создайте НОВУЮ отдельную файловую базу 8.5.1.1343, имя конфигурации УчебныеСубконто85, совместимость НеИспользовать, обычное приложение и толстый клиент. Не рабочую БП/КА2 и не её копию. Здесь база и код не запускались: runtimeVerifiedScenarios=0.

  2. Планы видов характеристик → УчебныеАналитики85: тип значений только Строка(30), переменная длина. В Предопределённые создайте три собственных элемента НЕ группы: имя АналитикаА, код A, наименование Учебная аналитика A; АналитикаБ, код B, наименование Учебная аналитика B; АналитикаВ, код C, наименование Учебная аналитика C. Их тип значения — Строка(30). Дополнительные значения, свои реквизиты и табличные части не создавайте.

  3. Планы счетов → УчебныеСчета85: ДлинаКода=10, ДлинаНаименования=100, ВидыСубконто=УчебныеАналитики85, МаксКоличествоСубконто=3. Признаки учёта субконто и обычные признаки учёта отсутствуют, собственные реквизиты/табличные части и предопределённые счета отсутствуют. Все объектные и менеджерские модули пустые.

  4. Никаких регистров бухгалтерии, документов, подписок и расширений. Предопределённые аналитики — подготовленные элементы своего стенда; 1С может создать их при обновлении своей базы. Это не создание нами рабочих аналитик и не записи счёта из примера.

  5. Создайте неглобальный общий модуль УчебныеСубконто85: Клиент (обычное приложение)=Да, Сервер=Нет, Привилегированный=Нет, другие клиентские флаги=Нет. Вставляйте полный основной модуль выбранного урока целиком. Все три имеют ВыполнитьПример; для другого урока заменяйте весь текст.

  6. Создайте обработку УчебныеСубконто85, обычную основную форму Пульт с кнопкой Выполнить, действие ВыполнитьНажатие. Полный отдельный модуль этой формы приведён ниже. Дайте своему учебному пользователю доступ к своим планам, предопределённым аналитикам и обработке.

  7. F7, сохранение и обновление только своего нового стенда. В будущем толстом клиенте запустите Пульт. Каждый вызов создаёт новый незаписанный счёт в памяти; Код, Наименование и остальные обязательные поля счёта для записи здесь не заполняются, поскольку Записать не вызывается.

  8. Итог и Свернуть у ВидыСубконто оставлены для совместимости и, по справке, не имеют прикладного смысла. Третий урок — контролируемая демонстрация границы API, не вычисление бухгалтерских итогов и не способ изменить виды аналитики в рабочем учёте.

Процедура ВыполнитьПример() Экспорт
    Счет = СоздатьСвойСчет();
    Аналитики = ПолучитьСвоиАналитики();
    Субконто = Счет.ВидыСубконто;
    Для Индекс = 0 По 2 Цикл
        ЗаполнитьСвоюСтроку(Субконто.Добавить(), Аналитики[Индекс], Индекс = 1);
    КонецЦикла;
    ПроверитьСвоиСтроки(Субконто, Аналитики, СвоиФлаги(Ложь, Истина, Ложь));
    СуммаНомеров = Субконто.Итог("НомерСтроки");
    Если СуммаНомеров <> 6 Тогда
        ВызватьИсключение "В контрольном черновике номера 1, 2, 3 должны давать 6, это не бухгалтерский итог";
    КонецЕсли;
    Снимок = Субконто.Выгрузить();
    Если Снимок.Колонки.Количество() <> 4 Тогда
        ВызватьИсключение "Опыт требует только четыре стандартные колонки без флагов учёта";
    КонецЕсли;
    ИменаКолонок = Новый Массив;
    Для Каждого Колонка Из Снимок.Колонки Цикл
        Если Колонка.Имя <> "НомерСтроки" И Колонка.Имя <> "ВидСубконто"
            И Колонка.Имя <> "Предопределенное" И Колонка.Имя <> "ТолькоОбороты" Тогда
            ВызватьИсключение "Неожиданная колонка собственного определения";
        КонецЕсли;
        ИменаКолонок.Добавить(Колонка.Имя);
    КонецЦикла;
    Субконто.Свернуть(СтрСоединить(ИменаКолонок, ","), "");
    Если Субконто.Количество() <> 3 Тогда
        ВызватьИсключение "Группировка по всем колонкам трёх разных строк не должна создавать дедупликацию";
    КонецЕсли;
    Для Индекс = 0 По 2 Цикл
        СтрокаСубконто = Субконто.Найти(Аналитики[Индекс], "ВидСубконто");
        Если СтрокаСубконто = Неопределено Или СтрокаСубконто.ТолькоОбороты <> (Индекс = 1)
            Или СтрокаСубконто.Предопределенное Тогда
            ВызватьИсключение "Контрольный опыт совместимости изменил содержимое своей аналитики";
        КонецЕсли;
    КонецЦикла;
    Сообщить("Итог номеров равен 6, но не имеет учётного смысла. Свернуть по всем четырём колонкам сохранила три разные строки. Для прикладного отчёта используйте отдельную таблицу значений.");
КонецПроцедуры

Процедура ПроверитьСвойКонтекст()
    Если Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости.НеИспользовать Тогда
        ВызватьИсключение "Нужен собственный стенд УчебныеСубконто85 платформы 8.5.1.1343";
    КонецЕсли;
    Если ТранзакцияАктивна() Тогда
        ВызватьИсключение "Учебный вывод не должен выполняться внутри чужой транзакции";
    КонецЕсли;
КонецПроцедуры

Функция СоздатьСвойСчет()
    ПроверитьСвойКонтекст();
    МДПлана = Метаданные.ПланыСчетов.Найти("УчебныеСчета85");
    МДАналитик = Метаданные.ПланыВидовХарактеристик.Найти("УчебныеАналитики85");
    Если МДПлана = Неопределено Или МДАналитик = Неопределено Тогда
        ВызватьИсключение "Подготовьте собственные планы счетов и аналитик";
    КонецЕсли;
    Если МДПлана.ВидыСубконто <> МДАналитик Или МДПлана.МаксКоличествоСубконто <> 3
        Или МДПлана.ПризнакиУчетаСубконто.Количество() <> 0 Тогда
        ВызватьИсключение "Нужен свой план с тремя субконто без дополнительных флагов";
    КонецЕсли;
    Счет = ПланыСчетов.УчебныеСчета85.СоздатьСчет();
    Если Счет.ВидыСубконто.Количество() <> 0 Тогда
        ВызватьИсключение "Новый собственный счет должен иметь пустую таблицу";
    КонецЕсли;
    Возврат Счет;
КонецФункции

Функция ПолучитьСвоиАналитики()
    Аналитики = Новый Массив;
    Аналитики.Добавить(ПланыВидовХарактеристик.УчебныеАналитики85.АналитикаА);
    Аналитики.Добавить(ПланыВидовХарактеристик.УчебныеАналитики85.АналитикаБ);
    Аналитики.Добавить(ПланыВидовХарактеристик.УчебныеАналитики85.АналитикаВ);
    Для Каждого Аналитика Из Аналитики Цикл
        Если Аналитика.Пустая() Тогда
            ВызватьИсключение "Предопределенные аналитики должны иметь непустые ссылки своего плана";
        КонецЕсли;
    КонецЦикла;
    Если Аналитики[0] = Аналитики[1] Или Аналитики[0] = Аналитики[2] Или Аналитики[1] = Аналитики[2] Тогда
        ВызватьИсключение "Три свои аналитики должны различаться";
    КонецЕсли;
    Возврат Аналитики;
КонецФункции

Процедура ЗаполнитьСвоюСтроку(СтрокаСубконто, Аналитика, ТолькоОбороты)
    СтрокаСубконто.ВидСубконто = Аналитика;
    СтрокаСубконто.ТолькоОбороты = ТолькоОбороты;
    СтрокаСубконто.Предопределенное = Ложь;
КонецПроцедуры

Функция СвоиФлаги(Первый, Второй, Третий = Неопределено)
    Флаги = Новый Массив;
    Флаги.Добавить(Первый);
    Флаги.Добавить(Второй);
    Если Третий <> Неопределено Тогда
        Флаги.Добавить(Третий);
    КонецЕсли;
    Возврат Флаги;
КонецФункции

Процедура ПроверитьСвоиСтроки(Субконто, Аналитики, Флаги)
    Если Субконто.Количество() <> Аналитики.Количество() Или Флаги.Количество() <> Аналитики.Количество() Тогда
        ВызватьИсключение "Не совпал полный размер своей таблицы";
    КонецЕсли;
    Для Индекс = 0 По Аналитики.Количество() - 1 Цикл
        СтрокаСубконто = Субконто.Получить(Индекс);
        Если СтрокаСубконто <> Субконто[Индекс] Или Субконто.Индекс(СтрокаСубконто) <> Индекс
            Или СтрокаСубконто.НомерСтроки <> Индекс + 1
            Или СтрокаСубконто.ВидСубконто <> Аналитики[Индекс]
            Или СтрокаСубконто.ТолькоОбороты <> Флаги[Индекс] Или СтрокаСубконто.Предопределенное Тогда
            ВызватьИсключение "Не совпали порядок, вид, флаг оборотов или принадлежность собственной строки";
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры
УчебныеСубконто85.Пульт

УчебныеСубконто85 → Обработки → УчебныеСубконто85 → Формы → Пульт → Модуль

Полный модуль собственной обычной формы, не выполнялся.

Процедура ВыполнитьНажатие(Кнопка)
    УчебныеСубконто85.ВыполнитьПример();
КонецПроцедуры

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

  1. СоздатьСвойСчет проверяет платформу и свой стенд, связь с планом аналитик, предел три вида и отсутствие дополнительных флагов. СоздатьСчет создаёт новый объект, не получает записанный счёт по ссылке.

  2. Три ссылки берутся из своих предопределённых АналитикаА/Б/В, заданных в подготовке. Непустая ссылка не подменяется произвольным UUID или неизвестным входным объектом.

  3. Строки специальной таблицы имеют ВидСубконто как ссылку на план характеристик и два отдельных Булево. Предопределенное=Ложь относится к строке счёта, не к тому, является ли сама аналитика предопределённым элементом плана.

  4. Индекс начинается с 0, НомерСтроки — с 1 и readonly. Полный валидатор сверяет обе адресации, принадлежность строки, вид и оба флага; НомерСтроки не присваивается вручную.

  5. Мутирующие методы допустимы у таблицы объекта. У таблицы ссылки или выборки они вызовут ошибку: ни ссылку на записанный счёт, ни неизвестную таблицу урок не принимает.

  6. Итог("НомерСтроки") суммирует порядковые числа 1+2+3=6. Это нарочно техническая проверка совместимости, не сумма проводок, число аналитик или денежный показатель.

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

  8. Для Свернуть оба списка должны покрывать всю таблицу и не пересекаться. Собираем первый список из всех фактических имён, второй оставляем пустым: ничего не суммируем в readonly-номер.

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

  10. Для реальной задачи отчёта надо выгрузить данные в отдельную ТаблицуЗначений, выбрать осмысленные группировки и вычисляемые показатели. Урок не выдаёт формальную доступность метода за рекомендацию его использовать на счёте.

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

  1. Будущий тест: F7 и запуск Пульта только в своём новом стенде. Каждый вызов начинается с нового счёта и пустой таблицы; здесь BSL не выполнялся.

  2. Если не созданы свои предопределённые имена, подготовьте их и обновите только свой стенд. Не заменяйте их чужими ссылками из БП или КА2.

  3. В коде нет Записать счёта, проводок или регистров бухгалтерии. Удаление/очистка затрагивает только новые строки памяти, не записи базы.

  4. Будущий технический контроль: сумма номеров 6 и три разные строки после Свернуть; обе величины ничего не говорят об учётных остатках.

  5. Все фактические колонки входят в группировку, список суммирования пуст. НомерСтроки не присваивается и не используется как сумма бухгалтерского показателя.

  6. Добавление своего флага учёта субконто в подготовку должно остановить опыт проверкой состава колонок, а не незаметно потерять этот флаг.

  7. Справочное ограничение «для данного объекта использование не имеет смысла» должно оставаться видимым рядом с кодом обоих методов.

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

Будущий опыт сверяет полный состав собственного незаписанного счёта в памяти и границы специальной таблицы. Рабочая база, проводки и счета не меняются. runtimeVerifiedScenarios=0.

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

  1. ВидыСубконто — специальная таблица счёта, не таблица сумм бухгалтерского регистра. Изменение её порядка влияет на позиции аналитик, не на остатки.

  2. ТолькоОбороты и Предопределенное — разные флаги. Ссылка на предопределённый вид не делает автоматически предопределённой добавленную нами строку счёта.

  3. Методы объекта памяти не сохраняют счёт. Этот черновик намеренно не подготовлен к записи; не добавляйте Записать ради проверки примера.

  4. Статические Python/HTML-проверки и сверка установленной справки не являются компиляцией и запуском в 1С. runtimeVerifiedScenarios остаётся 0.

  5. Не копируйте пример native Состав.Итог("Всего") или Свернуть("Номенклатура",...) в ВидыСубконто: таких полей у этой специальной таблицы нет.

  6. Наличие метода в списке API не означает его полезность для этого типа. Этот урок — честная демонстрация совместимости, а не схема автоматического изменения бухгалтерской аналитики.

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

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

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

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

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