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

08.12.16

Задачи пользователя - Адаптация типовых решений

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

Скачать файлы

Наименование Файл Версия Размер
АвансовыйОтчет_161206_006.cfe
.cfe 75,49Kb
2
.cfe 161206_006 75,49Kb 2 Скачать

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

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

Подробнее.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Расширение конфигураций дополнительные поля хранение данных

См. также

Табличная часть в доп. реквизитах и формирование таблиц в шаблоне docx для 1С:ДО 3.0

Адаптация типовых решений Платформа 1С v8.3 1С:Документооборот Россия Платные (руб)

Расширение конфигурации для «1С:Документооборот КОРП», редакция 3.0. позволяет: 1.использовать произвольные табличные части в качестве дополнительных реквизитов к документу; 2 использовать произвольные табличные части в шаблонах в формате docx для автоматического заполнения таблиц.

29400 руб.

29.06.2023    4448    9    4    

18

Расширение для 1С:УНФ. Автоматическое снятие резервов в Заказах покупателей

Логистика, склад и ТМЦ Адаптация типовых решений Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Россия Управленческий учет Платные (руб)

Чтобы не допустить путаницы с обещаниями клиентам и для четкого контроля исполнения заказов мы используем резервирование товаров. Мы доработали УНФ, чтобы она автоматически отменяла старые резервы и не мешала эффективно продавать.

7200 руб.

02.08.2023    2952    4    0    

19

Создать на основании - своя кнопка (БСП). Проблема двух подменю Создать на основании

БСП (Библиотека стандартных подсистем) Адаптация типовых решений Платформа 1С v8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

Понадобилось в подменю "Создать на основании" добавить свою команду, которая открывает обработку. В процессе доработок появилась проблема двух подменю "Создать на основании". В статье о том, как решились проблемы.

01.03.2024    1281    dimanich70    6    

13

Доработка отчета "Связанные документы" (структура подчиненности) для вывода объектов из любого расширения

Адаптация типовых решений Платформа 1С v8.3 1С:Управление торговлей 11 Россия Абонемент ($m)

Доработка типового отчета "Связанные документы" позволяет просто и быстро расширять состав объектов для построения структуры подчиненности документов, используя объекты основной конфигурации и любых расширений.

1 стартмани

27.10.2023    1991    13    avmartynov    10    

43

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2071    21    progmaster    7    

3
Отзывы
1. gzharkoj 502 03.11.16 18:38 Сейчас в теме
А почему выбрали именно хранилище настроек? Если уж конфигурацию менять нельзя, то почему бы не использовать дополнительные реквизиты (да хоть прикрепляемые файлы)? по крайней мере это не будет зависеть от платформы, а если косячная платформа выйдет и похерит настройки форм?
FractonKireyev; ybatiaev; +2 Ответить
Остальные комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. gzharkoj 502 03.11.16 18:38 Сейчас в теме
А почему выбрали именно хранилище настроек? Если уж конфигурацию менять нельзя, то почему бы не использовать дополнительные реквизиты (да хоть прикрепляемые файлы)? по крайней мере это не будет зависеть от платформы, а если косячная платформа выйдет и похерит настройки форм?
FractonKireyev; ybatiaev; +2 Ответить
2. ybatiaev 58 03.11.16 23:47 Сейчас в теме
(1) ifal, Тоже так думаю. В прикрепленных файлах было бы удобнее с одной стороны, но это дополнительная операция чтение-запись дополнительная. Пока отказался. А что может "почистить" данные хранилища в принципе? Новые формы?
3. gzharkoj 502 04.11.16 20:31 Сейчас в теме
(2) у вас в любом случае чтение и запись, хранилище настроек тоже в базе хранятся.
Хранилище настроек по большей части это такие данные, при потере которых целостность базы данных не пострадает, соответственно и требование целостности к этим данным другие. Например, при работе с СУБД Postgres был перепад напряжения и база оказалось поврежденной, после небольшого анализ причина была найдена в таблице пользовательских настроек определенной формы списка документа, решение было простое: очистить записи этой таблицы по определенному документу. Если тоже самое произойдет с настройками формы, где сделано хранение данных как у вас, уже так просто не решишь проблему. Другими словами, всему свое место.

И еще момент, вы сохраняете данные для пользователя, которого нет в базе, на сколько я понимаю. Вот если сделать тестирование и исправление полное, интересно, удалить ли система эти данные, как записи, для которых нет ключевого объекта-пользователя.
ybatiaev; +1 Ответить
4. ybatiaev 58 05.11.16 17:56 Сейчас в теме
(3) ifal, Пользователь точно есть. И он с правом администрирования базы данных. Без реального пользователя сохранить нельзя. По поводу второго варианта тоже есть решение уже. Вообще, на мой взгляд, оба решения "по нормальному" не верные и идут от ущербности расширения. Надо потестить 8.3.9.1850 ещё. Спасибо за ответ!
5. gzharkoj 502 05.11.16 21:37 Сейчас в теме
(4) вот на счет "нормальности" таких решений абсолютно согласен!
6. Омский Домовой 408 09.11.16 09:47 Сейчас в теме
Иногда приходится чистить настройки пользователей в том числе и форм. В таком случае сохраненные там данные будут потеряны.
ybatiaev; +1 Ответить
8. ybatiaev 58 09.11.16 13:23 Сейчас в теме
(6) Омский Домовой, Да, именно из-за этого и написал тут, хотелки клиента сделал, но и проблемы с формами известны. Тем более формы вообще имеют свойства меняться. Через год поменяются с управляемых на суперуправляемые и вcё. Поэтому этот вариант не хороший. Согласен с Вам. В 8.3.9.* вроде бы что-то обещают сделать
7. МимохожийОднако 141 09.11.16 11:18 Сейчас в теме
Можно попробовать использовать РС "Безопасное хранилище данных"
ybatiaev; +1 Ответить
9. nikivr 16.11.16 23:09 Сейчас в теме
(7) МимохожийОднако,
Подскажите пожалуйста как это правильно сделать или возможно есть готовые примеры разработки?
Спасибо
10. ybatiaev 58 17.11.16 09:21 Сейчас в теме
(9) nikivr, так мы сейчас сделали в прикрепляемых файлах, поскольку файлы уже никто не удалит с сервера. Но прикрепляемые файлы и статистика не очень дружат. Сами понимаете, чтобы собрать статистику по 1000 записей нужно столько же раз произвести чтение. Но сейчас ставим 8.3.9.* и там ещё посмотрим варианты. Безопасное хранилище тоже небольшой выход. Напишу, как будет вариант.
11. nikivr 17.11.16 19:49 Сейчас в теме
(10) ybatiaev,
Я ставил 8.3.9 чтобы полноценно начать пользоваться расширениями конфы. Создавать дополнительные реквизиты в расширении мы не можем.
А чем вам не нравится РС Безопасное хранилище данных? Будет дольше читать из хранилища, нежели из прикрепленных файлов?
12. ybatiaev 58 17.11.16 19:51 Сейчас в теме
(11) nikivr, Немного загрузка. Но и это попробую.
13. ybatiaev 58 09.02.17 15:09 Сейчас в теме
(9) вот выложил реальный пример. Он работает нормально и уже давно. Потерь данных пока не предвидится. Код привёл - проверяйте. Если будут предложения - пишите.
Оставьте свое сообщение