Bug 2097

Summary: 1Cv81: Размер ячейки в отчёте
Product: WINE@Etersoft Reporter: Andrey Vusik <night>
Component: Обработка текста и локали; БуферAssignee: Andrey Vusik <night>
Status: CLOSED FIXED QA Contact:
Severity: minor    
Priority: P4 CC: amorozov, baraka, kondratyuk, lav, shpigor
Version: 1.0.9   
Target Milestone: ---   
Hardware: PC   
OS: All   
Whiteboard:
Заявки RT: Связано с:
Дата напоминания:
Bug Depends on: 4269    
Bug Blocks: 437, 4886, 5395    
Attachments: В линуксе
В Винде
В eter5.2/eter4

Description Andrey Vusik 2008-07-09 20:53:25 MSD
Created attachment 567 [details]
В линуксе

В общем, бутылка 1c8.1.11.67 база tdemo
Делал "Отчёты--отчёт по номенклатуре--сформировать"
Прикладываю скрины. Смотреть на размеры ячеек.
Comment 1 Andrey Vusik 2008-07-09 20:58:10 MSD
Created attachment 568 [details]
В Винде

---
Comment 2 Александр Морозов 2008-10-22 19:52:03 MSD
1С получает координаты прямоугольника, по которому обрезается текст, с помощью функции IntersectRect, которая возвращает координаты прямоугольника, являющегося общей частью двух других прямоугольников. Первый прямоугольник для всех строк одинаковый, а второй для некоторых строк имеет меньшую, чем их длина, ширину. Причину этого выяснить не удалось.

Вызов IntersectRect перед выводом строки "5 товаров с наибольшим остатком":
0009:Call user32.IntersectRect(0032ea3c,0032e9c4,0032ea3c) ret=1da9a580
trace:graphics:IntersectRect src1: left 48 right 1234 top 0 bottom 775
trace:graphics:IntersectRect src2: left 48 right 98 top 58 bottom 85
0009:Ret  user32.IntersectRect() retval=00000001 ret=1da9a580

Вызов IntersectRect перед выводом строки "Остатки номенклатуры по складам":
0009:Call user32.IntersectRect(0032ec80,0032e9c4,0032ec80) ret=1da9a1ce
trace:graphics:IntersectRect src1: left 48 right 1234 top 0 bottom 775
trace:graphics:IntersectRect src2: left 48 right 1234 top 433 bottom 460
0009:Ret  user32.IntersectRect() retval=00000001 ret=1da9a1ce

IntersectRect вызывается из moxelui.dll.

Ширина ячейки таблицы определяется с помощью GetTextExtentPoint32A(hdc, "X", count, size).

При замене Arial на Tahoma меняется шрифт, которым выводятся урезанные надписи, но длина их не меняется.
Comment 3 Vitaly Lipatov 2008-10-22 20:27:58 MSD
Илья, изволь пожалуйста записать выводы по этой баге.
Comment 4 Илья Шпигорь 2008-10-23 10:14:34 MSD
Если смотреть, что произошло с ячейками в сохраненном mxl файле:

1) При попытке растянуть ячейку ей устанавливается минимальная, возможно фиксированная величина. В результате все ячейки, которые в windows растянуты и содержат текст - получаются короткими.

2) Несмотря на то, что ячейки короткие, текст в них отображается нормально, т.е. в функцию ExtTextOutW приходит корректный rect.

3) Исключение только для объединенных ячеек. В этом случае текст выводится в получившуюся ячейку и не выходит за ее границы. Бага наблюдается для объединенных растянутых ячеек, т.к. они короткие, а текст в случае объединения отрезается под размер ячейки. 
Comment 5 Илья Шпигорь 2008-10-23 10:20:37 MSD
Размер ячеек определяет сам 1с. Скорре всего, надо выяснить на основании чего определяется их ширина. Возможно, какая-то функция возвращает не то значение,  что ждет 1с.
Comment 6 Илья Шпигорь 2008-10-23 14:22:31 MSD
Перевесил на себя.
Comment 7 Andrey Vusik 2009-03-03 19:27:46 MSK
Сборка 1.0.10 10/6
Воспроизводится.
Comment 8 Илья Шпигорь 2009-03-05 10:25:48 MSK
Эта бага достаточно трудоемкая и не очень критичная. Думаю, целесообразнее решать ее с разработчиками 1С.
Comment 9 Илья Шпигорь 2009-06-23 09:43:58 MSD
Выложил хак.

Временное решение - если текст не помещается в переданный в функцию ExtTextOutW прямоугольник, увеличить этот прямоугольник до необходимого размера.

Для корректного решения проблемы необходимо знать, как 1с устанавливает ширину ячеек.
Comment 10 Денис Баранов 2009-07-16 21:57:37 MSD
Принято.
WINE@Etersoft eter27/eter19
Comment 11 Илья Шпигорь 2009-09-04 15:14:00 MSD
Хак приводит к появлению ошибки #4269. Нужно более корректное решение.
Comment 12 Илья Шпигорь 2010-04-29 14:29:15 MSD
to night:

Воспроизведи, пожалуйста, где-нибудь в бутылке. 1c8.1.11.67 уже удалили.
Comment 13 Денис Баранов 2010-05-04 14:02:55 MSD
WINE@Etersoft 1.0.12 eter5.2/eter4
ошибка не воспроизвелась.
Comment 14 Денис Баранов 2010-05-04 14:03:52 MSD
Created attachment 1682 [details]
В eter5.2/eter4
Comment 15 Денис Баранов 2010-05-04 14:04:18 MSD
Принято.
Comment 16 Денис Баранов 2010-05-04 14:04:51 MSD
Тестировал в бутылке 1c81/8.1.15.14
Comment 17 Денис Баранов 2010-05-04 14:45:44 MSD
Создал новую бутылку: 1c81/1c81-Examples.
Сделал конфигурацию..
Ошибка не воспроизвелась.
WINE@Etersoft eter5.2/eter4
Comment 18 Andrey Vusik 2010-05-06 21:31:34 MSD
Проблемы нет. 1.0.12-eter5.4/5