Цитата(kalyamov @ 01.07.11, 21:49) необходимо зарегистрироваться для просмотра ссылки
А для чего их ввели ? Разве не для того, что если в момент от начала транзакции и до ее конца произошло определенное условие или ошибка, отменить предидущие сохранения и проведения ?
Из файла помощи:
Понятие транзакций соответствует общепринятому пониманию транзакций баз данных. В системе 1С:Предприятие транзакции активно используются самой системой при записи различной информации. Транзакция гарантирует неизменность информации в базе данных для других пользователей до ее завершения и целостное сохранение информации.
Возможность использования транзакций в языке должна применяться только в тех программных модулях, которые выполняют запись изменений в информационной базе (в справочниках, константах, документах). Их не следует использовать в алгоритмах формирования движений документов. Транзакции также не стоит использовать при одиночных записях. Типичный пример когда следует использовать транзакции — это процедура, которая будет во всех элементах справочника менять некоторый параметр.
Действия, заключенные в транзакцию, выполняются быстрее. Особенно существенно разница проявляется в многопользовательском режиме и особенно существенна разница для операций, связанных с изменением содержимого базы данных, хотя и для операций только чтения разница может быть в разы.
Транзакция, выполняемая одним пользователем может мешать выполнению транзакций другими пользователями. Таким образом, важно соизмерять получающееся ускорение от применения транзакций с возможными побочными эффектами. Другими словами, возможно, что ускорение таково, что операция начинает выполняться столь быстро, что можно пренебречь влиянием на других пользователей (например, ожидание секунду – другую), а может это будет приводить к конфликтам — все зависит от конкретного алгоритма конфигурации.
При обработке транзакции (в том числе в Модуле документа) не следует использовать элементы интерактивного управления (например, операторы Предупреждение, Вопрос, ВвестиЧисло и т. п.), т. к. в этом случае при открытой транзакции система ожидает отклика пользователя, а это может препятствовать нормальной работе других пользователей (в результате документы у всех остальных пользователей в этот момент могут не проводиться). Если в конфигурации необходимо при проведении документа выдавать пользователю некоторые сообщения, то следует использовать операторы Сообщить или Состояние.
Если желаете, можно, на основании цитированного выше, показать несостоятельность использования транзакции в обсуждаемом случае.
Цитата(kalyamov @ 01.07.11, 23:13) необходимо зарегистрироваться для просмотра ссылки
Пока документ не будет закрыт ничего нового в переменную конт передать не удастся. Можно сразу передавать данные и в модуле документа обрабатывать их через форму.параметр. Если конт = 100 - к этому условию мы прийдем если вторично запустим обработку при открытой форме нового документа или после того, как отработает метод ОткрытьФорму(), что нам уже без надобности.
Снова читаем документацию:
Открытие формы нового документа
ОткрытьФорму(<ОписательОбъекта>, <КонтекстФормы>, <ДокументОснование>)
<ОписательОбъекта> Строковое выражение."Документ.ХХХХХ", где ХХХХХ — идентификатор вида документа;
<ДокументОснование> Необязательный параметр. Выражение типа «документ», задающий документ-основание для открытия формы ввода нового документа в режиме ввода на основании.
Чуть выше, при описании общей формы вызова:
ОткрытьФорму
Выполняет открытие формы из'встроенного языка.
Синтаксис:
ОткрытьФорму (<Параметр1>, <КонтекстФормы>, < Параметр 3>...)
Англоязычный синоним:
OpenForm
Параметры:
<Параметр1> В зависимости от типа открываемой формы используется различные значения данного параметра.Для журналов, отчетов, списков в конце строки описателя формы может быть указан символ "#" с некоторым идентификатором: "#LLLL". Это используется для того, чтобы данная форма открылась в новом окне, а не активизировала существующее окно этой формы, если оно открыто. Где, LLLL — идентификатор, который позволяет открыть новое окно или активизировать уже открытое с этим идентификатором. Если идентификатор не задан, то обязательно открывается новое окно.
<КонтекстФормы> Необязательный параметр. Имя переменной, куда можно задать значение любого типа для передачи в открываемую форму. Данное значение будет доступно в открытой форме как атрибут Форма.Параметр.После исполнения данного метода система вернет в данную переменную контекст открытой формы (см. Передача контекста в качестве параметра). С помощью значения этого контекста можно затем произвольно манипулировать открытой формой, пока она открыта. Пока форма открыта, тип значения данного параметра равен 100 (см. ТипЗначения), если закрыта — 0.
<Параметр3>... В зависимости от типа открываемой формы используется различный состав и значения остальных параметров.
Из описания следует, что при создании новой формы, Конекст будет равен 100, пока форма не будет закрыта, и через Контекст можно происвольно манипулировать открытой формой. Т.е. можно заполнять шапку и табличную часть формы.
Цитата(5_kopeek @ 02.07.11, 0:15) необходимо зарегистрироваться для просмотра ссылки
Думаю, Вы правы. Этот момент можно обойти следующим образом. В обработке заполнить таблицу значений нужными данными и открыть форму нового документа, передавая в качестве параметра ту же таблицу значений:
ОткрытьФорму("Документ.СписаниеТМЦ",Табл);, а в процедуре ВводНового() документа СписаниеТМЦ добавить несколько строк типа:
Если ТипЗначенияСтр(Форма.Параметр)="ТаблицаЗначений" Тогда
ЗагрузитьТабличнуюЧасть(Форма.Параметр);
КонецЕсли; // ТипЗначенияСтр(Форма.Параметр)="ТаблицаЗначений"
А дальше интерактивно редактировать, сохранять/не сохранять открытый заполненный документ.
В принципе можно и так, но этот подход потребует изменения кода стандартного документа, что нежелательно.