Содержание
- Создание структуры
- Добавление элементов, установка значений
- Как узнать количество элементов структуры
- Обход элементов структуры
- Проверить ключ структуры на существование
- Получить значение элемента структуры по ключу
- Удалить элемент структуры
- Удалить все элементы структуры
- Пример преобразования структуры в таблицу значений
- Как скопировать структуру
- Методы объекта СписокЗначений
- Альтернативный способ добавления элементов и реквизитов на формы 32
- Работа с релизами 1С и договорами ИТС 25
- Утилиты ЕГАИС (1С:Розница 2.2) 9
- Вам нравятся запросы в 1С? 14
- Модель объекта 7
- Цифровая подпись Cades-BES для XML средствами 1С с помощью КриптоПро 6
- Быстрый запрос 41
- Безопасная работа с транзакциями во встроенном языке 187
- Трудовой договор, Дополнительное соглашение, Лист ознакомления, Договор о материальной ответственности, Договор о коммерческой тайне, Согласие на обработку персональных данных для ЗУП 3.1 17
- Расширение: Цветовые схемы для 1С: Предприятия 11
- Коннектор: удобный HTTP-клиент для 1С:Предприятие 8 532
- Редактор объектов информационной базы 8.3 40
- Расширение «Курсы валют в формулах расчета динамических цен» для УНФ 1.6 5
- Конструктор мобильного клиента Simple WMS Client: способ создать полноценный ТСД без мобильной разработки. Теперь новая версия – Simple UI (обновлено 14.11.2019) 174
- Создание дерева значений в 1С
- Обход дерева значений с помощью рекурсии
17 правил для составления оптимального ЗАПРОСа к данным базы 1С 37
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ 1C медленно работает по сети с базой на SQL Server 17
Данное обстоятельство может быть обусловлено многими причинами. Одна из них — неоптимальная настройка MS SQL . Перечислим неоптимальности в настройке: 1) Неправильно указанный сетевой протокол, используемый для взаимодействия 1С с SQL Server. П 1С 8.x : Как убрать лидирующие нули в номере Документа (вариант2) 0
Скопировать строку с номером, с лидирующими нулями, в числовом поле (с форматом без групп, без группировки), и вернуть(скопировать) обратно в строковом поле с номером. Возвращает без нулей. Google maps : вывод точек на карту и режим панорамы 5
В отличие от яндекс карт в GMaps можно использовать панорамы — за что им большой плюс! Надеюсь в яндексе прочитают этот пост и тоже когда-нибудь это сделают! Для клиента нужно было сделать вывод объектов на карту С возможностью просмотра панора Автоматизация обмена данных используя обработку «Универсальный обмен данными в формате XML" 10
Автоматизация обмена между базами используя обработку » Универсальный обмен данными в формате XML» В основу данной публикации положены найденные мною материалы по cозданию обмена между двумя базами с использованием обработки » Универсальный обме Посмотреть все результаты поиска похожих
Структура в 1С 8.3 это динамический набор данных (коллекция значений), каждый элемент которой состоит из пары «Ключ» и «Значение». Ключи структуры уникальны, поэтому ими можно идентифицировать значения. Ключ структуры должен иметь строковый тип данных и отвечать требованиям к именам переменных. К значениям структуры можно обращаться как к свойствам объекта, при этом ключ используется как имя свойства.
Создание структуры
Автомобиль = Новый Структура(«Марка,ДатаВыпуска,ПробегКМ»,»BMW»,Дата(‘20190101’),25000);
Результат:
Добавление элементов, установка значений
Метод Вставить() устанавливает значение элемента структуры по ключу. Если элемент с переданным значением ключа существует, то его значение заменяется, в противном случае добавляется новый элемент.
Автомобиль.Вставить(«Цвет»,»Белый»);//Добавили ключ и значение. Автомобиль.Вставить(«Цвет»,»Чёрный»);// Т.к. ключ «Цвет» уже существует, произошла замена значения. //Другие способы для установки значений Автомобиль.Цвет = «Белый»;//Для ключа «Цвет» установили значение «Белый» Автомобиль = «Чёрный»;//Для ключа «Цвет» установили значение «Чёрный»
Как узнать количество элементов структуры
КоличествоЭлементов = Автомобиль.Количество();
Обход элементов структуры
Для Каждого Элемент Из Автомобиль Цикл Ключ = Элемент.Ключ; Значение = Элемент.Значение; Сообщить(Ключ + » — » + Значение); КонецЦикла;
Проверить ключ структуры на существование
// Если ключ существует, выражение вернёт «ИСТИНА» иначе вернёт «ЛОЖЬ» Автомобиль.Свойство(«Марка»);
Получить значение элемента структуры по ключу
ЗначениеЭлемента = Неопределено; Автомобиль.Свойство(«Марка «,ЗначениеЭлемента);
Удалить элемент структуры
Автомобиль.Удалить(«Цвет «);
Удалить все элементы структуры
Автомобиль.Очистить();
Пример преобразования структуры в таблицу значений
&НаКлиенте Процедура СтруктураВТЗ(Команда) РасписаниеДня = Новый Структура(); РасписаниеДня.Вставить(«Начало»,»08:00″); РасписаниеДня.Вставить(«Обед»,»12:00″); РасписаниеДня.Вставить(«Конец»,»17:00″); ТаблицаЗнач = СтруктураВТЗНаСервере(РасписаниеДня); КонецПроцедуры &НаСервере Функция СтруктураВТЗНаСервере(РасписаниеДня) ТЗ = Новый ТаблицаЗначений; ТЗ.Колонки.Добавить(«Период»); ТЗ.Колонки.Добавить(«Время»); Для Каждого КлючИЗначение из РасписаниеДня Цикл НоваяСтрока = ТЗ.Добавить(); НоваяСтрока.Период = КлючИЗначение.Ключ; НоваяСтрока.Время = КлючИЗначение.Значение; КонецЦикла; Возврат ТЗ;
КонецФункции
Наша команда предоставляет услуги по консультированию, настройке и внедрению 1С.
Связаться с нами можно по телефону +7 499 350 29 00.
Услуги и цены можно увидеть по .
Будем рады помочь Вам!
Результат:
Как скопировать структуру
Пример №1
&НаКлиенте Процедура СкопироватьСтруктуру(Команда) Структура = Новый Структура(); Структура.Вставить(«Фамилия»,»Петров»); Структура.Вставить(«Имя»,»Пётр»); Структура.Вставить(«Отчество»,»Петрович»); КопияСтруктуры= Новый Структура(); Для Каждого КлючИЗначение Из Структура Цикл КопияСтруктуры.Вставить(КлючИЗначение.Ключ,КлючИЗначение.Значение); КонецЦикла; КонецПроцедуры
Пример №2
Способ работает в рамках одной информационной базы.
&НаКлиенте Процедура СкопироватьСтруктуру2(Команда) Структура = Новый Структура(); Структура.Вставить(«Фамилия»,»Петров»); Структура.Вставить(«Имя»,»Пётр»); Структура.Вставить(«Отчество»,»Петрович»); КопияСтруктуры = СкопироватьСтруктуруНаСервере(Структура); КонецПроцедуры &НаСервере Функция СкопироватьСтруктуруНаСервере(Структура) КопияСтруктуры = ЗначениеИзСтрокиВнутр(ЗначениеВСтрокуВнутр(Структура)); Возврат КопияСтруктуры; КонецФункции
Пример №3
&НаКлиенте Процедура СкопироватьСтруктуру3(Команда) Структура = Новый Структура(); Структура.Вставить(«Фамилия»,»Петров»); Структура.Вставить(«Имя»,»Пётр»); Структура.Вставить(«Отчество»,»Петрович»); КопияСтруктуры = Новый ФиксированнаяСтруктура(Структура); КонецПроцедуры
В примере №3 структура будет скопирована в неизменную (фиксированную) структуру. Для такого вида структур не доступны методы Вставить(), Удалить(), Очистить(). Если требуется изменить фиксированную структуру, её необходимо скопировать в обычную.
ОбычнаяСтруктура = Новый Структура(ФиксированнаяСтруктура);
Всем привет!
Столкнулись с непонятным для нас поведением системы. Задача была простая: посчитать набор количественных показателей для каждого вида занятости сотрудников по такому шаблону:
ИтогиШаблон = Новый Структура(«КоличествоППС, КолвоСтавокПолнВсего, По38Включит, КолвоСтавокПолнКН, КолвоСтавокПолнДН, Итого», 0, 0, 0, 0, 0, 0);
Поскольку видов занятости три (основное и два вида совместительства), плюс нужны общие итоги, то делаем по этому шаблону новую структуру:
ИтогиПодраздедения = Новый Структура(«Общ, ОМР, Внутр, ВнешСовм», ИтогиШаблон, ИтогиШаблон, ИтогиШаблон, ИтогиШаблон);
Но когда устанавливаем ИтогиПодраздедения.Общ.КоличествоППС = 1, то оказывается, что становится ИтогиШаблон.КоличествоППС = 1, и вдобавок все значения ИтогиПодраздедения.ХХХ.КоличествоППС становятся равны единицы.
То есть появляется какая-то обратная зависимость: структура, которую использовали во вторичной структуре в виде шаблона, сама принимает значения из вторичной структуры, и эти значения передаёт в другие места, в которых тоже используется как шаблон.
В итоге проблему решили так:
ИтогиПодраздедения = Новый Структура(«Общ, ОМР, Внутр, ВнешСовм»,
Новый Структура(«КоличествоППС, КолвоСтавокПолнВсего, По38Включит, КолвоСтавокПолнКН, КолвоСтавокПолнДН, Итого», 0, 0, 0, 0, 0, 0),
Новый Структура(«КоличествоППС, КолвоСтавокПолнВсего, По38Включит, КолвоСтавокПолнКН, КолвоСтавокПолнДН, Итого», 0, 0, 0, 0, 0, 0),
Новый Структура(«КоличествоППС, КолвоСтавокПолнВсего, По38Включит, КолвоСтавокПолнКН, КолвоСтавокПолнДН, Итого», 0, 0, 0, 0, 0, 0),
Новый Структура(«КоличествоППС, КолвоСтавокПолнВсего, По38Включит, КолвоСтавокПолнКН, КолвоСтавокПолнДН, Итого», 0, 0, 0, 0, 0, 0));
Ни разу не изящно, правда? Подскажите, пожалуйста, есть ли более оптимальные решения?
Непонятно в принципе, почему так себя ведут структуры.
СписокЗначений — это программная коллекция элементов, содержащих значения произвольного типа и их строковые представления. Каждому элементу списка значений присваивается целочисленный номер — индекс, начинающийся с единицы. В отличие от массива, список значений является динамическим, т.е. элементы можно добавлять и удалять.
Список значений используется в двух случаях:
- При работе с формами: при размещении на форме элементов управления типа Список и ПолеСоСписком, они автоматически связываются с объектом типа СписокЗначений;
- При работе с кодом: для хранения каких-либо расширяемых списочных данных вы создаете нужное количество объектов типа СписокЗначений;
Хочется отметить, что объекты типа СписокЗначений не хранятся в информационной базе.
Создание списка значений
Как и все объекты агрегатного типа, список значений создается с помощью специальной функции СоздатьОбъект() встроенного языка:
сз = СоздатьОбъект(«СписокЗначений»);
Инициализация элементов списка значений
Каждый элемент списка значений характеризуется следующими свойствами:
- Значение — само значение;
- Представление — строковое представление значения;
- Пометка — числовое значение, означающее, что данный элемент отмечен в списке;
По умолчанию, список значений создается пустым. Для добавления нового элемента списка значений, используется метод ДобавитьЗначение() объекта:
сз.ДобавитьЗначение(1, «Один»); сз.ДобавитьЗначение(2, «Два»);
Обратите внимание, что вместе со значением Вы можете указать его строковое представление.
Манипуляция элементами списка
Над элементами списка значений возможны различные действия, включая вставку новых элементов, сортировку, изменение и удаление существующих.
Вставка новых значений возможна в произвольное место списка. Для этого используется метод ВставитьЗначение():
сз.ВставитьЗначение(1, 100, «100 руб.»);
Для получения значения элемента списка по номеру используется метод ПолучитьЗначение() объекта:
Значение = сз.ПолучитьЗначение(1);
Удаление элементов списка производится с помощью метода УдалитьЗначение():
сз.УдалитьЗначение(Позиция);
Интерактивные функции
Объект СписокЗначений имеет несколько методов, позволяющих взаимодействовать с пользователем. Например, с помощью метода ВыбратьЗначение() можно предложить пользователю выбрать одно из значений:
Рез = сз.ВыбратьЗначение(ВыбЗначение, «Укажите стоимость»);
Также, можно предложить пользователю отметить одно или несколько элементов списка. Для этого используется метод ОтметитьЗначения(), который выводит список с пометками (checkboxes):
Рез = сз.ОтметитьЗначения();
Найти все отмеченные пользователем значения можно, используя перебор элементов в цикле, и метод Пометка(), который возвращает статус пометки элемента:
Отмечен = сз.Пометка(1);
Перебор элементов списка значений
Для перебора (обхода) всех элементов списка значений обычно используется оператор цикла Для:
Для Инд = 1 По сз.РазмерСписка() Цикл Сообщить(«сз = » + сз.ПолучитьЗначение(Инд)); КонецЦикла;
Методы объекта СписокЗначений
Методы манипулирования элементами | |
---|---|
ДобавитьЗначение() | метод добавляет новое значение в конец списка |
ВставитьЗначение() | метод выполняет вставку нового значения на указанной позиции списка |
ПолучитьЗначение() | метод возвращает значение элемента по его позиции в списке значений |
УстановитьЗначение() | метод выполняет установку существующего значения на указанной позиции |
Получить() | метод возвращает значение элемента по его строковому представлению |
Установить() | метод выполняет установку значения по его строковому представлению |
НайтиЗначение() | метод выполняет поиск значения в списке |
СдвинутьЗначение() | метод выполняет сдвиг значения в списке |
УдалитьЗначение() | метод выполняет удаление элемента списка на указанной позиции |
УдалитьВсе() | метод выполняет очистку списка значений |
Сортировать() | метод выполняет сортировку элементов списка значений по их значению |
СортироватьПоПредставлению() | метод выполняет сортировку элементов списка значений по их представлению |
Методы манипулирования списком значений | |
РазмерСписка() | метод возвращает размер (количество элементов) списка значений |
Выгрузить() | метод выгружает значения списка в другой список или таблицу значений |
Интерактивные методы | |
ВыбратьЗначение() | метод предлагает пользователю выбрать значение из списка в интерактивном окне |
ТекущаяСтрока() | метод возвращает\устанавливает текущую строку, выделенную в элементе управления на форме |
ОтметитьЗначения() | метод предлагает пользователю выставить пометки напротив элементов списка в интерактивном диалоговом окне |
Пометка() | метод определяет, установлена ли пометка напротив указанного значения |
Специальные методы | |
Принадлежит() | метод определяет, принадлежит ли списку указанное значение |
ВСтрокуСРазделителями() | метод выполняет упаковку значений списка в строку |
ИзСтрокиСРазделителями() | метод выполняет распаковку значений списка из строки |
111 пользователя считают данную страницу полезной. Информация актуальна! Страница была обновлена 16.12.2019
Свойства и методы универсальных коллекции значений типа дерево значений как и таблицы значений не доступны в тонком клиенте. Их нужно создавать на сервере, а затем методом контекста формы ЗначениеВРеквизитФормы( , ) преобразовать значение объекта в реквизит управляемой формы с указанным именем ИмяРеквизита
Мне дали задание – создать форму списка заказа в виде дерева значений, как показано на рис 1
Форма создается очень просто в конфигураторе ( см рис 2)
Рис 2 Управляемая форма с деревом значений
Однако, у меня не получилось на сервере создавать дерево значений в путем выгрузки результата запроса по группировкам в дерево таким образом :
Дерево = РезультатЗапроса.Выгрузить ( ОбходРезультатаЗапроса.ПоГруппировкам );
У меня возникала ошибка при вызове метода контекста формы:
ЗначениеВРеквизитФормы ( Дерево , «ДеревоЗаказов”);
Возможно. причина была в том, что структура колонок реквизита формы ДеревоЗаказов не соответствовала структуре объекта дерево, полученного в результате выгрузки запроса. Я не стал глубоко об этом думать и решил создавать дерево значений в цикле. Программный код показан ниже:
Для создания полной копии исходного дерева значений можно использовать метод метод скопировать:
Следующая процедура предназначена для заполнения реквизита формы типа «ДеревоЗначений»
Параметры:
КоллекцияЭлементовДерева – реквизит формы, который имеет тип «ДеревоЗначений» . Реквизит заполняется значениями из второго параметра процедуры.
ДеревоЗначений – ДеревоЗначений – параметр содержит данные для заполнения.
Как заполнить дерево значений (на сервере)?
Как добавить строку (на клиенте)?
Как удалить текущую строку (на клиенте)?
Как очистить дерево (на клиенте)?
Как очистить дерево (на сервере)?
Как перебрать дерево рекурсивно (на клиенте)?
Как перебрать дерево рекурсивно (на сервере)?
Скачать файлы
Наименование | Файл | Версия | Размер |
---|---|---|---|