Имя: Пароль:
1C
1С v8
Обход таблицы на клиенте
0 IoannVic
 
02.10.14
10:57
Знаю, что так делать не стоит, но у меня возникли особые обстоятельства). Выгружаю таблицу значений в Excel делаю все это с помощью Com-объект на сервере. Но возникла проблема при клиент-серверном использование не могу работать с Com-объектами, потому как сервер на Линуксе и соответственно ругается на Com. Получается замкнутый круг. Может быть есть какие-либо идеи, как из этой петли выбраться. И как наиболее правильно все это сделать
1 Wobland
 
02.10.14
10:58
выружай на клиенте
2 IoannVic
 
02.10.14
11:00
(1) Спасибо, друг). Вопрос в том, как правильно обойти таблицу значений?
3 Defender aka LINN
 
02.10.14
11:01
(2) А что, указом правительства цикл Для Каждого уже запрещен как пропагандирующий курение и прочий гомосексуализм?
4 Chai Nic
 
02.10.14
11:01
А табличным документом воспользоваться не проще? Или надо ексель-специфичные примочки?
5 Остап Сулейманович
 
02.10.14
11:02
(2) Табличную часть твоего объекта прекрасно можно заполнить на сервере, а обойти на клиенте.
6 IoannVic
 
02.10.14
11:03
(4) Не проще, к сожалению. Таблица специфическая. Колонки формируются программно и рассчитываются динамически
7 IoannVic
 
02.10.14
11:04
(3) А что обходить? ТаблицаЗначений СП
Доступность:

Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер).
8 antoneus
 
02.10.14
11:04
Сделать ея реквизитом формы не предлагать?
9 IoannVic
 
02.10.14
11:05
(5) Вопроса к заполнению нет. Как обойти на клиенте?
10 IoannVic
 
02.10.14
11:05
(8) Она есть как реквизит формы. Как ее обойти?))) (по-моему в который раз уже)
11 antoneus
 
02.10.14
11:06
Для каждого ТекСтрока из... не?
12 Defender aka LINN
 
02.10.14
11:07
(10) см (3)
13 IoannVic
 
02.10.14
11:07
(11) Из чего?
14 Остап Сулейманович
 
02.10.14
11:07
(9) Так же как любую другую табличную часть.
Для каждого ... Из ...
Только в варианте "Колонки формируются программно и рассчитываются динамически" городить универсальную ТЧ может оказаться невыполнимым
15 Defender aka LINN
 
02.10.14
11:07
(11) Батюшка не велит, похоже.
16 Defender aka LINN
 
02.10.14
11:08
(13) Из твоего, ля, реквизита, ля!
17 antoneus
 
02.10.14
11:08
из ИдентификаторМоейТаблицы (это если она реквизит формы).
18 IoannVic
 
02.10.14
11:11
(16) (17) Тип какой она будет иметь?
19 Defender aka LINN
 
02.10.14
11:12
(18) Какой надо
20 IoannVic
 
02.10.14
11:13
(19) Какой? Что это ТаблицаФорма, ТаблицаЗначений, ДанныеКоллекции. Что из этого?
21 Defender aka LINN
 
02.10.14
11:15
(20) Отладчик тоже по п.2 проходит?
22 hhhh
 
02.10.14
11:18
(20) вам там видней. Главное имя реквизита
23 hhhh
 
02.10.14
11:19
(20) колонки у этого реквизита все создали?
24 Жан Пердежон
 
02.10.14
11:20
пятнично
25 IoannVic
 
02.10.14
11:21
Вот код
Процедура СформироватьТаблицуФормы(Канал, ЭтаФорма, ТаблицаЗначений, ДатаНачала, ДатаОкончания) Экспорт
    
    ГруппаСтраницаКанала = ЭтаФорма.Элементы.Добавить(Строка(Канал), Тип("ГруппаФормы"), ЭтаФорма.Элементы.ГруппаСтраницы);
    ГруппаСтраницаКанала.Вид = ВидГруппыФормы.Страница;
    ГруппаСтраницаКанала.Заголовок = Строка(Канал);
        
    МассивДобавляемойТаблицыЗначений = Новый Массив;
        
    МассивТипаТаблицаЗначений = Новый Массив;
    МассивТипаТаблицаЗначений.Добавить(Тип("ТаблицаЗначений"));
    ДопустимыйТипТаблицаЗначений = Новый ОписаниеТипов(МассивТипаТаблицаЗначений);
        
    МассивДобавляемойТаблицыЗначений.Добавить(Новый РеквизитФормы("ТаблицаЗначений"+Строка(Канал), ДопустимыйТипТаблицаЗначений));
        
    ЭтаФорма.ИзменитьРеквизиты(МассивДобавляемойТаблицыЗначений);
        
    ТаблицаФормы = ЭтаФорма.Элементы.Добавить("ТаблицаЗначений"+Строка(Канал), Тип("ТаблицаФормы"),ГруппаСтраницаКанала);
    ТаблицаФормы.ПутьКДанным = "ТаблицаЗначений"+Строка(Канал);
    ТаблицаФормы.КоманднаяПанель.Видимость = Ложь;
        
    ИмяТаблицы = "ТаблицаЗначений"+Строка(Канал);
        
    МассивДобавляемыхРеквизитов = Новый Массив;
    
    Для Каждого Колонка Из ТаблицаЗначений.Колонки Цикл
        МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы(Колонка.Имя, Колонка.ТипЗначения,ИмяТаблицы ,Колонка.Заголовок));    
    КонецЦикла;
            
    ЭтаФорма.ИзменитьРеквизиты(МассивДобавляемыхРеквизитов);
        
    НомерКолонки = 1;
                        
    Для Каждого Колонка Из ТаблицаЗначений.Колонки Цикл
        НоваяКолонка = ЭтаФорма.Элементы.Добавить(ИмяТаблицы + Колонка.Имя, Тип("ПолеФормы"), ЭтаФорма.Элементы[ИмяТаблицы]);
        НоваяКолонка.Заголовок = Колонка.Заголовок;
        НоваяКолонка.ПутьКДанным = ИмяТаблицы + "." + Колонка.Имя;
        НоваяКолонка.Вид = ВидПоляФормы.ПолеВвода;
        НоваяКолонка.РежимРедактирования = РежимРедактированияКолонки.ВходПриВводе;
        НоваяКолонка.ШрифтЗаголовка = ШрифтыСтиля.МелкийШрифтТекста;
        НоваяКолонка.Шрифт = ШрифтыСтиля.МелкийШрифтТекста;
        НоваяКолонка.РастягиватьПоГоризонтали = Ложь;
        Если НомерКолонки = 1 Тогда
            НоваяКолонка.Ширина = 20;
        ИначеЕсли НомерКолонки>1 и НомерКолонки <= 3 тогда
            НоваяКолонка.Ширина = 10;
        ИначеЕсли НомерКолонки>3 и НомерКолонки <= 4 тогда
            НоваяКолонка.Ширина = 10;
            НоваяКолонка.УстановитьДействие("ПриИзменении", "ПриИзмененииСтоимости");
        ИначеЕсли НомерКолонки>4 и НомерКолонки<=(5 + (ДатаОкончания-ДатаНачала)/(3600*24)) тогда
            НоваяКолонка.Ширина = 4;
            НоваяКолонка.УстановитьДействие("ПриИзменении", "ПриИзменениеСтроки");
        ИначеЕсли НомерКолонки>(5 + (ДатаОкончания-ДатаНачала)/(3600*24)) и НомерКолонки<=(6 + (ДатаОкончания-ДатаНачала)/(3600*24)) тогда
            НоваяКолонка.Ширина = 10;
        ИначеЕсли НомерКолонки>(6 + (ДатаОкончания-ДатаНачала)/(3600*24)) и НомерКолонки<=(7 + (ДатаОкончания-ДатаНачала)/(3600*24)) тогда
            НоваяКолонка.Ширина = 10;
        ИначеЕсли НомерКолонки>(7 + (ДатаОкончания-ДатаНачала)/(3600*24)) и НомерКолонки<=(8 + (ДатаОкончания-ДатаНачала)/(3600*24)) тогда
            НоваяКолонка.Ширина = 10;    
        ИначеЕсли НомерКолонки>(8 + (ДатаОкончания-ДатаНачала)/(3600*24)) и НомерКолонки<=(9 + (ДатаОкончания-ДатаНачала)/(3600*24)) тогда
            НоваяКолонка.Ширина = 10;
            НоваяКолонка.УстановитьДействие("ПриИзменении", "ПриИзмененииСкидки");
        ИначеЕсли НомерКолонки>(9 + (ДатаОкончания-ДатаНачала)/(3600*24)) и НомерКолонки<=(10 + (ДатаОкончания-ДатаНачала)/(3600*24)) тогда
            НоваяКолонка.Ширина = 10;    
        Иначе
            НоваяКолонка.Ширина = 10;
        КонецЕсли;    
        НомерКолонки = НомерКолонки + 1;
    КонецЦикла;
    
    ЭтаФорма[ИмяТаблицы].Загрузить(ТаблицаЗначений);
    
КонецПроцедуры

Я зная имя таблицы кким образом могу получить ее на клиенте
26 IoannVic
 
02.10.14
11:22
(22) Есть имя реквизита. Как из этого получить таблицу?
27 IoannVic
 
02.10.14
11:22
(21) Вот это прям достойный ответ. Что мне в отладчике откапывать. В какую сторону рыть?
28 Defender aka LINN
 
02.10.14
11:25
(26) НАХРЕНА?
29 IoannVic
 
02.10.14
11:27
(28) Чтобы обойти ее. Я понять не могу что мне обойти, если таблица формируется программно. Я не могу просто взять и написать ее имя. Мне нужно ккак-то получить реквизит по имени. Как это сделать?
30 antoneus
 
02.10.14
11:28
У тебя же самого в коде написано

ЭтаФорма[ИмяТаблицы]
31 antoneus
 
02.10.14
11:29
Или через точку

ЭтаФорма.ИдентификаторМоейТаблицы
32 IoannVic
 
02.10.14
11:35
(30) (31) Спасибо, я так изначально пробовал, но ругался на индекс. Не мог врубиться, что нетак. А сейчас понял, что я ему не строку туда подпихивал. Мляяяя, я - тупой, прям п***а. Всем спасибо, кто смог выдержать эти потоки бреда))
33 antoneus
 
02.10.14
11:36
(32) да и не такое выдерживали)