Имя: Пароль:
1C
Админ
Таблица значений - вычесть значения 1й ТЗ из 2й без обхода строк, можно ?
0 Холст
 
16.03.12
03:56
сабж
есть ТЗ1 и ТЗ2 с колонками Товар/Остаток
в ТЗ1
Товар1 остаток 10
Товар2 остаток 23

в ТЗ2
Товар1 остаток 4
Товар2 остаток 6

значения остатков ТЗ2 надо вычесть из соотв значений остатка ТЗ1

т.е. получить новую ТЗ
Товар1 остаток 6 (10 минус 4)
Товар2 остаток 17

как это сделать без обхода ТЗ ?
1 shadow_sw
 
16.03.12
04:50
как вариант - выгрузить все в третью ТЗ, остатки ТЗ2 ставить отрицательными, свернуть по товару
2 Попытка1С
 
16.03.12
06:42
У тебя вроде индексированная есть, вот юзай.

Разность / Difference

Синтаксис: Разность(ТЗ2, ИндексТекущейТЗ, ИндексТЗ2 [, флДобавлятьСтрокиТЗ2 = 1])

Параметры:
ТЗ2 - тип: ИндексированннаяТаблица. Таблица, с которой строится разность.
ИндексТекущейТЗ - тип: Строка, Число. Имя или номер индекса в текущей таблицы.
ИндексВторойТЗ - тип: Строка, Число. Имя или номер индекса в ТЗ2.
флДобавлятьСтрокиТЗ2 - тип: Число. Флаг добавления строк ТЗ2 в результат.
Описание: разность двух таблиц по ключевым полям. Результатом является таблица, в которой присутствуют строки текущей ТЗ, которых нет в ТЗ2, и строки ТЗ2, которых нет в текущей ТЗ (с учетом флДобавлятьСтрокиТЗ2). Совпадение строк определяется по индексам ИндексТекущейТЗ и ИндексТЗ2. Количество колонок в индексах должно быть одинаковым.
3 Рэйв
 
16.03.12
06:49
(2)>>Результатом является таблица, в которой присутствуют строки текущей ТЗ, которых нет в ТЗ2, и строки ТЗ2, которых нет в текущей ТЗ

Там немного другая разность имеется в виду:-)
4 Рэйв
 
16.03.12
06:51
(0)Таблицы в запрос и там вычитать.
5 Рэйв
 
16.03.12
06:51
+(4)С соединением по товару естественно
6 Kassius
 
16.03.12
06:52
(0) всегда делал как в (1), зачем придумывать велосипед.
7 Песец
 
16.03.12
07:02
(0) Штатно без обхода в семерке никак.

Я бы сделал так:
Создать тз3 с тремя колонками
1. Товар
2. Остаток1
3. Остаток2
Загрузить из тз1 в Товар, Остаток1
Загрузить из тз2 в Товар, Остаток2
Свернуть по Товар суммируя Остаток1, Остаток2

Имеем всегда под рукой Товар и (Остаток1-Остаток2)
Но если надо например загружать тз в тч документа "Товар, Сумма", то без обхода никак.
Например, создать колонку "Сумма" и обойти тз проставив разницу.
8 dk
 
16.03.12
07:29
можно было бы легко, штатно, без обхода, если в ТЗ2 отрицательные значения
т.е. потребуется 1 обход ТЗ2 для смены знака остатков
9 Ёпрст
 
16.03.12
08:11
(7) ну-ну
10 Ёпрст
 
16.03.12
08:13
(0) можно
11 Ёпрст
 
16.03.12
08:13
и без обхода строк вообще, если что
12 andrewks
 
16.03.12
08:16
(11) как с минусом без обхода решить?
13 Песец
 
16.03.12
08:19
(10) Давайте все хором: "Про-сим! Про-сим! Про-сим!" :)
14 povar
 
16.03.12
08:19
Заполнить
15 andrewks
 
16.03.12
08:19
(14) -> (12)
16 povar
 
16.03.12
08:20
(15) имеешь ввиду как минус проставить без лбхода ?
17 andrewks
 
16.03.12
08:21
(16) ага
18 povar
 
16.03.12
08:22
(17) тоже элементарно
19 andrewks
 
16.03.12
08:27
(18) временная ТЗ + ЗанчениеВСтрокуВнутр()?
20 Холст
 
16.03.12
09:21
была мысль с помощью ЗначениеВСтрокуВнутр + СтрЗаменить (вот здесь покопаться какой  фрагмент менять) + ЗначениеИзСтрокиВнутр, но что-то сомнения по поводу быстродействия этого варианта, особенно на ТЗ в 3тыс строк
21 Mikeware
 
16.03.12
09:27
заинтриговали
22 ЧеловекДуши
 
16.03.12
09:35
Бред :)
23 Попытка1С
 
16.03.12
09:41
ТЗ в 3 тыс ни о чем вообще.
24 povar
 
16.03.12
09:59
(20) это даже не таблица, а так, табличка... )
25 aka MIK
 
16.03.12
15:07
Так как поменять знак?
26 Ёпрст
 
16.03.12
15:13
(25) в строке заменить
27 aka MIK
 
16.03.12
15:35
Дык кода получится в 5 раз больше чем перебором, х-ня какая-то
28 Ёпрст
 
16.03.12
15:36
(27) ? Да ну ?
выгрзуить, стрЗаменить, Заполнить-свернуть
29 Mikeware
 
16.03.12
15:38
(28) выгрузить одну колонку? :-)
30 aka MIK
 
16.03.12
15:44
(28) И что ты стрзаменишь? Без регвыражений

Например, колонка шириной 10, числа в строках 1 и 574
31 Ёпрст
 
16.03.12
15:57
(30) ну п..ц

Выгрузить 1 колонку в СписокЗначений, далее значениВСтроку, далее СтрЗаменить("""Число""",","""Число""",-")
далее обратно в список и в Заполнить
всё
32 Ёпрст
 
16.03.12
15:58
если там были отрицательные, то действий немного больше
33 Ёпрст
 
16.03.12
15:59
заменить минус на любой знак, далее проставить минус, далее прибить знак.
34 МихаилМ
 
16.03.12
16:08
предлогаю фантастический вариант.

сам проверять сейчас не буду

использовать объект АнализДанных

думаю его можно научить делать прогноз, что Х будет -Х  

или может там есть обучение с учителем. на большой выборке обучения погрешность стремится к 0
35 МихаилМ
 
16.03.12
16:10
Ошибся - думал тема по восьмерке.
36 aka MIK
 
16.03.12
16:39
(31) Колонка таблицы списком не заполняется :) А напрямую обрабатывать значениевстрокувнутр(ТЗ) геморно из-за пробелов в представлении числа
37 Ёпрст
 
16.03.12
16:51
(36) с абрикоса упал ?

Заполнить(<?>,,,);
Синтаксис:
Заполнить(<Знач>,<НачСтрока>,<КонСтрока>,<Колонки>)
Назначение:
Заполнить соответствующие ячейки таблицы значений переданным значением.
Параметры:
<Знач> - значение одиночное или !!!!!!!список значений!!!!!!! или таблица значений.
38 Ёпрст
 
16.03.12
16:52
(36) ЗначениеВСтроку<>ЗначениеВСтрокуВнутр, читай внимательнее
39 aka MIK
 
16.03.12
17:45
(37) А ты попробуй :) Это тебе не восьмерка
(38) Без разницы
40 Ёпрст
 
16.03.12
22:58
(39) Ты взаправду, или придуряешься ?
41 Ёпрст
 
16.03.12
23:38
Наслаждайся


//*******************************************
Процедура Сформировать()
   Перем Т;
   ТЗ = СоздатьОбъект("ТаблицаЗначений");
   ТЗ.НоваяКолонка("Было");
   ТЗ.НоваяКолонка("Стало");
   
   //заполнение ТЗ
   Для к = 1 по 5 Цикл
       ТЗ.НоваяСтрока();
       ТЗ.Было = к;
   КонецЦикла;
   Для к = 1 по 5 Цикл
       ТЗ.НоваяСтрока();
       ТЗ.Было = -к;
   КонецЦикла;
   
   //собственно замена знака
   ТЗ.Выгрузить(Т,,,"Было");
   ТЗ.Заполнить(ЗначениеИзСтроки(СтрЗаменить(СтрЗаменить(СтрЗаменить(ЗначениеВСтроку(Т),"""Число"",""-","#"),"""Число"",""","""Число"",""-"),"#","""Число"",""")),,,"Стало");
   ТЗ.ВыбратьСтроку();
КонецПроцедуры
42 Креатив
 
17.03.12
09:19
Вот извращены.)))
43 aka MIK
 
19.03.12
18:46
(41) если перед ТЗ.Выгрузить(Т,,,"Было");

поставить

Т=СоздатьОбъект("СписокЗначений");

то нифига не заполнит. Такой вот глючок-с :)
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший