Каталог решений - Сохраняемые дополнительные реквизиты без изменения закрытости конфигурации (доработан другой вариант)

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

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

В наличии

В поставленном ТЗ указано, что:
1. Документ должен содержать дополнительные сохраняемые поля;
2. Конфигурация должна остаться «оригинальной», т.е. закрытой, для упрощения установки обновления версий

Категория:

Описание

Желание заказчика, если не расходится с Законом, и существенно облегчает работу всегда должно быть выполнено и качественно. Поставлено вот такое ТЗ:
1. документ должен содержать дополнительные поля для контроля;
2. Конфигурация должна остаться «оригинальной», т.е. закрытой.

Документ – АвансовыйОтчет. Движения, формируемые документом, должны быть такие, как и раньше, но вот форма ввода документа и форма печати меняется в части внесения дополнительных реквизитов в табличную часть.

Подробнее.

Сотрудник берёт сумму в рублях на командировку за рубеж. Расходует её по своему усмотрению. К примеру, покупка билетов (туда и обратно), проживание в гостинице за валюту и т.п.. Короче присутствуют РАЗНЫЕ валюты в разных строках ТЧ документа, отличные от рублей. Поскольку организация работает только с рублями, то никаких валютных касс нет… и не надо. Но вот понять, куда что ушло – необходимо.

 Первое решение было следующее:

  1. Используем расширение конфигураций. В форме документа, добавленной в расширение, вписываем новые реквизиты формы (Валюта, СуммаВВалюте, Курс), добавляем новые функции. Добавляем дополнительный отчёт;
  2. Проблема осталась с сохранением данных, точнее нет проблем, сохраняем с помощью механизма ХранилищеДанных, где однозначно идентифицируем хранилище по идентификатору документа

Перед сохранением данных добавляем процедуру

&НаСервере
Процедура Расш1_ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
  Если НЕ Объект.Прочее.Количество() = 0 Тогда
    ТЗПрочее = Новый ТаблицаЗначений;
    ТЗПрочее = Объект.Прочее.Выгрузить( , "Валюта, СуммаВВалюте, Курс");
  Иначе
    ТЗПрочее = Неопределено;
  КонецЕсли;
  УстановитьПривилегированныйРежим(Истина);
  ТекущийОбъект.УстановитьСсылкуНового(Документы.АвансовыйОтчет.ПолучитьСсылку(Новый УникальныйИдентификатор));
  ОбщегоНазначения.ХранилищеНастроекДанныхФормСохранить(ТекущийОбъект.ПолучитьСсылкуНового().УникальныйИдентификатор(), "Прочее", ТЗПрочее, , "ИмяЕдиногоПользователя");
  УстановитьПривилегированныйРежим(Ложь);
  КонецЕсли;
КонецПроцедуры

При открытии формы добавляем процедуру

&НаСервере
Процедура Расш1_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
  УстановитьВыполнениеПослеОбработчиковСобытия("ВыполнитьПослеТиповогоОбработчика", );
КонецПроцедуры

&НаСервере
Процедура ВыполнитьПослеТиповогоОбработчика(Отказ, СтандартнаяОбработка, ДополнительныеПараметры)
  Если НЕ Объект.Ссылка.Пустая() Тогда
    ТЗПрочее = Новый ТаблицаЗначений;
    УстановитьПривилегированныйРежим(Истина);
    ТЗПрочее = ОбщегоНазначения.ХранилищеНастроекДанныхФормЗагрузить(
    Объект.Ссылка.УникальныйИдентификатор(), "Прочее", Неопределено, , "ИмяЕдиногоПользователя");
    УстановитьПривилегированныйРежим(Ложь);
    Если НЕ ТЗПрочее = Неопределено Тогда
      Для СчСтрок = 0 По Объект.Прочее.Количество() - 1 Цикл
        ЗаполнитьЗначенияСвойств(Объект.Прочее[СчСтрок], ТЗПрочее[СчСтрок]);
      КонецЦикла;
    КонецЕсли;
  КонецЕсли;
КонецПроцедуры

Тут сохранение производится только для одного пользователя, чтение тоже от этого пользователя «ИмяЕдиногоПользователя». В следствии этого включается и отключается привилигированный режим.

В принципе задача решена и всё работает, но…

Хочется узнать насколько корреткное такого рода решение в части использования хранилища данных? По идее внутренняя таблица, используемая для хранилища данных форм не ограничена в объёме данных для клиент-серверного решения.

Второй вариант. Добавлено и доработано.

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

В администрирований установил возможность использования дополнительных реквизитов и сведений.  Ввёл дополнительнительное сведение «ДопСведенияИТД» для документа «Авансовый отчет» с неограниченной длинной строки.  По сути все доп данные для каждой таблицы для каждой строки, которых нет в типовой конфигурации записываются именно в этот параметр как строка с разделителями. Разделитель стандартный «;», но уже имелся опыт, когда пользователи вводили и такой символ в наименовании.

Также, мне показался интересен вариант сохранения не простого текста, а формата JSON, т.к. этот формат наиболее информативен и любые символы там вроде как разрешены (с экранированием)

Жду замечаний и предложений.

has been added to your cart:
Оформление заказа