Имя: Пароль:
1C
 
Как перебрать и изменить табличную часть документа
0 gabd_marat
 
27.07.17
17:09
Есть документ. В нем табличная часть. Есть колонка номенклатура, кол-во, остаток. остаток заполняется программно (кол-во остаток в регистрах - кол-во док) при активации или при изменении строки. Если в табл части 2 номенклатуры при изменении в одной не отображаются актуальный остаток в другой строке. Как решить данную проблему?
1 Ёпрст
 
27.07.17
17:13
заполняйте остаток в ПриИзмененииДанных
2 gabd_marat
 
27.07.17
17:23
Не умею пользоваться справочником 1с. Можете скинуть описание? Это событие или метод?
3 Мимохожий Однако
 
27.07.17
17:24
(2) Браво.
4 1sanekmaloi1
 
27.07.17
17:25
(1)Кидай ему сразу код, пользоваться головой похоже тоже не умеет.
5 lodger
 
27.07.17
17:26
(3) это тот самый случай когда СП можно распечатать и продать...
6 gabd_marat
 
27.07.17
17:29
Как я понял нужно подключать обработчик изменения данных. ПодключитьОбработчикИзмененияДанных("СправочникОбъект.Ссылка", "ПриИзмененииСсылки", Ложь);
7 gabd_marat
 
27.07.17
17:30
(5) Распечатай посмотрю, может куплю
8 gabd_marat
 
27.07.17
17:38
Почему не отображается событие формы приизмененииданных?
9 gabd_marat
 
27.07.17
17:43
(5) Правильно ли я понимаю, ПриИзмененииДанных это событие формы и оно должно отображаться в стандартных событий форм?
10 gabd_marat
 
27.07.17
17:50
1sanekmaloi1, Почему не отображается событие формы приизмененииданных?Правильно ли я понимаю, ПриИзмененииДанных это событие формы и оно должно отображаться в стандартных событий форм?
11 Ёпрст
 
27.07.17
18:02
(10) Смотря какая форма, ОФ/УФ
12 Ёпрст
 
27.07.17
18:03
и это, если че, событтие табличного поля, а не формы
13 h-sp
 
27.07.17
18:03
(10) всё-таки ПриПолученииДанных
14 Buster007
 
27.07.17
18:12
(0) а проблема в чем?
в 2 строках одна и та же номенклатура? Или тебе надо при изменении любой строки пересчитывать все остатки в ТЧ?
15 Базис
 
naïve
27.07.17
18:31
Вы работаете программистом?
С какого?
16 gabd_marat
 
28.07.17
13:00
(14) Случай когда в 2 строках одна и таже номенклатура , пересчитывается остаток только активной строки номенклатуры, а в другой строке номенклатуры старый остаток.
17 bodri
 
28.07.17
13:08
(0) а как остаток заполняется?
18 gabd_marat
 
28.07.17
13:09
(14) Или тебе надо при изменении любой строки пересчитывать все остатки в ТЧ?
Необходимо при изменении строки пересчитывались остатки другой строки с той же номенклатурой.
19 gabd_marat
 
28.07.17
13:11
(17) Остаток  = ЗапросОстаток - кол-во док(количество перемещения номенкл).
20 gabd_marat
 
28.07.17
13:12
(17)

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

&НаКлиенте
Процедура ТоварыНоменклатураПриИзменении(Элемент)
    Стр = Элементы.Товары.ТекущиеДанные;
    Номенклатура = Стр.Номенклатура;
    Количество = ОстатокНоменклатуры(Номенклатура);
    Стр.Остаток = Количество;
    //ОбновитьОтображениеДанных();
КонецПроцедуры
21 bodri
 
28.07.17
13:16
(20)
Правильно работает, как написано так и работает.
Добавь хотя бы поиск по таблице, чтоб найти такую же номенклатуру и туда тоже результат пихай.
22 gabd_marat
 
28.07.17
14:13
(20) Работает правильно, мне нужно (18). Делал через ЗначениеВреквизитформы зависает, так как есть процедура при активации строки. Как решить проблему?
23 gabd_marat
 
28.07.17
14:24
При такой реализации зависает
&НаСервере
Функция ОстатокНоменклатуры(Номенклатура)
    мОбъект = РеквизитФормыВЗначение("Объект");
    Результат = МТ_ОперативныйУчетВСкладах.МТ_ПолучитьОстатокНоменклатуры(Номенклатура, мОбъект.СкладОтправитель, мОбъект.Организация, мОбъект);
    мТаблица = РеквизитФормыВЗначение("Объект.Товары");
    ПраметрыОтбора = Новый Структура;
    ПраметрыОтбора.Вставить("Номенклатура", Номенклатура);
    СтрокиОтбора = мТаблица.НайтиСтроки(ПраметрыОтбора);
    КолДок = 0;
    Для Каждого Строка Из СтрокиОтбора Цикл
        КолДок = КолДок + Строка.Количество;
    КонецЦикла;
    Пока Результат.Следующий() Цикл
        Элемент = Результат.КоличествоОстаток - КолДок;
    КонецЦикла;
    
    Для Каждого Строка Из СтрокиОтбора Цикл
        Строка.Остаток = Элемент;
    КонецЦикла;
    ЗначениеВРеквизитФормы(мТаблица,"Объект.Товары");
    
    Возврат Элемент;
КонецФункции

&НаКлиенте
Процедура ТоварыПриАктивизацииСтроки(Элемент)
    Стр = Элементы.Товары.ТекущиеДанные;
    Номенклатура = Стр.Номенклатура;
    Количество = ОстатокНоменклатуры(Номенклатура);
    Стр.Остаток = Количество;
    Для Каждого Строка Из Объект.Товары Цикл
        Строка.Количество = Элемент;
    КонецЦикла;
    //ЗначениеВРеквизитФормы(мТаблица,"Объект.Товары");

    //ОбновитьОтображениеДанных();
КонецПроцедуры
24 gabd_marat
 
28.07.17
15:40
(21) Зависает в бесконечный цикл, скорее всего из-за реквизитаформывзначение и приактивациистроки происходит бесконечный цикл.
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.