Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

В продолжение вопроса о многостраничных табличных документах

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

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

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

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

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

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

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

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

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


Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.