Untitled Diff

Created Diff never expires
27 removals
Lines
Total
Removed
Words
Total
Removed
To continue using this feature, upgrade to
Diffchecker logo
Diffchecker Pro
144 lines
17 additions
Lines
Total
Added
Words
Total
Added
To continue using this feature, upgrade to
Diffchecker logo
Diffchecker Pro
134 lines
&НаСервере
&НаСервере
Функция ПолучитьМассивЭлементовПоТипу(ТаблицаПостроитель, Таблица, ТипРеквизита, Колонка)
Функция ПолучитьМассивЭлементовПоТипу(ТаблицаПостроитель, Таблица, ТипРеквизита, Колонка)
нМассив = Новый Массив;
нМассив = Новый Массив;
XMLИмяТипа = XMLТип(ТипРеквизита).ИмяТипа;
Если ТипРеквизита = Тип("Строка") Тогда
Если ТипРеквизита = Тип("Строка") Тогда
Для каждого Элемент Из ТаблицаПостроитель.ВыгрузитьКолонку(Колонка.НомерКолонки) Цикл нМассив.Добавить(СокрЛП(Формат(Элемент, "ЧГ=0"))) КонецЦикла
Для каждого Элемент Из ТаблицаПостроитель.ВыгрузитьКолонку(Колонка.НомерКолонки) Цикл нМассив.Добавить(СокрЛП(Формат(Элемент, "ЧГ=0"))) КонецЦикла
ИначеЕсли ТипРеквизита = Тип("Число") Тогда
ИначеЕсли ТипРеквизита = Тип("Число") Тогда
Для каждого Элемент Из ТаблицаПостроитель.ВыгрузитьКолонку(Колонка.НомерКолонки) Цикл нМассив.Добавить(?(НРег(Элемент) = "да" ИЛИ НРег(Элемент) = "истина" ИЛИ НРег(Элемент) = "включено", 1, ?(НРег(Элемент) = "нет" ИЛИ НРег(Элемент) = "ложь" ИЛИ НРег(Элемент) = "выключено", 0, СтрЗаменить(СокрЛП(Элемент), " ", "")))) КонецЦикла
Для каждого Элемент Из ТаблицаПостроитель.ВыгрузитьКолонку(Колонка.НомерКолонки) Цикл нМассив.Добавить(?(НРег(Элемент) = "да" ИЛИ НРег(Элемент) = "истина" ИЛИ НРег(Элемент) = "включено", 1, ?(НРег(Элемент) = "нет" ИЛИ НРег(Элемент) = "ложь" ИЛИ НРег(Элемент) = "выключено", 0, СтрЗаменить(СокрЛП(Элемент), " ", "")))) КонецЦикла
ИначеЕсли ТипРеквизита = Тип("Дата") Тогда
ИначеЕсли ТипРеквизита = Тип("Дата") Тогда
Для каждого Элемент Из ТаблицаПостроитель.ВыгрузитьКолонку(Колонка.НомерКолонки) Цикл нМассив.Добавить(Новый Структура("Значение, Примечание", мПривестиКДате(Элемент, Новый ОписаниеТипов("Дата")).Дата, мПривестиКДате(Элемент, Новый ОписаниеТипов("Дата")).Примечание)) КонецЦикла
Для каждого Элемент Из ТаблицаПостроитель.ВыгрузитьКолонку(Колонка.НомерКолонки) Цикл нМассив.Добавить(Новый Структура("Значение, Примечание", мПривестиКДате(Элемент, Новый ОписаниеТипов("Дата")).Дата, мПривестиКДате(Элемент, Новый ОписаниеТипов("Дата")).Примечание)) КонецЦикла
ИначеЕсли ТипРеквизита = Тип("Булево") Тогда
ИначеЕсли ТипРеквизита = Тип("Булево") Тогда
Для каждого Элемент Из ТаблицаПостроитель.ВыгрузитьКолонку(Колонка.НомерКолонки) Цикл Если НРег(Элемент) = "да" ИЛИ НРег(Элемент) = "истина" ИЛИ НРег(Элемент) = "включено" ИЛИ НРег(Элемент) = "1" Тогда нМассив.Добавить(Новый Структура("Значение, Примечание", Истина, "")) ИначеЕсли НРег(Элемент) = "нет" ИЛИ НРег(Элемент) = "ложь" ИЛИ НРег(Элемент) = "выключено" ИЛИ НРег(Элемент) = "0" Тогда нМассив.Добавить(Новый Структура("Значение, Примечание", Ложь, "")) Иначе нМассив.Добавить(Новый Структура("Значение, Примечание", Элемент, "Неправильный формат")) КонецЕсли КонецЦикла
Для каждого Элемент Из ТаблицаПостроитель.ВыгрузитьКолонку(Колонка.НомерКолонки) Цикл Если НРег(Элемент) = "да" ИЛИ НРег(Элемент) = "истина" ИЛИ НРег(Элемент) = "включено" ИЛИ НРег(Элемент) = "1" Тогда нМассив.Добавить(Новый Структура("Значение, Примечание", Истина, "")) ИначеЕсли НРег(Элемент) = "нет" ИЛИ НРег(Элемент) = "ложь" ИЛИ НРег(Элемент) = "выключено" ИЛИ НРег(Элемент) = "0" Тогда нМассив.Добавить(Новый Структура("Значение, Примечание", Ложь, "")) Иначе нМассив.Добавить(Новый Структура("Значение, Примечание", Элемент, "Неправильный формат")) КонецЕсли КонецЦикла
ИначеЕсли ТипРеквизита = Тип("ВидДвиженияНакопления") Тогда
ИначеЕсли ТипРеквизита = Тип("ВидДвиженияНакопления") Тогда
Для каждого Элемент Из ТаблицаПостроитель.ВыгрузитьКолонку(Колонка.НомерКолонки) Цикл Если ВРег(Элемент) = "ПРИХОД" ИЛИ ВРег(Элемент) = "+" Тогда нМассив.Добавить(Новый Структура("Значение, Примечание", ВидДвиженияНакопления.Приход, "")) ИначеЕсли ВРег(Элемент) = "РАСХОД" ИЛИ ВРег(Элемент) = "-" Тогда нМассив.Добавить(Новый Структура("Значение, Примечание", ВидДвиженияНакопления.Расход, "")) Иначе нМассив.Добавить(Новый Структура("Значение, Примечание", Элемент, "Неправильный формат")) КонецЕсли КонецЦикла
Для каждого Элемент Из ТаблицаПостроитель.ВыгрузитьКолонку(Колонка.НомерКолонки) Цикл Если ВРег(Элемент) = "ПРИХОД" ИЛИ ВРег(Элемент) = "+" Тогда нМассив.Добавить(Новый Структура("Значение, Примечание", ВидДвиженияНакопления.Приход, "")) ИначеЕсли ВРег(Элемент) = "РАСХОД" ИЛИ ВРег(Элемент) = "-" Тогда нМассив.Добавить(Новый Структура("Значение, Примечание", ВидДвиженияНакопления.Расход, "")) Иначе нМассив.Добавить(Новый Структура("Значение, Примечание", Элемент, "Неправильный формат")) КонецЕсли КонецЦикла
ИначеЕсли Перечисления.ТипВсеСсылки().СодержитТип(ТипРеквизита) Тогда
ИначеЕсли СтрНачинаетсяС(XMLИмяТипа, "EnumRef") Тогда
Менеджер = ПолучитьМенеджераПоТипу(ТипРеквизита);
Соответствие = Новый Соответствие;
Соответствие = Новый Соответствие;
Для каждого Перечисление Из ПолучитьМенеджераПоТипу(ТипРеквизита) Цикл Соответствие.Вставить(Строка(Перечисление), Перечисление) КонецЦикла;
Для каждого Перечисление Из Менеджер Цикл Соответствие.Вставить(Строка(Перечисление), Перечисление) КонецЦикла;
Для каждого Элемент Из ТаблицаПостроитель.ВыгрузитьКолонку(Колонка.НомерКолонки) Цикл Если Соответствие[Элемент] <> Неопределено Тогда нМассив.Добавить(Новый Структура("Значение, Примечание", Соответствие[Элемент], "")) Иначе нМассив.Добавить(Новый Структура("Значение, Примечание", Элемент, "Значение не найдено")) КонецЕсли КонецЦикла;
Для каждого Элемент Из ТаблицаПостроитель.ВыгрузитьКолонку(Колонка.НомерКолонки) Цикл Если Соответствие[Элемент] <> Неопределено Тогда нМассив.Добавить(Новый Структура("Значение, Примечание", Соответствие[Элемент], "")) Иначе нМассив.Добавить(Новый Структура("Значение, Примечание", Элемент, "Значение не найдено")) КонецЕсли КонецЦикла;
Иначе
Иначе
МетаданныеТипа = Метаданные.НайтиПоТипу(ТипРеквизита);
МетаданныеТипа = Метаданные.НайтиПоТипу(ТипРеквизита);
Менеджер = ПолучитьМенеджераПоТипу(ТипРеквизита);
Менеджер = ПолучитьМенеджераПоТипу(ТипРеквизита);
ИщемПоПредставлению = Ложь;
ИщемПоПредставлению = Ложь;
ИмяКлассаМетаданных = СтрРазделить(XMLИмяТипа, ".")[0];
Если Справочники.ТипВсеСсылки().СодержитТип(ТипРеквизита) Тогда
Если ИмяКлассаМетаданных = "CatalogRef" Тогда
ИмяОбъектаМетаданных = "Справочник"
ИмяОбъектаМетаданных = "Справочник"
ИначеЕсли ПланыСчетов.ТипВсеСсылки().СодержитТип(ТипРеквизита) Тогда
ИначеЕсли ИмяКлассаМетаданных = "ChartOfAccountsRef" Тогда
ИмяОбъектаМетаданных = "ПланСчетов"
ИмяОбъектаМетаданных = "ПланСчетов"
ИначеЕсли ПланыВидовХарактеристик.ТипВсеСсылки().СодержитТип(ТипРеквизита) Тогда
ИначеЕсли ИмяКлассаМетаданных = "ChartOfCharacteristicTypesRef" Тогда
ИмяОбъектаМетаданных = "ПланВидовХарактеристик"
ИмяОбъектаМетаданных = "ПланВидовХарактеристик"
ИначеЕсли БизнесПроцессы.ТипВсеСсылки().СодержитТип(ТипРеквизита) Тогда
ИначеЕсли ИмяКлассаМетаданных = "BusinessProcessRef" Тогда
ИмяОбъектаМетаданных = "БизнесПроцесс"
ИмяОбъектаМетаданных = "БизнесПроцесс"
ИначеЕсли Задачи.ТипВсеСсылки().СодержитТип(ТипРеквизита) Тогда
ИначеЕсли ИмяКлассаМетаданных = "TaskRef" Тогда
ИмяОбъектаМетаданных = "Задача"
ИмяОбъектаМетаданных = "Задача"
ИначеЕсли ПланыВидовРасчета.ТипВсеСсылки().СодержитТип(ТипРеквизита) Тогда
ИначеЕсли ИмяКлассаМетаданных = "ChartOfCalculationTypesRef" Тогда
ИмяОбъектаМетаданных = "ПланВидовРасчета"
ИмяОбъектаМетаданных = "ПланВидовРасчета"
ИначеЕсли Документы.ТипВсеСсылки().СодержитТип(ТипРеквизита) Тогда
ИначеЕсли ИмяКлассаМетаданных = "DocumentRef" Тогда
ИщемПоПредставлению = Истина;
ИщемПоПредставлению = Истина;
ИмяОбъектаМетаданных = "Документ"
ИмяОбъектаМетаданных = "Документ"
Иначе
Иначе
Возврат нМассив
Возврат нМассив
КонецЕсли;
КонецЕсли;
ИскатьПо = Колонка.ИскатьПо;
ИскатьПо = Колонка.ИскатьПо;
Если ПустаяСтрока(ИскатьПо) И БизнесПроцессы.ТипВсеСсылки().СодержитТип(ТипРеквизита) Тогда
Если ПустаяСтрока(ИскатьПо) И БизнесПроцессы.ТипВсеСсылки().СодержитТип(ТипРеквизита) Тогда
Возврат нМассив
Возврат нМассив
ИначеЕсли ПустаяСтрока(ИскатьПо) И Документы.ТипВсеСсылки().СодержитТип(ТипРеквизита) Тогда
ИначеЕсли ПустаяСтрока(ИскатьПо) И Документы.ТипВсеСсылки().СодержитТип(ТипРеквизита) Тогда
ИскатьПо = "Номер"
ИскатьПо = "Номер"
ИначеЕсли ПустаяСтрока(ИскатьПо)Тогда
ИначеЕсли ПустаяСтрока(ИскатьПо)Тогда
СтрокаОсновногоПредставления = Строка(МетаданныеТипа.ОсновноеПредставление);
СтрокаОсновногоПредставления = Строка(МетаданныеТипа.ОсновноеПредставление);
Если СтрокаОсновногоПредставления = "ВВидеКода" Тогда
Если СтрокаОсновногоПредставления = "ВВидеКода" Тогда
ИскатьПо = "Код"
ИскатьПо = "Код"
ИначеЕсли СтрокаОсновногоПредставления = "ВВидеНаименования" Тогда
ИначеЕсли СтрокаОсновногоПредставления = "ВВидеНаименования" Тогда
ИскатьПо = "Наименование"
ИскатьПо = "Наименование"
ИначеЕсли СтрокаОсновногоПредставления = "ВВидеНомера" Тогда
ИначеЕсли СтрокаОсновногоПредставления = "ВВидеНомера" Тогда
ИскатьПо = "Номер"
ИскатьПо = "Номер"
КонецЕсли
КонецЕсли
КонецЕсли;
КонецЕсли;
Запрос = Новый Запрос;
Запрос = Новый Запрос;
ТекстЗапроса =
ТекстЗапроса =
"ВЫБРАТЬ
"ВЫБРАТЬ
| Максимум(_Таблица.Ссылка) КАК Ссылка,
| Максимум(_Таблица.Ссылка) КАК Ссылка,
| Количество(_Таблица.Ссылка) КАК Количество,
| Количество(_Таблица.Ссылка) КАК Количество,
| ПРЕДСТАВЛЕНИЕ(_Таблица." + ИскатьПо + ") КАК " + ИскатьПо + "
| ПРЕДСТАВЛЕНИЕ(_Таблица." + ИскатьПо + ") КАК " + ИскатьПо + "
|ИЗ
|ИЗ
| "+ИмяОбъектаМетаданных+"." + МетаданныеТипа.Имя + " КАК _Таблица
| "+ИмяОбъектаМетаданных+"." + МетаданныеТипа.Имя + " КАК _Таблица
|ГДЕ";
|ГДЕ";
Если ИскатьПо = "Представление" И ИщемПоПредставлению Тогда
Если ИскатьПо = "Представление" И ИщемПоПредставлению Тогда
ТекстЗапроса = ТекстЗапроса + "
ТекстЗапроса = ТекстЗапроса + "
| (_Таблица.Номер В (&Номер)
| (_Таблица.Номер В (&Номер)
| ИЛИ _Таблица.Дата В (&Дата))";
| ИЛИ _Таблица.Дата В (&Дата))";
Иначе
Иначе
ТекстЗапроса = ТекстЗапроса + "
ТекстЗапроса = ТекстЗапроса + "
| _Таблица." + ИскатьПо + " В (&ИскатьПо)";
| _Таблица." + ИскатьПо + " В (&ИскатьПо)";
КонецЕсли;
КонецЕсли;
ТекстЗапроса = ТекстЗапроса + "
ТекстЗапроса = ТекстЗапроса + "
|
|
|СГРУППИРОВАТЬ ПО
|СГРУППИРОВАТЬ ПО
| _Таблица." + ИскатьПо;
| _Таблица." + ИскатьПо;
Запрос.Текст = ТекстЗапроса;
Запрос.Текст = ТекстЗапроса;
ТЗ = ТаблицаПостроитель.Скопировать(, ТаблицаПостроитель.Колонки[Колонка.НомерКолонки].Имя);
ТЗ = ТаблицаПостроитель.Скопировать(, ТаблицаПостроитель.Колонки[Колонка.НомерКолонки].Имя);
ТЗ.Свернуть(ТЗ.Колонки[0].Имя);
ТЗ.Свернуть(ТЗ.Колонки[0].Имя);
Если ИскатьПо = "Представление" И ИщемПоПредставлению Тогда
Если ИскатьПо = "Представление" И ИщемПоПредставлению Тогда
СтруктураПредставления = ПолучитьМассивНомеровИДатДокументов(ТЗ.ВыгрузитьКолонку(ТЗ.Колонки[0].Имя), МетаданныеТипа.Синоним);
СтруктураПредставления = ПолучитьМассивНомеровИДатДокументов(ТЗ.ВыгрузитьКолонку(ТЗ.Колонки[0].Имя), МетаданныеТипа.Синоним);
Запрос.УстановитьПараметр("Номер", СтруктураПредставления.МассивНомеров);
Запрос.УстановитьПараметр("Номер", СтруктураПредставления.МассивНомеров);
Запрос.УстановитьПараметр("Дата", СтруктураПредставления.МассивДат);
Запрос.УстановитьПараметр("Дата", СтруктураПредставления.МассивДат);
ИначеЕсли ТипЗнч(Менеджер.ПустаяСсылка()[ИскатьПо]) = Тип("Число") Тогда
ИначеЕсли ТипЗнч(Менеджер.ПустаяСсылка()[ИскатьПо]) = Тип("Число") Тогда
МассивЧисел = Новый Массив;
МассивЧисел = Новый Массив;
Для каждого Элемент Из ТЗ.ВыгрузитьКолонку(ТЗ.Колонки[0].Имя) Цикл Попытка МассивЧисел.Добавить(Число(Элемент)) Исключение КонецПопытки КонецЦикла;
Для каждого Элемент Из ТЗ.ВыгрузитьКолонку(ТЗ.Колонки[0].Имя) Цикл Попытка МассивЧисел.Добавить(Число(Элемент)) Исключение КонецПопытки КонецЦикла;
Запрос.УстановитьПараметр("ИскатьПо", МассивЧисел)
Запрос.УстановитьПараметр("ИскатьПо", МассивЧисел)
Иначе
Иначе
Запрос.УстановитьПараметр("ИскатьПо", ТЗ.ВыгрузитьКолонку(ТЗ.Колонки[0].Имя));
Запрос.УстановитьПараметр("ИскатьПо", ТЗ.ВыгрузитьКолонку(ТЗ.Колонки[0].Имя));
КонецЕсли;
КонецЕсли;
Результат = Запрос.Выполнить().Выгрузить();
Результат = Запрос.Выполнить().Выгрузить();
Для каждого Элемент Из Результат Цикл Элемент[ИскатьПо] = СокрЛП(ВРег(Элемент[ИскатьПо])) КонецЦикла;
Для каждого Элемент Из Результат Цикл Элемент[ИскатьПо] = СокрЛП(ВРег(Элемент[ИскатьПо])) КонецЦикла;
Результат.Индексы.Добавить(ИскатьПо);
Результат.Индексы.Добавить(ИскатьПо);
Для каждого Строка Из ТаблицаПостроитель Цикл нМассив.Добавить(Новый Структура("Значение, Примечание", ?(Результат.Найти(ВРег(Строка[Колонка.НомерКолонки]), ИскатьПо) <> Неопределено, Результат.Найти(ВРег(Строка[Колонка.НомерКолонки]), ИскатьПо).Ссылка, Неопределено), ?(ЗначениеЗаполнено(Строка[Колонка.НомерКолонки]), ?(Результат.Найти(ВРег(Строка[Колонка.НомерКолонки]), ИскатьПо) <> Неопределено, ?(Результат.Найти(ВРег(Строка[Колонка.НомерКолонки]), ИскатьПо).Количество = 1, "", "Не однозначное представление. Вариантов: " + Результат.Найти(ВРег(Строка[Колонка.НомерКолонки]), ИскатьПо).Количество), "Элемент не найден"), ""))) КонецЦикла
Для каждого Строка Из ТаблицаПостроитель Цикл нМассив.Добавить(Новый Структура("Значение, Примечание", ?(Результат.Найти(ВРег(Строка[Колонка.НомерКолонки]), ИскатьПо) <> Неопределено, Результат.Найти(ВРег(Строка[Колонка.НомерКолонки]), ИскатьПо).Ссылка, Неопределено), ?(ЗначениеЗаполнено(Строка[Колонка.НомерКолонки]), ?(Результат.Найти(ВРег(Строка[Колонка.НомерКолонки]), ИскатьПо) <> Неопределено, ?(Результат.Найти(ВРег(Строка[Колонка.НомерКолонки]), ИскатьПо).Количество = 1, "", "Не однозначное представление. Вариантов: " + Результат.Найти(ВРег(Строка[Колонка.НомерКолонки]), ИскатьПо).Количество), "Элемент не найден"), ""))) КонецЦикла
КонецЕсли;
КонецЕсли;
Возврат нМассив
Возврат нМассив


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


&НаСервереБезКонтекста
&НаСервереБезКонтекста
// Функция возвращает менеджер по типу значения
// Функция возвращает менеджер по типу значения
//
//
// Параметры:
// Параметры:
// ТипЗначения - Тип значения, по которому нужна вернуть менеджер
// ТипЗначения - Тип значения, по которому нужна вернуть менеджер
//
//
// Возвращаемое значение:
// Возвращаемое значение:
// менеджер
// менеджер
Функция ПолучитьМенеджераПоТипу(ТипЗначения)
Функция ПолучитьМенеджераПоТипу(ТипЗначения)
Если Не ТипЗначения = Неопределено Тогда
XMLИмяТипа = XMLТип(ТипЗначения).ИмяТипа;
МенеджерыОбъектовМетаданных = Новый Структура("Справочники, Перечисления, Документы, ПланыВидовХарактеристик, ПланыСчетов, ПланыВидовРасчета, БизнесПроцессы, Задачи",
Возврат Новый(СтрЗаменить(XMLИмяТипа, "Ref", "Manager"));
Справочники,
Перечисления,
Документы,
ПланыВидовХарактеристик,
ПланыСчетов,
ПланыВидовРасчета,
БизнесПроцессы,
Задачи);
Для Каждого МенеджерОбъектаМетаданных Из МенеджерыОбъектовМетаданных Цикл Если МенеджерОбъектаМетаданных.Значение.ТипВсеСсылки().СодержитТип(ТипЗначения) Тогда Возврат МенеджерОбъектаМетаданных.Значение[Метаданные.НайтиПоТипу(ТипЗначения).Имя] КонецЕсли КонецЦикла
Иначе
Возврат Неопределено
КонецЕсли
КонецФункции
КонецФункции