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

   //... стандартный код процедуры

   СоздатьПоступление();

КонецПроцедуры // ОбработкаПроведения()

//моя процедура
Процедура СоздатьПоступление()Экспорт
    
    Запрос = Новый Запрос;
    Запрос.Текст =
    ""; // текст запроса пропускаю, думаю это неважно, зачем захламлять...
    
    Если Запрос.Выполнить().Пустой()Тогда
        Возврат;
    КонецЕсли;
    
ВыборкаЗапроса = Запрос.Выполнить().Выбрать();
    ДокПриход = Документы.ОприходованиеТоваров.СоздатьДокумент();
    ФормаПрихода = ДокПриход.ПолучитьФорму();
    ФормаПрихода.Открыть();
    ДокПриход.Товары.Очистить();    
    Пока ВыборкаЗапроса.Следующий()Цикл            
        НоваяСтрока = ДокПриход.Товары.Добавить();
        НоваяСтрока.Номенклатура = ВыборкаЗапроса.Товар;
        НоваяСтрока.Количество   = -ВыборкаЗапроса.Количество;
        
        // Выполнить общие действия для всех документов при изменении номенклатуры.
        ОбработкаТабличныхЧастей.ПриИзмененииНоменклатурыТабЧасти(НоваяСтрока, ДокПриход);
        
        // Заполняем по типу цен
        ОбработкаТабличныхЧастей.ЗаполнитьЕдиницуЦенуПродажиТабЧасти(НоваяСтрока, ДокПриход, ДокПриход.ПолучитьВалютуРегламентированногоУчета(), ДокПриход.ПолучитьВалютуУпрУчета());
        
        // Рассчитываем реквизиты табличной части.
        ОбработкаТабличныхЧастей.ЗаполнитьПроцентРозничнойНаценкиТабЧасти(НоваяСтрока, ДокПриход);
        ОбработкаТабличныхЧастей.РассчитатьРозничнуюЦенуТабЧасти(НоваяСтрока, ДокПриход, ДокПриход.ПолучитьВалютуРегламентированногоУчета());
        НоваяСтрока.Качество = Справочники.Качество.Новый;
        
        // Рассчитать реквизиты табличной части.
        ОбработкаТабличныхЧастей.РассчитатьКоличествоМестТабЧасти(НоваяСтрока, ДокПриход);
        ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(НоваяСтрока, ДокПриход);
        НоваяСтрока.СуммаРегл        = МодульВалютногоУчета.ПересчитатьИзВалютыВВалюту(НоваяСтрока.Сумма, ДокПриход.ПолучитьВалютуУпрУчета(),
                                ДокПриход.ПолучитьВалютуРегламентированногоУчета(), ДокПриход.ПолучитьКурсУпрУчета(), 1, ДокПриход.ПолучитьКратностьУпрУчета(), 1);
        
    КонецЦикла;
    
КонецПроцедуры


как бы все красиво работает, открывается форма оприходования, заполняется недостающим товаром, но... при проведении ругается

{ОбщийМодуль.РаботаСДиалогами(1164)}: Ошибка при вызове метода контекста (ЭтоНовый): Документ не выбран
Если ДокументОбъект.ЭтоНовый() Тогда
по причине:
Документ не выбран

И не только при проведении... вобщем в отладчике в форме документа (например при изменении склада) смотрю ЭтотОбъект - значение пустое... хотя ЭтотОбъект - тип документобъект, хранит все реквизиты документа, все вроде есть...
есть подозрение на транзакции, возможно не стоит создавать док в процедуре ОбработкаПроведения()

logist
1. А нафига создавать документ, открывать форму а потом заполнять его. Не логичней ли сначала заполнить док, потом (допустим если запись будет удачной, ну или все равно потом) открыть форму.
2. Вот так не надо делать:
   Если Запрос.Выполнить().Пустой()Тогда
        Возврат;
    КонецЕсли;
    
ВыборкаЗапроса = Запрос.Выполнить().Выбрать();

надо так:
Результат = Запрос.Выполнить();
   Если Результат.Пустой()Тогда
        Возврат;
    КонецЕсли;
    
ВыборкаЗапроса = Результат.Выбрать();


А по поводу ошибки, из приведенного кода и текста ошибки не понятно где возникает ошибка (в каком из документов), соответственно ответить на вопрос никак...
Zaval
Цитата(onsamuy @ 02.07.12, 17:49) необходимо зарегистрироваться для просмотра ссылки
возможно не стоит создавать док в процедуре ОбработкаПроведения()


Это старая методическая ошибка. Ладно, в семерке деваться особо было некууда(
Щас-то почему ПодпискуНаСобытие не использовать?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.