Форум программистов, компьютерный форум, киберфорум
C++: OpenCV
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.92/39: Рейтинг темы: голосов - 39, средняя оценка - 4.92
1 / 1 / 0
Регистрация: 14.05.2010
Сообщений: 36

Некорректность цветопередачи QImage, полученного из IplImage (OpenCV)

25.02.2013, 20:08. Показов 8949. Ответов 39
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Проблема заключается в некорректной конвертации изображения из формата IplImage (OpenCV) в формат QImage (Qt). Передачу данных осуществляю следующим путем (получаю изображение в IplImage и передаю его в QImage):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    IplImage* img = cvLoadImage( "E:\\ocv\\example.jpg" );
    QImage* qImg = new QImage(
        (uchar *)img->imageDataOrigin,
        img->width,
        img->height,
                QImage::Format_RGB888
                );
 
    cvShowImage("cvtest5", img);
    
    cvDrawLine(img,cvPoint(260,0),cvPoint(260,10),cvScalar(0xff,0x00,0x00));
 
    QLabel myLab;
    myLab.setPixmap(QPixmap::fromImage(*qImg));
    myLab.show();
Результат следующий:

В Пикаса показан оригинал изображения, в окне "cvtest5" - он же, отображенный с помощью средств OpenCV, в окне "test5" - он же, перегнанный из IplImage в QImage. Если его открыть таким образом:
C++
1
2
3
4
5
6
7
8
9
/*     QImage* qImg = new QImage(
        (uchar *)img->imageDataOrigin,
        img->width,
        img->height,
                QImage::Format_RGB888
                );
*/
        QImage* qImg = new QImage();
        qImg->load("E:\\ocv\\example.jpg" );
то все выглядит красиво:

Вариант, что некорректно отображаются цвета на мониторе не подходит (что доказано последним экспериментом и...), в основном проекте пробывал QImage сохранять в jpeg следующим путем:
C++
1
2
3
4
5
void rgbForm::on_pushButton_saveImage_clicked() {
    QString fName = QFileDialog::getSaveFileName(this, tr("Save File"),"",
                                                 tr("Image File (*.jpeg)"), 0);
    qImg->save(fName, "JPEG");
}
В результате ничего хорошего не получил (далее по порядку - то что "видит" опенсв, то что "видит" КьюТе и сохраненный джпег):

Я вроде создаю 3-канальное изображение (QImage::Format_RGB888), но все же такое ощущение, что вмешивается альфа-канал и "портит" картинку. На тестовом приложении пробывал сравнивать в определенных точках значения каждого канала (красный, зеленый, голубой), вроде как совпадают по значению и не перепутаны ( например, вместо РГБ - находится БГР).
И еще одно изображение:

Хочу обратить внимание, что левая часть изображения (коричневая) не сильно "пострадала", в отличии от более светлых.

Буду рад любой помощи, пока буду дальше копать. Производить копирование данных по каждому каналу отдельно или использую структуру cvMat не очень хочется, но... если не будет других вариантов, а они дадут результат - будем делать так, чтобы было красиво!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.02.2013, 20:08
Ответы с готовыми решениями:

OpenCV: конвертация IplImage в серый
Здравствуйте! Работаю с библиотекой OpenCV. Не могу корректно преобразовать IplImage в серый цвет. Изображение становится серым, как и...

OpenCV. IplImage* cvCreateImage в Mat
Здравствуйте! Как написать то что IplImage, но через Mat? IplImage *dd = cvCreateImage(cvGetSize(img), img->depth, 1); в что-то...

Извлечение трёх цветовых компонент из IplImage* rgb (OpenCV)
Данные в переменную заносятся так: IplImage* image; IplImage* rgb = 0; // получаем любую подключённую камеру CvCapture*...

39
Автор FAQ
 Аватар для Чистый
2733 / 1429 / 89
Регистрация: 08.09.2011
Сообщений: 3,746
Записей в блоге: 1
25.02.2013, 20:13
а разве в openCV не другой порядок цветов? В Qt RGB, в openCV, если не путаю ничего, другой что-то вроде GRB, может в этом проблема?
1
1 / 1 / 0
Регистрация: 14.05.2010
Сообщений: 36
25.02.2013, 20:17  [ТС]
Да, OpenCV изначально оперирует BGR, но в случае, если из структуры IplImage использовать данные imageDataOrigin, то получаем их в порядке RGB. К тому же, я уже упоминал, что пробывал сравнивать на разных пикселях значения каналов (у меня первая мысль тоже такая была), но они одинаковые и по порядку в том числе.

Но все-равно спасибо! Жду еще предложений!
0
Автор FAQ
 Аватар для Чистый
2733 / 1429 / 89
Регистрация: 08.09.2011
Сообщений: 3,746
Записей в блоге: 1
25.02.2013, 20:23
где-то все же касячите c преобразованием, так как судя по результату кода:
C++ (Qt)
1
2
QImage* qImg = new QImage();
        qImg->load("E:\\ocv\\example.jpg" );
Qt нормально видит ваше изображение.....
0
1 / 1 / 0
Регистрация: 14.05.2010
Сообщений: 36
25.02.2013, 20:34  [ТС]
Чистый, Я ж этого и не отрицаю. Я специально сделал этот скриншот, чтобы отпали сомнения в самом QImage. Проблема зарыта где-то всего лишь в одной этой инструкции:
C++
1
QImage* qImg = new QImage( (uchar *)img->imageDataOrigin, img->width, img->height, QImage::Format_RGB888 );
Где - не знаю, поэтому и спрашиваю.
При создании IplImage используется конструкция
C++
1
framRGB = cvCreateImage( sz, IPL_DEPTH_8U, 3 );
, где первый аргумент это структура с размерами ширина*высота в пикселях, вторая указывает "глубину" рисунка в каждом канале ( в документации говориться
IPL_DEPTH_8U - unsigned 8-bit integer. Equivalent to CV_8U in matrix types.
), третий - количество каналов. Из последних двух каналов выплывает необходимость использования в QImage формата QImage::Format_RGB888 !!
Остается только строчка (uchar *)img->imageDataOrigin,
Где "нагрешил" не знаю.
0
Автор FAQ
 Аватар для Чистый
2733 / 1429 / 89
Регистрация: 08.09.2011
Сообщений: 3,746
Записей в блоге: 1
25.02.2013, 20:36
подождите а картинка точно 24 битная?
0
1 / 1 / 0
Регистрация: 14.05.2010
Сообщений: 36
26.02.2013, 15:49  [ТС]
Чистый, да. В последнем сообщении я ж написал, как она создается в OpenCV uchar*channels = 8 *3 = 24 bits . а потом в нее закидываются данные (сам рисунок), но это уже не может повлиять ни на ее размер, ни на битность, ибо память выделена уже.

Добавлено через 5 минут
Есть вариант, конечно, копировать данные по каналам (пока не проверял).
Но мне охота избежать по возможности лишних инструкций...

Добавлено через 18 часов 58 минут
Чем дальше в лес, тем толще... да не, не толще, - цветастей и с большим количеством байт наши партизаны-рисунки!!! )))

Сделал простенькую вещь:

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
        uchar* imageDat = new uchar[10*10*3];
    for (int i = 0; i < 30; i+=3) {
        imageDat[i] = 0xff;
        imageDat[i+1] = 0x00;
        imageDat[i+2] = 0x00;
    }
    for (int i = 30; i < 60; i+=3) {
        imageDat[i] = 0x00;
        imageDat[i+1] = 0xff;
        imageDat[i+2] = 0x00;
    }
    for (int i = 60; i < 90; i+=3) {
        imageDat[i] = 0x00;
        imageDat[i+1] = 0x00;
        imageDat[i+2] = 0xff;
    }
    for (int i = 90; i < 120; i+=3) {
        imageDat[i] = 0xff;
        imageDat[i+1] = 0x00;
        imageDat[i+2] = 0x00;
    }
    for (int i = 120; i < 150; i+=3) {
        imageDat[i] = 0x00;
        imageDat[i+1] = 0xff;
        imageDat[i+2] = 0x00;
    }
    for (int i = 150; i < 180; i+=3) {
        imageDat[i] = 0x00;
        imageDat[i+1] = 0x00;
        imageDat[i+2] = 0xff;
    }
    for (int i = 180; i < 240; i++) {
        imageDat[i] = 0x00;
    }
    for (int i = 240; i < 300; i++) {
        imageDat[i] = 0xff;
    }
        
    QImage* qImg = new QImage(imageDat, 10, 10, QImage::Format_RGB888);
Итого, должны в форточке теоретически получить рисунок, который состоит из:
  • 1ая строчка - красные пиксели;
  • 2ая строчка - зеленые пиксели;
  • 3ья строчка - синие (толерантно их назовем) пиксели;
  • 4, 5, 6ая строчки - повторяют 1, 2 , 3;
  • 7,8 строки - черные пиксели;
  • 9, 10 строки - белые пиксели.

Дальше, сделал "Пуск" и ... Qt сказал (точней показал) мне фак - я не разобрал сразу и вооружился лупой от 7го детища Билла:

"Интересненько получается" - сказал я себе и полез серфить "эти наши интернеты" (© Линус Торвальдс, только не подумайте, что это я тролю - этого человека я очень уважаю).
Нарыл следующую статью.
"Ай-яй-яй" - и добавил следующую инструкцию:
C++ (Qt)
1
qDebug() << "Quantity Bytes per Line:  " << qImg->bytesPerLine() ;
На что моя тестовая прога сказала "на те":
Bash
1
Quantity Bytes per Line:   32
Итак, я использую 24 битный QImage, т.е. 3 байта на пиксель, ширина рисунка у меня 10 пикселей (нарисованного рисунка), значит, с помощью тяжелых математических вычислений получаю 3*10 = 30 байт per строчка!!!

ВОПРОС: откуда же берутся эти ДВА избыточных БАЙТА??? (возможно из-за них у меня и проблемы с выводом приложения). Что в них должно быть, от чего их количество зависит (пока не тестил на разных изображениях, если 2 байта на любой картинке это проще)?

Построчное копирование пока не пробывал (как по приведенной ссылке), хотелось избежать этого и сразу весь кусок данных закидывать. Тем не менее, если удастся решить с помощью построчного копирования, задачу не считаю решенной.

Если что получится или накопаю - поделюсь, а пока "ищу ответы" - жду мыслей.

Заранее благодарен!

Не по теме:

З.Ы. Оказывается есть теги для С++Qt - круто!

0
4 / 1 / 0
Регистрация: 26.02.2013
Сообщений: 30
26.02.2013, 16:42
4 x 8 = 32 (CMYK)
0
1 / 1 / 0
Регистрация: 14.05.2010
Сообщений: 36
26.02.2013, 16:54  [ТС]
Цитата Сообщение от dphn Посмотреть сообщение
4 x 8 = 32 (CMYK)
dphn, не понял. я использую 3 канала ( QImage::Format_888, а не QImage::Format_32 ). Если это касается количества байт, то ИМХО оно равняется все же 3байта*10 пикселей... Откуда взялся CMYK мне непонятно (что такое 4 и что такое 8 (бит на канал что ли?) неясно).

Без обид, dphn , но я использую "без объяснений, если написано что так нужно и оно все пашет, или уже копаю, пока не получу удоботворимый объяснимый результат. Что делать с Вашими расчетами мне пока непонятно...
0
4 / 1 / 0
Регистрация: 26.02.2013
Сообщений: 30
26.02.2013, 18:27
Попробуйте вместо QImage ( const uchar * data, int width, int height, Format format )
использовать
QImage ( const uchar * data, int width, int height, int bytesPerLine, Format format )
соответственно вместо int bytesPerLine указать 24
Пожалуйста, отпишитесь

Добавлено через 14 минут
Я думаю, дело в следующем:
QImage::QImage ( uchar * data, int width, int height, Format format )
Constructs an image with the given width, height and format, that uses an existing memory buffer, data. The width and height must be specified in pixels, data must be 32-bit aligned, and each scanline of data in the image must also be 32-bit aligned.
0
1 / 1 / 0
Регистрация: 14.05.2010
Сообщений: 36
26.02.2013, 18:56  [ТС]
Ну, как получилось у меня
следующую инструкцию:
qDebug() << "Quantity Bytes per Line: " << qImg->bytesPerLine() ;
На что моя тестовая прога сказала "на те":
Quantity Bytes per Line: 32
Итак, я использую 24 битный QImage, т.е. 3 байта на пиксель, ширина рисунка у меня 10 пикселей (нарисованного рисунка), значит, с помощью тяжелых математических вычислений получаю 3*10 = 30 байт per строчка!!!
32 байта в сырцах накопал:
* в файле "qimage.cpp" читаем:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
QImageData * QImageData::create(const QSize &size, QImage::Format format, int numColors)
{
    ...
 
    uint width = size.width();
    uint height = size.height();
    uint depth = qt_depthForFormat(format);
 
    ...
 
    const int bytes_per_line = ((width * depth + 31) >> 5) << 2; // bytes per scanline (must be multiple of 4)
    ...
}
* теперь в файле "qimage_р.h" смотрим:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
struct Q_GUI_EXPORT QImageData {        // internal image data
    QImageData();
    ~QImageData();
    static QImageData *create(const QSize &size, QImage::Format format, int numColors = 0);
    static QImageData *create(uchar *data, int w, int h,  int bpl, QImage::Format format, bool readOnly);
 
    QAtomicInt ref;
 
    int width;
    int height;
    int depth;
    int nbytes; 
    
    ...
 
    inline int qt_depthForFormat(QImage::Format format)
    {
    int depth = 0;
    switch(format) {
    ....
    case QImage::Format_RGB666:
    case QImage::Format_ARGB6666_Premultiplied:
    case QImage::Format_ARGB8565_Premultiplied:
    case QImage::Format_ARGB8555_Premultiplied:
    case QImage::Format_RGB888:
        depth = 24;
        break;
    }
    return depth;
    }
}
ТЕПЕРЬ: "ширина" рисунка у меня 10 пикселей, т.е. width=10. Из хидера "выбираем" depth = 24. Делаем расчеты:
((10*24+31) >> 5) << 2 = 32!!!

Сошлось, вроде как... НО!
  1. Что за магическое число 31 (для меня по крайней мере, непонятно за чем увеличивать величину? Чтобы в дальнейшем при округлении (читай далее) не потерять инфу о последних пикселях?)
  2. Смещение на 5 бит дает нам в результате округление - ПОТЕРЯ ИНФЫ (((
  3. Смещение назад на 2 бита - обеспечивает после предыдущего смещения перевод в байты и заполнение последних 2х бит нулями (потеря инфы) и деление на 4 (зачем-то троллям это нуно, пока не разбирался!)

Если дальше для построения рисунка эта инфа не нужна , то просто в голове останется галочка (а может кому-то и поможет): счет ведется приблизительно с точностью в 4 байта)))

Копаем дальше!

Не по теме:

Для модератора!
Надеюсь, не сильно много кода из исходников привожу - он же вроде как общедоступен



Добавлено через 15 минут
Цитата Сообщение от dphn Посмотреть сообщение
data must be 32-bit aligned, and each scanline of data in the image must also be 32-bit aligned
dphn, вот за это спасибо. Я не доглядел этот момент.

Только по поводу применения:
Цитата Сообщение от dphn Посмотреть сообщение
соответственно вместо int bytesPerLine указать 24
я не согласен с Вами. В документации сказано:
bytesPerLine specifies the number of bytes per line (stride).
Т.е. "количество байт на линию", т.е. теперь решаем обратную задачу, которую я Выше уже решил:
* для тестового рисунка с шириной в 10 пикселей это будет 32 байта;
* для реального проекта:
C++ (Qt)
1
2
3
4
5
6
7
IplImage* cvIm = new cvCreateImage( cvSize(a,b), Ipl_Depth_8U, 3); // create image
 
... // get image
 
int bytesPerLine = ((cvIm->width*24 /*depth out qimage_p.h*/ +31) >> 5) << 2 // см. выше мой пост
QImage* qIm = new QImage(
(uchar*)cvIm->imageDataOrigin, cvIm->width, cvIm->heigh, bytesPerLine, QImage::Format_RGB888);
На "бумаге" красиво, буду теперь пробывать в реалии)))

dphn, еще раз спасибо. как будут результаты отпишусь. Будут отрицательные буду дальше "сырцы пытаться копать
0
4 / 1 / 0
Регистрация: 26.02.2013
Сообщений: 30
26.02.2013, 19:04
Так правильно, stride Не ширина всей линии / на высоту.
Удачи
0
1 / 1 / 0
Регистрация: 14.05.2010
Сообщений: 36
26.02.2013, 19:10  [ТС]
Цитата Сообщение от dphn Посмотреть сообщение
Не ширина всей линии / на высоту
ээээ... не понял... тут где-то запятые должны быть??

Докладываюсь: фокус не удался - факир был пьян. Последнюю версию преобразовал так:
C++ (Qt)
1
2
3
4
5
6
7
8
9
        ...
        for (int i = 240; i < 300; i++) {
        imageDat[i] = 0xff;
    }
 
    const int bytes_per_line = ((10 * 24 + 31) >> 5) << 2;
        
    QImage* qImg = new QImage(imageDat, 10, 10, bytes_per_line, QImage::Format_RGB888);
        ...
Результат не изменился ни на пиксель, поэтому не вижу смысла в выкладывании скриншота...((

иСЧу далее... но за помощь все-равно спасибо!
0
4 / 1 / 0
Регистрация: 26.02.2013
Сообщений: 30
26.02.2013, 19:13
От вы ж упрямый. Пожалуйста, напишите 24.
Пожалуйста!!!!!! )))))))))
0
1 / 1 / 0
Регистрация: 14.05.2010
Сообщений: 36
26.02.2013, 19:20  [ТС]
Цитата Сообщение от dphn Посмотреть сообщение
От вы ж упрямый.
Я???!!! ДА!!!
Вот, пожалуйста, Вам Ваши
Цитата Сообщение от dphn Посмотреть сообщение
напишите 24.


Не верите? - Кину исходник - сами проверьте!

У меня на этот счет родилась интересная теория. Сейчас пересчитаю на бумажке - если сойдется напишу, но она никак , судя по всему, не решает изначальную мою проблему "синеватых" рисунков... (((
0
4 / 1 / 0
Регистрация: 26.02.2013
Сообщений: 30
26.02.2013, 19:27
Скиньте мне лучше оригинал картинки на pochta.dolphin СОБАКА gmail.com
0
1 / 1 / 0
Регистрация: 14.05.2010
Сообщений: 36
26.02.2013, 19:42  [ТС]
dphn, допишу сейчас этот пост и
Цитата Сообщение от dphn Посмотреть сообщение
Скиньте мне лучше оригинал картинки на pochta.dolphin СОБАКА gmail.com
Только оригинал картинки с блюдечками скину (я на каком-то сайте о ОпенСВ его нарыл и очень давно как тестовую использую), а оригинала с линиями не существует я его программно рисую (смотрите в предыдущих постах, но исходник кину).

Теперь, как упрямец, опять о баранах. КьюТе считает на линию нам (см. ранее) 32 байта (округленное до кратного 4 в ббольшую сторону), на 10 строчек получается 320 байт. Реально имеем (см. вычисления ранее) 30 байт на строчку, итого на 10 строчек - 300 байт информации. В результате имеем избыточность в 20 байт, т.е. 20/3=6 пикселей, которые (как я предполагаю) КьюТе в конце "рисует" в виде серых/черных пикселей.

На все тех же правах упрямца я сказал Qt, что у меня в строчке находится 30 байт:
C++ (Qt)
1
2
3
4
5
6
        //const int bytes_per_line = ((10 * 24 + 31) >> 5) << 2; // bytes per scanline (must be multiple of 4)
    int width = 10; // pixels
    int depth = 3; // 3 bytes per pixel
    const int bytes_per_line = width*depth;
            
    QImage* qImg = new QImage(imageDat, 10, 10, bytes_per_line, QImage::Format_RGB888);
Результат не заставил себя ждать:


Но! Я думаю, чтоб если бы у меня в основном проекте была такая же картина, то я бы получил смещенные байты, а я там просто "неправильно вижу" некоторый спектр, особенно желтый - так что думаю проблема не в этом, хотя не факт. Сейчас попробую и дальше будет видно.
0
4 / 1 / 0
Регистрация: 26.02.2013
Сообщений: 30
26.02.2013, 19:45
Вот-вот, на опен сырцах. Если жпег индексированный, как это часто бывает...
0
1 / 1 / 0
Регистрация: 14.05.2010
Сообщений: 36
26.02.2013, 19:50  [ТС]
Цитата Сообщение от dphn Посмотреть сообщение
Если жпег индексированный
dphn, а кто говорит о жпеге??? у меня и так производительность хромает, жпег нужен тока в качестве документации определенных моментов и идет в совершенно другой степи, а здесь мне нужно с минимальными действиями выводить (правда, с оптимизацией у меня пока теория и особенно практика хромает) картинку

Добавлено через 39 секунд
На почту Вам кинул как и обещал))
0
4 / 1 / 0
Регистрация: 26.02.2013
Сообщений: 30
26.02.2013, 19:55
хм, GIMP говорит, rgb. Значит, дело не в изображении. Наверное, скидывайте код.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.02.2013, 19:55
Помогаю со студенческими работами здесь

Что использовать Mat или IplImage в OpenCV? Где правда?
В OpenCV есть два стиля С++ и С. В первом случае в примерах используют переменную Mat для описания изображения. Во втором случае -...

Как преобразовать Bitmap (System::Drawing::Image) в IplImage*frame (openCV)?
Как преобразовать Bitmap (System::Drawing::Image) в IplImage*frame (openCV)

Как сохранить QImage (Qt) в lplImage (OpenCV)?
Как сохранить QImage (Qt) в lplImage (OpenCV)?

Как отобразить QImage сложной формы на другом QImage, чтобы фон от 1-го рисунка был прозрачен?
пишу простеньку игрушку в целях осваивания QT. Задача - нарисовать 1 объект QImag поверх другого объекта QImag. Как это сделать ...? ...

Нарушение цветопередачи в видео
Странно работает видеокарта Как это вылечить? Проблема проявляется только при воспроизведении видео (В плеере, и на ютубе в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru