Система компоновки данных.

 

 

 

 

№№

 

 

1

ЧтениеXML = Новый ЧтениеXML;

ЧтениеXML.УстановитьСтроку(ЭлементыФормы.ТекстСхемыКомпоновкиДанных.ПолучитьТекст());

СКД = СериализаторXDTO.ПрочитатьXML(ЧтениеXML, Тип("СхемаКомпоновкиДанных"));

 

 

2

{ВЫБРАТЬ Номенклатура, Склад}

 

 

3

{ГДЕ Номенклатура.*, Склад }

{ГДЕ Документ.Дата >= &ДатаНачала, Документ.Дата <= &ДатаКонца}

 

 

4

{ХАРАКТЕРИСТИКИ ТИП(Справочник.Номенклатура)

  ВИДЫХАРАКТЕРИСТИК (ВЫБРАТЬ

    ВидыДопСвойств.Ссылка,

    ВидыДопСвойств.Наименование,

    ВидыДопСвойств.ТипЗначения

  ИЗ

    ПланВидовХарактеристик.ВидыДопСвойств КАК ВидыДопСвойств)

  ПОЛЕКЛЮЧА Ссылка

  ПОЛЕИМЕНИ Наименование

  ПОЛЕТИПАЗНАЧЕНИЯ ТипЗначения

  ЗНАЧЕНИЯХАРАКТЕРИСТИК РегистрСведений.ДопСвойства

  ПОЛЕОБЪЕКТА Номенклатура

  ПОЛЕВИДА ВидСвойства

  ПОЛЕЗНАЧЕНИЯ Свойство

}

 

 

5

ВЫБРАТЬ

  УчетНоменклатурыОбороты.Номенклатура КАК Номенклатура,

  УчетНоменклатурыОбороты.Склад КАК Склад,

  УчетНоменклатурыОбороты.КоличествоПриход КАК КоличествоПриход,

  УчетНоменклатурыОбороты.КоличествоРасход КАК КоличествоРасход

ИЗ

  РегистрНакопления.УчетНоменклатуры.Обороты({&ДатаНачала},

      {&ДатаКонца},

      ,

      {Номенклатура.*,

      Склад.*}) КАК УчетНоменклатурыОбороты

 

 

6

Процедура КоманднаяПанельРедактораОтчета (Кнопка)

 

  Конструктор = Новый КонструкторСхемыКомпоновкиДанных;

 

  Конструктор.УстановитьСхему(ПолучитьСхемуКомпоновкиДанных());

  Конструктор.Редактировать(ЭтаФорма);

 

КонецПроцедуры

 

Процедура ОбработкаВыбора(ЗначениеВыбора, Источник)

 

  Если ТипЗнч(Источник) = Тип("КонструкторСхемыКомпоновкиДанных") Тогда

 

    СхемаКомпоновкиДанных = Источник.ПолучитьСхему();

    ЗаписьXML = Новый ЗаписьXML;

    ЗаписьXML.УстановитьСтроку();

    СериализаторXDTO.ЗаписатьXML(ЗаписьXML, СхемаКомпоновкиДанных, "dataCompositionScheme", "http://v8.1c.ru/8/data-composition-system/scheme");

    ЭлементыФормы.ТекстСхемыКомпоновкиДанных. УстановитьТекст(ЗаписьXML.Закрыть());

  КонецЕсли;

 

КонецПроцедуры

 

 

7

ВЫБРАТЬ

 ПриходТовара.Дата,

 ПриходТовара.Номер,

 ПриходТовара.Поставщик,

 ПриходТовара.Склад,

 ПриходТовара.Товары.(

 НомерСтроки,

 Товар,

 Цена,

 Количество,

 Сумма

 )

{ВЫБРАТЬ

 Дата,

 Номер,

 Поставщик.*,

 Склад.*,

 Товары.(

  НомерСтроки,

  Товар.*,

  Цена,

  Количество,

  Сумма

  )}

 

ИЗ

 Документ.ПриходТовара КАК ПриходТовара

{ГДЕ

 ПриходТовара.Дата,

 ПриходТовара.Номер,

 ПриходТовара.Поставщик.*,

 ПриходТовара.Склад.*,

 ПриходТовара.Товары.(

  НомерСтроки,

  Товар.*,

  Цена,

  Количество,

  Сумма

  )}

 

 

8

"Литерал ""в кавычках"""

 

 

9

10.5

200

 

 

10

// Шестое января 1975 года

ДАТАВРЕМЯ(1975, 1, 06)

 

// Второе декабря 2006 года, 23 часа 56 минут 57 секунд

ДАТАВРЕМЯ(2006, 12, 2, 23, 56, 57)

 

 

11

ЗНАЧЕНИЕ(ВидСчета.Активный)

 

 

12

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

Продажи.СуммаОборот

 

 

13

&Контрагент

&ДатаНачала

 

 

14

-Продажи.Количество

 

 

15

+Продажи.Количество

 

 

16

ОстИОбрт.НачальныйОстаток — ОстИОбрт.КонечныйОстаток

ОстИОбрт.НачальныйОстаток — 100

400 — 357

 

 

17

ОстИОбрт.НачальныйОстаток + ОстИОбрт.Оборот

ОстИОбрт.НачальныйОстаток + 100

400 + 357

 

 

18

Номенклатура.Цена * 1.2

2 * 3.14

 

 

19

Номенклатура.Цена / 1.2

2 / 3.14

 

 

20

Номенклатура.Цена % 1.2

2 % 3.14

 

 

21

Номенклатура.Артикул + ": "+ Номенклатура.Наименование

 

 

22

"%АБВ[0-9][абвг]\_абв%" СПЕЦСИМВОЛ "\"

 

 

23

Продажи.Контрагент = Продажи.НоменклатураОсновнойПоставщик

 

 

24

Продажи.Контрагент <> Продажи.НоменклатураОсновнойПоставщик

 

 

25

ПродажиТекущие.Сумма < ПродажиПрошлые.Сумма

 

 

26

ПродажиТекущие.Сумма > ПродажиПрошлые.Сумма

 

 

27

ПродажиТекущие.Сумма <= ПродажиПрошлые.Сумма

 

 

28

Номенклатура В (&Товар1, &Товар2)

 

 

29

Продажи.Контрагент В Контрагенты

 

 

30

Продажи.Контрагент ЕСТЬ NULL

 

 

31

НЕ Документ.Грузополучатель = Документ.Грузоотправитель

 

 

32

Документ.Грузополучатель = Документ.Грузоотправитель И Документ.Грузополучатель = &Контрагент

 

 

33

Документ.Грузополучатель = Документ.Грузоотправитель ИЛИ Документ.Грузополучатель = &Контрагент

 

 

34

СУММА(Продажи.СуммаОборот)

 

 

35

КОЛИЧЕСТВО(Продажи.Контрагент)

 

 

36

КОЛИЧЕСТВО(Различные Продажи.Контрагент)

 

 

37

МАКСИМУМ(Остатки.Количество)

 

 

38

МИНИМУМ(Остатки.Количество)

 

 

39

СРЕДНЕЕ(Остатки.Количество)

 

 

40

ФункцииОтчетов.СтандартноеОтклонение(Массив(Сумма))

 

 

41

ФункцииОтчетов.ТаблицуЗначенийВСтроку(ТаблицаЗначений(Склад КАК Склад, КоличествоОстаток КАК Остаток))

 

 

42

Свернуть(ТаблицаЗначений(НомерТелефона, Адрес) ,"НомерТелефона");

 

 

43

ПолучитьЧасть(Свернуть(ТаблицаЗначений(НомерТелефона, Адрес) ,"НомерТелефона"),"НомерТелефона");

 

 

44

Упорядочить(ТаблицаЗначений(НомерТелефона, Адрес, ДатаЗвонка),"ДатаЗвонка Убыв");

 

 

45

СоединитьСтроки(ТаблицаЗначений(НомерТелефона, Адрес));

 

 

46

// Рассчитать ABC классификацию.

Функция ABCКлассификация(Данные) Экспорт

Перем ТаблицаЗначений;

 

  Если Данные = Null Тогда

    Возврат Null;

  КонецЕсли;

 

  Если ТипЗнч(Данные) <> Тип("ДанныеГрупповойОбработкиКомпоновкиДанных") Тогда

    Сообщить(ТипЗнч(Данные));

    ВызватьИсключение "В функцию ABCКлассификация() можно передавать только объект типа ДанныеГрупповойОбработкиКомпоновкиДанных";

  КонецЕсли;

 

  Если Не Данные.ВременныеДанныеОбработки.Свойство("ABCКлассификацияТаблицаЗначений", ТаблицаЗначений) Тогда

    // выполним расчет классификации один раз при первом вызове

    // а потом запомним выполненный расчет и дальше будем этот

    // расчет использовать

    ТаблицаЗначений = Данные.Данные.Скопировать();

    ТаблицаЗначений.Колонки.Добавить("Номер", Новый ОписаниеТипов("Число"));

    Номер = 0;

    ОбщаяСумма = 0;

    Для Каждого СтрокаТаблицыЗначений Из ТаблицаЗначений Цикл

      СтрокаТаблицыЗначений.Номер = Номер;

      Номер = Номер + 1;

 

      Если СтрокаТаблицыЗначений[0] <> NULL Тогда

 

        ОбщаяСумма = ОбщаяСумма + СтрокаТаблицыЗначений[0];

 

      КонецЕсли;

 

    КонецЦикла;

 

    ТаблицаЗначений.Сортировать(ТаблицаЗначений.Колонки[0].Имя + " Убыв");

    ТаблицаЗначений.Индексы.Добавить("Номер");

    НакопленнаяСумма = 0;

    ИндексКлассаA = Неопределено;

    ИндексКлассаB = Неопределено;

    Для Каждого СтрокаТаблицыЗначений Из ТаблицаЗначений Цикл

 

      Если СтрокаТаблицыЗначений[0] <> NULL Тогда

 

        НакопленнаяСумма = НакопленнаяСумма + СтрокаТаблицыЗначений[0];

 

      КонецЕсли;

 

      Если ОбщаяСумма = 0 Тогда

 

        Процент = 1;

 

      Иначе

 

        Процент = НакопленнаяСумма / ОбщаяСумма;

 

      КонецЕсли;

 

      Если Процент > 0.75 Тогда

        Если ИндексКлассаA = Неопределено Тогда

          ИндексКлассаA = ТаблицаЗначений.Индекс(СтрокаТаблицыЗначений);

        ИначеЕсли Процент > 0.90 Тогда

          Если ИндексКлассаB = Неопределено Тогда

            ИндексКлассаB = ТаблицаЗначений.Индекс(СтрокаТаблицыЗначений);

          КонецЕсли;

          Прервать;

        КонецЕсли;

      КонецЕсли;

    КонецЦикла;

 

      Данные.ВременныеДанныеОбработки.Вставить("ABCКлассификацияТаблицаЗначений", ТаблицаЗначений);

      Данные.ВременныеДанныеОбработки.Вставить("ABCКлассификацияИндексКлассаA", ИндексКлассаA);

      Данные.ВременныеДанныеОбработки.Вставить("ABCКлассификацияИндексКлассаB", ИндексКлассаB);

  КонецЕсли;

 

  Если Данные.ТекущийЭлемент = Неопределено Тогда

 

    // Итог по группировке.

    Возврат Null;

 

  Иначе

 

    Строка = ТаблицаЗначений.Найти(Данные.Данные.Индекс(Данные.ТекущийЭлемент), "Номер");

 

    Если Строка = Неопределено Тогда

 

      Возврат Null;

 

    Иначе

 

      Индекс = ТаблицаЗначений.Индекс(Строка);

 

      Если Индекс <= Данные.ВременныеДанныеОбработки.ABCКлассификацияИндексКлассаA Тогда

 

        Возврат 1;

 

      ИначеЕсли Индекс <= Данные.ВременныеДанныеОбработки.ABCКлассификацияИндексКлассаB Тогда

 

        Возврат 2;

 

      Иначе

 

        Возврат 3;

 

      КонецЕсли;

 

    КонецЕсли;

 

  КонецЕсли;

 

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

 

 

47

ABCКлассификация(ГрупповаяОбработка("Сумма(СуммаОборот)"))

 

 

48

ВЫБОР Когда Сумма > 1000 Тогда Сумма Иначе 0 Конец

 

 

49

Сумма(Продажи.СуммаОборот) / ВЫЧИСЛИТЬ("Сумма(Продажи.СуммаОборот)", "ОбщийИтог")

 

 

50

Сумма(Продажи.СуммаОборот)/Вычислить("Сумма(Продажи.СуммаОборот)", "ОбщийИтог")

 

 

51

ВычислитьВыражение("Сумма(СуммаОборот)", , , "Первая", "Текущая")

 

 

52

ВычислитьВыражение("Курс", , , "Предыдущая")

 

 

53

ВычислитьВыражениеСГруппировкойМассив("Сумма(СуммаОборот)", "Контрагент")

 

 

54

СоединитьСтроки(Массив(Упорядочить(ВычислитьВыражениеСГруппировкойТаблицаЗначений("Представление(Сумма(НаборДанных.СуммаОборот)),Сумма(НаборДанных.СуммаОборот)","НаборДанных.Контрагент"),"2")))

 

 

55

Максимум(ВычислитьВыражениеСГруппировкойМассив ("Сумма(СуммаОборот)", "Контрагент"));

 

 

56

ВычислитьВыражениеСГруппировкойТаблицаЗначений ("Контрагент, Сумма(СуммаОборот)", "Контрагент")

 

 

57

СоединитьСтроки(ПолучитьЧасть(Упорядочить(ВычислитьВыражениеСГруппировкойТаблицаЗначений ("НаборДанных.Контрагент, НаборДанных.КонтрагентПредставление, Сумма(НаборДанных.СуммаОборот), Представление(НаборДанных.СуммаОборот), НаборДанных.ПолеУпорядочивание", "НаборДанных.Контрагент"), "5, 1, 3"), "2, 4"))

 

 

58

ВычислитьВыражениеСГруппировкойТаблицаЗначений ("Контрагент КАК Контрагент, Сумма(СуммаОборот) Как ОбъемПродаж", "Контрагент")

 

 

59

УРОВЕНЬ()

 

 

60

УРОВЕНЬВГРУППИРОВКЕ()

 

 

61

НОМЕРПОПОРЯДКУ()

 

 

62

НОМЕРПОПОРЯДКУВГРУППИРОВКЕ()

 

 

63

ФОРМАТ(РасходныеНакладные.СуммаДок, "ЧДЦ=2")

 

 

64

НАЧАЛОПЕРИОДА(ДатаВремя(2002, 10, 12, 10, 15, 34), "Месяц")

 

 

65

01.10.2002 0:00:00

 

 

66

КОНЕЦПЕРИОДА(ДатаВремя(2002, 10, 12, 10, 15, 34), "Неделя")

 

 

67

13.10.2002 23:59:59

 

 

68

ДОБАВИТЬКДАТЕ(ДатаВремя(2002, 10, 12, 10, 15, 34), "Месяц", 1)

 

 

69

12.11.2002 10:15:34

 

 

70

РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2002, 10, 12, 10, 15, 34),

      ДАТАВРЕМЯ(2002, 10, 14, 9, 18, 06),

      "ДЕНЬ")

 

 

71

2

ТЕКУЩАЯДАТА()

 

 

72

ПОДСТРОКА(Контрагенты.Адрес, 1, 4)

 

 

73

ДЛИНАСТРОКИ(Контрагенты.Адрес)

 

 

74

ГОД(РасхНакл.Дата)

 

 

75

КВАРТАЛ(РасхНакл.Дата)

 

 

76

МЕСЯЦ(РасхНакл.Дата)

 

 

77

ДЕНЬГОДА(РасхНакл.Дата)

 

 

78

ДЕНЬ(РасхНакл.Дата)

 

 

79

НЕДЕЛЯ(РасхНакл.Дата)

 

 

80

ДЕНЬНЕДЕЛИ(РасхНакл.Дата)

 

 

81

ЧАС(РасхНакл.Дата)

 

 

82

МИНУТА(РасхНакл.Дата)

 

 

83

СЕКУНДА(РасхНакл.Дата)

 

 

84

ВЫРАЗИТЬ(Данные.Реквизит1, "Число(10,3)")

 

 

85

ЕСТЬNULL(Сумма(Продажи.СуммаОборот), 0)

 

 

86

Представление(Контрагент)

 

 

87

Строка(ДатаПродажи)

 

 

88

СокращенноеНаименование(Докум.Ссылка, Докум.Дата, Докум.Номер)

 

 

89

СхемаКомпоновкиДанных = ПолучитьСхемуКомпоновкиДанных();

ИсполняемыеНастройки = ПолучитьИсполняемыеНастройки();

КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, ИсполняемыеНастройки);

 

 

90

ЭлементыФормы.ТДРезультатТабличныйДокумент.Очистить();

 

МакетКД = ПолучитьМакетКомпоновки();

 

ПроцессорКД = Новый ПроцессорКомпоновкиДанных;

ПроцессорКД.Инициализировать(МакетКД);

 

ПроцессорВывода =

Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;

ПроцессорВывода.УстановитьДокумент(ЭлементыФормы.ТДРезультатТабличныйДокумент);

ПроцессорВывода.НачатьВывод();

 

Пока Истина Цикл

 

  ЭлементРезультатаКД = ПроцессорВывода.Следующий();

  Если ЭлементРезультатаКД = Неопределено Тогда

 

    Прервать;

 

  КонецЕсли;

 

  ПроцессорВывода.ВывестиЭлемент(ЭлементРезультатаКД);

 

КонецЦикла;

 

ПроцессорВывода.ЗакончитьВывод();

 

 

91

ЗаписьXML = Новый ЗаписьXML;

ЗаписьXML.УстановитьСтроку();

ЗаписьXML.ЗаписатьНачалоЭлемента("result");

 

МакетКомпоновкиДанных = ПолучитьМакетКомпоновки();

 

ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;

ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных);

 

Пока Истина Цикл

 

  ЭлементРезультатаКомпоновкиДанных = ПроцессорКомпоновкиДанных.Следующий();

  Если ЭлементРезультатаКомпоновкиДанных = Неопределено Тогда

 

    Прервать;

 

  КонецЕсли;

 

  СериализаторXDTO.ЗаписатьXML(ЗаписьXML, ЭлементРезультатаКомпоновкиДанных, "item", "http://v8.1c.ru/8/data-composition-system/result");

 

КонецЦикла;

 

ЗаписьXML.ЗаписатьКонецЭлемента();

 

ЭлементыФормы.РезультатКомпоновкиДанных.УстановитьТекст(ЗаписьXML.Закрыть());

 

 

92

ЭлементыФормы.ТДРезультатТабличныйДокумент.Очистить();

 

МакетКомпоновкиДанных = ПолучитьМакетКомпоновки();

 

ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;

ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных);

 

ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;

ПроцессорВывода.УстановитьДокумент(ЭлементыФормы.ТДРезультатТабличныйДокумент);

ПроцессорВывода.НачатьВывод();

 

Пока Истина Цикл

 

  ЭлементРезультатаКомпоновкиДанных = ПроцессорКомпоновкиДанных.Следующий();

  Если ЭлементРезультатаКомпоновкиДанных = Неопределено Тогда

 

    Прервать;

 

  КонецЕсли;

 

  ПроцессорВывода.ВывестиЭлемент(  ЭлементРезультатаКомпоновкиДанных);

 

КонецЦикла;

 

ПроцессорВывода.ЗакончитьВывод();

 

 

93

ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);

 

 

94

КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,КомпоновщикНастроек.Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));

 

ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;

ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных);

 

ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;

ПроцессорВывода.УстановитьОбъект(ДеревоРезультата);

ПроцессорВывода.НачатьВывод();

 

Пока Истина Цикл

 

  ЭлементРезультатаКомпоновкиДанных = ПроцессорКомпоновкиДанных.Следующий();

  Если ЭлементРезультатаКомпоновкиДанных = Неопределено Тогда

 

    Прервать;

 

  КонецЕсли;

 

  ПроцессорВывода.ВывестиЭлемент(  ЭлементРезультатаКомпоновкиДанных);

 

КонецЦикла;

 

ПроцессорВывода.ЗакончитьВывод();

 

 

95

ВЫБРАТЬ

  Номенклатура.Ссылка КАК Ссылка,

  Номенклатура.Родитель КАК Родитель

ИЗ

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

ГДЕ

  Номенклатура.Ссылка В(&Ссылки)

 

 

96

ВЫБРАТЬ

  Номенклатура.Ссылка,

  Номенклатура.Родитель,

  Номенклатура.Код,

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

  Номенклатура.ЭтоГруппа

ИЗ

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

ГДЕ Номенклатура.Родитель В (&Родители)

 

 

97

ВЫБРАТЬ

  Дети.Ссылка

ИЗ

  Справочник.Дети как Дети

 

 

98

ВЫБРАТЬ

ДетиСотрудников.Ребенок КАК Ссылка,

ДетиСотрудников.РодительРебенка КАК Родитель

ИЗ

РегистрСведений.ДетиСотрудников КАК ДетиСотрудников

ГДЕ

ДетиСотрудников.Ребенок В(&Ссылка)

 

ОБЪЕДИНИТЬ ВСЕ

 

ВЫБРАТЬ

Сотрудники.Ссылка,

NULL

ИЗ

Справочник.Сотрудники КАК Сотрудники

ГДЕ

Сотрудники.Ссылка В(&Ссылка)

 

 

99

СкомпоноватьРезультат(РежимКомпоновкиРезультата.Непосредственно);

 

 

100

ВЫБРАТЬ

  Док.Ссылка.Дата,

  Док.Ссылка.Номер,

  Док.Номенклатура,

  Остатки.Остаток

  ИЗ Документ.РасходнаяНакладная.Состав КАК Док

ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.УчетНоменклатуры.Остатки Остатки

  ПО Док.Номенклатура = Остатки.Номенклатура

 

 

101

 

 

 

Free Web Hosting