1с обойти все реквизиты документа

Обновлено: 06.07.2024

Соответствие в языке программирования 1С чем-то похоже на Структуру, это тоже коллекция пар Ключ и значение. Но в отличие от Структуры, в Соответствие, чтобы получить значение по определенному ключу, нужно обращаться не как к свойству объекта, а через квадратные скобки, и в качестве ключа можно использовать значение любого типа.

Структура: Структура1.Ключ1

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

Хоть и в ключ и значение соответствия можно записать переменные любого типа, использование типов в этом случае очень сильно зависит от контекста и от вида клиента: мы не можем в клиентском задать в ключ или значение, тип которого работает только в серверном контексте (например, ДокументОбъект.<>).

Новое соответствие создается при помощи конструктора Новый.

Соответствие1 = Новый Соответствие;

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

Вставить(<Ключ>, <Значение>)

Параметр «Ключ» может иметь любой тип! Это очень важное свойство, таким образом, с помощью коллекции Соответствие можно в процессе работы устанавливать соответствие любых объектов с любыми объектами.

Простой пример работы с соответствием:

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

Поменять имеющееся значение можно, также используя квадратные скобки.

Обход соответствия 1С

Обходить соответствие можно с помощью цикла Для каждого…Цикл.

Результат обхода соответствия 1С

Безошибочное получении значения соответствия 1С

Как Вы уже поняли, для того чтобы получить значение элемента соответствия, мы используем квадратные скобки. Но иногда возможны ситуации, когда применение квадратных скобок неосуществимо. В таких случаях мы можем использовать метод Получить, который возвращает любое значение, соответствующее ключу. Если такого ключа нет, то вернется значение Неопределено

Рассмотрим работу данного метода на соответствии с датами в качестве ключей.

Результат использования метода Получить

Статьи о других универсальных коллекциях значений в 1С


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

  1. Очень доступный и понятный язык изложения
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Поймете идеологию управляемого приложения 1С
  4. Узнаете, как разрабатывать управляемое приложение;
  5. Научитесь разрабатывать управляемые формы 1С;
  6. Сможете работать с основными и нужными элементами управляемых форм
  7. Программирование под управляемым приложением станет понятным


Если Вам помог этот урок решить какую-нибудь проблему, понравился или оказался полезен, то Вы можете поддержать мой проект, перечислив любую сумму:

можно оплатить вручную:

Вступайте в мои группы:

One thought on “ Учимся работать с соответствием в 1С 8.3 ”

При написании небольших автоматизированных тестов часто надо обойти всю конфигурацию и проверить, например, для всех форм какое-нибудь свойство. Это всё легко делается через свойство глобального контекста "Метаданные", но чтоб дорбаться до обхода реквизитов надо написать кучу вложенных циклов. При этом код становится слабочитаемым и слабомодифицируемым.

Ниже приведен небольшой модуль, который решает задачу легко и удобно. Создана специальная функция РазвернутьСтрокуОбходаМетаданных, которая может по строке типа "Метаданные.Справочники.*.Реквизиты.*" построить массив строк с перечислением всех реквизитов всех справочников. При помощи этой и нескольких других функций в экспортных функциях модуля реализованы вполне прикладные задачи - получение всех реквизитов, всех макетов, всех форм конфигурации и построение таблицы всех составных типов.

Разместил: E_Migachev  Версии: | 8.x | 8.2 УП |  Дата: 19.01.2014   Прочитано: 37491

Распечатать

Похожие FAQ

Еще в этой же категории

Как программно получить Картинку из базы и сохранить ее преобразовав в другой формат?  4
//Получим и сохраним Общую картинку из библиотеку картинок конфигурации ИмяКартинки = Метаданные.ОбщиеКартинки.OutlookExpress; ВыбраннаяКартинка = БиблиотекаКартинок ; // Сохраним полученную картинку в c:temp ВыбраннаяКартинка.Записать(" c:te Получить список Справочников конфигурации  1
НаКлиенте Процедура ПоКнопкеЧтениеИзМетаданных(Команда) // Вставить содержимое обработчика. Перем СписокСправочников; СписокСправочников = Новый СписокЗначений; СписокСправочников = СправочникиИзМетаданных(); Для Сч = 0 По СписокСправочников Получить список Документов конфигурации  0
//ЭлементыФормы.ОбъектПоиска - Поле Выбора на форме СписокВыбора = ЭлементыФормы.ОбъектПоиска.СписокВыбора; Для Каждого Документ Из Метаданные.Документы Цикл //Проверим, есть ли права на просмотр? Да- добавляем, Нет - пропускаем Если ПравоДосту Перебор Основных Реквизитов формы  0
//Перебор Основных Реквизитов формы Для Каждого Рек из ЭтаФорма.Метаданные().Реквизиты Цикл Сообщить(рек.Имя+" - " +рек.Синоним+" - " +Строка(рек.Тип)); КонецЦикла; // или так Для Каждого Рек из Метаданные().Реквизиты Цикл Сообщить(рек.Имя+" Пример обращения к метаданным  0
спрНомен = Метаданные.Справочники.Номенклатура; Сообщить(" Имя справочника " " " + спрНомен.Имя + " " " " ); Сообщить(" Комментарий " + спрНомен.Комментарий); Сообщить(" ВидИерархии " + спрНомен.ВидИерархии); Сообщить(" КоличествоУровней " + Посмотреть все в категории Метаданные

Автозаполнение реквизитов документа из справочника
Имеется конфигурация, есть справочник &quot;АвтомобилиИМеханизмы&quot; и документ &quot;ПутевыеЛисты4П&quot;. В.

Автозаполнение нескольких реквизитов в форме документа
Добрый день.(8.3, УФ) Возникла нужда заполнить несколько реквизитов (ИНН и НомерТелефона) в форме.

Заполнение ТЧ Документа из Реквизитов справочника
нужно заполнить ТЧ документа из Реквизита справочника. &amp;НаКлиенте Процедура.


Заполнение реквизитов документа из справочника
Имеется документ &quot;Договор&quot;, как сделать что бы при выборе &quot;Исполнителя&quot; (его я выбираю из.

Спасибо за код, но он у меня почему-то не работает. Я полазил в нем и не смог разобраться.

Вопрос, его где надо прописать в "заказ" или "акт выполнения работ"

Добавлено через 5 минут
А то написано "ЗаказПриИзменении" а авто заполнение должно быть в "Акт выполнения работ" и братся из "Заказ"

вангую, что надо назначить процедуру на действие

Решение

Шёпотом и оглядываясь.


Вы только Dethmontt`у этого не показывайте.
4(ужас) вызова сервера вместо одного.
Предлагаю такой вариант:
иван2020, конечно не будет работать у тебя событие, потому что ты просто скопировал, так как надо еще надо установить связь и, по совету высокомудрого Yulunga, свяжите таки событие ПриИзменении элемента Заказ с процедурой ЗаказПриИзменении.

Scratchsv, учту на будущее
кстати как сделать, не по теме?

Помощь в написании контрольных, курсовых и дипломных работ здесь.


Изменение реквизитов справочника при проведении документа
Доброго времени суток! Прошу помочь, нужно изменить реквизиты элементов справочника.

Автоматическое изменение реквизитов справочника после проведения документа
Всем привет, у меня возник вопрос. Могу ли я как-то автоматически изменять значения реквизитов.

Автозаполнение полей документа, из табличной части справочника
Здравствуйте, столкнулся со следующей проблемой. Необходимо сделать автозаполнение полей документа.

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

Автозаполнение из табличной части справочника в табличную часть документа
Здравствуйте , помогите пожалуйста с кодом Мне нужно чтобы автоматически заполнялась табличная.


Связывание реквизитов формы объекта и реквизитов справочника
Приветствую знатоков 1С. Оговорюсь сразу - только начал изучать и ещё в самом начале. Буду очень.

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

Рассмотрим некоторые приемы работы с табличными частями.

Как обойти табличную часть

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

Для каждого Строка из ТабличнаяЧасть Цикл

На каждой итерации в переменную Строка передается очередная строка табличной части. Значения реквизитов строки можно получить выражением Строка.ИмяРеквизита.

Как получить и обойти выделенные строки табличной части

Для вывода информации из табличной части объекта служит элемент формы Табличное поле. Для включения возможности выделения нескольких строк на табличном поле нужно установить значение Множественный у его свойства Режим выделения.

Работа с табличной частью объектов в 1С

Для получения перечня выделенных строк используется следующий код:

ВыделенныеСтроки = ЭлементыФормы . ИмяТабличногоПоля . ВыделенныеСтроки ;

Для того чтобы обойти выделенные строки используется цикл Для каждого:

ВыделенныеСтроки = ЭлементыФормы . ИмяТабличногоПоля . ВыделенныеСтроки ;

Для каждого Строка из ВыделенныеСтроки Цикл

Как программно выделить строки табличной части (табличного поля) и снять выделение

Чтобы программно снять выделение строк табличного поля:

Чтобы программно выделить все строки табличного поля:

Как очистить табличную часть

Как получить текущую строку табличной части

Для обычных форм код будет выглядеть так:

Для управляемых форм:

Как добавить новую строку в табличную часть

Добавление новой строки в конец табличной части:

Добавление новой строки в любое место табличной части (последующие строки будут сдвинуты):

НоваяСтрока . Реквизит 1 = "Значение" ;

Как программно заполнить реквизиты строки табличной части

Если нужно программно заполнить реквизиты строки табличной части, которую добавляет пользователь, необходимо использовать обработчик события табличной части ПриНачалеРедактирования.

Создаваемая обработчиком процедура имеет три параметра:

Рассмотрим пример. Допустим, нам нужно заполнить реквизит табличной части СчетУчета, в случае, когда добавляется новая строка. При редактировании существующей строки изменять счет учета не нужно.

//Если пользователь редактирует существующую строку, то ничего не делаем
Если НЕ НоваяСтрока Тогда
Возврат ;
КонецЕсли ;

//Если же строка новая, устанавливаем счет учета
ТекСтрока = Элемент . ТекущиеДанные ; //Получили текущую строку табличной части
ТекСтрока . СчетУчета = ПланыСчетов . Хозрасчетый . НужныйСчетУчета ;
КонецПроцедуры

Работа с табличной частью объектов в 1С : 13 комментариев

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

Спасибо!
Буду пробовать.

А может это подойдет?

Табличная часть (Tabular section)
Итог (Total)
Синтаксис:

Тип: Число; Строка.
Индекс либо имя колонки, по которой подсчитывается итог.
Возвращаемое значение:

Тип: Число; Неопределено.

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

Сервер, толстый клиент, внешнее соединение.
Пример:

Это подошло бы, если бы нужно было суммировать колонку в одном документе. А Юрию нужно суммировать колонку Стоимость всех документов.

Добрый день!
Достаточно ли будет обратиться в модуле формы к текущей строке табличной части или в модуле менеджера тоже нужно будет что-то прописать?

Не совсем понял, о чем конкретно вопрос.
Если о том, как получать и работать с текущей строкой табличной части, то в модуле менеджера ничего писать не нужно.

Здравствуйте!
Опишу вкратце ситуацию:
Из документа вызывается команда печати штрихкодов и в обработку печати передается, как я понимаю, весь контекст документа и печатаются этикетки для всех строк документа. Возможно ли в обработке печати получить информацию только о выделенных строках из этого контекста ? Прилагаю код модуля команды ПечатьЭтикеток.
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)

&НаСервере
Функция Заполнялка(ДокСсылка) Экспорт
ТабДокумент = Новый ТабличныйДокумент;

ТабДокумент.АвтоМасштаб = истина ;
ТабДокумент.ОтображатьСетку = Ложь;
ТабДокумент.ТолькоПросмотр = Истина;
ТабДокумент.ОтображатьЗаголовки = Ложь;

ЧтоТо = Стр.СерийныйНомер;
ПервыйМодуль.ВывестиШтрихкодДокументаВОбластьМакета(ВнешняяКомпонента,ОбластьМакета,ЧтоТо) ;

Информацию о выделенных строках вы можете получить только в модуле формы документа, причем, если мне не изменяет память, это должна быть клиентская процедура. По ссылке на документ выделенные строки получить нельзя.

Значит я на клиенте должен сформировать таблицу выделенных строк и уже ее передавать в обработку печати ?

Доброго времени суток!
Создаю обработку на обычных формах, в которой имеется несколько Табличных частей. Они в свою очередь находят отображение в Форме обработки. И если данные первых 3, меня после закрытия Формы, не интересуют, то данные последней хотелось-бы использовать в дальнейшем, пока открыта обработка. В настоящее время при закрытии Формы Табличные части очищаются. В дальнейшем, в новом сеансе работы с обработкой эти данные не нужны. Насколько я понимаю Функции сохранения Данных Табличной части обработки не существует. Табличную часть в обработке решил использовать из-за возможности сохранить структуру Данных. Как мне сохранить эти данные для использования в других окнах?
Может у Вас есть видео по данному вопросу?

Читайте также: