Имя: Пароль:
1C
1С v8
Дублировать колонки табличной части
,
0 ac13
 
01.08.18
11:25
Есть табличная часть "Таблица". В ней колонка - "Номенклатура".
Если выбрать один склад, то в таблицу добавляется колонка "Остаток" с остатками по товарам для этого склада. Если выбрать три склада, то в таблицу должно добавиться три колонки Остатков для каждого склада.
Как такое реализовывается?
1 Sergei_vasil
 
01.08.18
11:25
(0) Кодом написанным в конфигураторе.
2 Михаил Козлов
 
01.08.18
11:26
Это не колонки ТЧ дублируются, а колонки табличного поля.
3 ac13
 
01.08.18
11:27
(1) ну это понятно.
Может кто знает примеры типовых объектов где можно наглядно посмотреть?
4 Малыш Джон
 
01.08.18
11:27
(0) в табличную часть колонки ты не добавишь

а в табличное поле - именно так и реализуется, как ты описал
5 ac13
 
01.08.18
11:28
(4) а имена этих колонок? типа Остаток1, Остаток2 и т.д.?
6 ac13
 
01.08.18
11:29
да, у меня не табличная часть, а как раз табличное поле на форме обработки
7 Малыш Джон
 
01.08.18
11:30
(5)что "имена"? тебе подсказать, как сформировать строку из слова "Остаток" и номера добавляемой колонки?
8 Sergei_vasil
 
01.08.18
11:30
(6) А в чем вопрос? Тебе готовый код?
9 AneJIbcuH
 
01.08.18
11:32
(0) ОФ или УФ ?
10 ac13
 
01.08.18
11:34
(8) нет, с кодом сам разберусь
хочу понять алгоритм
вот есть у меня Склад1, Склад2 и Склад3
для каждого из складов добавил колонки Остаток1, Остаток2 и Остаток3.
и потом просто если Склад1, то заполнять остатки в колонку Остаток1, если Склад2, то остатки в колонку Остаток2 и всё?
11 ac13
 
01.08.18
11:34
(9) оф
12 ac13
 
01.08.18
11:37
я думал всё это можно сделать "одной строкой" быстро и красиво
13 Sergei_vasil
 
01.08.18
11:40
(12) Кнопка "Сделать все!" тебе в помощь.
14 ac13
 
02.08.18
13:54
Добавил колонки, когда добавляю новые строки, значения колонок не заполняются. Чего не хватает?


НомерКолонки  = 0;

Для каждого ЗначениеСклад из СписокСкладов Цикл
     НомерКолонки = НомерКолонки + 1;
     НоваяКолонка = ЭлементыФормы.Таблица.Колонки.Добавить("ОстатокСклад"+Строка(НомерКолонки), "Остаток");
     НоваяКолонка.УстановитьЭлементУправления(Тип("ПолеВвода"));
     НоваяКолонка.Данные = "ОстатокСклад"+Строка(НомерКолонки);
     НоваяКолонка.ЭлементУправления.ТипЗначения = Новый ОписаниеТипов("Число");
КонецЦикла;
15 hhhh
 
02.08.18
14:01
(14) колонки ты добавил для отображения данных. А сами данные добавить забыл. Поэтому пусто там.
16 ac13
 
02.08.18
14:05
Данные добавляю так:

НомерСклада = 0;

Для каждого ЗначениеСклад из СписокСкладов Цикл
     НомерСклада = НомерСклада + 1;
     НоваяСтрока = ТаблицаюДобавить();
     НоваяСтрока["ОстатокСклад"+Строка(НомерСклада)] = 1;
КонецЦикла;

На что мне выдает, что поле ОстатокСклад1 не обнаружено
17 hhhh
 
02.08.18
14:10
(16) ну значит ты забыл в Таблица добавить эту колонку. В ЭлементыФормы добавил, а в саму таблицу нифига.

поэтому читай (4)

"в табличную часть колонки ты не добавишь"
18 ac13
 
02.08.18
14:15
(17) У меня не табличная часть, а табличное поле на форме
19 Kondarat
 
02.08.18
14:16
(18) У табличного поля тоже есть источник данных.
20 ac13
 
02.08.18
14:19
Хорошо, тогда я значит не понимаю как добавить колонки в эту таблице. Этот метод неверный?

НоваяКолонка = ЭлементыФормы.Таблица.Колонки.Добавить("ОстатокСклад"+Строка(НомерКолонки), "Остаток");
     НоваяКолонка.УстановитьЭлементУправления(Тип("ПолеВвода"));
     НоваяКолонка.Данные = "ОстатокСклад"+Строка(НомерКолонки);
     НоваяКолонка.ЭлементУправления.ТипЗначения = Новый ОписаниеТипов("Число");
21 Kondarat
 
02.08.18
14:21
(20) Ну глянь тип реквизита "Таблица". Думаю, что это ТаблицаЗначений. Нет?
22 ac13
 
02.08.18
14:24
(21) Да
23 s03
 
02.08.18
14:25
(22) вот и отлично, а в эту ТЗ ты колонки добавил?
24 ac13
 
02.08.18
14:43
(23) (21) всё понял, спасибо
25 ac13
 
02.08.18
17:05
А вот для таких добавленных колонок можно прописать процедуру "ПриИзменении"?
26 s03
 
02.08.18
17:07
(14) вот здесь добавь назначение обработчика
27 ac13
 
02.08.18
17:17
(26) спасибо!

ЭлементыФормы.Таблица.Значение.Колонки[ИмяКолонки1].ЭлементУправления.УстановитьДействие("ПриИзменении", Новый Действие("ОбработчикПриИзменении"));

Процедура ОбработчикПриИзменении()

     Сообщить("111");

КонецПроцедуры
28 ac13
 
02.08.18
17:32
Всё работает, только при добавлении колонок ошибку выдает:

Ошибка при вызове метода контекста (УстановитьДействие)
            ЭлементыФормы.Таблица.Колонки[ИмяКолонки1].ЭлементУправления.УстановитьДействие("ПриИзменении", "ОбработчикПриИзменении");
по причине:
Несоответствие типов (параметр номер '2')
29 s03
 
02.08.18
17:34
(28) а разница с (27), где работает заметна?
30 ac13
 
02.08.18
17:40
(29) там другая ошибка:

{Обработка.ОбработкаСозданияТоварнойМатрицы.Форма.Форма.Форма(1426)}: Ошибка при вызове метода контекста (УстановитьДействие)
            ЭлементыФормы.Таблица.Колонки[ИмяКолонки1].ЭлементУправления.УстановитьДействие("ПриИзменении", Новый Действие("ОбработчикПриИзменении"));
по причине:
Процедура, указанная в качестве обработчика события, имеет неверное количество параметров
31 s03
 
02.08.18
17:42
(30) Правильно, потому что там должен быть параметр, один это точно (это по памяти).
32 s03
 
02.08.18
17:43
(30) Если ты обработчик не для программно добавленной колонки добавишь, там что будет? Вот такой же параметр/параметры и в свою процедуру добавь
33 hhhh
 
02.08.18
17:43
(30) ну сделайте ей верное количество параметров. Это дело 5 минут. Даже простым перебором, ставишь по очереди от одного параметра до пяти.
34 aleks_default
 
02.08.18
17:55
Если у тебя ограниченное количество складов, то можно просто сразу добавить максимальное количество колонок, а потом просто рулить их видимостью.
Так проще чем добавлять/удалять реквизиты формы.