Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ПриЗаписи() документа
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
Darina
Пожалуйста, помогите разобраться.
При записи документа ПТ (ПриЗаписи()) создаю новый документ - Документы.Документ.СоздатьДокумент().
Все создается, записывается.
Но в программе есть функция, которая обращается к ПТ: Объект.Записать(РежимЗаписиДокумента.Запись, РежимПроведенияДокумента.Неоперативный).

Подскажите, как обойти условием создание нового документа в ПриЗаписи().
alex040269
Ничего не понял. Документ А создает документ Б в процедуре ПриЗаписи. В процедуре ПриЗаписи Документа Б есть обращение к документу А?
Darina
Документ А создает Документ В. Все нормально.
Но потом при загрузке из Клиент-банка идет обращение к Документам А:
Объект.Записать(РежимЗаписиДокумента.Запись, РежимПроведенияДокумента.Неоперативный).
sad.gif
Ardi
Без видео не обойтись.
Darina
Ardi, вы считаете, я глупость спросила?
lex2707
Если ЭтоНовый() Тогда
... Создать документ Б
КонецЕсли;
logist
Цитата(Darina @ 29.12.12, 11:37) необходимо зарегистрироваться для просмотра ссылки
глупость спросила?

Может и не глупость, но суть так и не понятна.
alex040269
Darina , Ardi имел ввиду видео с участием 1С. Ну или куски кода с комментариями.
zay
Иногда при вызове экспортной функции не важно чего документа/обработки/отчета есть необходимость "обойти" часть кода вызываемой функции.

Возможно вам подойдет такой способ:

Создайте глобальную переменную модуля документа
Перем НеСоздаватьНовыйДокументПриЗаписи Экспорт;

В процедуре ПриЗаписи() этого документа в точке создания нового документа вставьте
Процедура ПриЗаписи()
//.................
Если НеСоздаватьНовыйДокументПриЗаписи <> истина Тогда
        Документы.Документ.СоздатьДокумент();
КонецЕсли;
//................


И записывайте наш документ в следующем режиме
НашДокумент = СсылкаНаНашДокумент.ПолучитьОбъект();
НашДокумент.НеСоздаватьНовыйДокументПриЗаписи = истина;
НашДокумент.Записать( );

Zaval
К сожалению, в сабже задача не формализована.
Возможно, все решается гораздо проще.
Предопределенная процедура ПриЗаписи() есть как в модуле документа, так и в модуле формы документа.
Если вызов процедуры создания подчиненного документа поместить в процедуру ПриЗаписи() модуля формы, то подчиненный док будет создаваться только при интерактивной записи документа(по кноп Записать на форме).
При программной записи(без открытия формы) ничего происходить не будет.

ЗЫ. Учтите, что после изменения основного дока может понадобиться внести изменения в подчиненный(может это не нужно сейчас, но понадобится при дальнейшем развитии функционала). Из этих соображений проверка на ЭтоНовый() - тупиковое напрвление, рано или поздно придется переделывать.
XBrut
на мисте в таких случаях требуют фото, а Ardi распоясался и просит видео smile.gif
Vofka
Цитата(XBrut @ 29.12.12, 17:28) необходимо зарегистрироваться для просмотра ссылки
на мисте в таких случаях требуют фото, а Ardi распоясался и просит видео smile.gif

У нас здесь своя атосфера. Мисту в топку. 29000000.gif
Darina
Спасибо всем за ответы.
В процедуре ПриЗаписи() в модуле документа "ПлатежноеТребование" написала так:
Процедура ПриЗаписи(Отказ)
    Если ЭтотОбъект.ПометкаУдаления = Истина тогда
             ...
    иначе
            Запрос = Новый Запрос;
            Запрос.Текст ="ВЫБРАТЬ  
                    |    ДокументДляСозданияПлатежногоТребования.Ссылка,
                    |    ДокументДляСозданияПлатежногоТребования.ПлатежноеТребование
                    |ИЗ
                    |    Документ.ДокументДляСозданияПлатежногоТребования КАК ДокументДляСозданияПлатежногоТребования
                    |ГДЕ
                    |    ДокументДляСозданияПлатежногоТребования.ПлатежноеТребование.Ссылка = &ПТ";
            
            Запрос.УстановитьПараметр("ПТ", ЭтотОбъект.Ссылка);
            
            Результат = Запрос.Выполнить().Выгрузить();              
            
            Если Результат.Количество() = 0 тогда
                ДокументДоп = Документы.ДокументДляСозданияПлатежногоТребования.СоздатьДокумент();
                ...
                ДокументДоп.Записать(РежимЗаписиДокумента.Проведение);
            
            иначе
                Выборка = Запрос.Выполнить().Выбрать();
                Пока Выборка.Следующий() цикл
                    ДокДоп = Выборка.Ссылка.ПолучитьОбъект();
                    ДокДоп.Записать(РежимЗаписиДокумента.Проведение);
                КонецЦикла;
            КонецЕсли;
    КонецЕсли;
КонецПроцедуры
zay
У меня был опыт с подобным - модификация и запись одного документа (ДокументДляСозданияПлатежногоТребования) при записи другого документа (ПлатежноеТребование)
Какие при этом я получил грабли.

Грабли №1. Пользователь с полными правами на ПлатежноеТребование и с правами "только чтение" на ДокументДляСозданияПлатежногоТребования вносит изменения в ПлатежноеТребование. И эти модификации должны попасть в ДокументДляСозданияПлатежногоТребования.

Грабли №2. При записи ПлатежноеТребование иногда пробегала некая барабашка (подозреваю что конфликт блокировок, но точно так и не выяснил). В результате у ПлатежноеТребование и ДокументДляСозданияПлатежногоТребования шла рассинхронизация реквизитов, которые должны были совпадать. Другими словами - по одновному документу запись произошла, а по подчиненному - нет.

Проблема типа Грабли №2 - очень каварная. Идут тысячи документов. Никому и в голову не прийдет проверять - а все ли там хорошо? Всегда ли создается ДокументДляСозданияПлатежногоТребования ?

Поэтому для себя сделал вывод: создавать/модифицировать один документ из модуля другого - это зло. Надо стараться этого избегать. Например "выкручиватся" при помощи регистров сведений не подчиненных регистратору. Заполнять их из ПлатежноеТребование и потом использовать в комплексе с ДокументДляСозданияПлатежногоТребования (или вообще без него).
Darina
Как мне не хватало вашего опыта и комментариев пару месяцев назад. Спасибо за советы.

Задача была такая: есть 2 базы «Абонент» и «Торговля».
Обработка:
Количество Актов тех. обслуживания должно совпадать с количеством проведенных Актов (Реализаций тов. и услуг) в Торговле по кажд. контрагенту.
Если условие выполнено, вывожу список контрагентов для выставления им плат.требования. Но нужно учесть уже выставленные ПТ.
Поэтому при записи ПТ (именно при Записи, т.к. выставляет один человек, а подтверждает оплату ПТ и проводит другой) создаю документ ДокДляСозданияПТ, записываю все акты по данному контрагенту в ТЧ.ДокументыРеализации, провожу в РС.АктыВыставленныеВПТ.

Повторное формирование Списка контрагентов происходит на основании записей в РС.
Вот для этой цели был создан дополнительный документ. Да, я не предусмотрела, что ПТ м.изменяться.
Наверное, буду информировать пользователя об изменении в ПТ ТЧ.ДокументыРеализации для корректировки ДокументаДляСозданияПТ.
Уже два месяца выставляются так.образом ПТ.

Или вы считаете, стоит переделать?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.