Вопрос

Пытаюсь добавить вторую картинку с таким же функционалом как у основной картинки в контрагента.

В статье https://academy.terrasoft.ru/documents/technic-sdk/7-12/dobavlenie-poly… описано добавление картинки в раздел где нет картинки до этого

Если делаю всё как там - то поля получаются связаны, насколько я понимаю, из-за того что существует только одна системная колонка изображения, на которую они оба ссылаются

Собственно, как мне добавить независимое поле картинки на страницу контрагента с таким же функционалом (изменение, удаление) как и у первой? В конечном итоге обе картинки должна подтягивать печатная форма

У меня такой же вопрос

7 комментариев
Лучший ответ

Ну а добавить вторую системную колонку в объекте? Но по мне это тупиковый вариант, лучше настроить деталь файлы и ссылки на плиточное представление. Удалить при необходимости примечания. Добавить к картинкам в плиточном представлении ваши 2 контрола и вуаля.

О каком таком же функционале речь?, детали файлы и ссылки вам не хватает? Просто через какое то время вам понадобится третья четвертая и тд картинка!

Григорий Чех,

под функционалом я понимал те же оба контрола которые есть у поля логотипа, это показано в статье

Хотелось бы иметь такое же поле как логотип, но отдельное

Ну а добавить вторую системную колонку в объекте? Но по мне это тупиковый вариант, лучше настроить деталь файлы и ссылки на плиточное представление. Удалить при необходимости примечания. Добавить к картинкам в плиточном представлении ваши 2 контрола и вуаля.

Григорий Чех,

благодарю за ответ, попробую сделать так.

Григорий Чех пишет:
Ну а добавить вторую системную колонку в объекте?

А как можно в объект добавить вторую системную колонку?

В данном случае речь идет о колонке, которая отображается только в расширенном режиме отображения схемы таблицы: https://prnt.sc/l9xi52

А как можно в объект добавить вторую системную колонку?

Думаю, что без доступа к исходникам ядра такое не получится. Да и не нужно.

Зверев Александр,

Я тоже так думаю. Возможно, в ответе подразумевалось что-то другое - решила уточнить.

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Здравствуйте. На изображении видно, что я добавил дробное число и "дата". Как указать, что дробное число до 4-х знаков после запятой, а "дата" должна отображаться без времени?

Прикрепленные файлы
Box.PNG8.59 КБ

У меня такой же вопрос

1 комментарий

Добрый день, Анатолий. К сожалению, сделать это непосредственно в мастере у вас не получится, необходимо перейти в конфигурацию, открыть нужный вам объект(например, Contact), в настройках установить галочку "Отображать расширенный список типов колонок", после чего изменить тип колонок на необходимый вам, и опубликовать объект.

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Стоит задача расширить поле "Решение" статьи БЗ от "края до края" для мониторов с разрешением 1920x1080. В принципе можно подключить свой модуль с CSS, и указать

#KnowledgeBasePageV2KnowledgeBasePageGeneralBlockGridLayout-item-KnowledgeBasePageV2NotesContainer{
        width: 110% !important;
}

но в таком случае на мониторах с разрешением меньше, поле не подгоняется под их размер. Подскажите как решить данную задачу.

У меня такой же вопрос

6 комментариев

Олег, в базовых карточках (кроме EmailPageV2, можете как пример использовать) задана фиксируемая ширина:

body[OldUI=false] .center-main-container .grid-layout-row {
  max-width: 140em;
}

Вы можете переопределить базовый для нужного раздела, только укажите дополнительный селектор, чтобы не перекрыть логику ВСЕХ карточек. Например: data-item-marker="KnowledgeBasePageGeneralBlock"

Спасибо за ответ. Такой вариант почему-то не срабатывает. Я нашел немного другое решение, но в таком случае приходится задавать ширину под определенное разрешение

@media (min-width: 1920px) {
	width: 110% !important;
}

Здравствуйте,
Вам нужно классу grid-layout-row ts-box-sizing
Во вложенности под id KnowledgeBasePageV2KnowledgeBasePageGeneralBlockGridLayout
Сбросить стиль max-width в none;
Тогда нужное поле будет во всю ширину на любых разрешениях.

Сбросил max-width в none, теперь не нужно указывать конкретное разрешение. Приведите пожалуйста пример как переопределить свойство класса во вложенности по id? Не смог разобраться, и сделал пока так:

#KnowledgeBasePageV2KnowledgeBasePageGeneralBlockGridLayout > div{
	max-width: none;
}

Извиняюсь, под #KnowledgeBasePageV2KnowledgeBasePageGeneralBlockGridLayout и нет id, так что вариант с #KnowledgeBasePageV2KnowledgeBasePageGeneralBlockGridLayout > div идеальный :twisted:

Если Вам требуется на всю ширину экрана, можете не заморачиваться с @media селекторами
Используйте специальные CSS единицы измерения Viewport Units: vw (1/100 процентное отношение к текущей ширине окна браузера) и vh (1/100 процентное отношение к текущей высоте окна браузера).

width: 100vw
В таком случае вне зависимости от размера экрана - элемент будет занимать всю доступную ширину окна, будьте внимательны с текущим значением box-sizing от чего будет зависеть будут ли в размер элемента включаться его border и margin в зависимости от этого иногда установка 100vw может привести к появлению горизонтальной полосы прокрутки, в таком случае необходимо будет или дополнительно скорректировать отсуты/границы или установить чуть меньшее значение в vw (98 - исходя из практики решает вопросы с типовыми проблемами)

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Коллеги, подскажите пож-та.
Есть необходимость добавить дополнительное поле
Как добавить поле "Название страны на анг" в справочник "страна" ?

У меня такой же вопрос

1 комментарий

Здравствуйте!

Ответили в рамках поддержки, но может кому-то еще понадобится.
Данная задача может быть выполнена следующим образом:
0) Перйдите в конфигурацию
1) Добавьте поле в объект "Страна" (поле с типом строка). Вы можете добавить это поле, заместив объект "Страна"
2) Добавьте схему с типом "Замещающая страница". Схему с типом "Замещающая страница" Вы можете найти в расширенном представлении кнопки "Добавить"
3) Выберите в качестве родительской страницы страницу "Страница редактирования страны"
4) В MainContolLayout Вам необходимо добавить элемент "Текстовое поле" (выделите MainContolLayout и нажмите правой кнопкой мышки, чтобы открыть доступные варианты)
5) Выделите добавленное поле в структуре и переместите его на нужное место (обычное перетаскивание мыши)
6) В свойствах этого поля укажите "Источник данных" - DataSource, Колонка данных - созданная на первом шаге колонка объекта "Страна".
7) Сохраните и опубликуйте страницу.

В результате новое поле будет добавлено на страницу редактирования справочника "Страна".

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Добрый день! Потребовалось добавить поле "Код" в таблицу единиц измерения. Добавление самого поля не составило проблем, добавил его в таблицу, в sq_ запрос и в ds_ выборку. Но есть проблема по добавлению текстового поля в справочник. В администраторе я не нашёл wnd_ объект, который отображается для единицы измерения. В клиентской части, когда я захожу в Справочники->Настройки для пункта "Единицы измерения" не указано окна редактирования. Указан только источник данных. Как я понял, если отсутствует значение у окна редактирования, то поля должны как-то сами подтягиватся. Почему тогда код не появился?

У меня такой же вопрос

1 комментарий

Если окно не указано, то используется стандартное окно редактирования из двух полей - Name и Description.
Сделайте свое окно редактирования (в качестве TemplateWindowUSI = wnd_BaseDBEdit) и укажите его в настройках справочника.

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Добрый день!

В карточке контрагента есть возможность задавать два поля:
"Статус контрагента" и "Категория"
(см. вложенный файл)

При этом в списке "все контрагенты" столбцом отображается только информация из поля "статус контрагента", поле "категория" не подтягивается.

Подскажите как это можно исправить (настроить).

Спасибо.

У меня такой же вопрос

5 комментариев

А где вложенный файл?
Вытянуть колонку в реестр можно, нажав на кнопку [+] в правом верхнем углу реестра и выбрав нужную колонку.
Это только для текущего пользователя, если надо для всех — настраивается иначе.

Файл приложен.
Надо для всех пользователей.
Настраивается иначе - как именно?

спасибо!

Уточняю вопрос. смотрите скрин.

Примерно так:

  • Закрыть Terrasoft.
  • Запустить программу TSAdmin (Администратор Terrasoft).
  • Открыть в ней сервис wnd_AccountsGridArea (выбрать в дереве справа «Accounts\General\Main Grid\wnd_AccountsGridArea»). Откроется дизайнер окна реестра контрагентов.
  • В дизайнере в дереве слева выбрать элемент gvAll (все контрагенты). Нажать на нём правой кнопкой мыши и выбрать «Определить колонки». Откроется список колонок.
  • Найти колонку CategoryID (или как там она у Вас называется), поставить ей галочку возле названия и галочку «Видимая» внизу окошка.
  • Нажать «ОК», затем сохранить изменения в сервисе, нажав на иконку с дискетой.
  • Закрыть TSAdmin, открыть Terrasoft.
  • Александр, спасибо Вам больше. Все получилось!

    Войдите или зарегистрируйтесь, чтобы комментировать
    Публикация

    В базовой версии приложения колонка "Полное название должности" заполняется, если заполнить поле "Должность". Т.е. срабатывает бизнес-правило.

    Если у Вас стоит задача, например, чтобы поле "Полное название должности" автоматически не проставлялось при заполении поля "Должность" (Рис. 1)


    Рис. 1

    то для этого необходимо на замещающей странице «ContactPageV2» добавить следующий метод:

    jobChanged: function() {
    return false;

    },

    который отключает базовый метод jobChanged (отвечает за изменение данных полей).

    Поделиться

    0 комментариев
    Войдите или зарегистрируйтесь, чтобы комментировать
    Вопрос

    Здравствуйте! Подскажите как принудительно поставить поле в фокус?

    У меня по действию в разделе открывается inputBox в котором одно текстовое поле. Как его сразу поставить в фокус?

    У меня такой же вопрос

    9 комментариев

    как-то так

    var columnControl = addConditionView.items.getAt(0).getEl();
    if (!columnControl.getValue()) {
    	columnControl.focus();
    }

    Не совсем понял как это использовать. inputBox делаю следующим образом:

    var config = {
                    BarCode: {
                            dataValueType: Terrasoft.DataValueType.TEXT,
                            caption: 'Штрихкод'
                        }
    };
    Terrasoft.utils.inputBox('Отсканируйте ', callback, ['ok', 'cancel'], this, config,
                        {
                            defaultButton: 0
                        }
    );

    В Terrasoft.MessageBox.Items лежит только две кнопки "Ок" и "Отмена". Моего текстового поля там нет.

    В Terrasoft.MessageBox.controlConfig есть мой BarCode но как его поставить в фокус на открытии inputBox?

    Попробуйте в методе Init() напишите следующее

    var tb = document.getElementById('textBoxId');
    tb.focus()

    Ну через DOM объект я сделал просто вот так:

    $( document ).ready(function() {
                        $('.barcode input').focus();
                        $('.barcode input').keypress(function (event) {
                            if (event.which == '13') {
                                event.preventDefault();
                                $('span[data-item-marker=ОК]').click();
                            }
                        });
     });

    Но решение на мой взгляд не "кошерное". Я думал может можно как-то с помощью дополнительных параметров поля это реализовать.

    А в Terrasoft.MessageBox.init не заходит.

    Здраствуйте. Зачем такие усложенения. Человеку нужно чтоб в нужном поле после загрузки страницы в нужном поле установился фокус. Та и в вашем методе нужно к тому же подключать внешнюю библиотеку JQuery. Для такой простенькой задачки подключать внешнюю библиотеку, когда это можно сделать "чистым" Javascript, как по мне нецелесообразно

    Не после загрузки страницы а после отображения inputBox и в единственном поле. Библиотека JQuery у меня уже была подключена для других целей. Можно сделать и на чистом Javascript тут как-раз разницы никакой.

    А в функции Init() не подойдет проставить фокус?

    В Terrasoft.MessageBox.init ? Я переопределяю этот метод и туда не заходит процесс выполнения скрипта.

    Извините, сразу не понял. Я думал, Вам просто нужно на карточку.

    Войдите или зарегистрируйтесь, чтобы комментировать
    Вопрос

    Стоит задача: Есть задача (активность в bpm), нужно послать письмо ответственному и автору какие поля были изменены. С отправлением письма разберусь, а как в bpm5 получить список всех полей сущности, и как по названию поля получить его заголовок. Думаю понятно объясню в коде

    Entity CurrentEntity = this.Entity; //Текущая запись - задача
    string[] arFieldsNames = ;//как получить в массив строк полей по сущности?
    string[] arFieldsTitles = ;//как получить массив заголовков полей либо ниже, как по названию поля, получить его заголовок?
    var emailBody = "Измененные значения:
    "
    ;//тело для письма
    for(var i=0;iarFieldsNames.Length;i++) {
            //Сравниваем старое и новое значение
            if (CurrentEntity.GetColumnOldValue(arFieldsNames[i]) != CurrentEntity.GetColumnValue(arFieldsNames[i])) {
                            var fieldTitle = ;//как получить сроку "Ответственный" по строке "Owner" или "OwnerId"?
                            emailBody += fieldTitle + ": " + CurrentEntity.GetColumnDisplayValue() + "
    "
    ;//Записываем в тело письма
            }
    }

    Грубо говоря хотелось бы получить такое
    Измененные значения:
    Ответственный: Пользователь2
    Состояние: В работе

    Можно конечно тупо в массивы забить названия и заголовки полей Активности, но вдруг это понадобится для Документов, Продаж и т.д. Постоянно вбивать как-то не очень хочется, а хочется универсальности.

    У меня такой же вопрос

    3 комментария

    Хороший вопрос, поддерживаю.

    Здравствуйте!
    Доступ к колонкам можно получить так:

    var columns = this.Entity.Schema.Columns; //коллекция колонок
    //затем можно их перебрать
    foreach (var column in columns)
    {
    	//своя логика
            //column.Caption - подпись колонки, например
    }

    Если делать в БП, то можно получить схему из элемента "Чтение данных" так:

    var schema = ReadDataUserTask1.ResultEntity.Schema;

    То что надо. Спасибо.

    Войдите или зарегистрируйтесь, чтобы комментировать
    Вопрос

    В процессе администрирования базы данных возникла необходимость определить причину возникновения ошибки. Определенный объём информации импортируется в базу данных, с которым далее пользователи работают. В процессе заполнения определенного набора полей автоматически высчитывалась итоговая сумма в поле «Итого». Но в определённый промежуток времени использования продукта начали появляться ошибки, связанные с несоответствием значения поля «Итого» сумме полей из которых оно вычисляется («Сумма покупки», «Наценка», «Сбор» и т.д.). Так как ошибку не получалось явно повторить, необходимо было разработать механизм для решения данной проблемы.

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

    В основу решения было положено создание двух таблиц в базе данных для ведения логов, что происходят с записью набора данных. Первая таблица WindowLog, а вторая TriggerLog.

    Первая таблица WindowLog включает в себя поля «Дата создания»(CreatedOn), «Идентификатор записи» (RecordID), «Ответственный» (WindowsUser), «Имя поля породившего событие»(FieldName), «Итого» и поля из которых оно вычисляется («Сумма покупки», «Наценка», «Сбор» и т.д.). Для наполнения таблицы было использованы события невизуального компонента окна dlData: dlDataOnDatasetDataChange, dlDataOnDatasetBeforePost и dlDataOnDatasetAfterPost. В скрипте в событиях была создана функция, которая формировала SQL запрос к таблице WindowLog базы данных с фиксацией информации по указанным полям на момент срабатывания события.

    Запрос:

    INSERT INTO WindowLog (*набор полей*)
    SELECT (*набор полей*) -- Dataset('поле1'), Dataset('поле2'), Dataset('поле2')

    Вторая таблица TriggerLog включает в себя поля «Дата создания»(CreatedOn), «Идентификатор записи» (RecordID), «Состояние» (до изменения записи и после), «SystemUser», «Итого» и поля из которых оно вычисляется («Сумма покупки», «Наценка», «Сбор» и т.д.). Для заполнения данной таблицы был создан триггер на инструкцию UPDATE проблемной таблицы с двумя запросами вставки значений в таблицу. В одном запросе вставлялись значения до изменений, а во втором после.

    Запрос №1:

    INSERT INTO TriggerLog (*набор полей*)       
    SELECT (*набор полей*)
    FROM deleted

    Запрос №2:

    INSERT INTO TriggerLog (*набор полей*)       
    SELECT (*набор полей*)
    FROM inserted

    Результатом использования данного решения на основе анализа таблицы WindowLog было установлено, что срабатывают все события окна редактирования, влияющие на вычисление значения поля «Итого». В процессе использования окна редактирования и после сохранения записи значения поля «Итого» были корректны.

    Проанализировав записи в таблице TriggerLog было установлено, что в результате выполнения инструкции UPDATE было внесено некорректное значение. Сопоставив даты создания записей в таблице TriggerLog и WindowLog было установлено, что инструкция UPDATE была вызвана не в результате манипуляций с окном редактирования, а иным источником. На основании поля «SystemUser» таблицы TriggerLog было установлено что изменения были внесены с помощью импортера данных.

    Таблицу TriggerLog возможно расширить, добавив в нее поля, которые помогут ускорить процесс обнаружение источника изменений записи базы данных. Список дополнительных полей может выгладять следующим образом: ApplicationName, LoginName, HostName.

    PS: Принимаю предложения на доработку вашей конфигурации!!! Для более детальной информации можно связаться по следующему e-mail адресу: providnui@ukr.net !!!

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

    Всем удачи в этом не легком процессе!!!

    У меня такой же вопрос

    0 комментариев
    Войдите или зарегистрируйтесь, чтобы комментировать