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

 

 

 

 

№№

 

 

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