1с скопировать структуру в структуру
Структура в языке программирования платформы 1С 8.3 (8.2) — это коллекция некоторых значений в связке с ключом. Эта связка ключа со значением называется «КлючИЗначение». Ключ структуры уникален в рамках данной структуры. Причем к значениям структуры можно обращаться как к свойствам объекта, используя название ключа.
Объект Структура создается с помощью конструктора Новый.
Структура1 = Новый Структура;
Со структурами можно работать и в серверном и клиентском контексте, причем в клиентском контексте с ними можно работать как под толстым клиентом, так и под тонким клиентом.
В значения структуры можно записать переменные любого типа, но использование типов в этом случае очень сильно зависит от контекста и от вида клиента: мы не можем в клиентском контексте задать значение, тип которого работает только в серверном контексте (например, ДокументОбъект.<>).
Как создать новую структуру, Вы знаете, теперь выясним, как создаются новые элементы данного объекта. Делается это с помощь метода Вставить.
Вот его синтаксис:
Параметр Ключ имеет тип значения Строка. Он может иметь любое название, какое захочет разработчик (но помним про ограничения в названиях переменных). Параметр Значение может иметь любой тип.
Обращаю Ваше внимание, что связка «Ключ и значение» уникальна, поэтому если Вы напишете для одной структуры два метода Вставить с одинаковыми ключами и разными значениями, то все равно в структуре будет одна связка «Ключ и значение», причем значение возьмется с последнего метода.
Не всегда обязательно использовать метод Вставить, чтобы добавить пару КлючИЗначение в структуру, иногда это можно сделать в конструкторе. Тогда конструктор будет иметь следующий вид:
Структура1 = Новый Структура(Ключ, Значение);
Переделаем предыдущий пример:
В случаях выше мы не стали думать над названиями ключей, Вы же в процессе работы можете давать ключам любые названия, какие захотите. Главное, чтобы тип ключа был Строка.
В структуру можно записывать не только примитивные типы, но также любые другие объекты «1С:Предприятия», вплоть до других структур. Причем значения типов разных ключей структуры могут быть разными.
Если мы посмотрим в отладке конфигуратора на нашу структуру, то увидим, что она представляет собой некоторый список, где напротив каждого ключа есть то значение, которое мы привязали к данному ключу с помощью метода Вставить. Этот ключ является свойством структуры как объекта, и мы можем обращаться к нему.
Изменить значение ключа структуры 1С
Если нам необходимо изменить значение какого-нибудь ключа, то мы, используя метод Вставить, указываем в качестве первого параметра ключ, значение которого хотим поменять, а в качестве второго параметра новое значение для данного ключа.
Или напрямую обращаемся к ключу
Обход коллекции структуры 1С
Обход структуры осуществляется с помощью оператора цикла Для каждого…Цикл.
Обойдем уже созданную структуру.
Безошибочное получение значения элемента
Если при обращении к ключу структуры Вы укажете название несуществующего в данной структуре ключа, то программа выдаст ошибку. Но есть метод объекта Структура, с помощью которого можно обратиться к значению ключа, не боясь вызвать ошибку в случае промаха.
Этот метод – Свойство.
Данный метод является функцией и возвращает Истину, если указанный ключ есть, и Ложь, если указанного ключа нет.
Рассмотрим синтаксис метода:
«ИмяКлюча» — название ключа для поиска свойства.
В параметр «ЗаписываемоеЗначение» будет возвращено найденное значение. В том случае, если ключа нет в структуре, то данному параметру присвоится значение Неопределено. Обращаю Ваше внимание, что параметр «ЗаписываемоеЗначение» где-то должен быть определен.
В переменную А запишется значение, которое связанно с Ключ1.
Но если мы напишем так.
То ни какой ошибки не возникнет, и в переменной А присвоится значение Неопределено.
Статьи о других универсальных коллекциях значений в 1С
Более подробно о работе со структурой и другими интересными объектами языка программирования в 1С читайте в моей книге «Программировать в 1С за 11 шагов»
Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»
- Книга написана понятным и простым языком — для новичка.
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника;
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
- Очень доступный и понятный язык изложения
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
- Программирование под управляемым приложением станет понятным
Промо-код на скидку в 15% — 48PVXHeYu
Если Вам помог этот урок решить какую-нибудь проблему, понравился или оказался полезен, то Вы можете поддержать мой проект, перечислив любую сумму:
Существует несколько способов скопировать содержимое одной структуры в другую.
Но он годится только для простых структур, которые не содержат вложенных структур и коллекций. Попробуйте ради интереса самостоятельно написать код для копирования следующей структуры:
Согласитесь, накладно каждый раз продумывать и писать код для копирования)
Более универсальным будет использование встроенных функций ЗначениеВСтрокуВнутр() и ЗначениеИзСтрокиВнутр(). К тому же, можно уложиться в одну строку:
Этот же способ можно использовать для копирования других коллекций (правда, в рамках одной информационной базы).
Копирование структуры в 1С
В этой небольшой статье рассмотрим как можно получить копию созданной структуры.
Предположим имеем следующую структуру:
Для копирования структуры в 1С 8 нельзя просто взять и написать такое: КопияСтруктуры = СозданнаяСтруктура. Вместо копии структуры мы просто получаем еще одну переменную КопияСтруктуры, которая указывает на тот же самый набор данных что и переменная СозданнаяСтруктура.
В этом случае поможет следующий цикл:
Похожие записи
7 комментариев
а Массив, Соответствие и остальные коллекции значений?
Михаил, данную функцию не рекомендуется использовать. Она нужна для совместимости с 7.7
Функция КопияСтруктуры(Знач Структура)
Возврат Структура;
КонецФункции
Копирование строк между таблицами значений (табличными частями и т.п.) произвольной структуры
Область применения: управляемое приложение, мобильное приложение, обычное приложение.
При копировании строк между различными таблицами значений (табличными частями и т.п.) со схожим составом колонок следует использовать метод глобального контекста ЗаполнитьЗначенияСвойств.
Алгоритмы, использующие данный метод значительно эффективнее, чем например, многократный перебор колонок таблицы значений, выполняемый для получения их состава.
Для каждого СтрокаТаблицыИсточника Из ТаблицаИсточник Цикл
СтрокаТаблицыПриемника = ТаблицаПриемник.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаТаблицыПриемника, СтрокаТаблицыИсточника);
КонецЦикла;
Для каждого СтрокаТаблицыИсточника Из ТаблицаИсточник Цикл
СтрокаТаблицыПриемника = ТаблицаПриемник.Добавить();
Для каждого Колонка Из ТаблицаПриемник.Колонки Цикл
КолонкаТаблицыИсточника = ТаблицаИсточник.Колонки.Найти(Колонка.Имя);
Если КолонкаТаблицыИсточника <> Неопределено Тогда
СтрокаТаблицыПриемника[Колонка.Имя] = СтрокаТаблицыИсточника[Колонка.Имя];
КонецЕсли;
КонецЦикла;
КонецЦикла;
Как скопировать или выгрузить данные из одной таблицы значений в другую таблицу значений?
1. Добавление, копирование строк из одной таблицы значений в другую таблицу значений:
Код 1C v 8.х
2. Можно использовать метод Скопировать() объекта ТаблицаЗначений:
Первым параметром в этот метод передается массив строк для копирования, если он не указан - копируются все строки таблицы значений. Этот параметр также может содержать отбор по значению колонок.
Вторым параметром передается список колонок для копирования в формате "Колонка1, Колонка2. ". Если параметр не указан, копируются все колонки таблицы.
Допустим, есть таблица значений ТЗ с колонками Код, Номенклатура и Цена.
С помощью следующего кода мы выгрузим из этой таблицы в новую таблицу значений ТЗ1 все значения, содержащиеся в колонках Номенклатура и Цена:
Код 1C v 8.х
В следующем примере мы выгрузим все строки исходной таблицы, в которых значение поля Цена = 15000.
Код 1C v 8.х
Похожие FAQ
17 правил для составления оптимального ЗАПРОСа к данным базы 1С 44
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ Cодержимое указанного ниже веб-сайта в этом приложении блокируется. Aboutsecurity_1cv8c.exe 1
Проблема: После обновления на 1С:Бухгалтерию предприятия 3-й версии, при нажатии на закладку командного интерфейса 1С:предприятие, выскакивает ошибка: Aboutsecurity_1cv8c.exe или Aboutsecurity_1cv8.exe «Содержимое указанного ниже веб-узла в э Google maps : вывод точек на карту и режим панорамы 7
В отличие от яндекс карт в GMaps можно использовать панорамы - за что им большой плюс! Надеюсь в яндексе прочитают этот пост и тоже когда-нибудь это сделают! Для клиента нужно было сделать вывод объектов на карту С возможностью просмотра панора Блокировка записей, невозможно изменить или удалить из регистра. Конфликт блокировок MS SQL + 1C 3
При попытке удалить запись из регистра сведений - получаю ошибку: она заблокирована, ошибка блокировок и т.д. Отключил всех пользователей, перезапустил сервер, пробую удалить - опять ошибка блокировки :( Путем тестов было вяснено, что проблема Ввод по строке - поиск по первым символам или в любом месте наименования 6
При разработке конфигурации, для упрощении ввода документов потребовалось настроить ввод номенклатуры по совпадению любой части наименования! В 1С 8.3 по умолчанию настройки справочника номенклатуры такие: При такой настройке, механизм поиска в Посмотреть все результаты поиска похожих
Еще в этой же категории
Функции сохранения таблицы значений в файл и чтения из файла 2
В данном примере хочу привести несколько универсальных функций по выгрузке таблицы значений в файл и дальнейшего чтения из файла: П орядок программных действий при выгрузке в файл выглядит так: Подготавливаем таблицу значений (выгружаем из та Посмотреть все в категории Работа с Таблицей Значений
Как скопировать или выгрузить данные из одной таблицы значений в другую таблицу значений?
1. Добавление, копирование строк из одной таблицы значений в другую таблицу значений:
Код 1C v 8.х
2. Можно использовать метод Скопировать() объекта ТаблицаЗначений:
Первым параметром в этот метод передается массив строк для копирования, если он не указан - копируются все строки таблицы значений. Этот параметр также может содержать отбор по значению колонок.
Вторым параметром передается список колонок для копирования в формате "Колонка1, Колонка2. ". Если параметр не указан, копируются все колонки таблицы.
Допустим, есть таблица значений ТЗ с колонками Код, Номенклатура и Цена.
С помощью следующего кода мы выгрузим из этой таблицы в новую таблицу значений ТЗ1 все значения, содержащиеся в колонках Номенклатура и Цена:
Код 1C v 8.х
В следующем примере мы выгрузим все строки исходной таблицы, в которых значение поля Цена = 15000.
Код 1C v 8.х
Похожие FAQ
Еще в этой же категории
Как быстро вывести таблицу значений в табличный документ? 96
ТекстЗапроса = " ВЫБРАТЬ * ИЗ Справочник.Пользователи" ; ЗапросаДанных = Новый Запрос(ТекстЗапроса); РезЗапроса = ЗапросаДанных.Выполнить().Выгрузить(); ТабДокумент = Новый ТабличныйДокумент; Построитель = Новый Построит Создание Таблицы значений и описание типов значений ее колонок 29
ТаблицаПериодов = Новый ТаблицаЗначений; ТаблицаПериодов.Колонки.Добавить("НомерСтроки", Новый ОписаниеТипов("Число")); ТаблицаПериодов.Колонки.Добавить("Сотрудник", Новый ОписаниеТипов("СправочникСсылка.СотрудникиОрганизаций")); ТаблицаП Удаление строк Таблицы Значений 27
// 1. Удаление строк согласно условию НулевыеСтроки = ТаблицаПослеПодмен.НайтиСтроки(Новый Структура(" Сумма" ,0)); Для каждого СтрокаТаблицы Из НулевыеСтроки Цикл ТаблицаПослеПодмен.Удалить(СтрокаТаблицы) КонецЦикла; // Нужно оставить стр Объединение 2 таблиц значений 11
// Объединить 2 таблицы значения // тзОсновная - таблица к которой будут изменяться данные // тзПрисоединяемая - таблица из которой будут браться данные // стОтборОдинаковых - стурктура со списком полей по которым определяеться одинаковость запис Ускорение поиска в таблице значений - Индексы 10
Для более быстрого поиска в базах данных было придумано свойство индекс. При использовании таблиц значений мы также можем создавать индексы для произвольных колонок. Например, у нас есть таблица с колонками «Номенклатура, Цена, ЕдиницаИзмерения». И Посмотреть все в категории Работа с Таблицей Значений
Можно сразу в конструкторе указать ключи и значения:
В этом случае будет создана структура с двумя ключами КлючСтруктуры1 и КлючСтруктуры2. При этом значение ключа КлючСтруктуры1 будет равно 25, а значение ключа КлючСтруктуры2 будет равно строке «значение». В дальнейшем можно изменять значения каждого ключа, можно добавлять новые ключи или удалять существующие. Если для какого-то ключа не указать значение, то оно будет равно Неопределено.
//оба значения будут равны Неопределено
СтруктураПараметров = Новый Структура("КлючСтруктуры1, КлючСтруктуры2");
Добавление нового ключа в структуру
Чтобы добавить новый ключ в структуру после ее создания можно использовать метод Вставить. Если в структуре уже был такой ключ, то значение будет заменено.
Если попытаться добавить в структуру ключ, который начинается с цифры, то будет вызвано исключение «Задано неправильное имя атрибута структуры»:
СтруктураПараметров = Новый Структура;
СтруктураПараметров.Вставить("1", 2);
//при компиляции модуля будет ошибка:
//Задано неправильное имя атрибута структуры
Обращение к свойствам структуры
К свойствам (ключам) структуры можно обращаться через точку «.» после имени структуры:
СтруктураПараметров = Новый Структура("КлючСтруктуры1, КлючСтруктуры2", 25, "значение");
СтруктураПараметров.КлючСтруктуры1 = "новое значение";
Можно через оператор индексации []:
СтруктураПараметров = Новый Структура("КлючСтруктуры1, КлючСтруктуры2", 25, "значение");
СтруктураПараметров["КлючСтруктуры1"] = "новое значение";
Перебор структуры
Перебрать элементы структуры можно с помощью цикла Для Каждого. На каждой итерации цикла будет переменная типа КлючИЗначение. Через свойства Ключ и Значение данной переменной можно только читать значения, изменить нельзя:
Для Каждого КлючИЗначение Из СтруктураПараметров Цикл
//метод Сообщить выводит значение на экран
Сообщить(КлючИЗначение.Ключ);
Сообщить(КлючИЗначение.Значение);
КонецЦикла;
Как удалить ключ из структуры
Удалить ключ из структуры можно методом Удалить. Данный метод удалит только один ключ. Если нужно удалить все ключи из структуры, то нужно использовать метод Очистить:
СтруктураПараметров.Удалить("НовыйКлюч") ; //удалит только один ключ
СтруктураПараметров.Очистить(); //удалит все ключи из структуры
Как проверить есть ли в структуре ключ
Метод Свойство позволяет проверить наличие в структуре указанного ключа. Если ключ присутствует в структуре, то метод вернет Истина. Если такого ключа нет, то метод вернет Ложь.
ЕстьКлюч = СтруктураПараметров.Свойство("НовыйКлюч" );
Если ЕстьКлюч Тогда
Сообщить("Ключ найден!");
КонецЕсли;
Также с помощью данного метода можно получить значение по ключу:
Перем Значение;
//вторым параметром передаем переменную, в которую будет помещено значение
ЕстьКлюч = СтруктураПараметров.Свойство("НовыйКлюч" , Значение);
Если ЕстьКлюч Тогда
Сообщить(Значение);
КонецЕсли;
Если в структуре нет такого ключа, то в переменной Значение будет Неопределено.
Поиск в структуре
Чтобы найти какой-то ключ в структуре можно использовать все тот же самый метод Свойство:
Перем НайденноеЗначение;
Если СтруктураПараметров.Свойство("НовыйКлюч" , НайденноеЗначение) Тогда
Сообщить("Значение найдено: " + НайденноеЗначение);
Иначе
Сообщить("Значение не найдено");
КонецЕсли;
Но если поиск в структуре нужно выполнить по значению, то придется перебрать всю структуру:
//поищем в структуре значение "Поиск"
НашлиЗначение = Ложь;
Для Каждого КлИЗнач Из СтруктураПараметров Цикл
Если КлИЗнач.Значение = "Поиск" Тогда
//нашли
НашлиЗначение = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Если Не НашлиЗначение Тогда
//не нашли
КонецЕсли;
Количество элементов структуры
Узнать количество элементов (ключей, свойств) структуры можно с помощью метода Количество:
Как скопировать структуру
Стр = Новый Структура("Ключ1", 1);
ВложеннаяСтр = Новый Структура("Ключ2", 2);
Стр.Вставить("ВложеннаяСтр", ВложеннаяСтр);
Копия = Новый Структура;
Для Каждого КлючИЗначение Из Стр Цикл
Копия.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение);
КонецЦикла;
//в этом случае в структуре Копия в ключе ВложеннаяСтр
//будет та же самая структура, что и в переменной
//ВложеннаяСтр и в структуре Стр
//для создания полной копии можно сделать так:
ПолнаяКопия = ЗначениеИзСтрокиВнутр(ЗначениеВСтрокуВну тр(Стр));
Фиксированная Структура
Фиксированная структура — это та же самая структура, но после создания нельзя изменить состав ключей и значения. Можно создать на основании обычной структуры (будет создана полная копия), по ключам и значениям или пустую структуру:
//пустая структура
ФиксСтр = Новый ФиксированнаяСтруктура;
//по ключам и значениям
ФиксСтр = Новый ФиксированнаяСтруктура("Ключ1, Ключ2", 1, 2);
//на основании обычной структуры
ОбычнаяСтруктура = Новый Структура("Ключ1, Ключ2", 1, 2);
ФиксСтр = Новый ФиксированнаяСтруктура(ОбычнаяСтруктура) ;
У фиксированной структуры есть только 2 метода:
К ключам структуры можно обращаться как к свойству: ФиксСтр.Ключ1, но нельзя менять значение свойства.
На основании фиксированной структуры можно создать обычную структуру:
ФиксСтр = Новый ФиксированнаяСтруктура("Ключ1, Ключ2", 1, 2);
ОбычнаяСтруктура = Новый Структура(ФиксСтр);
ОбычнаяСтруктура.Ключ1 = 11; //теперь можно менять значения
Читайте также:
- Если все варианты одновременно не помещаются в окно браузера можно воспользоваться сочетанием клавиш
- Outlook не отправляет письма
- Добавление листов в рабочую книгу переименование ярлычков листов удаление и перемещение листов excel
- Способы открытия документа в word
- В чем отличие вредоносной программы и вируса