|
|
Система компоновки данных. |
|
|
|
|
|
|
№№ |
|
|
|
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 |
|
|