Документ табличная часть 1с: Изменение и заполнение табличной части документа в 1С 8.3 УТ 11

Содержание

1с обращение к табличной части документа

Автор admin На чтение 7 мин. Просмотров 1.6k. Опубликовано

Табличные части существуют у многих объектов в 1С:

  • Справочники
  • Документы
  • Отчеты и обработки
  • Планы счетов
  • Планы видов характеристик
  • Планы видов расчета
  • Бизнес-процессы и задачи

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

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

Содержание

  1. Как обойти табличную часть
  2. Как получить и обойти выделенные строки табличной части
  3. Как программно выделить строки табличной части (табличного поля) и снять выделение
  4. Как очистить табличную часть
  5. Как получить текущую строку табличной части
  6. Как добавить новую строку в табличную часть
  7. Как программно заполнить реквизиты строки табличной части
  8. Работа с табличной частью объектов в 1С : 7 комментариев
  9. Документы
  10. Документы в языке 1С 8. 3, 8.2 (в примерах)
  11. 25 августа 2011 г.
  12. Обратиться к текущей строке табличной части документа или справочника

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

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

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

Сообщить ( Строка . РеквизитТабличнойЧасти ) ;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

НоваяСтрока = ТабличнаяЧасть . Вставить ( Индекс )
//Индекс — номер добавляемой строки. Нумерация строк начинается с нуля.

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

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

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

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

  • Элемент — содержит элемент управления ТабличноеПоле.
  • НоваяСтрока — булево. Содержит значение Истина, если добавляется новая строка табличной части, и Ложь, если пользователь начал редактировать уже существующую строку.
  • Копирование — булево. Содержит значение Истина, если пользователь копирует строку, и Ложь в остальных случаях.

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

Процедура ТабличнаяЧастьПриНачалеРедактирования ( Элемент , НоваяСтрока , Копирование )

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

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

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

Приветствую!
Только начал изучать 1С.
Кое что уже знаю, но мало и опыта практически ноль.
Создал свою конфигурацию, пока только для тестов.
В данной конфигурации есть документ, назовем его «Заявка».
В данной заявке, есть табличная часть, в которой есть реквизит «Стоимость».
Получается, что таких документов много и мне нужно сложить все реквизиты «Стоимость» из всех документов «Заявка».
Вопрос.
Как мне это сделать?
Предполагаю, что нужно использовать функцию с экспортом, в которой будет цикл «Для Каждого ……»
Но как это оформить, пока не могу понять…

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

Я бы порекомендовал сделать запрос к табличной части документа (именно к табличной части, а не к документу). Выбрать там ваш столбец Стоимость и другие столбцы, если нужно. И применить функцию СУММА к этому столбцу. Подробнее и с примерами смотрите в статье Группировки в запросах 1С http://chel1c.ru/querry_group/

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

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

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

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

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

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

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

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

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

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

Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.

Документы

Описание:

Документ — одно из основных понятий системы 1С:Предприятие. При помощи документов организуется ввод в систему информации о совершаемых хозяйственных операциях, а также ее просмотр и корректировка.

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

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

Документы в языке 1С 8.3, 8.2 (в примерах)

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

Подписывайтесь и получайте новые статьи и обработки на почту (не чаще 1 раза в неделю).

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

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

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

Сайт о программировании в 1с версии 7.7 и 8.x

25 августа 2011 г.

Обратиться к текущей строке табличной части документа или справочника

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

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

В версии 7.7 всё просто. Даже ничего не нужно придумываться. Как только мы активируем строку документа — программно уже можно получить значение реквизитов из текущей строки.

А вот в 8.1 сложнее: Табличных частей может быть много, форм документа тоже несколько.

В 8.1 — нужно понимать что Табличная часть документа отображается только через Табличное поле , поэтому обращение к текущей строке будет так:

1С сумма в табличной части документа — ПК портал

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

Это небольшое вычисление производится в модуле формы в процедуре, выполняющейся на клиенте. Такой процедурой являются обработчики события ПриИзменении полей Цена и Количество табличной части документа.

Итак, сначала нужно создать форму документа, чтобы в ней описать собственный алгоритм вычислений. Затем, открыв палитру свойств полей Цена и Количество табличной части документа, создать для них обработчики события ПриИзменении и внести в них следующий код:

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

Сумма как произведение значений колонок Количество и Цена.

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

В модуле формы документа вызывать ее из обработчиков события ПриИзменении:

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

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

И так открываем конфигуратор заходим в созданный ранее документ и переходим на вкладку Формы. В ней нужно открыть и отредактировать Форма Документа кликаем на ней два раза или выбираем Карандашик.

Теперь необходимо перейти в Модуль.

В окне модуля пишем небольшой код

Теперь немного поясню код который нужно написать.

&НаКлиенте — Это значить что вычисление будет происходить на компьютере пользователя, а не на сервере.

Процедура — Это собственно процедура)

МатериалыКоличествоПриИзменении — Это название нашей процедуры.

Строка — Это переменная

Элементы.Материалы.ТекущиеДанные — Этой строкой мы получаем данные строки.

Строка.Сумма=Строка.Количество*Строка.Цена — Это формула (Строка.Сумма, Строка.Количество, Строка.Цена этими строчками мы обращаемся к значениям которые находятся в таблице)

КонецПроцедуры — Это как вы уже догадались конец процедуры.

После чего запускаем отладку и проверяем. Для этого в документе вводим значения в поля Количество и Цена после чего сумма должна подставиться автоматически.

Вот вы и узнали, как рассчитать сумму в строке табличной части.

Скриншоты, опубликованные в данной статье, являются цитатами и иллюстрациями программного продукта «1C:Предприятие», авторское право на который принадлежит ЗАО 1С.

user1c
19.01.2011 02:58
Прочитано: 59966
В форме таблица СписокНоменклатуры с полями: Номенклатура, Количество, Цена, Сумма. Поле надписи СуммаПоДокументу, данные: Объект.СуммаПоДокументу
При расчете суммы по колонке «Сумма» в таблице формы использую следующий код (1С 8.2):

Все работает хорошо, но при добавлении копированием выбранной строки (F9) в первый случай копирования значение Объект.СуммаПоДокументу не обновляется. В дальнейшем расчет идет без данных этой строки. Последующее использование F9 (несколько раз) для любой строки вызывает пересчет за исключением бедной строки. При добавлении строки стандартным способом (ins) и вводе значений — расчет получается правильный. Если добавить копированием (F9) – опять появляется неучтенная в итогах сумма для новой строки.


Рассмотрел значения полей по шагам. В процедуру
Код 1C v 8.2 УП
Передается элемент с типом ТаблицаФормы с новой строкой с нулевыми значениями, установлено значение только в поле НомерСтроки:
Элемент.ТекущиеДанные.НомерСтроки

Вопрос знатокам: это глюк системы или можно обойтись другими программными средствами? Например отслеживать F9 и вызывать функцию РсчетСуммыПоДокументу()

Спасибо.

Yandex
Возможно, вас также заинтересует
bugor666
19.01.2011 08:40
Ответ № 1
(0) user1c, конечно проще отследить F9. А при добавлении строки не копированием все работает?
E_Migachev
19. 01.2011 09:41
Ответ № 2
(0) а если копировать через кнопочку — считает?
snfr1c
19.01.2011 10:45
Ответ № 3
(1) мне кажется необходимо добавить расчет итоговой суммы в процедуру ПриВыводеСтроки
user1c
19.01.2011 11:12
Ответ № 4
Повторюсь — проблема только при первом случае использования в таблице формы добавления строки копированием (при нажатии кнопки или F9 — одинаковый эффект). При последующем добавлении строки копированием считает все, кроме данных той строки, которая получилась при первом копировании. Если добавить строки обычным интерактивным способом (кнопка добавить или Ins) — считает правильно. Потом при добавлении строки копированием вся история с данными вновь полученной строки (только при первом добавлении) повторяется. Скорее всего — это глюк системы.
Как правильно рассчитать сумму по документу из табличной части, ведь пользователь может использовать добавление строки копированием?
user1c
19.01.2011 11:25
Ответ № 5
Для snfr1c:
Что такое процедура ПриВыводеСтроки?
Напомню:
1С 8.2. ТаблицаФормы. Отслеживаю изменения в:
Код 1C v 8.2 УП
Для ТаблицаФормы события:

Выбор (S_election)
ВыборЗначения (ValueChoice)
НачалоПеретаскивания (DragStart)
ОбработкаВыбора (ChoiceProcessing)
ОбработкаЗаписиНового (NewWriteProcessing)
ОкончаниеПеретаскивания (DragEnd)
ПередНачаломДобавления (BeforeAddRow)
ПередНачаломИзменения (BeforeRowChange)
ПередОкончаниемРедактирования (BeforeEditEnd)
ПередРазворачиванием (BeforeExpand)
ПередСворачиванием (BeforeCollapse)
ПередУдалением (BeforeDeleteRow)
Перетаскивание (Drag)
ПослеУдаления (AfterDeleteRow)
ПриАктивизацииПоля (OnActivateField)
ПриАктивизацииСтроки (OnActivateRow)
ПриАктивизацииЯчейки (OnActivateCell)
ПриИзменении (OnChange)
ПриНачалеРедактирования (OnStartEdit)
ПриОкончанииРедактирования (OnEditEnd)
ПриСменеТекущегоРодителя (OnCurrentParentChange)
ПроверкаПеретаскивания (DragCheck)

Синтаксис-помошник вам в помощь!
Если у Вас своя процедура — поделитесь, пожалуйста.
Спасибо.

snfr1c
19.01.2011 13:24
Ответ № 6
прошу прощения опечатался процедура «ПриВыводеСтроки» находится в поле ТабличноеПоле в разделе «события». она как раз этим и занимается — пересчетом и перерисовкой значений итоговых сумм в таблице
snfr1c
19.01.2011 13:26
Ответ № 7
также можно добавить РасчетСуммыПоДокументу() в процедуры СписокНоменклатурыКоличествоПриИзменении(Элемент)
СписокНоменклатурыЦенаПриИзменении(Элемент)
snfr1c
19. 01.2011 13:44
Ответ № 8
вот пример:
Код 1C v 8.х
user1c
19.01.2011 14:42
Ответ № 9
Для snfr1c:
Спасибо, не получается. 1С 8.2. У Вас пример для 8.1. Не смог сделать.

Разбирал глюки системы:
В табличном поле установим флаг «Подвал».
В 1С 8.0 в табличном поле для колонки можно было установить флаг «Показывать итог в подвале». В 1С 8.2 такого нет. Приходится указывать для реквизита «СписокНоменклатурыСумма» путь к данным подвала «Объект.СписокНоменклатуры.ИтогСумма». Для наглядности в окне редактирования формы в правом верхнем углу (в окне реквизитов формы) раскроем основной реквизит формы «Объект», потом раскроем «СписокНоменклатуры». Мышкой «схватим» элемент «ИтогСумма» и перетащим в окно элементов формы (левая верхняя часть окна редактирования формы). Получим поле надписи «СписокНоменклатурыИтогСумма», а на форме надпись «Сумма (итог):». При этом, остается пустым свойство «Заголовок» поля надписи «СписокНоменклатурыИтогСумма».

Для устойчивости добавим процедуру:

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

ПОМОГИТЕ правильно рассчитать сумму документа!
Спасибо.

user1c
19.01.2011 14:54
Ответ № 10
Напомню: управляемая форма 1С 8. 2, внешний вид:
Скачивать файлы может только зарегистрированный пользователь!
user1c
19.01.2011 15:38
Ответ № 11
В результате долгих мучений сам нашел правильное решение.
Да, в 1С 8.2 пока есть глюк с расчетом при копировании текущего элемента (кнопкой или F9). С этим надо смириться и учитывать при работе.
Решение проблемы:
На форме не показывать поле из объекта, рассчитываемое суммированием записей таблицы, например для документа «ПриходнаяНакладная» реквизит «СуммаПоДокументу», а показывать поле надписи «СписокНоменклатурыИтогСумма» (выше подробно описал, как его отобразить).
Отслеживаем событие для формы «ПередЗаписью»:
Код 1C v 8.2 УП

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

SQL Server и BI — документирование табличной модели с помощью Excel

Введение

Несколько недель назад я работал над интересным доказательством концепции для клиента из пищевой/бакалейной промышленности. Цель состояла в том, чтобы предоставить клиенту информацию о структуре продаж, сезонных тенденциях и прибыльности местоположения. Клиент был бухгалтером, и поэтому ему было удобно пользоваться электронными таблицами. Тем не менее, я чувствовал, что это была супер-возможность построить наше доказательство концепции, используя табличное решение SQL Server и используя возможности Excel и Power Reporting для внешнего интерфейса.

В сегодняшнем «горячем чате» мы рассмотрим, как было создано это доказательство концепции, и познакомимся с типами отчетов, которые можно создать, просто используя Excel.

Во второй и последней части этой статьи мы рассмотрим возможности использования SQL Server Reporting Services 2016 для создания пользовательских отчетов.

Однако, прежде чем увлечься службами Reporting Services, давайте посмотрим на стоящую перед нами задачу, а именно на работу с табличной моделью и Excel Power Reporting.

Итак, приступим.

Начало работы

Наше путешествие начинается с необработанных данных. Открывая SQL Server Management Studio 2016, мы находим базу данных, которую я назвал SQLSaturday554. На скриншоте ниже читатель заметит, что у нас есть продажи пива из крупных городов Южной Африки за несколько лет.

У нас также есть данные о клиентах в нашей таблице «Клиент» (см. ниже).

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

В нашем упражнении мы будем работать с этими тремя таблицами.

Создание нашей табличной модели

Если на вашем рабочем сервере не установлен табличный экземпляр, вы можете установить его с носителя, предоставленного Microsoft. Можно просто добавить еще один экземпляр и выбрать ТОЛЬКО параметр Analysis Services, а затем параметр «Таблица». Установка довольно быстрая.

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

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

Открыв Visual Studio 2015 или SQL Server Data Tools (2010 и выше), мы создаем новый проект, выбрав «Новый проект» под баннером «Пуск», как показано ниже.

Появится меню «Тип проекта» (см. ниже).

Мы выбираем проект «Табличный проект служб Analysis Services» (как показано выше) и даем нашему проекту соответствующее имя. Мы нажимаем «ОК», чтобы создать наш проект.

Появится «Конструктор табличных моделей» (см. ниже).

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

Мы устанавливаем «Сервер рабочей области» и тестируем соединение, как показано выше. Мы нажимаем OK, чтобы создать модель, и затем мы попадаем в наш дизайн и рабочую поверхность (см. Ниже).

Теперь дважды щелкните значок «Model.bim», показанный на снимке экрана ниже.

Откроется конструктор моделей (см. ниже).

Добавление данных в нашу модель

Нажав на вкладку «Модель» на ленте меню (см. ниже), мы выбираем «Импорт из источника данных».

Появится «Мастер импорта таблиц» (см. ниже).

Мы выбираем «Microsoft SQL Server», как показано выше, потому что наши исходные данные взяты из таблиц реляционной базы данных, которые мы видели выше. Затем нажимаем «Далее».

Теперь мы выбираем наш «исходный» сервер базы данных, нашу базу данных и проверяем наше соединение (см. выше). Еще раз нажимаем «Далее».

Теперь мы должны указать «Информация о олицетворении» (см. Скриншот выше). В нашем случае я решил использовать конкретное имя пользователя и пароль Windows. После установки нажимаем «Далее».

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

Мы выбираем таблицы «beersales554» (наши данные о продажах), «Customer» (наш список клиентов) и «datee» (наше измерение времени) (см. выше), а затем нажимаем «Готово». Затем начнется импорт проекта в нашу модель (см. ниже).

Если наша загрузка прошла успешно, мы получим сообщение, показанное выше. Теперь нажимаем «Закрыть».

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

Да начнется веселье!!

Проницательный читатель заметит, что в дополнение к полям «Провинция», «Город» и «Номер клиента» у нас также есть поле «год» и поле, содержащее стоимость продаж пива в рандах.

Это разбивка на ежемесячной основе, и часто люди хотят видеть результаты по кварталам. ПОПАЛСЯ!!!!

Единственное, что мы должны помнить, это то, что теперь, когда мы работаем с табличной моделью, вычисления или определенные поля не могут быть созданы с использованием стандартного T-SQL. Мы должны использовать DAX (выражения анализа данных).

Мы выбираем «Добавить столбцы» (как показано выше) и добавляем наше выражение DAX.

1

2

3

4

5

6

 

=ЕСЛИ(ПРАВО([годMth],2)>=»01″ &&

ПРАВО([годMth],2)<="03",1,ЕСЛИ(ПРАВО([годMth],2)> =»04″ &&

ПРАВО([годMth],2)<="06",2,ЕСЛИ(ПРАВО([годMth],2)>=»07″ &&

ПРАВО([годMth],2)< ="09",3,4)))

 

в «поле функций» под лентой меню (см. выше).

«Квартал» создан (см. ниже).

И снова зоркий читатель задаст вопрос календарю финансового года. Не бойтесь, одно и то же выражение DAX может использоваться для финансового года, начинающегося 1 июля и заканчивающегося 30 июня -го года. Такова красота языка DAX.

Теперь мы переименовываем столбец в «Квартал» (см. ниже).

Агрегирование наших «Сумм»

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

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

Теперь мы создаем формулу DAX для агрегирования данных.

 

Общий итог := Сумма([Сумма])

 

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

Следует помнить, что на данный момент результат не имеет смысла, поскольку мы не привязали «Сумму» к нашей дате и параметрам клиента 🙂

Теперь мы создадим эти связи, щелкнув поле «Диаграмма», расположенное в правом нижнем углу снимка экрана ниже (см. красный кружок).

Щелкнув по значку «Диаграмма/Отношения» (о котором говорилось выше), мы попадаем на рабочую поверхность «Отношения».

Отмечаем, что отображаются три наши таблицы/сущности (см. выше). Теперь мы создаем необходимые связи отношений, перетаскивая соответствующие поля в сущности «Клиент» на номер клиента в сущности «BeerSales». Мы делаем то же самое для сущности «Datee» (см. ниже).

На этом завершается развивающая часть нашего упражнения. Осталось только развернуть нашу модель.

Развертывание нашей модели

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

Нажимаем на вкладку «Проект» на ленте меню и выбираем «Свойства» (см. выше).

Теперь отображается диалоговое окно «Свойства» (см. ниже).

Мы устанавливаем имя TABULAR Analysis Server и устанавливаем имя для целевой базы данных, которая будет находиться на сервере Tabular Analysis Services. В нашем случае сервер — «STR-SIMON\STEVE2016TABULAR», а имя базы данных — «SQLShackTabularBeer» (см. выше). Затем нажимаем «ОК».

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

Мы уведомлены о статусе нашей «сборки», как показано на снимке экрана ниже:

«Построив» решение, мы теперь можем развернуть наше решение и создать нашу табличную базу данных служб Analysis Services.

Еще раз «щелкаем правой кнопкой мыши» по имени проекта и выбираем «Развернуть» (см. ниже).

Диалоговое окно «Олицетворение» отображается, как показано ниже:

Мы передаем необходимые учетные данные в систему (как мы сделали выше), и начинается развертывание.

После успешного развертывания мы закрыли Visual Studio или SQL Server Data Tools 2010 и вернемся в SQL Server Management Studio, но на этот раз в наш табличный экземпляр служб Analysis Services.

Проверка того, что наша база данных создана

Открывая SQL Server Management Studio, мы выбираем наш табличный экземпляр Analysis Services.

Развернув вкладку базы данных, отмечаем, что наша база данных создана (см. ниже).

Развернув вкладку базы данных SQLShackTabular, мы находим наши три таблицы.

Теперь мы можем запустить несколько простых запросов DAX, чтобы убедиться, что наши результаты выглядят разумными. DAX — удивительно мощный «зверь». Это сложно изучить и понять, и это выходит за рамки этой статьи. Достаточно сказано, давайте займемся этими небольшими тестовыми запросами!

Мы просто открываем новый запрос, выбрав кнопку «Новый запрос» на баннере. Откроется редактор запросов (см. ниже).

Используя очень простой оператор DAX, мы рассчитаем общий объем продаж пива по нашей клиентской базе,

Оператор DAX

1

2

3

4

5

6

7

8

4 10 5

4 9

50004 11

12

13

14

15

Определить

// Мы определяем общее поле

Измерение Beersales554 [Total] =

Расчет (SUM (Beersales554 [Количество]), все (Beersales554 [Customerno]))

. (

ALL(

Beersales554[CustomerNO]

),

«Всего для клиента»,sum(Beersales554[Amount])

)

Заказ через BeerSales554[CustomerNo]

 

Когда мы выполняем этот запрос, мы получаем следующие результаты (см. ниже).

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

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

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

1

2

3

4

5

6

7

8

10

11

 

ОЦЕНКА

//Фильтр(

суммировать

(‘Клиент’, ‘Клиент'[Клиент№],’Клиент'[Клиент'[Имя],

«Доход’Amount’Be Amount», )

//)

//,  

//(‘Клиент'[Клиент№] = 2  || ‘Клиент'[Клиент№] = 3)

  )

 

Короче говоря, работа с DAX аналогична работе с MDX. У него есть свои правила и способы обхода дерева данных, и, откровенно говоря, он не для слабонервных.

Тем не менее, давайте взглянем на отчеты, основанные на нашей табличной модели.

Отчетность

Для сегодняшней отчетности мы будем использовать Excel. Во второй части этой статьи мы будем использовать службы отчетов SQL Server.

Открыв новую книгу, мы нажимаем на вкладку «Данные» и выбираем «Из других источников» (см. Ниже).

Выбираем «Из служб аналитики» (см. ниже)

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

Нажимаем «Далее».

На следующем экране показана наша Модель, которую мы создали в Visual Studio или SQL Server Data Tools (см. ниже).

Выбрав нашу базу, нажимаем «Далее».

Теперь мы сохраняем наше подключение для передачи данных и нажимаем «Готово», чтобы завершить процесс подключения (см. Ниже).

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

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

Здесь мы собираемся творить наше волшебство!!

Мы перетащим показатель «GrandTotal» (см. выше), который теперь появляется среди полей сводной таблицы и который происходит из нашего проекта Visual Studio / SQL Server Data Tools; в сводную таблицу (занимает ячейки от A1 до C18) (см. ниже).

К этому теперь мы добавляем наше «CustomerName» из таблицы клиентов. Наш холст выглядит следующим образом:

Теперь давайте посмотрим на финансовый год 2013 исключительно для того, чтобы увидеть результаты для тех клиентов, которые перечислены выше. Для этого мы добавляем фильтр в поле «Фильтры», показанное выше и заключенное в круг.

Изменение значений можно увидеть на следующих двух снимках экрана.

а также

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

Мы продвинемся в нашем упражнении еще на один шаг, вставив сводную диаграмму. Для этого выберите «Вставить» на ленте главного меню. Выбираем «Сводную диаграмму» (см. ниже).

Результаты можно увидеть на следующем снимке экрана.

На приведенном выше снимке экрана показана гистограмма, а на следующем снимке экрана показан простой линейный график.

Наш окончательный отчет представлен ниже и является достаточно полным.

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

Демографическое потребление

Теперь, что было бы интересно, так это просмотреть продажи по географическому признаку.

Для этого мы будем использовать «Power Map». Прежде чем мы сможем это сделать, мы должны добавить эти таблицы в нашу модель данных в нашей книге Excel.

Мы нажимаем на вкладку PowerPivot и выбираем «Управление моделью данных», как показано ниже:

Появится пустой рабочий лист «Управление моделью» (см. ниже).

Мы нажимаем на существующее соединение, чтобы создать «представление» из таблиц в созданной нами табличной модели (см. ниже).

Мы нажимаем «Открыть» и замечаем, что Excel показывает нам необходимую строку подключения, которая позволит нам «общаться» с нашей базой данных служб Analysis Services.

Следующий шаг в этом процессе — это настоящий GOTCHA, и автор неоднократно попадался на этом. Появится следующий экран с запросом выражения MDX для работы. «Какого черта!!!»

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

Перетащив наше поле «Общий итог», провинцию, город, квартал на нашу рабочую поверхность, мы получим следующий вид.

Мы нажимаем OK, чтобы принять наши варианты данных, данные которых происходят из таблиц BeerSales554 и customer. Замечательно то, что выражение MDX из нашего выбора поля теперь отображается в , что пустое поле выражения MDX, как показано ниже:

Выражение MDX также показано ниже.

1

2

3

4

5

6

7

8

 

ВЫБЕРИТЕ НЕПУСТОЙ { [Measures].[GrandTotal] } ON COLUMNS, НЕПУСТОЙ {

([beersales554].[Province].[Province].ALLMEMBERS *

[beersales554].[Город].[Город].ALLMEMBERS *

[beersales554]. [Квартал].[Квартал].ALLMEMBERS *

[beersales554].[Клиент№].[Клиент№].ALLMEMBERS * [Клиент ].[CustomerName].[CustomerName].ALLMEMBERS *

[beersales554].[yearMth].[yearMth].ALLMEMBERS ) } СВОЙСТВА ИЗМЕРЕНИЯ MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS FROM [Model] СВОЙСТВА ЯЧЕЙКИ VALUE, BACK_COLOR, FORE_COLOR, FORMATTED_VALUE, FORMAT_STRING, FONT_NAME, FONT_SIZE, FONT_FLAGS

 

Нажимаем «Готово», и система импортирует необходимые необработанные данные (см. ниже).

Мы закрываем «Мастер импорта таблиц» и убеждаемся, что наши данные были импортированы, как видно ниже:

Мы «Сохранить», «Закрыть» и «Выйти» (см. ниже).

Теперь мы можем создать нашу «Карту силы»!

Мы выбираем «Вставить» на ленте главного меню и нажимаем «Карта» и «Запустить Power Map».

Открывая Power Map, нас встречает наша поверхность для рисования (см. ниже).

Теперь мы устанавливаем «Географию», щелкнув поле «Город» в поле «Выбрать географию» (см. выше).

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

Ставим галочку «Beersales554CityCity» и города, по которым у нас есть данные, теперь видны на карте.

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

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

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

Мы снова подошли к концу нашей «встречи», и я искренне надеюсь, что этот проект вдохновил вас, читатель, попробовать некоторые темы, которые мы обсудили. Я искренне верю, что вы будете удивлены.

Выводы

Лица, принимающие решения, часто сталкиваются с трудными решениями в отношении корпоративной стратегии, а также направления и корректировки, которые необходимо предпринять, чтобы предприятие могло достичь своей миссии и целей. Многие из сегодняшних лиц, принимающих решения, имеют большой опыт использования Microsoft Excel, и это часто дает им «чувство комфорта». Проект SQL Server Tabular проецирует образ «электронной таблицы» и часто вызывает доверие у тех, кто использует его возможности. Хотя Excel — это всего лишь один из способов преобразования данных в информацию, SQL Reporting Services может достичь тех же результатов, и во второй и последней части этой серии мы будем использовать тот же проект, однако наши отчеты будут поступать из нашего отчета. Сервер.

А пока удачного программирования.

Подробнее

Для документации SQL Server и BI рассмотрите ApexSQL Doc, инструмент, который документирует отчеты (*. rdl), общие наборы данных (*.rsd), общие источники данных (*.rds) и проекты (*.rptproj). ) из файловой системы и веб-служб (собственных и SharePoint) в различных выходных форматах.

Ссылки:

  • Блог Microsoft Power BI
  • Автоматизированное администрирование в многосерверной среде
  • Пересылка событий между целевым и главным серверами
  • Автор
  • Последние сообщения

Стив Саймон

Стив Саймон является MVP SQL Server и старшим инженером-разработчиком BI в Atrion Networking. Он занимается проектированием и анализом баз данных более 29 лет.

Стив выступал с докладами на 8 саммитах PASS и на PASS Europe 2009 и 2010. Недавно он представил презентацию Master Data Services на ралли PASS Amsterdam Rally.

Стив представил 5 докладов на саммитах разработчиков информации. Он региональный наставник PASS.

Просмотреть все сообщения Стива Саймона

Последние сообщения Стива Саймона (посмотреть все)

Видео: добавление нескольких оглавлений в документ

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

И способ сделать это, как вы уже догадались, Коды полей .

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

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

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

Щелкните перед заголовком первого подраздела в первом разделе.

Затем перейдите на вкладку ВСТАВИТЬ , нажмите Быстрые детали и Поле .

Затем прокрутите вниз и нажмите TC . Введите название подраздела, затем проверьте запись TC в документе с несколькими таблицами .

Это добавит переключатель в код — переключатель \f — который позволит нам добавить несколько оглавлений.

Затем отметьте Outline level и введите 1. Это отформатирует запись в таблице содержания с использованием стиля TOC 1 . Нажмите OK .

Затем перейдите на вкладку ГЛАВНАЯ и Показать/скрыть метки абзаца , чтобы мы могли видеть код поля.

Переключатель \f.

Это позволяет нам добавлять в документ несколько оглавлений, назначая идентификатор типа записи. Щелкните после буквы «f».

Мы можем использовать любую букву в качестве идентификатора, но давайте просто назовем эту запись типом «x». Введите пробел и ‘x’.

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

Удалите текст в кавычках и введите название подраздела.

Закончив один раздел, переходите к следующему. Измените текст, а также измените идентификатор.

Мы обозначим этот раздел как «y». Просмотрите все заголовки подразделов и добавьте тип «y» к коду поля.

Когда вы дойдете до третьего раздела, измените значение переключателя «f» на «z».

Затем добавьте код поля к другим заголовкам.

Когда вы закончите, все подразделы будут помечены буквами «x», «y» или «z», в зависимости от того, в каком разделе они находятся.

Теперь добавим оглавление. Щелкните строку под заголовком первого раздела, затем перейдите на вкладку REFERENCES , щелкните Table of Contents и Custom Table of Contents .

Щелкните Опции . Затем снимите флажки Стили и Уровни контура и установите флажок Поля ввода таблицы .

Теперь Word будет включать только текст, помеченный кодами полей TC . Нажмите OK и ОК .

Код поля TOC добавлен, но записи оглавления не найдены. Почему это? Нажмите Alt+F9, чтобы отобразить код поля.

В код добавлен переключатель «f», но нет идентификатора типа.

И если ничего не добавлено, Word ищет тип по умолчанию ‘c’.

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

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

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