Существует несколько таблиц значений, данные в которые попадают из макетов по нажатию кнопки. У макетов есть области с параметрами. Параметры заполняются перед выводом в таблицы значений, на основании информации, введённой пользователем ранее.
Происходит примерно следующий алгоритм: получаем макет в табличный документ, по областям заполняем параметры, переводим табличный документ в таблицу значений и загружаем в ТЗ на форме.
Но вот беда, по условию задачи непараметризуемый текст из макета пользователь тоже может менять. И к заполнению данных может возвращаться.
И вот, когда он жмякает по волшебной кнопке второй раз, его изменения текста пропадают, обновляются только параметры. Не устраивает.
Я придумал вот что: завёл структуру параметров, которая заполняется непосредственно после первого вывода таблиц значений. Если они пустые, то функцией СтрЗаменить меняю слова в []-скобках на текущие параметры и заполняю параметрами структуру. При повторном заполнении таблицы, не трогаю макет, только по каждой строке отдельно ищу уже текстовые совпадения со структурой параметров. Той же конструкцией СтрЗаменить меняю старые переменные на новые. Перезаписываю структуру. Изменения текста остаются, новые переменные добавлены.
И в теории вроде бы всё хорошо, но на практике получается так, что иногда СтрЗаменить меняет что-то ещё, что менять не надо было. Просто совпало. Да и в целом решение кажется мне убогим. Хочу спросить совета у уважаемых участников форума, можно ли как-то по-другому выйти из ситуации?
---
я бы хранил это следующим образом:

ЗаполненныйШаблон= Новый Структура("Шаблон, Параметры"
, "Кооператив создается за счет [ОбязательныеВзносы] взносов, осуществляет [ВидыДеятельностиКооператива2] и иную деятельность."
, Новый Структура("ОбязательныеВзносы,ВидыДеятельностиКооператива2", "вступительный ", "наноинновационную"))
---
непараметризуемый текст из макета пользователь тоже может менять - сделать этот текст еще одним параметром.......
---
как вы себе это представляете?
---
Если параметры будут записываться сл. образом: [ИмяПараметра:ЗначениеПараметр] это не поможет избежать "совпадений"?
---
Вы навели меня на мысль, что
Строку таблицы с подобной меткой переменной надо где-то хранить и перезаписывать.
Какая-то скрытая доп таблица с текстом и разделителями переменных...
---
я бы хранил это следующим образом:

ЗаполненныйШаблон= Новый Структура("Шаблон, Параметры"
, "Кооператив создается за счет [ОбязательныеВзносы] взносов, осуществляет [ВидыДеятельностиКооператива2] и иную деятельность."
, Новый Структура("ОбязательныеВзносы,ВидыДеятельностиКооператива2", "вступительный ", "наноинновационную"))
---
Спасибо, так и сделаю.
---
рад помочь. По себе знаю как иногда замыливается восприятие задачи и просто не хватает постороннего свежего взгляда. Ещё одна сложность что это замыливание происходит в таких дебрях, которые и описать для постороннего взгляда очень сложно.
Удачи!
---
Добавлю только номер пункта для однозначной идентификации
---
Вот маленький пример
Кооператив создается за счет [ОбязательныеВзносы] взносов, осуществляет [ВидыДеятельностиКооператива2] и иную деятельность.
Параметры видны? Видны. Текст виден? Виден.
[Кооператив создается за счет] [ОбязательныеВзносы] [взносов, осуществляет] [ВидыДеятельностиКооператива2] [и иную деятельность.]
Параметры видны? Видны. Текст виден? Где он?
---
можно скрин ? (то что видит и меняет пользователь )
---
так это видит пользователь. Эту строку он может перезаписать
---
Не уверен, что до конца понял суть решаемой задачи, но если всё же понял правильно, то почему бы не использовать разное обрамление для {Текста} и [Параметров]?!
---
{Кооператив создается за счет} [ОбязательныеВзносы] {взносов, осуществляет} [ВидыДеятельностиКооператива2] {и иную деятельность.}
Что изменилось?
Я понимаю, что довольно путано объясняю, но постараюсь и вас понять тоже.
Смотрите, макет мы менять не можем. Пользователь меняет строки в таблице, которые подгружаются из макета только в первый раз. Вот это "[ОбязательныеВзносы]" превращается в "вступительный и паевой", например. Таким образом после возвращения к редактированию таблицы во второй раз в ней уже нет никаких разделителей.
---
Что значит "должно автоматически произойти списание при изменении статуса".
Документ уже проведен? или только записан? должны изменяться движения проведенного документа? Что должно происходить если пользователь сначала изменил статус на "Производство", а затем вернул статус в "Закупка" или изменил еще на какой-нибудь?