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&quot  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, «Один»); сз.ДобавитьЗначение(2, «Два»);

Обратите внимание, что вместе со значением Вы можете указать его строковое представление.

Манипуляция элементами списка

Над элементами списка значений возможны различные действия, включая вставку новых элементов, сортировку, изменение и удаление существующих.

Вставка новых значений возможна в произвольное место списка. Для этого используется метод ВставитьЗначение():

сз.ВставитьЗначение(1, 100, «100 руб.»);

Для получения значения элемента списка по номеру используется метод ПолучитьЗначение() объекта:

Значение = сз.ПолучитьЗначение(1);

Удаление элементов списка производится с помощью метода УдалитьЗначение():

сз.УдалитьЗначение(Позиция);

Интерактивные функции

Объект СписокЗначений имеет несколько методов, позволяющих взаимодействовать с пользователем. Например, с помощью метода ВыбратьЗначение() можно предложить пользователю выбрать одно из значений:

Рез = сз.ВыбратьЗначение(ВыбЗначение, «Укажите стоимость»);

Также, можно предложить пользователю отметить одно или несколько элементов списка. Для этого используется метод ОтметитьЗначения(), который выводит список с пометками (checkboxes):

Рез = сз.ОтметитьЗначения();

Найти все отмеченные пользователем значения можно, используя перебор элементов в цикле, и метод Пометка(), который возвращает статус пометки элемента:

Отмечен = сз.Пометка(1);

Перебор элементов списка значений

Для перебора (обхода) всех элементов списка значений обычно используется оператор цикла Для:

Для Инд = 1 По сз.РазмерСписка() Цикл Сообщить(«сз = » + сз.ПолучитьЗначение(Инд)); КонецЦикла;

Методы объекта СписокЗначений

Методы манипулирования элементами
ДобавитьЗначение() метод добавляет новое значение в конец списка
ВставитьЗначение() метод выполняет вставку нового значения на указанной позиции списка
ПолучитьЗначение() метод возвращает значение элемента по его позиции в списке значений
УстановитьЗначение() метод выполняет установку существующего значения на указанной позиции
Получить() метод возвращает значение элемента по его строковому представлению
Установить() метод выполняет установку значения по его строковому представлению
НайтиЗначение() метод выполняет поиск значения в списке
СдвинутьЗначение() метод выполняет сдвиг значения в списке
УдалитьЗначение() метод выполняет удаление элемента списка на указанной позиции
УдалитьВсе() метод выполняет очистку списка значений
Сортировать() метод выполняет сортировку элементов списка значений по их значению
СортироватьПоПредставлению() метод выполняет сортировку элементов списка значений по их представлению
Методы манипулирования списком значений
РазмерСписка() метод возвращает размер (количество элементов) списка значений
Выгрузить() метод выгружает значения списка в другой список или таблицу значений
Интерактивные методы
ВыбратьЗначение() метод предлагает пользователю выбрать значение из списка в интерактивном окне
ТекущаяСтрока() метод возвращает\устанавливает текущую строку, выделенную в элементе управления на форме
ОтметитьЗначения() метод предлагает пользователю выставить пометки напротив элементов списка в интерактивном диалоговом окне
Пометка() метод определяет, установлена ли пометка напротив указанного значения
Специальные методы
Принадлежит() метод определяет, принадлежит ли списку указанное значение
ВСтрокуСРазделителями() метод выполняет упаковку значений списка в строку
ИзСтрокиСРазделителями() метод выполняет распаковку значений списка из строки

111 пользователя считают данную страницу полезной. Информация актуальна! Страница была обновлена 16.12.2019

Свойства и методы универсальных коллекции значений типа дерево значений как и таблицы значений не доступны в тонком клиенте. Их нужно создавать на сервере, а затем методом контекста формы ЗначениеВРеквизитФормы( , ) преобразовать значение объекта в реквизит управляемой формы с указанным именем ИмяРеквизита

Мне дали задание – создать форму списка заказа в виде дерева значений, как показано на рис 1

Форма создается очень просто в конфигураторе ( см рис 2)

Рис 2 Управляемая форма с деревом значений

Однако, у меня не получилось на сервере создавать дерево значений в путем выгрузки результата запроса по группировкам в дерево таким образом :
Дерево = РезультатЗапроса.Выгрузить ( ОбходРезультатаЗапроса.ПоГруппировкам );
У меня возникала ошибка при вызове метода контекста формы:
ЗначениеВРеквизитФормы ( Дерево , «ДеревоЗаказов”);
Возможно. причина была в том, что структура колонок реквизита формы ДеревоЗаказов не соответствовала структуре объекта дерево, полученного в результате выгрузки запроса. Я не стал глубоко об этом думать и решил создавать дерево значений в цикле. Программный код показан ниже:

Для создания полной копии исходного дерева значений можно использовать метод метод скопировать:

Следующая процедура предназначена для заполнения реквизита формы типа «ДеревоЗначений»
Параметры:
КоллекцияЭлементовДерева – реквизит формы, который имеет тип «ДеревоЗначений» . Реквизит заполняется значениями из второго параметра процедуры.
ДеревоЗначений – ДеревоЗначений – параметр содержит данные для заполнения.

Как заполнить дерево значений (на сервере)?

Как добавить строку (на клиенте)?

Как удалить текущую строку (на клиенте)?

Как очистить дерево (на клиенте)?

Как очистить дерево (на сервере)?

Как перебрать дерево рекурсивно (на клиенте)?

Как перебрать дерево рекурсивно (на сервере)?

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

Специальные предложения

Автор запретил комментарии

Альтернативный способ добавления элементов и реквизитов на формы 32

Предлагаю альтернативный вариант добавления динамически создаваемых элементов и реквизитов на форму.

09.09.2019 3275 5 bmk74 0

Работа с релизами 1С и договорами ИТС 25

Работа с релизами 1С и партнерским кабинетом.

15.08.2019 3898 23 RocKeR_13 10

Утилиты ЕГАИС (1С:Розница 2.2) 9

Утилиты для упрощения работы с ЕГАИС в 1С:Розница.

16.07.2019 4577 14 RocKeR_13 4

Вам нравятся запросы в 1С? 14

Речь не только о том, что простейший запрос с «легальным» оформлением растянется на пол-экрана, речь еще обо всем, что нужно написать «в нагрузку» к тексту запроса. Все эти «Новый Запрос», «УстановитьПараметр» и последующие пляски с обработкой результата. Пора с этим заканчивать!

03.07.2019 10374 1 m-rv 79

Модель объекта 7

Подсистема позволяет описать модель данных объекта, где описана зависимость между реквизитами, и затем использовать эту модель в разных сценариях работы с объектом. Версия платформы: 8.3.6 и выше. С небольшими доработками будет работать на 8.2.

30.06.2019 3413 1 vadim1980 0

Цифровая подпись Cades-BES для XML средствами 1С с помощью КриптоПро 6

Обработка иллюстрирует возможность подписания XML SOAP-конверта по стандарту Cades-BES средствами 1С с помощью внешней компоненты КриптоПРО «CAdESCOM» с учетом ГОСТ 2001 и ГОСТ 2012. Стандарт используется в различных механизмах государственных сайтов России, в том числе в СМЭВ и ГИС ЖКХ. Код не привязан к прикладному решению может быть встроен куда угодно, но только на платформе Windows.

13.05.2019 3846 12 PythonJ 25

Быстрый запрос 41

Можно ли дать пользователю «удочку», а не «рыбу»? До сих пор ответ на этот вопрос был отрицательным. Всякий инструмент, который мог бы делать с базой данных все или почти все (или хотя бы многое), отвергался пользователями, как слишком сложный. Вспомните тот же SQL, который изначально разрабатывался именно как пользовательский инструмент. «Быстрый запрос» – это попытка устранить сложность, но сохранить при этом универсальность.

29.04.2019 6485 15 mkalimulin 28

Безопасная работа с транзакциями во встроенном языке 187

Разбираемся с опасностями использования транзакций во встроенном языке 1С. Познаем ошибку «В данной транзакции уже происходили ошибки». Учимся защищаться от них.

25.03.2019 15333 7 tormozit 35

Трудовой договор, Дополнительное соглашение, Лист ознакомления, Договор о материальной ответственности, Договор о коммерческой тайне, Согласие на обработку персональных данных для ЗУП 3.1 17

Комплект печатных форм для отдела кадров для документов Прием на работу и Кадровый перевод: Трудовой договор, Доп. соглашение к трудовому договору, Лист ознакомления с локальными нормативными актами, Договор о полной материальной ответственности, Договор о неразглашении коммерческой тайны, Согласие на обработку персональных данных.

12.03.2019 10475 56 Asenka 3

Расширение: Цветовые схемы для 1С: Предприятия 11

Расширение позволяет сменить цвет оформления для интерфейса Такси.

10.02.2019 6005 24 spec8s 6

Коннектор: удобный HTTP-клиент для 1С:Предприятие 8 532

Коннектор – библиотека для работы с HTTP запросами. Библиотека берет на себя всю рутину работы с HTTP запросами. Буквально в одну строку можно получать данные, отправлять, не заботясь о необходимости конструирования URL, кодирования данных и т.п.

31.01.2019 27962 264 bonv 109

Редактор объектов информационной базы 8.3 40

Универсальная внешняя обработка (СДРОбъектУпр) для редактирования реквизитов и табличных частей объектов информационной базы, редактирование движений документов. Доступ ко всем реквизитам объектов, есть возможность выгрузки и загрузки данных (объекты и движения документов) через XML. Платформа 8.3, управляемые формы. Версия 1.1.0.31 от 02.10.2019

23.01.2019 10295 143 ROL32 24

Расширение «Курсы валют в формулах расчета динамических цен» для УНФ 1.6 5

Расширение «Курсы валют в формулах расчета динамических цен» с автоматическим пересчетом цен при изменении курсов валют для конфигурации «Управление нашей фирмой, редакция 1.6»

17.01.2019 5586 13 Palmer1976 4

Конструктор мобильного клиента Simple WMS Client: способ создать полноценный ТСД без мобильной разработки. Теперь новая версия – Simple UI (обновлено 14.11.2019) 174

Simple WMS Client – это визуальный конструктор мобильного клиента для терминала сбора данных(ТСД) или обычного телефона на Android. Приложение работает в онлайн режиме через интернет или WI-FI, постоянно общаясь с базой посредством http-запросов (вариант для 1С-клиента общается с 1С напрямую как обычный клиент). Можно создавать любые конфигурации мобильного клиента с помощью конструктора и обработчиков на языке 1С (НЕ мобильная платформа). Вся логика приложения и интеграции содержится в обработчиках на стороне 1С. Это очень простой способ создать и развернуть клиентскую часть для WMS системы или для любой другой конфигурации 1С (УТ, УПП, ERP, самописной) с минимумом программирования. Например, можно добавить в учетную систему адресное хранение, учет оборудования и любые другие задачи. Приложение умеет работать не только со штрих-кодами, но и с распознаванием голоса от Google. Это бесплатная и открытая система, не требующая обучения, с возможностью быстро получить результат.

09.01.2019 22604 223 informa1555 172

Эту статью я хочу написать в виде конкретных примеров по работе с деревом значений в 1С 8.3 и 8.2.

Дерево значений представляет из себя некую структуру с иерархией. У каждой строки дерева значений может быть сколько угодно подчиненных строк.

Предлагаю сразу начать с примера и получить все записи из справочника «Номенклатура» в виде дерева значений.

Создание дерева значений в 1С

Проще всего это сделать с помощью запроса. Предлагаю создать внешнюю обработку 1С на управляемых формах, добавить на форму табличное поле и кнопку «Получить дерево». По действию кнопки (точнее, команды) выполним простейший запрос.

Вот пример процедуры:

Здесь стоит особенно обратить внимание на два фактора, без которых дерево не сформируется:

  • строка в запросе «ИТОГИ ПО Родитель»
  • и Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);

Если не указать правильно вид обхода результата выборки по запросу, то мы получим обычную таблицу значений.

Результат вывода данного запроса 1С дерево значений на управляемую форму выглядит следующим образом:

Получите 267 видеоуроков по 1С бесплатно:

Мы получаем структуру с подчиненными строками. Колонка «Родитель» – это группа, колонка «Номенклатура – это элемент справочника.

Теперь, на мой взгляд, самое интересное. Как организовать обход дерева значений, если мы заранее не знаем, сколько уровней в нем.

Обход дерева значений с помощью рекурсии

В основном обход дерева в 1С делается с помощью рекурсии. Даже когда известно, сколько уровней в нем. С рекурсией это проще, всего около шести строк:

В результате получим такие сообщения:

Пример данной обработки для управляемых форм можно скачать по ссылке. С помощью аналогичного кода 1С возможно преобразовать дерево значений в таблицу значений.

При обходе дерева Вы можете выполнять различные действия над ним. Например:

  • подсчет итогов по группам;
  • раскраску строк по нужным параметрам;
  • удалять ненужные строки;
  • можно делать различные отборы;
  • и так далее.

Работать с деревом значений не так уж и трудно. Фактически это та же таблица значений, но здесь присутствует невидимая колонка «Родитель». Поэтому нет никаких проблем с преобразованием дерева значений в таблицу значений.

Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):

К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.

Наименование Файл Версия Размер

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *