Имя: Пароль:
1C
1С v8
Таблица Значений
0 sora_tm
 
13.03.12
14:01
Добры день!
Не могу понять как скопировать из одной ячейки в строке в другую.

Есть ТЗ Тиражи. В ней НЕ постоянное количество колонок.
Например:  Тираж | Реализация | НовТираж

При нажатии на кнопку на форме, надо скопировать значение из Тираж в НовТираж
Пытаюсь делать так. Хочу получить текущий номер колонки, вычесть из него 2, получить колонку Тираж, и присвоить.

Для каждого стр из Тиражи Цикл
СтрПредИндекс = Тиражи.Индекс(стр.тираж) - 2;
СтрПредТираж = стр[СтрПредИндекс];
стр.НовТираж = СтрПредТираж;
КонецЦикла;

В СтрПредИндекс всегда попадает "Неопределенно"
Что не так? Если просто делаю

стр.НовТираж = Стр[0];

то все ок.
1 Reset
 
13.03.12
14:04
Ничего не понятно.
Может, нужно ТЗ.ЗагрузитьКолонку(ТЗ.ВыгрузитьКолонку("ИмяКолонкиОткуда"),"ИмяКолонкиКуда") ?
2 НЕА123
 
13.03.12
14:04
(0)
колонки со строками не путаешь?
3 sora_tm
 
13.03.12
14:07
(2) Возможно, мало с ними работал. Если я пишу

Стр.НовТираж=Стр[0]

то, стр[0] это номер колонки?

Если да, то как в тз получить номер колонки, без указания имени, но всегда эта колонка будет сдвинута влево на 2.
4 sora_tm
 
13.03.12
14:08
Будет сдвинута влево от Стр.НовТираж
5 sora_tm
 
13.03.12
14:09
(1) Хочу перебрать строки и скопировать значение из одной колонки в этой строке в другую...
6 Reset
 
13.03.12
14:09
А индекс той, которая не сдвинута, тебе известен? Или имя?
7 Reset
 
13.03.12
14:10
(5) Ты хочешь именно перебрать?
8 sora_tm
 
13.03.12
14:10
(6) Которая не сдвинута, имя "НовТираж"
9 НЕА123
 
13.03.12
14:10
где ДенисЧ? тут он может помочь.
10 sora_tm
 
13.03.12
14:10
(7) Да
11 Reset
 
13.03.12
14:11
(8) Т.е. ты хочешь все значения из колонки с именем "НовТираж" скопировать в колонку, которая находится через одну влево о нее?
12 sora_tm
 
13.03.12
14:11
Я правильно понял, что в 1с

кортеж - строка,
атрибут - столбец - колонка?
13 Reset
 
13.03.12
14:11
(10) я думаю нет
14 sora_tm
 
13.03.12
14:14
(8) Хочу брать значения из сдвинутой и немного преобразовывая. Но пока хотя бы скопировать.

ТЗ "Тиражи"

Колонка с постоянным именем "НовТираж"

В ячейки в этой колонки хочу скопировать значения из колонки сдвинутой влево от нее.
15 Reset
 
13.03.12
14:14
(10) Хорошо, если уперся именно перебирать, то
Для каждого строка из ТЗ цикл
Строка.КолонкаКуда=Строка.КолонкаОткуда;
КонецЦикла;
16 Web00001
 
13.03.12
14:16
Обращение по индексу должно быть так: ТЗ.Колонки[индекс]
17 Reset
 
13.03.12
14:17
(14)
ИндексСдвинутойВлево=ТЗ.Колонки.Индекс(ТЗ.Колонки.НовТираж)-2;
Если ИндексСдвинутойВлево<0 тогда
// косяк
иначе
Для каждого строкаТЗ из ТЗ цикл
 строкаТЗ.НовТираж=строкаТЗ[ИндексСдвинутойВлево];
КонецЦикла;
КонецЕсли;
18 sora_tm
 
13.03.12
14:19
(17) Спасибо, я пропустил "Колонки.Индекс", не понял по СП. Спасибо большое :)
19 hhhh
 
13.03.12
14:19
(17) можно так

ТЗ.ЗагрузитьКолонку(ТЗ.ВыгрузитьКолонку("Тираж"), "НовыйТираж");
20 Reset
 
13.03.12
14:19
(14) Если только сокпировать
тогда

ИндексСдвинутойВлево=ТЗ.Колонки.Индекс(ТЗ.Колонки.НовТираж)-2;
Если ИндексСдвинутойВлево<0 тогда
// косяк

иначе
ТЗ.ЗагрузитьКолонку(ТЗ.ВыгрузитьКолонку(ИндексСдвинутойВлево),"НовТираж")
КонецЕсли;
21 Reset
 
13.03.12
14:20
(19) --> (1)
22 sora_tm
 
13.03.12
14:31
(17) СтрПредИндекс=Тиражи.Колонки.Индекс(Тиражи.Колонки.Тираж);

Все равно попадает в переменную "Неопределено", что за беда...
23 Web00001
 
13.03.12
14:40
Посмотреть что там с колонками индексами и названиями кроме отладчика можно так:

   Для каждого КолонкаТЗ Из ТЗ.Колонки Цикл
       Сообщить("Колонка с именем "+КолонкаТЗ.Имя+" имеет индекс "+ТЗ.Колонки.Индекс(КолонкаТЗ));
   КонецЦикла;
24 rrunover
 
13.03.12
14:40
(22)
СтрПредИндекс=Тиражи.Колонки.Индекс(>>>>Тиражи.Колонки.Тираж<<<<<);

тут как бэ цифирь должна стоять... Индекс
25 sora_tm
 
13.03.12
14:41
(24) Я так понял Метод Индекс, как раз и возвращает индекс колонки.
26 Reset
 
13.03.12
14:41
(22) Оно никак не может неопределено попадать.

(24) Профи подтянулись...
Читай:
Индекс (IndexOf)
Синтаксис:

Индекс(<Колонка>)
Параметры:

<Колонка> (обязательный)

Тип: КолонкаТаблицыЗначений. Колонка таблицы значений, для которой нужно определить индекс.
27 Reset
 
13.03.12
14:42
+(22) Или колонка Тираж есть, тогда вернется индекс, или ее нет, тогда ошибка времени выполнения произойдет
28 rrunover
 
13.03.12
14:43
(26) точно же... миль пардон
29 sora_tm
 
13.03.12
14:44
(23) Колонка с именем Тираж имеет индекс 13...
30 Reset
 
13.03.12
14:45
+(22) И откуда "Тираж", ты же глаголил до этого, что она тебе неизвестна (положение ее), а известно "НовТираж"?
Кинь текст полностью

Если тебе известны ОБА имени, используй (1) и не мучай мозги (мои)
31 sora_tm
 
13.03.12
14:50
Пробую так

колонкаТЗ = Тиражи.Колонки.Тираж;
СтрПредИндекс=Тиражи.Колонки.Индекс(колонкаТЗ);
Сообщить(СтрПредИндекс);

В Предприятии появляется 13, но в переменную в отладчике пишет, "Неопределено".

(30) Извините за сумятицу. Просто я для примера назвал ее НовТираж. На самом деле у меня появляются колонки типа

Тираж_2123434    Возврат_2334232  Тираж

И первая колонка всегда с разным именем, и ее надо копировать в Тираж.

Текст какой именно?
32 Jaffar
 
13.03.12
14:54
(31) ты понимаешь, что ты пишешь?
1) колонкаТЗ = Тиражи.Колонки.Тираж;
ты загнал в переменную колонкаТЗ ЗНАЧЕНИЕ колонки Тираж текущей строки ТЗ. А если она не выбрана?
2) СтрПредИндекс=Тиражи.Колонки.Индекс(колонкаТЗ);
в индексе должно быть ИМЯ колонки, а не ее значение.
33 sora_tm
 
13.03.12
14:58
(32) хорошо, делаю так

СтрПредИндекс=Тиражи.Колонки.Индекс(Тиражи.Колонки.Тираж);
Сообщить(СтрПредИндекс);

Все равно в Предприятии выводится 13, а в переменную СтрПредИндекс попадает, смотрю в отладчике, "Неопределено"
34 Reset
 
13.03.12
14:58
(32) В (26) есть цитата по поводу п2.

по п1 - в колонкаТЗ он помещает колонку "Тираж" таблицы значений Тиражи, не вижу проблемы.
35 Reset
 
13.03.12
14:59
(33) "Все равно в Предприятии выводится 13, а в переменную СтрПредИндекс попадает, смотрю в отладчике, "Неопределено"
"
Не верю
36 rrunover
 
13.03.12
15:00
(32)
1) пофиг, что не выбрана. Главное, чтобы в ТЗ Тиражи колонка такая была.
2) смотри (26)

(33) не могет там быть "Неопределено", там -1, если не нашел...
Тираж - точно ТЗ, а не ТЧ?
37 rrunover
 
13.03.12
15:01
хотя там без разницы... всё равно должно работать.
38 sora_tm
 
13.03.12
15:01
(36)
Это элемент формы, с типом значения "ТаблицаЗначений"
39 Reset
 
13.03.12
15:02
(36) Если ТЧ, у него бы орало на отсутвие свойства Колонки
40 Reset
 
13.03.12
15:03
(38) Ты, я надеюсь, работаешь не с элементов формы, а с самой таблицей?
41 Jaffar
 
13.03.12
15:04
(34) он хочет индекс получить, а не колонку.
42 Reset
 
13.03.12
15:04
+(40) сама таблица - это то, что написано у тебя в свойстве "данные" твоего элемента формы.
43 Reset
 
13.03.12
15:05
(41) и?
44 Jaffar
 
13.03.12
15:05
(43) зачем колонку копировать куда-то, а потом из этого "куда-то" получать индекс?
45 Reset
 
13.03.12
15:07
(44) Что значит "копировать"? Ну создал он временную переменную, не вижу криминала абсолютно. Может, ему так кажется читабельней.
46 Jaffar
 
13.03.12
15:07
(33) "Все равно в Предприятии выводится 13, а в переменную СтрПредИндекс попадает, смотрю в отладчике, "Неопределено""
кхе, а в отладчике смотришь ДО выполнения этой строки, или после? :-)
47 Jaffar
 
13.03.12
15:08
(45) "может" - это из разряда телепатии.
у него нет алгоритма в мозгах - рано перекладывать его на методы объектов конфигурации.
48 Reset
 
13.03.12
15:10
(47)
Боюсь, не о разном ли говорим.
(31)=(33) ,так? За исключением промежуточной переменной, которая ни на что не влияет?
49 Reset
 
13.03.12
15:12
ТСу: Ответь на (40),(46) ;)
50 sora_tm
 
13.03.12
15:13
Процедура КоманднаяПанель2СкопироватьПред(Кнопка)

   СтрПредИндекс=Тиражи.Колонки.Индекс(Тиражи.Колонки.Тираж)-2;
   Если СтрПредИндекс<0 тогда
    Сообщить(СтрПредИндекс);
         Для каждого стр из Тиражи Цикл
           СтрПредТираж = стр[СтрПредИндекс];
       Сообщить(СтрПредТираж);
         стр.Тираж = СтрПредТираж;
       КонецЦикла;
   КонецЕсли;
КонецПроцедуры;

Извините, что всех замучал такой ерундой, заработало, спасибо всем кто помогал, особенно Reset :)
51 Reset
 
13.03.12
15:15
(50)
Если СтрПредИндекс>=0 тогда

Не? :)
52 sora_tm
 
13.03.12
15:15
(40) Да, с самой таблицей
(36) Да, не так смотрел
(51) Спасибо еще раз, переделал :)
53 Reset
 
13.03.12
15:16
Пойду поработаю тогда ;D