МГ: сессия от 2010-08-02. Updated!
Сегодня в мастер-группе мы разобрали ряд важных методологических вопросов.
К сожалению, у Вас недостаточно прав для просмотра этой записи. Если Вы еще не залогинены на сайте — залогиньтесь.
Если не активировали токен — посмотрите видео-инструкцию (видео N5)
Если вы залогинены, у Вас активирован токен доступа, но вы все равно видите эту запись — напишите нам на e-mail поддержки.
У меня вопрос набору записей.
Свойство РегистрНакопленияНаборЗаписей..Записывать = Истина имеет смысл устанавливать, если код выполняется ТОЛЬКО в модуле объекта документа? (Обработка проведения или экспортная обработка модуля объекта)Если выполнять, например, доступ к набору записей из модуля формы обработки, то достаточно просто указать Набор.Записать(). Это верно?
Условие еще более жесткое.
Свойство Записывать имеет смысл только в контексте события ОбработкаПроведения.
Тогда не пойму поведение системы.
Продемонстрирую.
Есть обработка. Определил команду:
&НаКлиенте
Процедура Вариант2(Команда)
ВариантДваНаСервере(ДокументПоступления);
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ВариантДваНаСервере(ОбъектДок)
ОбъектДок.ПолучитьОбъект().ВариантДва();
КонецПроцедуры // ВариантДваНаСервере()
Вызываю экспортную процедуру модуля объекта документ:
Процедура ВариантДва() Экспорт
//Движения.ОстаткиТоваров.Записывать = Истина;
Движение = Движения.ОстаткиТоваров.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = ТекущаяДата();
Движение.Номенклатура =
Справочники.Номенклатура.НайтиПоНаименованию(“Пиво Светлое Хайникен 0.5”);
Движение.Количество = 7;
Движения.Записать();
КонецПроцедуры
И вот что нтересно:
1. Если закомментировать свойство Записывать, то запись набора не происходит, и в регистре остатков остаются все записи которые находятся в ТЧ документа (документ ранее был проведен)
2. Если комментарий убрать, то набор с одной строкой “Пиво” попадает в регистр накопления и затирает предыдущий набор в РН (т.к. мы набор не прочитали)
Получается что Движения.ОстаткиТоваров.Записывать = Истина влияет на результат не только в обработке проведения.
Или я может где-то ошибаюсь?
Этот момент очень интересен.
Если вы будете использовать Движения.ОстаткиТоваров.Записать(), то у вас запись набора будет происходить.
А если вы пишете Движения.Записать(), то система эмулирует те же действия, что и при окончании процедуры ОбработкаПроведения, то есть во внимание принимаются только наборы записей с установленным флагом Записывать.
По п.10.
На мой взгляд, объявление экспортной переменной в модуле управляемого приложения для работы обработки – это уже чересчур! Возвращаться к глобальному модулю 7.7 совсем не хочется…
Более логичным был бы вариант требуемую переменную описать в качестве реквизита обработки.
Все равно не понял одного: разве при созданной форме объекта сам объект не создается и не существует пока открыта форма? И еще вопрос, как насчет структуры ДополнительныеСвойства, как в 8.1?
Через реквизиты обработки задачу не решить. Для каждой формы будет свой объект и соответственно свои значения реквизитов.
Но в этом вопросе есть нераскрытый нюанс, видео по нему я в скором времени перепишу..
По п.7. Интересный вариант – вырезать текст условия из запроса! Обычно разработчики типовых решений формируют текст условия программно и “цепляют” его к тексту запроса. Только запрос тогда становится нечитаемым при помощи конструктора…
С точки зрения читабельности запроса лучше всего использовать “Аналитика = Параметр ИЛИ Параметр = ПустоеЗначение”. Интересно система в запросах тоже оптимизирует выполнение и если Параметр = ПустоеЗначение, то условие сама исключит?
Нет не оптимизирует, запрос на стороне СУБД будет выполняться именно с указанным условием ИЛИ.