1С создать структуру

Содержание

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

Номенклатура.Наименование КАК Наименование,

Справочник.Номенклатура КАК Номенклатура

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

Для того чтобы группы справочника размещались выше элементов необходимо в данном запросе заменить предложение УПОРЯДОЧИТЬ ПО на следующее:

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

Возможна также замена предложения УПОРЯДОЧИТЬ ПО на предложение АВТОУПОРЯДОЧИВАНИЕ . В этом случае результат будет упорядочен в соответствии с настройками справочника, т.е. если в справочнике указано, что группы должны располагаться выше элементов, то они будут расположены выше.

Получить иерархическую структуру справочника также возможно и при помощи итогов.

Номенклатура.Наименование КАК Наименование,

ИЗ Справочник.Номенклатура КАК Номенклатура

УПОРЯДОЧИТЬ ПО Наименование

ИТОГИ ПО Номенклатура.Ссылка ТОЛЬКО ИЕРАРХИЯ

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

Создание элемента справочника

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

  1. Создание элемента или группы;
  2. Заполнение владельца (если справочник подчиненный);
  3. Заполнение родителя (если справочник иерархический);
  4. Заполнение наименования и реквизитов (если не задана автоматическая нумерация, то и кода);
  5. Заполнение табличных частей;
  6. Запись элемента.

Создание новой группы:

Создание нового элемента:

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

Для поиска элементов справочников в языке программирования 1С предусмотрено несколько методов:

Во всех методах если поиск успешный, то будет возвращена ссылка на найденный элемент.

Удаление элементов справочника

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

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

Пометку на удаление можно установить/снять двумя разными способами:

Пример непосредственного удаления элемента справочника:

Обход элементов справочника

Для обхода элементов справочника в языке программирования 1С предусмотрено два метода:

  • Выбрать ( Родитель >, Владелец >, Отбор >, Порядок >)
  • ВыбратьИерархически ( Родитель >, Владелец >, Отбор >, Порядок >)

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

Рассмотрим примеры обхода элементов справочника:

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

Поиск данных в базе 1С предпочтительнее выполнять при помощи запросов. Запрос позволяет описать практически любые условия для отбора, в отличие от методов Выбрать () и ВыбратьИерархически () , на которые накладываются существенные ограничения. К тому же, в большинстве случаев работа с использованием запросов быстрее, чем работа с использованием программного кода.

Простой пример поиска и вывода товаров со стоимостью больше 1000:

Открытие форм справочника

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

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

Кроме методов ОткрытьФорму () и ПоказатьЗначение () есть и другие (ОткрытьФормуМодально, ОткрытьЗначение, ПолучитьФорму), но их использование не рекомендуется, т.к. часть этих методов использует режим модального открытия, часть противоречит свежим рекомендациям фирмы 1С.

Приведем примеры программного открытия форм справочника:

Внимание!

Следует понимать, что интерактивная работа (в том числе открытие форм) в 1С возможна только на стороне клиента. В то же время поиск и изменение данных возможны только на стороне сервера.

Остались вопросы?
Спросите в комментариях к статье.

Табличный документ 1С:Предприятия 8 служит не только для печати документов и отчетов. Он имеет расширенные возможности, которые превращают его в интерактивное средство взаимодействия с пользователем. К таким возможностям относятся:

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

Расшифровки

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

Расшифровки делятся на стандартные и нестандартные. Стандартные расшифровки обрабатываются системой автоматически и не требуют дополнительных усилий от программиста, например, для документов будет открыта форма документа, а для элементов справочника будет открыта форма элемента. Если справочник редактируется в списке, то курсор будет установлен на текущем элементе в форме списка. Для выполнения нестандартной расшифровки предназначено событие ОбработкаРасшифровки.

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

Сама процедура «РасшифроватьСтроку» может выглядеть следующим образом (как пример):

Примечание 1. В модуле приложения (аналог глобального модуля в версии 7.7) больше нет события ОбработкаЯчейкиТаблицы. Вся обработка расшифровок должна быть произведена в модуле формы, где располагается элемент управления «ПолеТабличногоДокумента».

Примечание 2. Событие «ОбработкаРасшифровки» возникает при щелчке на ячейке или рисунке, содержащих расшифровку. Не путайте его с событием «Выбор», возникающим для всех ячеек и рисунков при двойном щелчке мыши или нажатии клавиши Enter, причем, сначала возникает событие «Выбор», а потом «ОбработкаРасшифровки».

Группировки

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

Самый простой способ добавить группировки в отчет — доверить эту задачу системе, тогда от программиста потребуются минимальные усилия. Необходимо всего лишь применить методы НачатьАвтоГруппировкуСтрок/НачатьАвтоГруппировкуКолонок и ЗакончитьАвтоГруппировкуСтрок/ЗакончитьАвтоГруппировкуКолонок, которые включают режим автоматической группировки строк или колонок соответственно. В этом режиме при вызове методов Вывести (для строк) и Присоединить (для колонок) указываются дополнительные параметры для группировки:

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

Следующий пример выводит список товаров с группировками:

Примечания

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

Программная установка примечаний реализуется следующим образом:

Обратите внимание, что свойство «Примечание» у объекта «ОбластьЯчеекМакета» является объектом типа «Рисунок», а не простой строкой. Через этот объект можно редактировать внешний вид примечания, шрифт и цвет текста, фон, линии и т.д.

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

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

Автомобиль = Новый Структура(«Марка,ДатаВыпуска,ПробегКМ»,»BMW»,Дата(‘20190101’),25000);

Результат:

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

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

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

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

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

Обход элементов структуры

Для Каждого Элемент Из Автомобиль Цикл Ключ = Элемент.Ключ; Значение = Элемент.Значение; Сообщить(Ключ + » — » + Значение); КонецЦикла;

Проверить ключ структуры на существование

// Если ключ существует, выражение вернёт «ИСТИНА» иначе вернёт «ЛОЖЬ» Автомобиль.Свойство(«Марка»);

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

ЗначениеЭлемента = Неопределено; Автомобиль.Свойство(«Марка «,ЗначениеЭлемента);

Удалить элемент структуры

Автомобиль.Удалить(«Цвет «);

Удалить все элементы структуры

Автомобиль.Очистить();

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

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

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

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

Результат:

Как скопировать структуру

Пример №1

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

Пример №2

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

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

Пример №3

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

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

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

Структура

  • Как создать структуру
  • Как добавить элементы в структуру
  • Как обратиться к элементу структуры
  • Как перебрать элементы структуры
  • Как удалить элемент структуры
  • Как в структуре установить значение для элемента с определенным ключом
  • Как получить в структуру многомерные данные? Как собрать информацию по установленным в форме журнала отборам
  • Как определить, есть ли в структуре элемент с ключом «Контрагент», и если есть, но содержит пустое значение справочника или Неопределено — удалить этот элемент
  • Как из табличной части «Товары» документа получить все строки, где значение реквизита «Цена» равно нулю, а значение реквизита «СтавкаНДС» равно значению «НДС18» перечисления «СтавкиНДС»
  • Как получить данные о текущей учетной политике бухгалтерского учета организации из периодического регистра сведений на заданную дату
  • Как сформировать структуру названий реквизитов табличной части произвольного документа
  • Как получить запросом данные табличной части документа, имея структуру названий реквизитов табличной части

Как создать структуру?

СозданнаяСтруктура = Новый Структура; Оппонент = Новый Структура («Фамилия, Имя, Отчество, Возраст», «Иванов», «Иван», «Иванович», 7);

Как добавить элементы в структуру?

Оппонент = Новый Структура («Фамилия, Имя, Отчество, Возраст», «Иванов», «Иван», «Иванович», 7); Оппонент.Вставить(«Обращение», «Господин»); Оппонент.Вставить(«Возраст», 25);

Как обратиться к элементу структуры?

ТекущийВозраст = Оппонет.Возраст; КлючСтруктуры = «Возраст»; ТекущийВозраст = Оппонет; ТекущийВозраст = Неопределено; Оппонет.Свойство(«Возраст», ТекущийВозраст); Оппонет.Возраст = 32; Оппонет = 32; Оппонент.Вставить(«Возраст», 32);

Как перебрать элементы структуры?

Для Каждого Элемент из СтруктураПараметров Цикл Сообщить(Элемент.Ключ + «: » + Элемент.Значение); КонецЦикла;

Как удалить элемент структуры?

СтруктураПараметров.Удалить(«Номенклатура»); СтруктураПараметров. Очистить();

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

Структура = Новый Структура; // Добавить новый элемент. Структура.Вставить(«Цвет», WebЦвета.Белый); // Установить значение для элемента с ключом «Цвет». Структура.Вставить(«Цвет», WebЦвета.Синий);

Как получить в структуру многомерные данные? Как собрать информацию по установленным в форме журнала отборам?

СтруктураОтборов = Новый Структура; СтруктураПараметровОтбора = Новый Структура; Для Каждого ЭлементОтбора из ЖурналДокументовСписок.Отбор Цикл Если ЭлементОтбора.Использование Тогда СтруктураПараметровОтбора.Очистить(); СтруктураПараметровОтбора.Вставить(«Имя», ЭлементОтбора.Имя); СтруктураПараметровОтбора.Вставить(«ВидСравнения», ЭлементОтбора.ВидСравнения); СтруктураПараметровОтбора.Вставить(«Значение», ЭлементОтбора.Значение); СтруктураПараметровОтбора.Вставить(«ЗначениеПо», ЭлементОтбора.ЗначениеПо); СтруктураПараметровОтбора.Вставить(«ЗначениеС», ЭлементОтбора.ЗначениеС); СтруктураПараметровОтбора.Вставить(«Представление», ЭлементОтбора.Представление); СтруктураПараметровОтбора.Вставить(«ПутьКДанным», ЭлементОтбора.ПутьКДанным); СтруктураПараметровОтбора.Вставить(«ТипЗначения», ЭлементОтбора.ТипЗначения); СтруктураОтборов.Вставить(ЭлементОтбора.Имя, СтруктураПараметровОтбора); КонецЕсли; КонецЦикла;

Как определить, есть ли в структуре элемент с ключом «Контрагент», и если есть, но содержит пустое значение справочника или Неопределено — удалить этот элемент?

Если Структура.Свойство(«Контрагент», ЗначениеЭлемента) Тогда Если ЗначениеЭлемента = Неопределено ИЛИ ЗначениеЭлемента.Пустая() Тогда Структура.Удалить(«Контрагент»); КонецЕсли; КонецЕсли; Структура.Контрагент Структура

Как из табличной части «Товары» документа получить все строки, где значение реквизита «Цена» равно нулю, а значение реквизита «СтавкаНДС» равно значению «НДС18» перечисления «СтавкиНДС»?

СтруктураДляПоиска = Новый Структура(«Цена, СтавкаНДС», 0, Перечисления.СтавкиНДС.НДС18); МассивСтрок = Товары.НайтиСтроки(СтруктураДляПоиска);

Как получить данные о текущей учетной политике бухгалтерского учета организации из периодического регистра сведений на заданную дату?

// Подготовить отбор по измерению «Организация». СтруктураОтбора = Новый Структура(«Организация», ЮрЛицо); // Получить данные, актуальные на указанную дату. СтруктураДанных = РегистрыСведений.УчетнаяПолитикаБухгалтерскийУчет.ПолучитьПоследнее(ДатаПолучения, СтруктураОтбора); // Прочитать данные из структуры данных. СпособОценкиМпзЮрЛица = СтруктураДанных.СпособОценкиМПЗ; ДиректКостингЮрЛица = СтруктураДанных.ДиректКостинг;

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

Функция СформироватьСтруктуруТабличнойЧастиДокумента(Документ, ИмяТабличнойЧасти) СтруктураТабличнойЧастиДокумента = Новый Структура; Для Каждого Реквизит из Документ.Метаданные().ТабличныеЧасти.Реквизиты Цикл СтруктураТабличнойЧастиДокумента.Вставить(Реквизит.Имя, Реквизит.Имя); КонецЦикла; Возврат СтруктураТабличнойЧастиДокумента; КонецФункции

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

Функция СформироватьЗапросПоТабличнойЧасти(Документ, ИмяТабличнойЧасти, СтруктураПолей) Экспорт ПоляРеквизитов = «»; Для Каждого Реквизит Из СтруктураПолей Цикл ПоляРеквизитов = ПоляРеквизитов + «, Док.» + Реквизит.Значение + ?(ЗначениеНеЗаполнено(Реквизит.Ключ), «», » КАК » + СокрЛП(Реквизит.Ключ)); КонецЦикла; Запрос = Новый Запрос; Запрос.Текст = «ВЫБРАТЬ | Док.НомерСтроки » + ПоляРеквизитов + » |ИЗ | Документ.» + Документ.Метаданные().Имя + «.» + СокрЛП(ИмяТабличнойЧасти) + » КАК Док |ГДЕ | Док.Ссылка = &ДокументСсылка»; // Установить параметры запроса. Запрос.УстановитьПараметр(«ДокументСсылка», Документ.Ссылка); Возврат Запрос.Выполнить(); КонецФункции

База 1С:Бухгалтерия после перехода на 8.3 сильно увеличилась в размерах оглавление Ошибка: 1С:Бухгалтерия 8.3 , несмотря на обновление, начисляет ПФР отдельно на накопительную и страховую части

Как сделать, чтобы в заголовке окна выводилось название организации для 1С:Бухгалтерия 8.3 (редакция 3.0)

2016-12-08T15:08:01+00:00

К сожалению, сделать так как в предыдущих редакциях: чтобы в заголовок 1С:Бухгалтерия 8.3 (редакция 3.0) автоматически попадало название текущей организации нельзя.

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

Как это сделать? Об этом ниже по шагам.

1. Перейдите в раздел «Администрирование»->»Общие настройки» ( у вас другое меню? ):

2. В окне с настройками выберите пункт «Заголовок программы»:

3. Измените этот параметр на название вашей организации или группы компаний.

4. Нажмите кнопку «Ок» внизу. Готово!

С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).

Подписывайтесь и получайте новые статьи и обработки на почту (не чаще 1 раза в неделю).
Вступайте в мою группу ВКонтакте, Одноклассниках, Facebook или Google+ — самые последние обработки, исправления ошибок в 1С, всё выкладываю там в первую очередь.

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

Нажмите одну из кнопок, чтобы поделиться:

База 1С:Бухгалтерия после перехода на 8.3 сильно увеличилась в размерах оглавление Ошибка: 1С:Бухгалтерия 8.3 , несмотря на обновление, начисляет ПФР отдельно на накопительную и страховую части

Задает значение элемента структуры с указанным ключом

Синтаксис

Метод Вставить() имеет следующий синтаксис:

Вставить(Ключ, )

А также альтернативный англоязычный синтаксис:

Insert(Key, )

Параметры

Описание параметров метода Вставить():

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

Значение по умолчанию Неопределено

Жирным шрифтом выделены обязательные параметры

Описание

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

Доступность

Пример использования

Пример кода с использованием метода Вставить():

Структура = Новый Структура; //создаем свойство структуры Структура.Вставить(«Код»); //а потом заполняем его Структура.Код = 100; //либо сразу создаем и инициализируем Структура.Вставить(«Код», 100);