1)Мне нужно взять ответ функции SetHelloAttribute() и назначить в поле UsrTypeSale. Не могу понять реализацию, так как недавно начал изучать данный продукт. Буду признателен за помощь.
Ислам. судя по приведенному фрагменту, эта функция не возвращает значения, но в процессе работы заполняет атрибут HelloAttribute. Вы можете её изменить, чтобы она писала сразу в нужное Вам поле UsrTypeSales, а затем просто запустить в нужном месте, либо же оставить функцию без изменений и в Вашей функции calculateBalance сначала вызывать её, а затем копировать из атрибута в поле.
Ислам. судя по приведенному фрагменту, эта функция не возвращает значения, но в процессе работы заполняет атрибут HelloAttribute. Вы можете её изменить, чтобы она писала сразу в нужное Вам поле UsrTypeSales, а затем просто запустить в нужном месте, либо же оставить функцию без изменений и в Вашей функции calculateBalance сначала вызывать её, а затем копировать из атрибута в поле.
Не удается выполнить копирование локализируемой строки ScriptTemplate из BaseGeneratedWebFormPageV2 в мою созданную. При попытке записи значения и сохранения, после сохранение значение этой строки становится пустым.
На какой версии наблюдается такая проблема? Отмечу, что значение локализированной строки содержит много спецсимволов для тегов, уточните бизнес задачу, для которой необходимо выполнить их копирование.
В процессе администрирования базы данных возникла необходимость определить причину возникновения ошибки. Определенный объём информации импортируется в базу данных, с которым далее пользователи работают. В процессе заполнения определенного набора полей автоматически высчитывалась итоговая сумма в поле «Итого». Но в определённый промежуток времени использования продукта начали появляться ошибки, связанные с несоответствием значения поля «Итого» сумме полей из которых оно вычисляется («Сумма покупки», «Наценка», «Сбор» и т.д.). Так как ошибку не получалось явно повторить, необходимо было разработать механизм для решения данной проблемы.
Естественно самой реальной и первой причиной возникновения такой ошибки приходила идея о сбоях в работе событий полей окна редактирования (то есть значения в полях изменялись, а события данных полей(-я) не срабатывали).
В основу решения было положено создание двух таблиц в базе данных для ведения логов, что происходят с записью набора данных. Первая таблица WindowLog, а вторая TriggerLog.
Первая таблица WindowLog включает в себя поля «Дата создания»(CreatedOn), «Идентификатор записи» (RecordID), «Ответственный» (WindowsUser), «Имя поля породившего событие»(FieldName), «Итого» и поля из которых оно вычисляется («Сумма покупки», «Наценка», «Сбор» и т.д.). Для наполнения таблицы было использованы события невизуального компонента окна dlData: dlDataOnDatasetDataChange, dlDataOnDatasetBeforePost и dlDataOnDatasetAfterPost. В скрипте в событиях была создана функция, которая формировала SQL запрос к таблице WindowLog базы данных с фиксацией информации по указанным полям на момент срабатывания события.
Вторая таблица TriggerLog включает в себя поля «Дата создания»(CreatedOn), «Идентификатор записи» (RecordID), «Состояние» (до изменения записи и после), «SystemUser», «Итого» и поля из которых оно вычисляется («Сумма покупки», «Наценка», «Сбор» и т.д.). Для заполнения данной таблицы был создан триггер на инструкцию UPDATE проблемной таблицы с двумя запросами вставки значений в таблицу. В одном запросе вставлялись значения до изменений, а во втором после.
Запрос №1:
INSERTINTO TriggerLog (*набор полей*) SELECT(*набор полей*) FROM deleted
Запрос №2:
INSERTINTO TriggerLog (*набор полей*) SELECT(*набор полей*) FROM inserted
Результатом использования данного решения на основе анализа таблицы WindowLog было установлено, что срабатывают все события окна редактирования, влияющие на вычисление значения поля «Итого». В процессе использования окна редактирования и после сохранения записи значения поля «Итого» были корректны.
Проанализировав записи в таблице TriggerLog было установлено, что в результате выполнения инструкции UPDATE было внесено некорректное значение. Сопоставив даты создания записей в таблице TriggerLog и WindowLog было установлено, что инструкция UPDATE была вызвана не в результате манипуляций с окном редактирования, а иным источником. На основании поля «SystemUser» таблицы TriggerLog было установлено что изменения были внесены с помощью импортера данных.
Таблицу TriggerLog возможно расширить, добавив в нее поля, которые помогут ускорить процесс обнаружение источника изменений записи базы данных. Список дополнительных полей может выгладять следующим образом: ApplicationName, LoginName, HostName.
PS: Принимаю предложения на доработку вашей конфигурации!!! Для более детальной информации можно связаться по следующему e-mail адресу: providnui@ukr.net !!!
В случае возникновения дополнительных вопрос по теме могу поделиться более детальной информацией.
Рассмотрим реализацию функционала на конкретном примере.Видоизменяем карточку контакта для собственных нужд: создаем отдельные поля "Фамилия", "Имя", "Отчество". Но также оставляем поле "ФИО", которое должно заполняться автоматически на основании суммы значений в вышеуказанных полях.
Для реализации подобного функционала во-первых, требуется создать функцию, которая будет заполнять поле ФИО. Эту функцию можно создать вначале скрипта, в котором будет обработчик события OnDatasetDataChange:
function CreateName(Dataset){ var FirstName = Dataset.Values('FirstName');
FirstName =(IsEmptyValue(FirstName)?'':' '+ FirstName); var Surname = Dataset.Values('Surname');
Surname =(IsEmptyValue(Surname)?'': Surname); var PatronymicName = Dataset.Values('PatronymicName');
PatronymicName =(IsEmptyValue(PatronymicName)?'':' '+ PatronymicName);
Dataset.Values('Name')= Surname + FirstName + PatronymicName; }
Затем на событии OnDatasetDataChange датасета необходимо для каждого из полей вызывать созданную предварительно функцию:
По аналогии с предоставленным примером Вы можете реализовать функционал по заполнению, например поля "Адрес" в карточках или же каких-либо других полей, в которых должна храниться сумма значений одного или нескольких других полей карточек.