8.х Внесение записей в регистр - как работает?

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Smarty, 5 май 2015.

  1. TopicStarter Overlay
    Smarty
    Offline

    Smarty

    Регистрация:
    26 апр 2015
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    Точнее - я не совсем понимаю логику встроенного языка... Вот код, который сформировал для меня конструктор для элементарного регистра:
    Код:
     // регистр ОстаткиТоваров Приход
        Движения.ОстаткиТоваров.Записывать = Истина;
        Для Каждого ТекСтрокаСписокТоваров Из СписокТоваров Цикл
            Движение = Движения.ОстаткиТоваров.Добавить();
            Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
            Движение.Период = Дата;
            Движение.Товар = ТекСтрокаСписокТоваров.Товар;
            Движение.Количество = ТекСтрокаСписокТоваров.Количество;
        КонецЦикла;
    
    Показанный код, как вы понимаете, является телом процедуры ОбработкаПроведения() некого документа. И все работает... что вызывает у меня сразу 2 вопроса.

    1. В какой точке кода "дергается" реальная БД(пусть будет MS SQL) дабы проинсертить в таблицу(-ы) новые строки?
    2. Разве не логично выглядела бы в конце цикла команда типа
    Код:
    Движение.Записать()
    ? Это бы сразу сняло с повестки дня вопрос 1. А так я реально не понимаю - как модуль соображает что вот "пока не пора", а "теперь пора"? Почему все работает и без этой команды?
  2. nbIpKuH_BaH9I
    Online

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.991
    Симпатии:
    399
    Баллы:
    104
    Потому что платформа автоматически обрабатывает коллекции типа Движения. Все логично и просто. :)
  3. LordMaverick
    Offline

    LordMaverick Профессионал в 1С

    Регистрация:
    17 мар 2014
    Сообщения:
    3.443
    Симпатии:
    376
    Баллы:
    104
    а вопроса на повестке и так нет, его снимает оттуда это
    Код:
      Движения.ОстаткиТоваров.Записывать = Истина;
  4. TopicStarter Overlay
    Smarty
    Offline

    Smarty

    Регистрация:
    26 апр 2015
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    Не сказал бы. Потому что:

    1. А как ИМЕННО обрабатываются коллекции типа Движения?
    2. И много ли в 1с вообще коллекций с "особой обработкой"?

    Если вам все абсолютно ясно, то я за вас рад. Очень. Но а на заданные-то вопросы вы ответить со всем вашим этим пониманием можете?
  5. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    При проведении документа начинается 2 неявных транзакции:

    Запись документа
    Запись движений документа

    Запись движений выполняется сразу же после завершения выполнения процедуры "ОбработкаПроведения" и подписки на событие проведения документа.

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

    Транзакция записи движений фиксируется после успешной записи всех необходимых движений в ИБ.
    Транзакция записи документа фиксируется в случае успешной фиксации транзакции записи движений.
    Smarty нравится это.
  6. TopicStarter Overlay
    Smarty
    Offline

    Smarty

    Регистрация:
    26 апр 2015
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    Вот! Это уже много яснее, спасибо! Но снова не до конца:

    Ээээ... Тут я даже не знаю... Написано так, что после окончания проц-ры ОбработкаПроведения мы от нее отписываемся и тут же подписываемся вновь, на нее же. Это так??? Или что имелось в виду?

    Вот этот флаг - он прикладному разработчику доступен или он только платформой самой управляется? Если первое - как его взводить/сбрасывать? Короткий пример, если можно.
  7. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    В конфигурации есть возможность создания подписок на события для разных объектов и разных событий с этими объектами. Для документов возможна подписка на событие для события "Проведение". Метод такой подписки работает сразу после завершения работы предопределенной процедуры "ОбработкаПроведения" модуля документа, если флаг Отказ не принял значение истина.

    Флаг "записывать" для набора записей регистра, являющимся элементом набора движений документа, доступен только программисту и актуальность этого флага зависит от установленной настройки документа записи движений при проведении.
    Последнее редактирование: 8 май 2015

Поделиться этой страницей