Имя: Пароль:
1C
1С v8
В продолжение вопроса о многостраничных табличных документах
0 TiARETiK
 
12.04.21
09:28
Я смог понять, как выбрать область табличного документа, соответствующую заданной странице. А можно как-то из этой области сформировать новый ТД, в котором только она и будет? (И как?)
1 Волшебник
 
12.04.21
09:34
создать новый ТД
вывести Область
2 Chameleon1980
 
12.04.21
09:41
Бля
Я же тебе написал
Тд. Вставить(областьтвоя, 1,1)
Чем смотришь?
Даже угадал, чего ты хотел
3 Chameleon1980
 
12.04.21
09:41
(1) это у него не проканает
4 TiARETiK
 
12.04.21
09:42
(2) А я честно говоря просто думал, что та тема уже загнулась после моего в ней последнего сообщения, сори. Сейчас попробую.
5 Chameleon1980
 
12.04.21
09:42
Получитьобласть и области [1] возвращает разное
6 TiARETiK
 
12.04.21
09:47
(5) Глупый вопрос наверное, но все-же. Штука упорно матерится, и говорит, мол, нет области с таким именем. Скармливаю ей ноль в кавычках. А что надо? ( Что-бы первый лист взять)
7 TiARETiK
 
12.04.21
09:48
Код пока такой:

&НаСервере
Функция ОткрытьФайл( ИмяФайла)
    
    Темп = Новый ТабличныйДокумент;
    
    Темп.Прочитать( ИмяФайла);

    Файл = Новый ТабличныйДокумент;
    
    Файл = Темп.ПолучитьОбласть("0");    
    Возврат Файл;
    
КонецФункции
8 RomanYS
 
12.04.21
09:50
(6) Открой СП и почитай что надо: или имя области или "координаты"
9 TiARETiK
 
12.04.21
09:54
(8) Почитал. Следующий вопрос: а как я могу с помощью координат задать границы страницы неизвестного размера?
10 TiARETiK
 
12.04.21
09:58
Да, товарищи, спасибо за всякую помощь, оказываемую вами! Я просто нервный, меня пинает потенциальное будущее начальство, а гугл на подобные запросы отводит взгляд и насвистывает. Поэтому если какая резкость в голосе - не принимайте пожалуйста лично.
11 RomanYS
 
12.04.21
10:07
(9) Зачем тебе координаты, если ты знаешь имена? Ты в (0) же пишешь "смог понять, как выбрать область табличного документа..."
12 hhhh
 
12.04.21
10:11
(10) ты, наверно, понимаешь, что твой потенциальный начальник тоже здесь и читает всю переписку?
13 fisher
 
12.04.21
10:14
(9) Страница неизвестного размера имеет неизвестные границы и следовательно указать их координаты невозможно. Ваш кэп.
14 TiARETiK
 
12.04.21
10:15
(12) Нууу... А какие альтернативы? Вечно гуглить? В принципе вроде никаких особых гадостей не делаю, да и глупостей не говорю ( хочется верить). За что вобщем-то осуждать. Путь к знаниям всегда бывал тернист.
15 TiARETiK
 
12.04.21
10:16
(11) Вот таким макаром я могу это сделать. И знания имен у меня не прибавляется.

&НаСервере
Функция ОткрытьФайл( ИмяФайла)
    
    Файл = Новый ТабличныйДокумент;
    
    Файл.Прочитать( ИмяФайла);
    
    Файл = Файл.Области[0];
    
    Возврат Файл;
    
КонецФункции
16 TiARETiK
 
12.04.21
10:17
(13) Наш. Я просто думал, вдруг есть какие секретные джедайские техники.
17 acanta
 
12.04.21
10:19
(15) а что так можно было?
18 RomanYS
 
12.04.21
10:19
(15) что за стиль одну переменную для всего использовать.

Посмотри, что возвращает Файл.Области[0], наверняка там всё нужное есть и координаты и имена
19 TiARETiK
 
12.04.21
10:19
(17) Нет, так нельзя. В этом, собственно, и проблема)
20 TiARETiK
 
12.04.21
10:20
(18) О! Мысля! Спасибо, проверю. А к стилю такому приучает С, да и любой другой язык программирования, ибо выделять место под лишнюю переменную - грех.
21 TiARETiK
 
12.04.21
10:25
(18) Таак... Оно делает вид, что заработало. Но при этом оно сломало кусок программы, который живет ниже. Разбираюсь. Но при любом раскладе это изрядный прогресс, спасибо!
22 acanta
 
12.04.21
10:28
(20) 1с как раз наоборот, требует отдельной переменой для того, чтобы код был читабельным.
А что за типы там получаются?
И почему в принципе массив области одномерный?
Это то, что в макете в окошке с именами?
23 TiARETiK
 
12.04.21
10:32
(22) Типы - область ячеек табличного док-та.
Массив области одномерный, ибо в предыдущем посте кто-то сказал, что таким образом ( буквально такой строкой) можно получить ровно первый лист xls документа, вскрытого стандартным 1с методом.
Третий вопрос не понял.
24 TiARETiK
 
12.04.21
10:33
Современная версия кода, которая, кажись, выбирает маловато вещей - не лист, но лишь колонку. По крайней мере, пока похоже на то, продолжаю изучать.
&НаСервере
Функция ОткрытьФайл( ИмяФайла)
    
    Файл = Новый ТабличныйДокумент;
    
    Файл.Прочитать( ИмяФайла);
    
    Файл = Файл.ПолучитьОбласть(Файл.Области[0].Имя);
    
    Возврат Файл;
    
КонецФункции
25 TiARETiK
 
12.04.21
10:35
(22) На счет читабельности не знаю, честно говоря всю жизнь кодил в одиночку, и мне такое вполне нормально читать. Если начальство скажет сове весомое а-та-та, буду делать по другому, но пока такого не говорили. Впрочем, я вообще строчу со стресса лютый говнокод, ажно самому стыдно.
26 acanta
 
12.04.21
10:36
На панели инструментов есть окошко с выбором имен
R1C1
R1C2
И т.д.
ОбластьСумма
ОбластьШапка
И.т.д
В екселе или 1с - не помню. Но это единственный вариант одномерного массива данных, который доступен из платформы "лапками".
27 Волшебник
 
12.04.21
10:45
(24) >> Файл = Файл.ПолучитьОбласть(Файл.Области[0].Имя);

Неявная смена типа переменной — большой грех
28 TiARETiK
 
12.04.21
10:48
(27) А где там смена типа переменной? Вроде, ПолучитьОбласть возвращает ТД. Или я чего не понимаю?
29 TiARETiK
 
12.04.21
10:50
(27) А Файл.Области[0].Имя - это переменная массива объектов объекта, очевидно у нее тип не как у исходного. Ну, т.е. не обязательно, но более чем вероятно.
30 TiARETiK
 
12.04.21
10:52
(26) Прости, товарищ, не вполне понял смысл твоей фразы(
31 Волшебник
 
12.04.21
11:03
(28) Всё равно, грех. Ты же уничтожаешь объект и пишешь новый.
32 RomanYS
 
12.04.21
11:06
(31) Он уже в (20)(25) ответил: ему стыдно, но он продолжает г..кодить. Он работает один и начальству по фиг, а то что он это г..код хотя бы сюда выкладывает - не в счёт.
33 hhhh
 
12.04.21
11:16
(29) в отладчике посмотри, что такое Файл.Области[0] и какой у нее тип?
34 TiARETiK
 
12.04.21
11:28
(33) Область ячеек табличного док-та. А что?
35 Kassern
 
12.04.21
11:29
(0) Я чет понять не могу что нужно ТС, вывести определенную область из экселя в табдок? Если да, то все же просто...Возьмем к примеру лист1,
ТабДок=Новый ТабличныйДокумент;
ТабДок.Прочитать(ИмяФайла,СпособЧтенияЗначенийТабличногоДокумента.Значение);
Лист1=ТабДок.Области.Лист1;
ТабДокДляЛиста=Новый ТабличныйДокумент;
ТабДокДляЛиста.Вывести(ТабДок.ПолучитьОбласть(Лист1.Верх,Лист1.Лево,Лист1.Низ,Лист1.Право));
Возврат ТабДокДляЛиста;

А потом на клиенте ТабДокДляЛиста.Показать();
Либо вывести на форму реквизит ТабДокДляЛиста с типом табличный документ
36 acanta
 
12.04.21
11:29
Скриншот можно?
37 Kassern
 
12.04.21
11:30
(35) если нужно какую то конкретную часть, то вместо Лист1.Верх....указать нужные числа
38 Kassern
 
12.04.21
11:31
и не надо называть табличный документ файлом, файл это Новый Файл(); Люди потом будут путаться, если будут твой код ковырять
39 acanta
 
12.04.21
11:32
(37) нет чисел, имя есть, листа екселя. Это горизонтальная секция, если я правильно понимаю. А не область.
40 TiARETiK
 
12.04.21
11:33
(35) А правда, что Лист1 всегда будет именно Лист1, а не, например, Page1? В смысле, имя области устанавливает 1с, она не читает его из источника?
41 Kassern
 
12.04.21
11:33
(39) всмсысле нет чисел? Если ты укажешь (ТабДок.ПолучитьОбласть(1,1,1,1) то получишь первую ячейку экселя. (40)
42 Kassern
 
12.04.21
11:34
(40) вроде читает с источника, можешь проще поступить, если нужен первый то используй Лист1=ТабДок.Области[0];
43 Kassern
 
12.04.21
11:35
(40) проверь в отладке
44 TiARETiK
 
12.04.21
11:35
(35) (42) &НаСервере
Функция ОткрытьФайл( ИмяФайла)
    
    Файл = Новый ТабличныйДокумент;
    
    Файл.Прочитать( ИмяФайла);
    
    Файл = Файл.ПолучитьОбласть(Файл.Области[0].Имя);
    
    Возврат Файл;
    
КонецФункции

У меня ныне такой код, и вроде он пашет.
45 TiARETiK
 
12.04.21
11:36
(44) Собственно, к нему и ругань в мою степь за написание говнокода.
46 acanta
 
12.04.21
11:36
Если мы хотим получить адрес 1,1,1,1 не всего листа, а например 3-го или 5го листа екселя, то вместо табдок должна быть область
47 Kassern
 
12.04.21
11:38
(46) Поэтому я и заполнял параметрами листа в (35) Если будет к примеру лист2, то у него лево,право,верх,низ будут соответствующие цифры
48 acanta
 
12.04.21
11:38
Если не называть это файл, то нормально.
Ибо оно не файл ни разу, ни до ни после
49 Kassern
 
12.04.21
11:39
(48) еще и не стоит переменную "файл" переприсваивать, лучше новую переменную создать
50 TiARETiK
 
12.04.21
11:40
(48) Ок. Понял, принял. Эту штуку ( благо она по идее должна-бы уже быть закончена) наверное уже не буду переделывать. Но концепцию понял. Писать читабельный код - хорошо, экономить копейки на не создании лишних переменных - плохо.
51 TiARETiK
 
12.04.21
11:41
Товарищи, еще вопрос (Сори что так заваливаю), но создам новую тему, ибо иначе админ ругаться будет.
52 Chameleon1980
 
12.04.21
12:34
блин.
ну научись использовать отладчик.
он тебе многое покажет и многому научит

    ТД=Новый ТабличныйДокумент;
    ТД.Прочитать(ИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);
    
    ТДЛист2=Новый ТабличныйДокумент;
    
    ОбластьЛист2=ТД.Области.Получить(1);
    
    ТДЛист2.ВставитьОбласть(ОбластьЛист2, ТДЛист2.Область(1,1));
53 RomanYS
 
12.04.21
12:39
(52) если опустить переменную "Файл", то код в (44) выглядит со всех сторон лучше: один метод ПолучитьОбласть заменяет необходимость создавать новый ТД и вставлять туда область
54 Kassern
 
12.04.21
12:45
(53) а если завтра понадобится 2,3,5 областей из табдока вывести, как быть?)
55 RomanYS
 
12.04.21
12:49
(54) очевидно ТС создаст тему на мисте)))
Сейчас актуальный вопрос - как из области сделать ТД, и этот вопрос решается одним (специально для этого созданным) методом.
56 Mikeware
 
12.04.21
12:49
(54) "зачем чукча копает четыре ямы глубиной по пояс?"©
57 Kassern
 
12.04.21
12:52
(55) на мой взгляд лучше универсальнее писать код, чтобы потом его по 10 раз не перелопачивать
58 TiARETiK
 
12.04.21
12:55
(52) Местный отладчик - странный, но так-то, на моем счету часов двадцать дебага странноустроенных деревьев, в которых динамически мллоком выделяются постоянно разные объемы памяти под разные структуры. TLDR я умею пользоваться отладчиком.
59 Kassern
 
12.04.21
12:58
(58) как раз таки местный отладчик прям топчик, все можно посмотреть, не понимаю что в нем может быть странного? Где надо остановил, хочешь по условию. Через табло вывел отслеживаемые данные и все.
60 RomanYS
 
12.04.21
12:59
(57) И где у тебя границы универсальности: почему условное оформление заодно не прикрутить или расчет себестоимости ;)
61 Kassern
 
12.04.21
13:02
(60) если тебя просят выводить данные с экселя, то скорее всего данные могут быть в разных областях. По этой логике лучше создать результирующий табдок и в него добавлять, то что просят у тебя вывести.
Это все равно что у тебя попросят добавить новый документ для отражения продажи своим сотрудникам и даже могут сказать мол да у нас там всегда 1 позиция. А ты такой захерачишь номенклатуру в реквизит?))
62 Kassern
 
12.04.21
13:03
(61) *в реквизит документа я имел ввиду)
63 Kassern
 
12.04.21
13:05
(61) а через месяц оказывается нужно несколько позиций продавать и усе, придется всю структуру переделывать, а можно было сразу заложить с минимальными затратами
64 Kassern
 
12.04.21
13:05
(63) так же и тут
65 RomanYS
 
12.04.21
13:12
(64) ладно, на вкус фломастеры разные. Даже если бы мне понадобилось объединить несколько областей, я бы получил их через ПолучитьОбласть и вывел бы через Вывести. ВставитьОбласть - это имхо что-то для правки существующего документа
66 Kassern
 
12.04.21
13:16
(65) так я и делал через вывести в (35)
67 Kassern
 
12.04.21
13:16
(65) вставить область нужно, для того чтобы отредактировать имеющийся заполненный табдок
68 Chameleon1980
 
12.04.21
13:21
Вы пробовали через вывести и вставить? Привет
69 TiARETiK
 
12.04.21
13:23
(68) Все уже починено, все пашет. Уже даже начальству скинул - уши горят от того что кто-то такой ужас сейчас читает. И да, время суток доброе.
70 Kassern
 
12.04.21
13:23
(68) пробовал, код из (35) канает, лист спокойно выводится
71 RomanYS
 
12.04.21
13:23
(66) Так и (35) уже ближе к коду ТСа... только чуть более костыльно))
72 Chameleon1980
 
12.04.21
16:23
У меня была проблема с использованием вывести
При получении листа
Когда делал вывести в новый тд
Зачем то вставлялись лишние пустые строки
Я забыл с чем это связано и использовал вставить
Как-то так
73 RomanYS
 
12.04.21
16:37
(72) Классический костыль: не понял в чем проблема, но нашёл обход
74 Chameleon1980
 
12.04.21
18:13
(73) времени не было, не вспомнилось, да и не принципиально
Расскажи
75 Chameleon1980
 
12.04.21
19:03
Независимо от того, куда вы едете — это в гору и против ветра!