Имя: Пароль:
1C
1С v8
Программирование 1с 8.2 ПОМОГИТЕ ПОЖАЛУЙСТА!!!
0 MiracMC
 
23.07.12
19:01
День добрый.
Я программирую 1С уже более 5 лет... но все время работал с 7.7.
И вот пришел тот час, когда надо осваивать 8-рку...
И все бы ничего, но вот не могу я понять, как с ней подружится.

Элементарная задача, которая в 7.7 решалась за 2 секунды тут для меня стала просто камнем преткновения.

Суть задачи такова:
Надо заполнить "табличное поле" на форме (ничего более подходящего для этого не нашел) произвольными данными.
Уперся я в то, что не получается назначить значение для определенной ячейки так, как это бы выглядило в 7-рке.

Допустим есть 10*10, в котором надо что то поменять в конкретной ячейке.
В 7-рке писалось бы так

ТЗ.УстановитьЗначение(НомерСтроки,НомерКолонки,Значение)

При этом НомерСтроки и НомерКолонки могли бы быть как переменными

Для стр = 1 по 10 Цикл
Для кол = 1 по 10 Цикл
ТЗ.УстановитьЗначение(стр,кол,Значение);
КонецЦикла;
КонецЦикла;

Так и четко назначенными
Для стр = 1 по 50 Цикл
ТЗ.УстановитьЗначение(стр,"Колонка1",Значение);
ТЗ.УстановитьЗначение(стр,"Колонка2",Значение);
ТЗ.УстановитьЗначение(стр,"Колонка3",Значение);
...
КонецЦикла;

а в 8-рке как?
Я пробовал так:

Таблица = ЭлементФормы.Таблица;
Для кол = 1 По 10 Цикл
Таблица.Колонки.Добавить(кол);
КонецЦикла;
Для стр = 1 По RowCount Цикл
Таблица.ДобавитьСтроку();
Для кол = 1 По 10 Цикл
Таблица[кол] = Значение; // так же Таблица[стр][кол] = Значение;
КонецЦикла;
КонецЦикла;

Не идет(
Подскажите пожалуйста!
1 Господин ПЖ
 
23.07.12
19:04
винигрет в мозгах... курить Радченко до посинения...
2 Fragster
 
гуру
23.07.12
19:04
а тут варианта два - либо поле ввода в ячейку поместить, либо просто накалякать текст
3 Господин ПЖ
 
23.07.12
19:06
(1) + в 8-ке разделили объекты носители данных и реквизиты забинденные на них... уже сюрприз
4 Господин ПЖ
 
23.07.12
19:07
>реквизиты забинденные на них

я хотел сказать "элементы формы"
5 MiracMC
 
23.07.12
19:12
вот поясните мне, 7-мерошнику...
в 7.7 на форму добавлялась "ТаблизаЗначений". Что ей в 8-рке больше подходит?

(3) а то что разделили - я уже заметил.. но просто не могу все это в голову уложить...
(1) да читаю уже не первый день книги по этому поводу... многое осилил... но тут просто капец какой то.

заранее благодарен.
6 MiracMC
 
23.07.12
19:16
ах да... совсем забыл вот еще о чем...
на форму я добавляю "Табличное поле"... но ТипЗначения у него = "ТаблицаЗначений"...
по свойствам кого с ним работать? как с ТаблицаЗначений или как с "ТабличноеПоле" ?
7 Oleg_Kag
 
23.07.12
19:20
Как с ТаблицейЗначений работать.
8 Мимохожий Однако
 
23.07.12
19:26
Добавь в обработку реквизит с типом Таблица значений.
а на форме Табличное поле свяжи с ним.
9 MiracMC
 
23.07.12
19:29
(7)Хорошо...
Беру делаю вот так
ТЗ = ЭлементыФормы.Таблица \\ таблица - вставленно на форму ТабличноеПоле с ТипЗначения у него = "ТаблицаЗначений"

Для кол = 1 По 10 Цикл
ТЗ.Колонки.Добавить(кол);
КонецЦикла;

// это работает
// далее делаю
Для стр = 1 по 10 Цикл
ТЗ.ДобавитьСтроку();
Сообщить(ТЗ.Количество());
КонецЦикла;

а в ответ получаю "Метод объекта не обнаружен (Количество)"

8) а можно поподробнее что и куда?
10 izekia
 
23.07.12
19:29
Таблица = ЭлементФормы.Таблица;
Для кол = 1 По 10 Цикл
Таблица.Колонки.Добавить();
КонецЦикла;
Для стр = 1 По RowCount Цикл
строка = Таблица.ДобавитьСтроку();
Для кол = 1 По 10 Цикл
строка[кол] = Значение; // так же Таблица[стр][кол] = Значение;

КонецЦикла;
КонецЦикла;
11 MiracMC
 
23.07.12
19:30
(10) сейчас попробую...
12 Мимохожий Однако
 
23.07.12
19:30
(9)Что и куда "Добавь в обработку реквизит с типом Таблица значений. "
13 izekia
 
23.07.12
19:38
можно так, что более похоже, но более бредово:
Таблица = ЭлементФормы.Таблица;
Для кол = 1 По 10 Цикл
Таблица.Колонки.Добавить();
КонецЦикла;
Для стр = 1 По RowCount Цикл
Таблица.ДобавитьСтроку();
Для кол = 1 По 10 Цикл
Таблица[стр][кол] = Значение; // так же Таблица[стр][кол] = Значение;


КонецЦикла;
КонецЦикла;
14 izekia
 
23.07.12
19:39
просто чтобы было понятно что и откуда
15 MiracMC
 
23.07.12
19:39
(10)
Процедура Сформировать(Кнопка)
   // Вставить содержимое обработчика.
   Таблица = ЭлементыФормы.Таблица;
   Для кол = 1 По 10 Цикл
       Таблица.Колонки.Добавить();
   КонецЦикла;
   Для стр = 1 По 10 Цикл
       строка = Таблица.ДобавитьСтроку();
       Для кол = 1 По 10 Цикл
           строка[кол] = 1; // так же Таблица[стр][кол] = Значение;
       КонецЦИкла;
   КонецЦИкла;
КонецПроцедуры

на моменте
строка = Таблица.ДобавитьСтроку();

ошибку выдает: Метод объекта не обнаружен (ДобавитьСтроку)
16 izekia
 
23.07.12
19:39
Таблица = Таблица;
17 izekia
 
23.07.12
19:39
блин
18 izekia
 
23.07.12
19:40
как у тебя данные таблицы называются?
короче эта строка не нужна
Таблица = ЭлементыФормы.Таблица;
19 MiracMC
 
23.07.12
19:42
(18)
я заменил Таблица на Таблица1

получилось так

Таблица1 = ЭлементыФормы.Таблица;
   Для кол = 1 По 10 Цикл
       Таблица1.Колонки.Добавить();
   КонецЦикла;
   Для стр = 1 По 10 Цикл
       Таблица1.ДобавитьСтроку();
       Для кол = 1 По 10 Цикл
           Таблица1[стр][кол] = 1; // так же Таблица[стр][кол] = Значение;
       КонецЦикла;
   КонецЦикла;

но в ответ "Получение элемента по индексу для значения не определено"
20 MiracMC
 
23.07.12
19:42
+ а колонки создает без проблем..
21 Skylark
 
23.07.12
19:43
Ваше щастье, что вечер и все подразошлись по домам уже, а то бы услышали много нового о себе :-)
22 MiracMC
 
23.07.12
19:43
вот в этом же и вопрос... КАК? сделать "безликую" адресацию...
23 Skylark
 
23.07.12
19:43
В 8 для многих объектов существует такое понятие, как Коллекция.
24 izekia
 
23.07.12
19:44
убери эту строку накуй Таблица1 = ЭлементыФормы.Таблица;
25 Skylark
 
23.07.12
19:44
т.е. для обхода колонок и строк нужно использовать цикл вида

Для каждого СтрТаблицы из Таблица Цикл
26 MiracMC
 
23.07.12
19:44
(21) ну я и не сомневаюсь)
(23) ну коллекция и что? ответте пожалуйста на вопрос из (6)

(24) пробую...
27 izekia
 
23.07.12
19:45
просто вообще ее убери, не надо ничего ни на что менять
28 MiracMC
 
23.07.12
19:45
(25) а я изначально не знаю, сколько я туда значений запихивать буду... таблице еще нет...
29 Skylark
 
23.07.12
19:46
А потом как с таблицей сделаешь  все, что хочешь
ЭлементыФормы.Таблица.Обновить.... [не помню как точно этот метод называется]
30 izekia
 
23.07.12
19:46
да и в конце:
ЭлементыФормы.Таблица.СоздатьКолонки();
31 MiracMC
 
23.07.12
19:46
(27) + (24)

Метод объекта не обнаружен (ДобавитьСтроку)

просто в шоке)))))
32 izekia
 
23.07.12
19:46
(29) => (30)
33 MiracMC
 
23.07.12
19:47
(32) сек...
34 izekia
 
23.07.12
19:47
(31) посмотри что у тебя в поле данные написано у ЭлементыФормы.Таблица
35 zippygrill
 
23.07.12
19:47
у таблицы значений немножко другой метод добавлении строк. к примеру:
для стр = 1 по 10 цикл
новаяСтрока = ТвояТз.Добавить();
новаяСтрока.ТвоеПоле1 = ТвоеЗначение1;
новаяСтрока.ТвоеПоле2 = ТвоеЗначение2;
конецЦикла;
36 izekia
 
23.07.12
19:47
(33) - это потом
37 Skylark
 
23.07.12
19:48
Элемент формы "Табличное поле" и переменная типа "Таблица значений" это разные вещи. Совсем!
38 izekia
 
23.07.12
19:49
автор на (34) ответь?
39 Skylark
 
23.07.12
19:49
Изучать методом тыка такие очевидные вещи это пустая трата времени. Почитай книжки сперва.
40 MiracMC
 
23.07.12
19:50
(35) да я понимаю.. но есть вот такая задача.. как ее решить то?
(34) Сообщить(ЭлементыФормы.Таблица) возвращает "ТабличноеПоле"
(37) а чего тогда по посту (6) назначается ТипДанных?
41 MiracMC
 
23.07.12
19:50
как жеж тут все через ... ну Вы поняли через что))
42 MiracMC
 
23.07.12
19:51
(39) дык если б с книг дошло, я бы тут не постил бы...
43 zippygrill
 
23.07.12
19:51
в поле Данные твоего ТабличногоПоля должен быть твой реквизит обработки(реквизит типа ТаблицаЗначение)
44 MiracMC
 
23.07.12
19:51
я целый день пытаюсь решить банальную задачу... капец...
45 izekia
 
23.07.12
19:51
(40) открой форму, зайди в свойства табличного поля, посмотри поле Данные, напиши тут что там написано
46 izekia
 
23.07.12
19:52
в восьмерке есть разделение между элементами интерфейса и реквизитами формы хранящими эти данные
47 MiracMC
 
23.07.12
19:53
(45) = Таблица
48 izekia
 
23.07.12
19:53
соответственно в свойствах элементов формы прописаны имена реквизитов которые хранят данные этих элементов
49 izekia
 
23.07.12
19:54
в обработке напиши
Сообщить(ТипЗнч(Таблица)); и напиши что сообщит
50 kyrgyz
 
23.07.12
19:57
(0) В нашем полку прибыло. Не унывай. Я тоже так же отчеты простые стругаю.
Похожую задачу кук у тебя дали сегодня. Надо из списка выбрать доки по которым надо сделать отчет. Вот и будет занятие  сексом точнее мозг семёрочный ломать будем.
51 MiracMC
 
23.07.12
19:57
(49) = Таблица значений
52 izekia
 
23.07.12
19:58
пля
53 MiracMC
 
23.07.12
19:58
(50) +1
54 izekia
 
23.07.12
19:59
Для кол = 1 По 10 Цикл
       Таблица.Колонки.Добавить();
КонецЦикла;
Для стр = 1 По 10 Цикл
   Таблица.ДобавитьСтроку();
   Для кол = 1 По 10 Цикл
       Таблица[стр][кол] = 1; // так же Таблица[стр][кол] = Значение;
   КонецЦикла;
КонецЦикла;
ЭлементыФормы.Таблица.СоздатьКолонки();

вот это напиши в обработчике без своих включений
55 Skylark
 
23.07.12
20:00
Вот вам пример несчастные

   МояТаблица = Новый ТаблицаЗначений;
   
   Значение = "Пример";
   КоличествоКолонок = 5;
   КоличествоСтрок = 5;
   
   Для Сч = 1 По КоличествоКолонок Цикл
       МояТаблица.Колонки.Добавить("Колонка" + Строка(Сч));
   КонецЦикла;
   
   Для Сч1 = 0 По КоличествоСтрок-1 Цикл
       НовСтр = МояТаблица.Добавить();
       Для Сч = 1 По КоличествоКолонок Цикл
           НовСтр["Колонка" + Строка(Сч)] = Значение;
       КонецЦикла;
   КонецЦикла;    
   
   ЭлементыФормы.ТабличноеПоле1.Значение = МояТаблица;
   ЭлементыФормы.ТабличноеПоле1.СоздатьКолонки();
   ЭлементыФормы.ТабличноеПоле1.ОбновитьСтроки();
56 Skylark
 
23.07.12
20:00
(54) опередил :-)
57 izekia
 
23.07.12
20:00
(50) это не мозг семерочный, а, простите меня, обыкновенная тупость и нежелание учиться и развиваться
58 awa15
 
23.07.12
20:01
(6) У тебя есть 2 объекта:
1) табличное поле, которое лежит на форме
2) таблица значений, которая связана с этим табличным полем.
Посмотри, что у тебя написано в свойстве Данные табличного поля. Это имя таблицы значений. Если там написано, например, "Таблица", то в коде ты можешь просто обращаться к переменной Таблица, это таблица значений. А вот ЭлементыФормы.Таблица - это уже табличное поле.
Поэтому (54) должно сработать!
59 MiracMC
 
23.07.12
20:01
(54)  Метод объекта не обнаружен (ДобавитьСтроку)

код:


Процедура Сформировать(Кнопка)
   Для кол = 1 По 10 Цикл
           Таблица.Колонки.Добавить();
   КонецЦикла;
   Для стр = 1 По 10 Цикл
       Таблица.ДобавитьСтроку();
       Для кол = 1 По 10 Цикл
           Таблица[стр][кол] = 1; // так же Таблица[стр][кол] = Значение;
   
       КонецЦикла;
   КонецЦикла;
   ЭлементыФормы.Таблица.СоздатьКолонки();    
КонецПроцедуры


и больше ничего!
60 izekia
 
23.07.12
20:02
аааааааа
61 izekia
 
23.07.12
20:02
лол
Таблица.Добавить();
62 MiracMC
 
23.07.12
20:02
(60) и не говори...
63 izekia
 
23.07.12
20:03
сижу ржу, блин автор сам СП не читает еще и всех запутал)
64 izekia
 
23.07.12
20:04
ДобавитьСтроку - это из семерки, в восьмерке у всех коллекций метод как правило один: Добавить
65 Skylark
 
23.07.12
20:04
(55) 100% работает
нужно только на форму добавить табличное поле с именем "ТабличноеПоле1" и больше ничего не делать!!!

в процедуре выполнить код из (55) и все будет - инфа 146%
66 MiracMC
 
23.07.12
20:05
(64) ам... даже не знаю как сказать.. понимаю, что все должно работать, но теперь другая проблема...
67 MiracMC
 
23.07.12
20:05
ой... нет проблемы...
68 izekia
 
23.07.12
20:09
(65) вот это зачем так?
НовСтр["Колонка" + Строка(Сч)] = Значение;
69 MiracMC
 
23.07.12
20:10
итак...
код (59) + правка из (61) выдает при первом выполнении "Индекс находится за границами массива"... на второй раз срабатывает, но строка 1 и колонка 1 пустые

код из (55) работает на ура! СПАСИБО!!!
70 izekia
 
23.07.12
20:10
(69) а ну логично, коллекция с 0 начинается
71 kyrgyz
 
23.07.12
20:11
(67) Как сделаешь опиши что как делал чтоб я поял сходу в чем была трабла. Хотя по ходу уже догадался.
Наша беде в том что мы сначала пытаемся делать потом смотрим мануал. Пошел изучать Радченнко и делать простую базу.
72 izekia
 
23.07.12
20:11
Процедура Сформировать(Кнопка)
   Для кол = 0 По 9 Цикл
           Таблица.Колонки.Добавить();
   КонецЦикла;
   Для стр = 0 По 9 Цикл
       Таблица.Добавить();
       Для кол = 0 По Таблица.Колонки.Количество() - 1 Цикл
           Таблица[стр][кол] = 1; // так же Таблица[стр][кол] = Значение;
       КонецЦикла;
   КонецЦикла;
   ЭлементыФормы.Таблица.СоздатьКолонки();    
КонецПроцедуры
73 MiracMC
 
23.07.12
20:12
(65) вот именно по этому (69) там так и написано. обращается по имени, а не по номеру...
74 MiracMC
 
23.07.12
20:12
(72) не колонок- 1, а строк - 1
75 MiracMC
 
23.07.12
20:13
у автора из (55) именно строк -1 написано
76 izekia
 
23.07.12
20:14
(74) чтопростите?
77 MiracMC
 
23.07.12
20:14
СПАСИБО ВАМ, БРАТЦЫ!!!
Спасли мой мозг от взрыва...

ведь что то похожее я крутил-вертел изначально..
казалось бы все просто, но, блин, не в этой жизни...
78 MiracMC
 
23.07.12
20:15
(72) Для кол = 0 По Таблица.Колонки.Количество() - 1 Цикл

а суть в размере таблицы по количеству строк... у (55) Для Сч1 = 0 По КоличествоСтрок-1 Цикл
79 izekia
 
23.07.12
20:15
(78) у меня другой вариант, он работает и попробуй понять его - пригодиться, а не пытаться меня поправить сейчас
80 MiracMC
 
23.07.12
20:16
izekia

все равно ОГРОМНОЕ СПАСИБО!

(79) попробую и его... спс...
81 MiracMC
 
23.07.12
20:17
(79) да... все работает...
завтра засяду за "понимание" того, что и как тут..
СПАСИБО!
82 Asmody
 
23.07.12
20:19
и всего-то 80 постов…
83 Asmody
 
23.07.12
20:20
завтра переходим к управляемым формам!
84 Skylark
 
23.07.12
20:20
В былые времена посту к семнадцатому все решали...
85 MiracMC
 
23.07.12
20:22
ну сори конечно...
но блин... мне не так туго давалась 1с 7.7, как это чудо... все ж блин по другому...
по сути переучиваться надо(

не обессудьте... сори...
86 Skylark
 
23.07.12
20:24
С сайтом Миста веселей -
Восьмерку освоим в два раза быстрей!

:-))
87 kyrgyz
 
23.07.12
20:25
(85) Не грусти и не робей. Зато мотивация освоить 1с82 у тебя повысилась в разы?
88 Asmody
 
23.07.12
20:32
погоди, вот до запросов дело дойдёт… уууу!..
89 kyrgyz
 
24.07.12
17:49
Короче попытался. Сздал обработку кинул реквизит таблица значений и пытаюсь как то второй объек присабачить к фломе опка ступор. ни хрена не получается. ужас!
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.