Имя: Пароль:
1C
1С v8
Проблема со строками тч
0 fdgd98
 
17.12.15
10:59
Есть документ , у него есть ТЧ, в ТЧ есть колонка "инвентарный номер" на эту колонку повесил свое событие (обработкавыбора), суть события такова: нажимаем на поле инвентарный номер, выходит список инвентарных номеров, при выборе которого, делается запрос в регистр накопления и в регистр сведений, оттуда с помощью запроса мы достаем серийный номер и номенклатуру изделия и вставляем в ТЧ . Данные в ТЧ вставляются, НО если добавить следующую строку, то предыдущая строка исчезает и вставляется ныняшняя.. Как обойти данную проблему?


&НаКлиенте
Процедура ТЧНакладнаяИнвентарныйНомерОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
    результат =     ПоискСерийныхИНоменклатур(ВыбранноеЗначение);
    если результат тогда
        СтандартнаяОбработка = ложь;
    иначе
        СтандартнаяОбработка = истина;    
    конецесли;    
КонецПроцедуры

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


КонецФункции
1 Builder
 
17.12.15
11:07
функция поиска - это ппц...
Объект.ТЧНакладная.Загрузить(ТЗ) - смотрим внимательно на описание функции.
2 fdgd98
 
17.12.15
11:31
(1) предложите варианты более менее годного кода, я не против.
какие альтернативы есть?
3 Builder
 
17.12.15
11:36
(2) Что еще предложить?
Альтернатива - пойти на курсы программистов 1С и научиться самому.
4 фобка
 
17.12.15
11:41
(2) при изменении просто проставь и все. Текущиеданные.серийныйномер = ...
Не надо загружать тч из тз
5 фобка
 
17.12.15
11:42
Ты в (1) просто перезаливаешь тч
6 aleks_default
 
17.12.15
11:42
(0)Налицо полное непонимание базовых основ программирования. Это все равно что в одном слове из 10 букв сделать 5 ошибок. Короче кол тебе ТС.
7 Mort
 
17.12.15
11:53
Накинулись, иксперты...

(0)
1. Сделай функцию НаСервереБезКонтекста, которая ищет нужные значения и возвращает их в структуре.
2. В событии ПриИзменении (не обработка выбора) вызывай эту функцию и заполняй значения в текущих данных таблицы.
8 fdgd98
 
17.12.15
17:09
(7) можно подробнее
Ошибка? Это не ошибка, это системная функция.