Имя: Пароль:
1C
1С v8
Копирование значений табличной части документа
0 Aleksey1989
 
29.03.12
10:45
Что-то не получается. Мне надо скопировать значения одной колонки табличной части в другую. Вот мой код:

ДокументОбъектЛаб = ЭтаФорма.ДокументУстановкиЦен.ПолучитьОбъект();

Мас = Новый массив(3000);
i = 1;

Для каждого ЭлементТаблЧасти из ДокументОбъектЛаб.Товары цикл

 Если ЭлементТаблЧасти.ВидЦены = ЭтаФорма.ВидыЦенИсточник тогда
  Мас[i] = ЭлементТаблЧасти.Цена;
 КонецЕсли;

 Если ЭлементТаблЧасти.ВидЦены = ЭтаФорма.ВидыЦенПриемник тогда
  ЭлементТаблЧасти.Цена = Мас[i];
 КонецЕсли;

 i = i+1;
 
КонецЦикла;

ДокументОбъектЛаб.Записать();


Как я понял, то надо как-то настроить разрешения на запись в документ.
1 golden-pack
 
29.03.12
10:47
(0) Это шутка ? Что за код
2 Рэйв
 
29.03.12
10:49
(0) Вряд ли программирование это твое. Позовите специалиста.
3 Рэйв
 
29.03.12
10:49
...А вроде 1989.
4 szhukov
 
29.03.12
10:51
(0)Бред какой-то.
Даже если предположить, что этот код должен работать, то что ты хочешь получить не понятно:
пытаешься запомнить цену и потом записать туда же, а смысл?
Как задача звучит?
Перенести цену из одной табличной части в другую? Или это внути одной табличной части, но с разными колонками?
5 aspirant
 
29.03.12
10:52
ЕслиТоИначеВсё
6 szhukov
 
29.03.12
10:52
+(4) Если между ТЧ, то по какому принципу перенос, номер строки совпадате или номенклатруа в строке ТЧ совпадает?
7 Aleksey1989
 
29.03.12
10:54
Не такой уж он и бред: для каждого вида цены устанавливается своя цена!
8 Ненавижу 1С
 
гуру
29.03.12
10:55
Мас = Новый массив(3000);

а почему 3000? а не 100500?
9 golden-pack
 
29.03.12
10:56
(7) разрыв мозга твой код.
ЭтаФорма.ВидыЦенИсточник <> ЭтаФорма.ВидыЦенПриемник
10 szhukov
 
29.03.12
10:57
(9) Разрыв мозга это вроде это:

Мас[i] = ЭлементТаблЧасти.Цена;
...
ЭлементТаблЧасти.Цена = Мас[i];

:)
11 Aleksey1989
 
29.03.12
10:57
12 Aleksey1989
 
29.03.12
10:58
(8) Потому что в документе приблизительно около 2000 ед номенклатуры, 3000 - написал просто так.
13 szhukov
 
29.03.12
11:08
Так ты хочешь все-таки поменять в объекте или на форме?
И что с чем менять собственно?
14 Aleksey1989
 
29.03.12
11:20
В объекте. Не менять, а сделать так, как показано на скриншоте: цены омс д.б. равны ценам Платные. Этот скрин из демо-базы, в рабочей базе - Платные заполнены, а ОМС - нет. Вот и хочу написать внешнюю обработку.
15 Aleksey1989
 
29.03.12
11:37
Все, нашел свою ошибку: надо было использовать не массив, а переменную, ну или массив с небольшими доработками. Проблема заключалась в том, что получалось так, что я присваивал неопределенное значение, т.е. 1 итерация: в мас[1] = 530, видЦены = Платные, второе условие, естественно не выполняется, 2-я итерация - теперь уже видЦены = ОМС, НО! я Цене присваиваю мас[2], который неопределен.

П.с. не такой уж я и плохой программист, как оказалось :)
16 szhukov
 
29.03.12
11:38
//УТ перед глазами нет, смысл думаю поймешь
//Нужно найти ту строку которую хочешь поменять
//
Док = ...ПолучитьОбъект(); //изменяемый документ

ПараметрыОтбора = Новый Структура;

Для каждого СтрокаТЧ из Док.Товары Цикл

ПараметрыОтбора.Вставить("Номенклатура", СтрокаТЧ.Номенклатура);
ПараметрыОтбора.Вставить("ТипЦен", ВидыЦенПриемник);

СписокСтрок =  Док.Товары.НайтиСтроки(ПараметрыОтбора);

//И далее по найденным строкам меняем цены

КонецЦикла
17 szhukov
 
29.03.12
11:41
(15) в твоем коде этого не видно. Там не понятное что-то.

Почему-то мне кажется, что ты меняешь на форме, а не в объекте... :)
18 Reset
 
29.03.12
11:47
(14)(15) "не плохой программист", копирование значений из одной колонки в другую делается так:
Товары.ЗагрузитьКолонку(ТЧ.ВыгрузитьКолонку("ИмяОткуда"),"ИмяКуда");
19 Aleksey1989
 
29.03.12
11:52
(18) Этот способ не годится, т.к. цены для платных и ОМС находятся в одной колонке!
20 Reset
 
29.03.12
11:56
(19) в (0) написано
"Мне надо скопировать значения одной колонки табличной части в другую"
21 Aleksey1989
 
29.03.12
12:22
(20) Согласен, мой косяк, просто создавал тему, посмотрев только на форму в режиме 1С: Предприятие, что из себя представляет табличная часть даже не посмотрел.
Закон Брукера: Даже маленькая практика стоит большой теории.