Имя: Пароль:
1C
1С v8
Внешняя обработка заполнения табличной части в 3.0 (УФ)
0 Sova789
 
23.12.14
11:21
Добрый день! Помогите, как понять, что происходит. Написала обработку, при проверке модуля не обнаруживается никаких ошибок, при отладке тоже все гладко. Только то, что мне надо внешняя обработка не делает. Суть обработки в следующем: Нужно заполнить табличную часть документа Перемещение ОС , учитывая МОЛ и способ амортизации ОС.
1 Sova789
 
23.12.14
11:22
СведенияОбОбработке() описывать не буду. Приведу код процедуры ВыполнитьКоманду
2 Sova789
 
23.12.14
11:22
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения) Экспорт
    
    СсылкаДокум = ОбъектыНазначения[0].Ссылка;
    
    Если  НЕ ЗначениеЗаполнено(СсылкаДокум.МОЛОрганизации) Тогда
        Сообщить("Заполните МОЛ!!!");
        Возврат;
    КонецЕсли;
    
    Если  НЕ ЗначениеЗаполнено(СсылкаДокум.Организация) Тогда
        Сообщить("Заполните Организацию!!!");
        Возврат;
    КонецЕсли;
    
    Если  НЕ ЗначениеЗаполнено(СсылкаДокум.СпособОтраженияРасходовПоАмортизации) Тогда
        Сообщить("Заполните способ отражения расходов по амортизации!!!");
        Возврат;
    КонецЕсли;
    
    
    //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
    
    Запрос = Новый Запрос;
    Запрос.Текст =
    
    "ВЫБРАТЬ РАЗЛИЧНЫЕ
    |    МестонахождениеОСБухгалтерскийУчетСрезПоследних.ОсновноеСредство КАК ОсновноеСредство,
    |    МестонахождениеОСБухгалтерскийУчетСрезПоследних.ОсновноеСредство.Код
    |ИЗ
    |    РегистрСведений.МестонахождениеОСБухгалтерскийУчет.СрезПоследних(&ДатаСведений, Организация = &Организация) КАК МестонахождениеОСБухгалтерскийУчетСрезПоследних
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СпособыОтраженияРасходовПоАмортизацииОСБухгалтерскийУчет.СрезПоследних(
    |                &ДатаСведений,
    |                Организация = &Организация
    |                    И СпособыОтраженияРасходовПоАмортизации = &СпособыОтраженияРасходовПоАмортизации) КАК СпособыОтраженияРасходовПоАмортизацииОСБухгалтерскийУчетСрезПоследних
    |        ПО МестонахождениеОСБухгалтерскийУчетСрезПоследних.ОсновноеСредство = СпособыОтраженияРасходовПоАмортизацииОСБухгалтерскийУчетСрезПоследних.ОсновноеСредство
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияОСОрганизаций.СрезПоследних(&ДатаСведений, Организация = &Организация) КАК СостоянияОСОрганизацийСрезПоследних
    |        ПО МестонахождениеОСБухгалтерскийУчетСрезПоследних.ОсновноеСредство = СостоянияОСОрганизацийСрезПоследних.ОсновноеСредство
    |ГДЕ
    |    МестонахождениеОСБухгалтерскийУчетСрезПоследних.МОЛ = &МОЛ
    |    И МестонахождениеОСБухгалтерскийУчетСрезПоследних.Местонахождение = &Местонахождение
    |    И СостоянияОСОрганизацийСрезПоследних.Состояние = &Состояние
    |
    |УПОРЯДОЧИТЬ ПО
    |    ОсновноеСредство
    |АВТОУПОРЯДОЧИВАНИЕ";
    
    // МОЛ =
    Запрос.УстановитьПараметр("ДатаСведений", Новый Граница(СсылкаДокум.МоментВремени(), ВидГраницы.Исключая));
    //Сообщить(Новый Граница(ТекущаяДата(), ВидГраницы.Включая));
    Запрос.УстановитьПараметр("МОЛ", СсылкаДокум.МОЛОрганизации);
    Запрос.УстановитьПараметр("Организация", СсылкаДокум.Организация);
    Запрос.УстановитьПараметр("Местонахождение", СсылкаДокум.ПодразделениеОрганизации);
    Запрос.УстановитьПараметр("Состояние",Перечисления.СостоянияОС.ПринятоКУчету);
    Запрос.УстановитьПараметр("СпособыОтраженияРасходовПоАмортизации",СсылкаДокум.СпособОтраженияРасходовПоАмортизации);
    Результат = Запрос.Выполнить();
    
    Если Результат.Пустой() Тогда
        Сообщить("У МОЛ - "+ СсылкаДокум.МОЛОрганизации + " - на дату документа ("+СсылкаДокум.Дата+")  нет ОС, находящихся в  "+СсылкаДокум.ПодразделениеОрганизации+ " со способом отражения расходов по амортизации - " + СсылкаДокум.СпособОтраженияРасходовПоАмортизации+ " !!!");
        //Сообщить("У МОЛ - "+ Объект.МОЛОрганизации + " на дату документа ("+Объект.Дата+") нет ОС, принятых к учету!!!");
        Возврат;    
        
    КонецЕсли;
    Сообщить(СсылкаДокум);
    
    Попытка
        СсылкаДокум.ПолучитьОбъект().ОС.Очистить();
    Исключение
        //  ЗаписьЖурналаРегистрации("Ошибка внешней обработки",,,,ОписаниеОшибки());
        ВызватьИсключение ОписаниеОшибки();
    КонецПопытки;
    //Сообщить(Тип(СсылкаДокум));
    ВыборкаДетальныеЗаписи = Результат.Выбрать();
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        //Сообщить(ВыборкаДетальныеЗаписи.ОсновноеСредство);
        НоваяСтрока = СсылкаДокум.ПолучитьОбъект().ОС.Добавить();
        НоваяСтрока.ОсновноеСредство = ВыборкаДетальныеЗаписи.ОсновноеСредство;
    КонецЦикла;
    Сообщить("Кина не будет! Электричество кончилось!");
    ////}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    
КонецПроцедуры
3 Ksandr
 
23.12.14
11:24
НоваяСтрока = СсылкаДокум.ПолучитьОбъект().ОС.Добавить();

Гггг :)
4 Sova789
 
23.12.14
11:25
В итоге, не очищается табличная часть документа, и не заполняется....Т.е. команды СсылкаДокум.ПолучитьОбъект().ОС.Очистить()  и
НоваяСтрока = СсылкаДокум.ПолучитьОбъект().ОС.Добавить();
будто игнорируются..., либо не читает ... Помогите, программисты добрые!!!
5 Ksandr
 
23.12.14
11:25
Удивительно почему так?
6 Sova789
 
23.12.14
11:26
Программисты, которые могут помочь без издевок, подскажите , плиз...
7 Ksandr
 
23.12.14
11:26
Путь только ректальный. Рекомендую к внимательному курению: http://infostart.ru/public/84119/
8 Ksandr
 
23.12.14
11:28
А еще было бы не плохо подумать какой объект будет получен в результате: СсылкаДокум.ПолучитьОбъект()

Правильный ответ: не имеющий никакого отношения к тому что отображен на форме
9 Sova789
 
23.12.14
11:29
У меня действие происходит в модуле объекта внешней обработки...
10 Sova789
 
23.12.14
11:29
На форме нет ничего...
11 Oleg_ka
 
23.12.14
11:31
12 Sova789
 
23.12.14
11:37
Я эти темы просматривала, что-то не дошло, что я не поняла... может посмотрим мою ситуацию? ))))
13 Любопытная
 
23.12.14
11:38
(12) В вашей ситуации надо это все стереть и написать как в (7) или в (11)
14 Sova789
 
23.12.14
11:40
Хорошо!Спасибо))))))) Но тему пока не закрываю, ок?))) Думаю, что вопросы еще появятся...
15 Любопытная
 
23.12.14
11:40
вероятнее всего))
16 Sova789
 
25.12.14
11:51
Ну, вот я и вернулась, как и обещала )))). Сделала, как в (7). Подставила лишь наименование своего документа. И, естественно, ЗаполнитьОбъект() у меня выглядит так:
17 Sova789
 
25.12.14
11:51
&НаСервере
Процедура ЗаполнитьОбъект(НовыйОбъект)
    //Сообщить(Тип(ОбъектФормы.СписокОбъектов));

    СсылкаДокум = НовыйОбъект;
    
    Если  НЕ ЗначениеЗаполнено(СсылкаДокум.МОЛОрганизации) Тогда
        Сообщить("Заполните МОЛ!!!");
        Возврат;
    КонецЕсли;
    
    Если  НЕ ЗначениеЗаполнено(СсылкаДокум.Организация) Тогда
        Сообщить("Заполните Организацию!!!");
        Возврат;
    КонецЕсли;
    
    Если  НЕ ЗначениеЗаполнено(СсылкаДокум.СпособОтраженияРасходовПоАмортизации) Тогда
        Сообщить("Заполните способ отражения расходов по амортизации!!!");
        Возврат;
    КонецЕсли;
    
    
    //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
    
    Запрос = Новый Запрос;
    Запрос.Текст =
    
    "ВЫБРАТЬ РАЗЛИЧНЫЕ
    |    МестонахождениеОСБухгалтерскийУчетСрезПоследних.ОсновноеСредство КАК ОсновноеСредство,
    |    МестонахождениеОСБухгалтерскийУчетСрезПоследних.ОсновноеСредство.Код
    |ИЗ
    |    РегистрСведений.МестонахождениеОСБухгалтерскийУчет.СрезПоследних(&ДатаСведений, Организация = &Организация) КАК МестонахождениеОСБухгалтерскийУчетСрезПоследних
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СпособыОтраженияРасходовПоАмортизацииОСБухгалтерскийУчет.СрезПоследних(
    |                &ДатаСведений,
    |                Организация = &Организация
    |                    И СпособыОтраженияРасходовПоАмортизации = &СпособыОтраженияРасходовПоАмортизации) КАК СпособыОтраженияРасходовПоАмортизацииОСБухгалтерскийУчетСрезПоследних
    |        ПО МестонахождениеОСБухгалтерскийУчетСрезПоследних.ОсновноеСредство = СпособыОтраженияРасходовПоАмортизацииОСБухгалтерскийУчетСрезПоследних.ОсновноеСредство
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияОСОрганизаций.СрезПоследних(&ДатаСведений, Организация = &Организация) КАК СостоянияОСОрганизацийСрезПоследних
    |        ПО МестонахождениеОСБухгалтерскийУчетСрезПоследних.ОсновноеСредство = СостоянияОСОрганизацийСрезПоследних.ОсновноеСредство
    |ГДЕ
    |    МестонахождениеОСБухгалтерскийУчетСрезПоследних.МОЛ = &МОЛ
    |    И МестонахождениеОСБухгалтерскийУчетСрезПоследних.Местонахождение = &Местонахождение
    |    И СостоянияОСОрганизацийСрезПоследних.Состояние = &Состояние
    |
    |УПОРЯДОЧИТЬ ПО
    |    ОсновноеСредство
    |АВТОУПОРЯДОЧИВАНИЕ";
    
    // МОЛ =
    Запрос.УстановитьПараметр("ДатаСведений", Новый Граница(СсылкаДокум.МоментВремени(), ВидГраницы.Исключая));
    //Сообщить(Новый Граница(ТекущаяДата(), ВидГраницы.Включая));
    Запрос.УстановитьПараметр("МОЛ", СсылкаДокум.МОЛОрганизации);
    Запрос.УстановитьПараметр("Организация", СсылкаДокум.Организация);
    Запрос.УстановитьПараметр("Местонахождение", СсылкаДокум.ПодразделениеОрганизации);
    Запрос.УстановитьПараметр("Состояние",Перечисления.СостоянияОС.ПринятоКУчету);
    Запрос.УстановитьПараметр("СпособыОтраженияРасходовПоАмортизации",СсылкаДокум.СпособОтраженияРасходовПоАмортизации);
    Результат = Запрос.Выполнить();
    
    Если Результат.Пустой() Тогда
        Сообщить("У МОЛ - "+ СсылкаДокум.МОЛОрганизации + " - на дату документа ("+СсылкаДокум.Дата+")  нет ОС, находящихся в  "+СсылкаДокум.ПодразделениеОрганизации+ " со способом отражения расходов по амортизации - " + СсылкаДокум.СпособОтраженияРасходовПоАмортизации+ " !!!");
        //Сообщить("У МОЛ - "+ Объект.МОЛОрганизации + " на дату документа ("+Объект.Дата+") нет ОС, принятых к учету!!!");
        Возврат;    
        
    КонецЕсли;
    Сообщить(СсылкаДокум);
    
    Попытка
        СсылкаДокум.ОС.Очистить();
    Исключение
        //  ЗаписьЖурналаРегистрации("Ошибка внешней обработки",,,,ОписаниеОшибки());
        ВызватьИсключение ОписаниеОшибки();
    КонецПопытки;
    //Сообщить(Тип(СсылкаДокум));
    ВыборкаДетальныеЗаписи = Результат.Выбрать();
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        //Сообщить(ВыборкаДетальныеЗаписи.ОсновноеСредство);
        НоваяСтрока = СсылкаДокум.ОС.Добавить();
        НоваяСтрока.ОсновноеСредство = ВыборкаДетальныеЗаписи.ОсновноеСредство;
    КонецЦикла;
    Сообщить("Кина не будет! Электричество кончилось!");
    ////}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА

КонецПроцедуры
18 Sova789
 
25.12.14
11:54
И тут появляются ошибки, типа {Форма.Форма.Форма(139)}: Метод объекта не обнаружен (МоментВремени)
    Запрос.УстановитьПараметр("ДатаСведений", Новый Граница(СсылкаДокум.МоментВремени(), ВидГраницы.Исключая));
19 Sova789
 
25.12.14
11:54
Помогите, разобраться...