|
В продолжение вопроса о многостраничных табличных документах | ☑ | ||
---|---|---|---|---|
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
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |