Структуры в 1С

Содержание
  1. Элемент структуры
  2. Создание структуры
  3. Возможность проведения
  4. Стандартные реквизиты документа
  5. Хранение документов в информационной базе
  6. Нумерация документов
  7. Как провести документы в 1С?
  8. Настройка и свойства документов в 1C 8.3 и 8.2
  9. Формы документа
  10. Форма списка
  11. Форма документа
  12. Форма выбора
  13. Дополнительные сведения документа
  14. Табличные части документа 1С 8.3
  15. Конструктор движений документов 1С
  16. Конструктор движений позволяет:
  17. Макеты документа 1С
  18. Вкладка «Движения»
  19. Вкладка «Ввод на основании»
  20. Как получить значение элемента структуры по имени ключа
  21. Как изменить значение элемента структуры по имени ключа
  22. Как проверить, есть ли в структуре ключ с определенным именем
  23. Добавление элементов, установка значений
  24. Как узнать количество элементов структуры
  25. Пример преобразования структуры в таблицу значений
  26. Пример №1
  27. Пример №2
  28. Пример №3
  29. Обход структуры
  30. Проверка наличия ключа
  31. Безошибочное получение значения элемента

Элемент структуры

Каждый элемент структуры является программным объектом КлючИЗначение встроенного языка и содержит следующие свойства:

  • Ключ (Строка) — строковый идентификатор
  • Значение (Произвольный тип) — произвольное значение

Создание структуры

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

Структура = Новый Структура 

Второй способ — использование конструктора, который вместе с созданием структуры выполняет ее инициализацию. Например, так:

Структура = Новый Структура("Код,Наименование") 

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

Структура = Новый Структура("Код,Наименование", 100, "Стул деревянный") 

Для добавления новых элементов структуры и замещения существующих используется метод Структура.Вставить():

Структура.Вставить("Код", 100) Структура.Вставить("Наименование", "Стул деревянный") 

Возможность проведения

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

Стандартные реквизиты документа

Помимо тех реквизитов, которые разработчик добавляет в документ, есть еще стандартный набор реквизитов, внедренные в документ уже на уровне платформы. Это: ссылка, номер, дата, пометка удаления, проведен. Найти их можно на закладке «Данные», кнопка «Стандартные реквизиты».

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

Документ может находится в трех состояниях:

  • Не помечен на удаление и не проведен;
  • Не помечен на удаление и проведен;
  • Помечен на удаление и не проведен.

Разработчик может самостоятельно добавлять необходимые реквизиты, а также табличные части. Каждая табличная часть имеет один стандартный реквизит — «НомерСтроки».

Хранение документов в информационной базе

В базе, каждый вид документов, хранятся в отдельной таблице. Эта таблица содержит в себе все реквизиты документа. Табличные части же хранятся в отдельных таблицах. Связь с таблицей документов производится по реквизиту «Ссылка».

Нумерация документов

Каждый документ имеет номер, настройка которого задается на вкладке «Нумерация». На этой вкладке можно задать признак автоматической нумерации, признак контроля уникальности, задать какого типа будут номер (числовой или строковый) и его длину.

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

Префикс устанавливается в модуле объекта документа, в процедуре «ПриУстановкеНовогоНомера».

Процедура ПриУстановкеНовогоНомера(СтандартнаяОбработка, Префикс) // Вставить содержимое обработчика. КонецПроцедуры 

Также на вкладке «Нумерация» мы можем задать периодичность документа.

Возможные значения:

  • Непериодический;
  • В пределах года;
  • В пределах квартала;
  • В пределах месяца;
  • В пределах дня.

Обычно выбирают значение «в пределах года», это означает, что в новом году нумерация документов начнется сначала.

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

Его необходимо указывать в поле «Нумератор».

Как провести документы в 1С?

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

Настройка и свойства документов в 1C 8.3 и 8.2

Одна из основные вкладок документа:

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

Формы документа

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

Форма списка

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

Форма документа

Для просмотра и изменения данных отдельных документов используется форма документа. Как правило, она представляет данные в удобном для восприятия и редактирования виде:

Форма выбора

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

Дополнительные сведения документа

Для удобства работы в 1С пользователь может в любой документ добавлять дополнительные сведения. Для того чтобы сохранить порядок в документации, функциями добавления дополнительных сведений обладает только ограниченный круг пользователей с полными правами в системе. Как добавляются дополнительные сведения рассмотрим на примере документа «Заказ поставщику». Для этого сначала заполним настройки и далее заходим в пункт меню «Администрирование-Общие настройки».

В этом окне выберем вкладку «Дополнительные реквизиты и сведения» и поставим галочку в поле, которое так же называется. Затем переходим в меню «Администрирование-Формы-Дополнительные сведения».

В списке документов, открывшемся перед нами, мы можем задать дополнительные сведения. Например, для документа «Поступление (акты, накладные)» мы решили ввести дополнительные пункты. Находим нужный документ, выделяем его и кликаем на кнопку «Создать».

Откроется таблица, где создаются дополнительные сведения. Заполняем всё как необходимо. Укажем наименование дополнительного сведения и его тип значения. Тип значения для удобства может содержать различные варианты: договор, число, валюта, дата, договор и т. д.

Затем последуем на вкладку «Значения» и жмем на кнопку «Создать». Во всплывающем окне заполняем нужные пункты сведений.

Дополнительные сведения, которые создали, будут отображены в списке.

Жмем «Записать и закрыть». С этого момента в документах типа «Поступление (акты, накладные)» появляется возможность присоединить менеджера по закупкам, который занимается этим заказ.

Для проверки, что все отлично работает перейдем в «Покупки-Покупки-Поступление (акты, накладные)». Мы увидим список документов поступления. В верху списка находим значок «Дополнительные сведения», который появится после того, как создали и настроили дополнительные сведения.

Табличные части документа 1С 8.3

У документа может быть неограниченно число табличных частей, которые необходимы для отображения списка однотипной информации (например, товары, их количество, цена и сумма, которые будут оприходованы).

Список табличных частей отображается в конструкторе документа на закладке «Данные» во втором окне.

Чтобы добавить реквизит в табличную часть, необходимо выделить нужную табличную часть и нажать на кнопку «Добавить реквизит».

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

Конструктор движений документов 1С

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

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

Конструктор может быть вызван из окна редактирования документа.

Конструктор движений позволяет:

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

Результатом работы конструктора является готовая процедура на встроенном языке с именем ОбработкаПроведения. Эта процедура располагается в модуле документа и будет вызвана системой в момент проведения документа.

Пример

Макеты документа 1С

Макеты документа 1С предназначены для формирования печатных форм документа (бланков) или для отображения дополнительной информации, имеющей отношение к документу.

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

Вкладка «Движения»

Вкладка «Движения»

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

  1. Проведение (Разрешить или Запретить) — определяет, разрешено ли проведение (движения) данного документа.
  2. Оперативное проведение (Разрешить или Запретить) — если установлено «Разрешить», то проведение документа будущей датой невозможно.
  3. Удаление движений — определяет режим очистки движения документа:
    • Удалять автоматически при отмене проведения — движения будут очищены только при нажатии кнопки «Отмена проведения», но не удаляются при перепроведении;
    • Удалять автоматически — движения будут удаляться в любом случае, даже если документ 1С перепроводится;
    • Не удалять автоматически — значит, что удаление движений осуществляется разработчиком.
Оперативное и неоперативное проведение документа 1С

Оперативное проведение — это проведение документа текущей датой и временем, даже если в документе вручную указаны иные (прошлые или будущие) время и дата (подробнее…).

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

  1. либо в оперативном режиме,
  2. либо в неоперативном режиме.

При включенном в конфигураторе режиме «Оперативное проведение» — «Разрешить» можно проводить:

  • либо документ с предыдущей датой,
  • либо документ с текущей датой и текущим временем.

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

Неоперативное проведение — проведение документа прошлой или будущей датой. Контроль остатков в данном режиме проведения не выполняется (при проведении «задним числом» практического смысла не несет, товар все равно уже отгружен).

Неоперативное проведение может нарушать партионный учет: при проведении списания со склада задним числом будет списана первая подходящая партия, а не та, что должна была идти по ФИФО в тот момент времени, что указан в документе. Партии после неоперативного проведения придется восстанавливать.

Вкладка «Ввод на основании»

Ввод на основании обычно создает объект другого типа, данные которого лишь функционально зависят от «объекта-основания» (в отличие от «копирования» – создания нового объекта копированием существующего, причем того же типа и с идентичными данными).

Документ может быть введен на основании:

  • плана обмена,
  • справочника,
  • бизнес-процесса,
  • задачи,
  • другого документа.

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

Как получить значение элемента структуры по имени ключа

Фамилия = П1.Фамилия //переменной Фамилия будет присвоено значение «Иванов»
Возраст = П1.Возраст //переменной Возраст будет присвоено значение 25

Как изменить значение элемента структуры по имени ключа

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

П1.Возраст=26 // Значение изменено на 26
П1.Вставить(«Возраст»,26) // Значение изменено на 26

Как проверить, есть ли в структуре ключ с определенным именем

Для этого существует функция Свойство (Ключ, НайденноеЗначение). Первый параметр Ключ — обязательный. Сюда нужно передать имя искомого ключа структуры. Второй параметр — переменная, в которую нужно поместить значение, если ключ будет найден. Этот параметр не обязателен. А сама функция возвращает значение Истина, если ключ найден, или Ложь, если не найден.

Найдено = П1.Свойство(«Отчество») // Найдено = Ложь
Перем Имя
Найдено = П1.Свойство(«Имя», Имя)
//Имя = «Иван», Найдено = Истина

Добавление элементов, установка значений

Метод Вставить() устанавливает значение элемента структуры по ключу. Если элемент с переданным значением ключа существует, то его значение заменяется, в противном случае добавляется новый элемент.

Автомобиль.Вставить("Цвет","Белый")//Добавили ключ и значение. Автомобиль.Вставить("Цвет","Чёрный")// Т.к. ключ "Цвет" уже существует, произошла замена значения. //Другие способы для установки значений Автомобиль.Цвет = "Белый"//Для ключа "Цвет" установили значение "Белый" Автомобиль["Цвет"] = "Чёрный"//Для ключа "Цвет" установили значение "Чёрный" 

Как узнать количество элементов структуры

КоличествоЭлементов = Автомобиль.Количество() 

Пример преобразования структуры в таблицу значений

&НаКлиенте Процедура СтруктураВТЗ(Команда) РасписаниеДня = Новый Структура() РасписаниеДня.Вставить("Начало","08:00") РасписаниеДня.Вставить("Обед","12:00") РасписаниеДня.Вставить("Конец","17:00") ТаблицаЗнач = СтруктураВТЗНаСервере(РасписаниеДня) КонецПроцедуры &НаСервере Функция СтруктураВТЗНаСервере(РасписаниеДня) ТЗ = Новый ТаблицаЗначений ТЗ.Колонки.Добавить("Период") ТЗ.Колонки.Добавить("Время") Для Каждого КлючИЗначение из РасписаниеДня Цикл НоваяСтрока = ТЗ.Добавить() НоваяСтрока.Период = КлючИЗначение.Ключ НоваяСтрока.Время = КлючИЗначение.Значение КонецЦикла
Возврат ТЗ 

КонецФункции

Наша команда предоставляет услуги по консультированию, настройке и внедрению 1С.
Связаться с нами можно по телефону +7 499 350 29 00.
Услуги и цены можно увидеть по ссылке.
Будем рады помочь Вам!

Результат:

Пример №1

&НаКлиенте Процедура СкопироватьСтруктуру(Команда) Структура = Новый Структура() Структура.Вставить("Фамилия","Петров") Структура.Вставить("Имя","Пётр") Структура.Вставить("Отчество","Петрович") КопияСтруктуры= Новый Структура() Для Каждого КлючИЗначение Из Структура Цикл КопияСтруктуры.Вставить(КлючИЗначение.Ключ,КлючИЗначение.Значение) КонецЦикла КонецПроцедуры 

Пример №2

Способ работает в рамках одной информационной базы.

&НаКлиенте Процедура СкопироватьСтруктуру2(Команда) Структура = Новый Структура() Структура.Вставить("Фамилия","Петров") Структура.Вставить("Имя","Пётр") Структура.Вставить("Отчество","Петрович") КопияСтруктуры = СкопироватьСтруктуруНаСервере(Структура) КонецПроцедуры &НаСервере Функция СкопироватьСтруктуруНаСервере(Структура) КопияСтруктуры = ЗначениеИзСтрокиВнутр(ЗначениеВСтрокуВнутр(Структура)) Возврат КопияСтруктуры КонецФункции 

Пример №3

&НаКлиенте Процедура СкопироватьСтруктуру3(Команда) Структура = Новый Структура() Структура.Вставить("Фамилия","Петров") Структура.Вставить("Имя","Пётр") Структура.Вставить("Отчество","Петрович") КопияСтруктуры = Новый ФиксированнаяСтруктура(Структура) КонецПроцедуры 

В примере №3 структура будет скопирована в неизменную (фиксированную) структуру. Для такого вида структур не доступны методы Вставить(), Удалить(), Очистить(). Если требуется изменить фиксированную структуру, её необходимо скопировать в обычную.

ОбычнаяСтруктура = Новый Структура(ФиксированнаяСтруктура)

Обход структуры

Чтобы перебрать коллекцию структуры, нужно использовать конструкцию «Для Каждого КлючИЗначение Из Структура Цикл».

Например:

Для Каждого КлючИЗначение Из Структура Цикл
…… //обрабатываем, например, изменяем значения
КонецЦикла;

В каждом цикле будет видно, что нам доступны следующие поля:

Количество элементов в структуре можно подсчитать следующим образом:

ТекущаяСтруктура.Количество()

Проверка наличия ключа

Часто бывает, что нужно проверить, есть ли в структуре нужное значение по ключу. В таком случае следует использовать метод «Свойство»:

ЕстьСвойствоКонтрагент = Структура.Свойство(«Контрагент»);

Если в структуре есть элемент с ключом «Контрагент», тогда метод вернет «Истина», в противном случае — «Ложь».

Безошибочное получение значения элемента

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

Этот метод – Свойство.

Данный метод является функцией и возвращает Истину, если указанный ключ есть, и Ложь, если указанного ключа нет.

Рассмотрим синтаксис метода:

Свойство(<ИмяКлюча>,<ЗаписываемоеЗначение>);

«ИмяКлюча» — название ключа для поиска свойства.

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

А = 0 Структура1 .Свойство ( «Ключ1» ,А

В переменную А запишется значение, которое связанно с Ключ1.

Но если мы напишем так.

А = 0 Структура1 .Свойство ( «Ключ10» ,А

То ни какой ошибки не возникнет, и в переменной А присвоится значение Неопределено.

Источники

  • https://www.about1c.ru/v83/language-reference/working-with-structure
  • http://1c-programist.ru/stati/dokumenty-1s-obschee-opisanie.html
  • https://itcons99.ru/chasto-zadavaemye-voprosy/dokument-1c-chto-eto/
  • https://programmist1s.ru/dokumentyi-v-1s/
  • https://v8.1c.ru/platforma/dokumenty/
  • https://www.1cBIT.ru/blog/dokument-v-1s-8-3-nastroyka-provedenie-i-formirovanie/
  • https://www.1s-up.ru/dokumenty-v-1s-8-3/
  • https://flagman.top/about-business/ehkzamen-1s/obekty-1s-dokumenty
  • http://chel1C.ru/%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0-%D1%81%D0%BE-%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D0%BE%D0%B9-%D0%B2-1%D1%81/
  • https://1s83.info/programmirovanie/struktura-v-1s.html
  • https://programmist1s.ru/rabota-so-strukturami-v-1s-8/
  • https://www.1s-up.ru/uchimsja-rabotat-s-obektom-struktura/

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: