Имя: Пароль:
1C
1C 7.7
v7: Таблица для ввода данных, с программным добавлением строк. Как сделать?
,
0 Сияющий Асинхраль
 
13.01.12
13:54
Собственно знаю как редактировать строки в обычной таблице, а вот как сделать чтобы программно формировалась таблица для ввода данных (т.е. строки добавлялись программно) и ее можно было редактировать
1 1Сергей
 
13.01.12
13:57
не взлетит. Проще нарисовать бааааальшую таблицу заранее. а потом её заполнять
2 1Сергей
 
13.01.12
13:58
или йоксель. Но не уверен, может ли он это
3 Сияющий Асинхраль
 
13.01.12
13:59
Да вот я и сам не знаю как, но, сказать честно, очень давно видел такой вариант, если мне память не изменяет в сметной проге на семерке, но там очень много кода было и я не успел въехать, а сейчас я не знаю где искать...
4 Ёпрст
 
13.01.12
14:02
(0)Через Область Таблицы вестимо.
5 1Сергей
 
13.01.12
14:03
вот пример:

Процедура Сформировать()
   
   //* Заполняем шапку
   Таб=Таблица;
   Обл=Таб.Область("D1");
   Обл.Значение=ПериодСтр(НачПериод,КонПериод);
   Обл=Таб.Область(4,1,259,259);
   Обл.Значение="";
   Обл.РамкаСлева(0);
   Обл.РамкаСправа(0);
   Обл.РамкаСверху(0);
   Обл.РамкаСнизу(0);
   Обл.ЦветФона(-1);
   Обл.Контроль(5);
   Обл=Таб.Область(1,4,3,259);
   Обл.Значение="";
   Обл.РамкаСлева(0);
   Обл.РамкаСправа(0);
   Обл.РамкаСверху(0);
   Обл.РамкаСнизу(0);
   Обл.ЦветФона(-1);
   Обл.Контроль(5);
   Таб.Область(1,1,1,1).ШиринаСтолбца(12);
   Таб.Область(1,2,1,2).ШиринаСтолбца(20);
   Таб.Область(1,3,1,3).ШиринаСтолбца(4);
   НомерСтроки=3;
   НомерКолонки=3;
   
   . . .

   //* список материалов перезаполним на основании запроса
   СписокМатериалов.УдалитьВсе();
   Пока Запрос.Группировка(1)=1 Цикл
       
       СписокМатериалов.ДобавитьЗначение(Запрос.Материал);
       
       НомерКолонки = НомерКолонки + 1;
       
       //* Выводим в шапке колонку по материалу
       Материал=Запрос.Материал;
       Обл=Таб.Область(1,НомерКолонки,1,НомерКолонки);
       Обл.Значение = СокрЛП(Материал.Наименование);
       Обл.ВертикальноеПоложение(3);
       Обл.ГоризонтальноеПоложение(3);
       Обл.ОриентацияТекста(90);
       Обл.РамкаОбвести(3,3,3,3);
       
       //* Выводим остаток материала
       Обл=Таб.Область(2,НомерКолонки,2,НомерКолонки);
       Обл.Значение = Запрос.Остаток;
       Обл.РамкаОбвести(3,3,3,3);
       Обл.ЦветФона(255,255,196);
       
       //* выводим движения материала (кроме самой сшивки)
       Обл=Таб.Область(3,НомерКолонки,3,НомерКолонки);
       Обл.Значение = Запрос.ПрихКол-Запрос.РасхКол;
       Обл.РамкаОбвести(3,3,3,3);
       Обл.ЦветФона(255,255,223);
       
   КонецЦикла;
   
   . . .

   Пока Запрос.Группировка(1)=1 Цикл
       Пока Запрос.Группировка(2)=1 Цикл
           
           //* нужно отсеить пустую строку (она возникает, если есть ведомость с пустой табличной частью)
           Если (ПустоеЗначение(Запрос.Ордин)=1)
           И (ПустоеЗначение(Запрос.Матрац)=1)
           И (ПустоеЗначение(Запрос.Количество)=1)
           Тогда
               Продолжить;
           КонецЕсли;
           
           НомерСтроки = НомерСтроки + 1;
           
           //* выводим строку по матрасу
           Обл=Таб.Область(НомерСтроки,1,НомерСтроки,1);
           Обл.Значение=СокрЛП(Запрос.Ордин.Наименование);
           Обл.РамкаОбвести(3,3,3,3);
           Обл=Таб.Область(НомерСтроки,2,НомерСтроки,2);
           Обл.Значение=СтрЗаменить(СокрЛП(Запрос.Матрац.Наименование)," тк.",РазделительСтрок+"тк.");
           Обл.РамкаОбвести(3,3,3,3);
           Обл=Таб.Область(НомерСтроки,3,НомерСтроки,3);
           Обл.Значение=СокрЛП(Формат(Запрос.Количество,"Ч010.0"));
           Обл.РамкаОбвести(3,3,3,3);
           
           //* Заполняем таблицу заказов
           ТаблицаЗаказов.НоваяСтрока();
           ТаблицаЗаказов.Ордин = Запрос.Ордин;
           ТаблицаЗаказов.Матрас = Запрос.Матрац;
           ТаблицаЗаказов.Количество = Запрос.Количество;
           ТаблицаЗаказов.Индекс = Запрос.Ордин.ПолныйКод()+"#"+Запрос.Матрац.ПолныйКод();
           
       КонецЦикла;
   КонецЦикла;
   
   //* обводим ячейки и устанавливаем форматы
   Если (НомерСтроки>3)И(НомерКолонки>3) Тогда
       Обл=Таб.Область(4,4,НомерСтроки,НомерКолонки);
       Обл.НазначитьТип("Число",17,3);
       Обл.Формат("Ч017.3.,");
       Обл.Доступность(1);
       Обл.РамкаСлева(3);
       Обл.РамкаСправа(3);
       Обл.РамкаСверху(3);
       Обл.РамкаСнизу(3);
   КонецЕсли;

    . . .

   //* выводим итоги внизу таблицы
   Обл=Таб.Область(НомерСтроки+1,3,НомерСтроки+1,3);
   Обл.Значение="Списано матрериалов:";
   Обл.ГоризонтальноеПоложение(2);
   Обл=Таб.Область(НомерСтроки+2,3,НомерСтроки+2,3);
   Обл.Значение="Остаток на конец периода:";
   Обл.ГоризонтальноеПоложение(2);
   Для х=1 по СписокМатериалов.РазмерСписка() Цикл
       
       //* подсчитываем
       НомерКолонкиИтога=х+3;
       НачОст=Число(Таб.Область(2,НомерКолонкиИтога,2,НомерКолонкиИтога).Значение);
       Оборот=Число(Таб.Область(3,НомерКолонкиИтога,3,НомерКолонкиИтога).Значение);
       Списано=0;
       Для у=4 по НомерСтроки Цикл
           Списано = Списано + Число(Таб.Область(у,НомерКолонкиИтога,у,НомерКолонкиИтога).Значение);
       КонецЦикла;
       
       //* Выводим сколько всего списано
       Обл=Таб.Область(НомерСтроки+1,НомерКолонкиИтога,НомерСтроки+1,НомерКолонкиИтога);
       Обл.Значение = Списано;
       Обл.РамкаОбвести(3,3,3,3);
       Обл.ЦветФона(255,255,223);
       Обл.Контроль(5);
       
       //* выводим конечный остаток
       Обл=Таб.Область(НомерСтроки+2,НомерКолонкиИтога,НомерСтроки+2,НомерКолонкиИтога);
       Обл.Значение = НачОст+Оборот-Списано;
       Обл.РамкаОбвести(3,3,3,3);
       Обл.ЦветФона(255,255,196);
       Обл.Контроль(5);
       
   КонецЦикла;
   
   //* последние настройки таблицы
   Таб.ОбластьПечати(1,1,НомерСтроки+2,НомерКолонки);
   Таб.ПовторятьПриПечатиСтроки(1,1);
   Таб.ПовторятьПриПечатиСтолбцы(1,3);
   Таб.Опции(0,0,3,3);
   
   //* сбрасываем флаг модифицированности
   УстановитьМодифицированность(0);
   
КонецПроцедуры // Сформировать
6 SnarkHunter
 
13.01.12
14:03
В Инталев КФ это реализовано
7 Сияющий Асинхраль
 
13.01.12
14:07
(5) Вроде бы понял идею, спасибо...
(6) Не покупать же ради этого Инталев :-) , мне собственно идея нужна была...
8 Ёпрст
 
13.01.12
14:10
единственное, нарвешься на присвоении типа ячейки..
В лучшем случае, тока ограниченному числу ячеек сможешь тип назначить, неопределенный, к примеру, чтоб потом программно назначить нужный.
9 Сияющий Асинхраль
 
13.01.12
14:11
(8) Понял. Разберусь, спасибо...
10 Ёпрст
 
13.01.12
14:11
а так, рвд - зло..
особенно "порадуешься", когда будешь свою поделку таскать из базы в базу
11 SnarkHunter
 
13.01.12
14:14
Табличное поле с прямым вводом в ячейки рулит...
12 Ёпрст
 
13.01.12
14:15
(11) ну не всегда удобно оно, иногда, для большей наглядности, проще tabledoc или yoksel на форму кинуть.
Смотря что за задача.
13 Сияющий Асинхраль
 
13.01.12
14:17
(10) Да, в общем то, согласен. Поэтому всегда предпочитал обычное табличное поле и расшифровку, просто клиент хочет именно такой режим, а здесь, хозяин-барин, его деньги...
(11)(12) +1
14 Shaman100M
 
13.01.12
14:33
(0) когда-то ковырялся с РВД. Вот, может пригодится.

https://rapidshare.com/#!download|407tl4|499990143|IB_ObjectsToTable_3518.ert|29|R~0|0|0|RapidPro expired. (34fa3175)
15 Сияющий Асинхраль
 
13.01.12
14:36
(14) ОК. Спасибо. Гляжу...
Основная теорема систематики: Новые системы плодят новые проблемы.