8.х Доп. внешние обработки по заполнению таб. частей

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Anjey, 6 апр 2010.

  1. TopicStarter Overlay
    Anjey
    Offline

    Anjey

    Регистрация:
    31 мар 2010
    Сообщения:
    3
    Симпатии:
    0
    Баллы:
    1
    Код:
    Процедура Инициализировать(Объект,ИмяТабличнойЧасти,ТабличноеПолеОбъекта) Экспорт
    
    ТЧТовары = Объект;
    
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("Ссылка",Объект.Ссылка);
    Запрос.УстановитьПараметр("ВестиУчетПоСериям",Истина);
    Запрос.УстановитьПараметр("ВестиПартионныйУчетПоСериям",Истина);
    Запрос.Текст = 
    "ВЫБРАТЬ
    |	ЕСТЬNULL(ОприходованиеТоваровТовары.СерияНоменклатуры, """") КАК СерияНоменклатуры,
    |	ОприходованиеТоваровТовары.Номенклатура,
    |	ОприходованиеТоваровТовары.НомерСтроки,
    |	ОприходованиеТоваровТовары.Цена,
    |	ОприходованиеТоваровТовары.Количество
    |ИЗ
    |	Документ.ОприходованиеТоваров.Товары КАК ОприходованиеТоваровТовары
    |ГДЕ
    |	ОприходованиеТоваровТовары.Ссылка = &Ссылка
    |	И ОприходованиеТоваровТовары.Номенклатура.ВестиПартионныйУчетПоСериям = &ВестиПартионныйУчетПоСериям 
    |	И ОприходованиеТоваровТовары.Номенклатура.ВестиУчетПоСериям = &ВестиУчетПоСериям";
    
    Результат = Запрос.Выполнить().Выбрать();
    Пока Результат.Следующий() Цикл
    
    Если НЕ ЗначениеЗаполнено(Результат.СерияНоменклатуры) Тогда
    //создадим новую серию	
    
    НовыйЭлемент = Справочники.СерииНоменклатуры.СоздатьЭлемент();
    НовыйЭлемент.Владелец = Результат.Номенклатура;
    НовыйЭлемент.Наименование = "ОТиУ №"+Объект.Номер+" от "+ Формат(Объект.Дата,"ДФ=dd.MM.yyyy")+ " Цена:" + Результат.Цена + " грн."+"к."+Результат.Количество;
    Если Объект.Товары.СерияНоменклатуры.ОтражатьВУправленческомУчете Тогда
    НовыйЭлемент.Наименование = НовыйЭлемент.Наименование+"; у/у";
    
    КонецЕсли;
    
    Если Объект.Товары.СерияНоменклатуры.ОтражатьВБухгалтерскомУчете Тогда
    НовыйЭлемент.Наименование = НовыйЭлемент.Наименование+"; б/у";
    
    КонецЕсли;
    
    НовыйЭлемент.Записать();
    
    
    ТЧТовары.Товары[Результат.НомерСтроки - 1].СерияНоменклатуры = НовыйЭлемент.Ссылка;
    
    КонецЕсли;
    
    КонецЦикла;
    
    
    КонецПроцедуры
    
  2. x_under
    Offline

    x_under Модераторы Команда форума Модератор

    Регистрация:
    25 апр 2007
    Сообщения:
    2.576
    Симпатии:
    13
    Баллы:
    29
    Ну вытащите вначале во внешнюю обработку и пройдите ее отладчиком. Вы вообще попадаете в цикл по результату?
  3. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Куча лишних условий у Вас.
    Код:
    Процедура Инициализировать(Объект,ИмяТабличнойЧасти,ТабличноеПолеОбъекта) Экспорт
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("Ссылка", Объект.Ссылка) // Это будет работать ТОЛЬКО для записанного документа!!!
    Запрос.Текст = 
    "ВЫБРАТЬ
    |    ОприходованиеТоваровТовары.СерияНоменклатуры КАК СерияНоменклатуры,
    |    ОприходованиеТоваровТовары.Номенклатура,
    |    ОприходованиеТоваровТовары.НомерСтроки,
    |    ОприходованиеТоваровТовары.Цена,
    |    ОприходованиеТоваровТовары.Количество
    |ИЗ
    |    Документ.ОприходованиеТоваров.Товары КАК ОприходованиеТоваровТовары
    |ГДЕ
    |    ОприходованиеТоваровТовары.Ссылка = &Ссылка
    |    И ОприходованиеТоваровТовары.Номенклатура.ВестиПартионныйУчетПоСериям
    |    И ОприходованиеТоваровТовары.Номенклатура.ВестиУчетПоСериям";
    
    Результат = Запрос.Выполнить().Выбрать();
    Пока Результат.Следующий() Цикл
    
    Если Результат.СерияНоменклатуры.Пустая() Тогда
    НовыйЭлемент = Справочники.СерииНоменклатуры.СоздатьЭлемент();
    НовыйЭлемент.Владелец = Результат.Номенклатура;
    НовыйЭлемент.Наименование = "ОТиУ №" + Объект.Номер + " от " +  Формат(Объект.Дата,"ДФ=dd.MM.yyyy") + " Цена:" + Результат.Цена + " грн."  + "к." + Результат.Количество;
    
    Если Объект.Товары.СерияНоменклатуры.ОтражатьВУправленческомУчете Тогда            
    // Это что за условие? Откуда у табличной части такой реквизит?
    НовыйЭлемент.Наименование = НовыйЭлемент.Наименование+"; у/у";   
    КонецЕсли;
    
    Если Объект.Товары.СерияНоменклатуры.ОтражатьВБухгалтерскомУчете Тогда 
    // Это что за условие? Откуда у табличной части такой реквизит?
    НовыйЭлемент.Наименование = НовыйЭлемент.Наименование+"; б/у";
    КонецЕсли;
    НовыйЭлемент.Записать();
    
    Объект.Товары[Результат.НомерСтроки - 1].СерияНоменклатуры = НовыйЭлемент.Ссылка;
    КонецЕсли;
    КонецЦикла;
    КонецПроцедуры
    
    

Поделиться этой страницей