Заполнить данными по двум структурам

1. Bessondo 3 22.08.18 12:00 Сейчас в теме
День добрый, товарищи. Помогите разобраться
Имеется печатная форма, макет которой заполняется структурой. Появилась необходимость добавить еще одну структуру. Но макет должен заполняться таким образом, что если одно из значений первой структуры пустое, то заполняется значением из второй структуры. Примерный код такой:
СтруктураДоп = Новый Структура;
СтруктураДоп.Вставить("МО", 1);
СтруктураДоп.Вставить("КТП",2);
СтруктураДоп.Вставить("КТК",3);

СтруктураДоп2 = Новый Структура;
СтруктураДоп2.Вставить("МО", 11);
СтруктураДоп2.Вставить("КТП",22);
СтруктураДоп2.Вставить("КТК",33);

Для Каждого Стр Из СтруктураДоп Цикл
Сообщить(Стр.Ключ);
Сообщить(Стр.Значение);
//здесь условие будет на проверку заполненности Стр.Значение
//если то..........иначе получаем по текущему ключу соттветствующее значение второй структуры
СоотвЗначениеДоп2 = "";
СтруктураДоп2.Свойство(Стр.Ключ,СоотвЗначениеДоп2);
Сообщить(СоотвЗначениеДоп2);
КонецЦикла;
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. vadim1011985 101 22.08.18 12:10 Сейчас в теме
(1) откуда получаются структуры ? не легче ли на момент формирования структур в поля структуры писать нужные значения,

так же можете воспользоваться оператором "?"

НужноеЗначение = ? (ЗначениеЗаполнено (СтруктураДоп1.Значение), СтруктураДоп1.Значение, СтруктураДоп2.Значение) 
5. Bessondo 3 22.08.18 12:19 Сейчас в теме
(4) В документе есть табличная часть, в ней две одинаковые колонки, которые заполняются из справочника.
И вот в печатной форме, если строка из первой колонки не заполнена, но заполнена вторая, заполнять в макете второй
6. vadim1011985 101 22.08.18 12:30 Сейчас в теме
(5) по-моему проще на момент формирования структуры в поля структуры писать значение из нужной колонки , и не менять алгоритм печати
alex-l19041; +1 Ответить
10. 🅵🅾️🆇 524 22.08.18 13:44 Сейчас в теме
(5)
Так зачем вообще структуры?
Заполняйте прям из таблицы значений.
Ну или сразу формируйте структуру с заполненными значениями.
Массив элементами которого являются структура.
Структура содержащая структуру.
Ну или двумерный массив, например.
А еще есть соответсвие.

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

Если платформа более-менее современная и колонки таблицы составного типа: ЗначениеЗаполнено()
2. alex-l19041 8 22.08.18 12:06 Сейчас в теме
и в чем собственно вопрос?
3. Bessondo 3 22.08.18 12:09 Сейчас в теме
(2) Условие и заполнение макета
7. KlesAlex 3 22.08.18 12:47 Сейчас в теме
Сделайте третью структуру и в цикле перебора первой её заполняйте. В процессе заполнения анализируйте заполненность вашего "Значения" и если пустое - берите из следующей структуры
SuhoffGV; alex-l19041; +2 Ответить
8. SanyMaga 68 22.08.18 13:05 Сейчас в теме
Примерный код такой: 
СтруктураДоп = Новый Структура; 
СтруктураДоп.Вставить("МО",	1); 
СтруктураДоп.Вставить("КТП",2); 
СтруктураДоп.Вставить("КТК",3); 

СтруктураДоп2 = Новый Структура; 
СтруктураДоп2.Вставить("МО",	11); 
СтруктураДоп2.Вставить("КТП",22); 
СтруктураДоп2.Вставить("КТК",33); 

Для Каждого Стр Из СтруктураДоп Цикл 
Сообщить(Стр.Ключ); 
Сообщить(Стр.Значение); 
//здесь условие будет на проверку заполненности Стр.Значение 
//если то..........иначе получаем по текущему ключу соттветствующее значение второй структуры 

СоотвЗначениеДоп2 = ?(ЗначениеЗаполнено(Стр.Значение),Стр.Значение,СтруктураДоп2[Стр.Ключ]); 

//СтруктураДоп2.Свойство(Стр.Ключ,СоотвЗначениеДоп2); 
Сообщить(СоотвЗначениеДоп2); 
КонецЦикла;
Показать
9. 🅵🅾️🆇 524 22.08.18 13:36 Сейчас в теме
(8)
С небольшой поправочкой.
0 и "" - это тоже значения, как мне кажется, удовлетворяющие автора.
Действовать надо не через ЗначениеЗаполнено(), а через Структура.Свойство(Ключ)

UPD:
Хотя нет, вру, в таком случае надо было бы взять структуру с неприоритетными данными и полностью дописать в нее все данные из более приоритетной структуры.
11. SanyMaga 68 22.08.18 13:50 Сейчас в теме
(9)
Для чего Структура.Свойство(Ключ) если итак идет перебор всех элементов структуры.
13. 🅵🅾️🆇 524 22.08.18 13:53 Сейчас в теме
(11)
Структура.Свойство(Ключ) - возвращает булево означающее существует ли заданый ключ в структуре.
Я не читал комментарии и не знал, что автор за какойто радостью сериализует колонки табличной части в отдельные структуры. И до сих пор не понимаю, почему структуры, если они выгружаются в массивы, да и зачем вообще это надо, если можно работать напрямую с таблицей значений.
14. SanyMaga 68 22.08.18 13:56 Сейчас в теме
(13)

я имел в виду
Для Каждого Стр Из СтруктураДоп Цикл
существет = СтруктураДоп .Свойство(Стр.Ключ) //Всегда истина
КонецЦикла
15. 🅵🅾️🆇 524 23.08.18 09:46 Сейчас в теме
(14)
А я имел ввиду:

Для Каждого Стр Из СтруктураДоп Цикл 
  Если СтруктураОсн.Свойство(Стр.Ключ) Тогда Продолжить КонецЕсли;
  СтруктураОсн.Вставить(Стр.Ключ, Стр.Значение);
КонецЦикла
12. SanyMaga 68 22.08.18 13:52 Сейчас в теме
(8)

Примерный код такой: 
СтруктураДоп = Новый Структура; 
СтруктураДоп.Вставить("МО",    1); 
СтруктураДоп.Вставить("КТП",2); 
СтруктураДоп.Вставить("КТК",3); 

СтруктураДоп2 = Новый Структура; 
СтруктураДоп2.Вставить("МО",    11); 
СтруктураДоп2.Вставить("КТП",22); 
СтруктураДоп2.Вставить("КТК",33); 

Для Каждого Стр Из СтруктураДоп2 Цикл // СтруктураДоп2
Сообщить(Стр.Ключ); 
Сообщить(Стр.Значение); 
//здесь условие будет на проверку заполненности Стр.Значение 
//если то..........иначе получаем по текущему ключу соттветствующее значение второй структуры 

СоотвЗначениеДоп2 = ?(СтруктураДоп.Свойство([Стр.Ключ]) и ЗначениеЗаполнено(СтруктураДоп[Стр.Ключ]) ,СтруктураДоп[Стр.Ключ],Стр.Значение); 

//СтруктураДоп2.Свойство(Стр.Ключ,СоотвЗначениеДоп2); 
Сообщить(СоотвЗначениеДоп2); 
КонецЦикла;


Показать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот