Initial commit of 1C configuration from DT-021 - 18.06.2026 13:57:56,21

This commit is contained in:
70 changed files with 15878 additions and 0 deletions
@@ -0,0 +1,211 @@
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область СлужебныеПроцедурыИФункции
#Область ПодготовкаКЗагрузкеДанных
&ИзменениеИКонтроль("ИнформациюПоКолонкамИзРеквизитовСправочника")
Процедура РК_ИнформациюПоКолонкамИзРеквизитовСправочника(ПараметрыЗагрузки, ИнформацияПоКолонкам)
ИнформацияПоКолонкам.Очистить();
Позиция = 1;
МетаданныеСправочника= ОбщегоНазначения.ОбъектМетаданныхПоПолномуИмени(ПараметрыЗагрузки.ПолноеИмяОбъекта); // ОбъектМетаданныхСправочник, ОбъектМетаданныхДокумент
#Удаление
Если НЕ МетаданныеСправочника.Автонумерация И МетаданныеСправочника.ДлинаКода > 0 Тогда
СоздатьКолонкуСтандартныеРеквизиты(ИнформацияПоКолонкам, МетаданныеСправочника, "Код", Позиция);
Позиция = Позиция + 1;
КонецЕсли;
#КонецУдаления
#Вставка
// ============================================================================================
// РК: НАЧАЛО ВСТАВКИ - Убрана проверка на Автонумерацию для возможности загрузки по коду справочников с автонумерацией
// ============================================================================================
// РК: Убрана проверка на Автонумерацию для возможности загрузки по коду справочников с автонумерацией
Если МетаданныеСправочника.ДлинаКода > 0 Тогда
СоздатьКолонкуСтандартныеРеквизиты(ИнформацияПоКолонкам, МетаданныеСправочника, "Код", Позиция);
Позиция = Позиция + 1;
КонецЕсли;
// ============================================================================================
// РК: КОНЕЦ ВСТАВКИ
// ============================================================================================
#КонецВставки
Если МетаданныеСправочника.ДлинаНаименования > 0 Тогда
СоздатьКолонкуСтандартныеРеквизиты(ИнформацияПоКолонкам, МетаданныеСправочника, "Наименование", Позиция);
Позиция = Позиция + 1;
КонецЕсли;
Если МетаданныеСправочника.Иерархический Тогда
СоздатьКолонкуСтандартныеРеквизиты(ИнформацияПоКолонкам, МетаданныеСправочника, "Родитель", Позиция);
Позиция = Позиция + 1;
КонецЕсли;
Если МетаданныеСправочника.Владельцы.Количество() > 0 Тогда
СоздатьКолонкуСтандартныеРеквизиты(ИнформацияПоКолонкам, МетаданныеСправочника, "Владелец", Позиция);
Позиция = Позиция + 1;
КонецЕсли;
Для каждого Реквизит Из МетаданныеСправочника.Реквизиты Цикл
Если Реквизит.Имя = "Идентификатор" Тогда
Продолжить;
КонецЕсли;
Если Реквизит.Тип.СодержитТип(Тип("ХранилищеЗначения")) Тогда
Продолжить;
КонецЕсли;
ОписаниеТипаКолонки = "";
Если Реквизит.Тип.СодержитТип(Тип("Булево")) Тогда
ОписаниеТипаКолонки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Флаг, %1 или 1 / Нет или 0'"), ЗагрузкаДанныхИзФайла.ПредставлениеТекстаДаДляБулево());
ИначеЕсли Реквизит.Тип.СодержитТип(Тип("Число")) Тогда
ОписаниеТипаКолонки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Число, Длина: %1, Точность: %2'"),
Строка(Реквизит.Тип.КвалификаторыЧисла.Разрядность),
Строка(Реквизит.Тип.КвалификаторыЧисла.РазрядностьДробнойЧасти));
ИначеЕсли Реквизит.Тип.СодержитТип(Тип("Строка")) Тогда
Если Реквизит.Тип.КвалификаторыСтроки.Длина > 0 Тогда
ДлинаСтроки = Строка(Реквизит.Тип.КвалификаторыСтроки.Длина);
ОписаниеТипаКолонки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Строка, макс. количество символов: %1'"), ДлинаСтроки);
Иначе
ОписаниеТипаКолонки = НСтр("ru = 'Строка неограниченной длины'");
КонецЕсли;
ИначеЕсли Реквизит.Тип.СодержитТип(Тип("Дата")) Тогда
ОписаниеТипаКолонки = Строка(Реквизит.Тип.КвалификаторыДаты.ЧастиДаты);
ИначеЕсли Реквизит.Тип.СодержитТип(Тип("УникальныйИдентификатор")) Тогда
ОписаниеТипаКолонки = НСтр("ru = 'Уникальный идентификатор'");
КонецЕсли;
ШиринаКолонки = ШиринаКолонкиПоТипу(Реквизит.Тип);
Подсказка = ?(ЗначениеЗаполнено(Реквизит.Подсказка), Реквизит.Подсказка, Реквизит.Представление()) + Символы.ПС + ОписаниеТипаКолонки;
ОбязательноеПоле = ?(Реквизит.ПроверкаЗаполнения = ПроверкаЗаполнения.ВыдаватьОшибку, Истина, Ложь);
СтрокаИнфоПроКолонки = ИнформацияПоКолонкам.Добавить();
СтрокаИнфоПроКолонки.ИмяКолонки = Реквизит.Имя;
СтрокаИнфоПроКолонки.ПредставлениеКолонки = Реквизит.Представление();
СтрокаИнфоПроКолонки.ТипКолонки = Реквизит.Тип;
СтрокаИнфоПроКолонки.ОбязательнаДляЗаполнения = ОбязательноеПоле;
СтрокаИнфоПроКолонки.Позиция = Позиция;
СтрокаИнфоПроКолонки.Группа = МетаданныеСправочника.Представление();
СтрокаИнфоПроКолонки.Видимость = Истина;
СтрокаИнфоПроКолонки.Примечание = Подсказка;
СтрокаИнфоПроКолонки.Ширина = ШиринаКолонки;
Позиция = Позиция + 1;
КонецЦикла;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда
МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией");
МодульУправлениеКонтактнойИнформацией.КолонкиДляЗагрузкиДанных(МетаданныеСправочника, ИнформацияПоКолонкам);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда
МодульУправлениеСвойствамиСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствамиСлужебный");
МодульУправлениеСвойствамиСлужебный.КолонкиДляЗагрузкиДанных(МетаданныеСправочника, ИнформацияПоКолонкам);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
&ИзменениеИКонтроль("ЗначениеЯчейки")
Функция РК_ЗначениеЯчейки(Колонка, ЗначениеЯчейки)
ДанныеЯчейки = "";
Для каждого ТипДанных Из Колонка.ТипКолонки.Типы() Цикл
ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипДанных);
Если ОбъектМетаданных = Неопределено Тогда
Продолжить;
КонецЕсли;
ОписаниеОбъекта = РазложитьПолноеИмяОбъекта(ОбъектМетаданных.ПолноеИмя());
Если ОписаниеОбъекта.ТипОбъекта = "Справочник" Тогда
#Удаление
Если Не ОбъектМетаданных.Автонумерация
И ОбъектМетаданных.ДлинаКода > 0 Тогда
ДанныеЯчейки = Справочники[ОписаниеОбъекта.НазваниеОбъекта].НайтиПоКоду(ЗначениеЯчейки, Истина);
КонецЕсли;
#КонецУдаления
#Вставка
// ============================================================================================
// РК: НАЧАЛО ВСТАВКИ - Убрана проверка на Автонумерацию для возможности поиска по коду справочников с автонумерацией
// ============================================================================================
// РК: Убрана проверка на Автонумерацию для возможности поиска по коду справочников с автонумерацией
Если ОбъектМетаданных.ДлинаКода > 0 Тогда
ДанныеЯчейки = Справочники[ОписаниеОбъекта.НазваниеОбъекта].НайтиПоКоду(ЗначениеЯчейки, Истина);
КонецЕсли;
// ============================================================================================
// РК: КОНЕЦ ВСТАВКИ
// ============================================================================================
#КонецВставки
Если Не ЗначениеЗаполнено(ДанныеЯчейки)
И ЗначениеЗаполнено(ЗначениеЯчейки)
И ОбъектМетаданных.ДлинаНаименования > 0 Тогда
//@skip-check query-in-loop - штучные запросы разнородных данных.
ДанныеЯчейки = НайтиПоНаименованию(ЗначениеЯчейки, ОбъектМетаданных, Колонка);
КонецЕсли;
Если Не ЗначениеЗаполнено(ДанныеЯчейки)
И ОбъектМетаданных.ДлинаКода > 0 Тогда
Если ОбъектМетаданных.СерииКодов = Метаданные.СвойстваОбъектов.СерииКодовСправочника.ВоВсемСправочнике Тогда
ДанныеЯчейки = Справочники[ОписаниеОбъекта.НазваниеОбъекта].НайтиПоКоду(ЗначениеЯчейки);
Иначе
ДанныеЯчейки = Справочники[ОписаниеОбъекта.НазваниеОбъекта].НайтиПоКоду(ЗначениеЯчейки, Истина);
КонецЕсли;
КонецЕсли;
ИначеЕсли ОписаниеОбъекта.ТипОбъекта = "Перечисление" Тогда
Для каждого ЗначениеПеречисления Из Перечисления[ОписаниеОбъекта.НазваниеОбъекта] Цикл
Если Строка(ЗначениеПеречисления) = СокрЛП(ЗначениеЯчейки) Тогда
ДанныеЯчейки = ЗначениеПеречисления;
КонецЕсли;
КонецЦикла;
ИначеЕсли ОписаниеОбъекта.ТипОбъекта = "ПланСчетов" Тогда
ДанныеЯчейки = ПланыСчетов[ОписаниеОбъекта.НазваниеОбъекта].НайтиПоКоду(ЗначениеЯчейки);
Если ДанныеЯчейки.Пустая() Тогда
ДанныеЯчейки = ПланыСчетов[ОписаниеОбъекта.НазваниеОбъекта].НайтиПоНаименованию(ЗначениеЯчейки, Истина);
КонецЕсли;
ИначеЕсли ОписаниеОбъекта.ТипОбъекта = "ПланВидовХарактеристик" Тогда
#Удаление
Если Не ОбъектМетаданных.Автонумерация И ОбъектМетаданных.ДлинаКода > 0 Тогда
ДанныеЯчейки = ПланыВидовХарактеристик[ОписаниеОбъекта.НазваниеОбъекта].НайтиПоКоду(ЗначениеЯчейки);
КонецЕсли;
#КонецУдаления
#Вставка
// ============================================================================================
// РК: НАЧАЛО ВСТАВКИ - Убрана проверка на Автонумерацию для возможности поиска по коду планов видов характеристик с автонумерацией
// ============================================================================================
// РК: Убрана проверка на Автонумерацию для возможности поиска по коду планов видов характеристик с автонумерацией
Если ОбъектМетаданных.ДлинаКода > 0 Тогда
ДанныеЯчейки = ПланыВидовХарактеристик[ОписаниеОбъекта.НазваниеОбъекта].НайтиПоКоду(ЗначениеЯчейки);
КонецЕсли;
// ============================================================================================
// РК: КОНЕЦ ВСТАВКИ
// ============================================================================================
#КонецВставки
Если Не ЗначениеЗаполнено(ДанныеЯчейки) Тогда
ДанныеЯчейки = ПланыВидовХарактеристик[ОписаниеОбъекта.НазваниеОбъекта].НайтиПоНаименованию(ЗначениеЯчейки, Истина);
КонецЕсли;
Иначе
ДанныеЯчейки = Строка(ЗначениеЯчейки);
КонецЕсли;
Если ЗначениеЗаполнено(ДанныеЯчейки) Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Возврат ДанныеЯчейки;
КонецФункции
#КонецОбласти
#КонецЕсли
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.20">
<Form uuid="f47d02ff-17f2-4764-a151-627f4067a479">
<InternalInfo>
<xr:PropertyState>
<xr:Property>Form</xr:Property>
<xr:State>Extended</xr:State>
</xr:PropertyState>
</InternalInfo>
<Properties>
<ObjectBelonging>Adopted</ObjectBelonging>
<Name>ЗагрузкаДанныхИзФайла</Name>
<Comment/>
<ExtendedConfigurationObject>ac4fa2a4-93a1-4aa6-986a-5f576457fc8a</ExtendedConfigurationObject>
<FormType>Managed</FormType>
</Properties>
</Form>
</MetaDataObject>
@@ -0,0 +1,141 @@
#Область СлужебныеПроцедурыИФункции
&ИзменениеИКонтроль("УсловияПоВыбраннымКолонкам")
&НаСервере
Функция РК_УсловияПоВыбраннымКолонкам(ИмяСправочника)
ТипСравнения = " = ";
СтрокаУсловие = "";
ТабличнаяЧасть = "";
ОтборГде = Новый Массив;
СтрокиУсловия = Новый Массив;
ШаблонУсловияКонтактнаяИнформация = "ВЫРАЗИТЬ(СправочникСопоставления.Представление КАК Строка(500)) = ВЫРАЗИТЬ(ТаблицаСопоставления.%1 КАК Строка(500))";
ШаблонУсловияДополнительныйРеквизит = "СправочникСопоставления.Значение = ТаблицаСопоставления.%1";
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда
МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией");
ВидыКонтактнойИнформации = МодульУправлениеКонтактнойИнформацией.ВидыКонтактнойИнформацииОбъекта(Справочники[ИмяСправочника].ПустаяСсылка());
КонецЕсли;
Для каждого Элемент Из СопоставитьПоКолонке Цикл
Если Элемент.Пометка Тогда
Колонка = ИнформацияОКолонке(Элемент.Значение);
Если Колонка = Неопределено Тогда
Продолжить;
КонецЕсли;
Если СтрНачинаетсяС(Колонка.ИмяКолонки, "КонтактнаяИнформация_") Тогда
ИмяВидаКИ = СтандартныеПодсистемыСервер.ПреобразоватьАдаптированноеНаименованиеКолонкиВСтроку(
Сред(Колонка.ИмяКолонки, СтрДлина("КонтактнаяИнформация_") + 1));
НайденныеВиды = ВидыКонтактнойИнформации.Найти(ИмяВидаКИ, "Наименование");
ТабличнаяЧасть = "КонтактнаяИнформация";
СтрокаУсловие = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонУсловияКонтактнаяИнформация, Колонка.ИмяКолонки);
Если НайденныеВиды <> Неопределено Тогда
НаименованиеВида = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(НайденныеВиды.Ссылка, "Наименование");
Если НаименованиеВида <> Неопределено Тогда
СтрокаУсловие = СтрокаУсловие + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
" И СправочникСопоставления.Вид.Наименование = ""%1""", НаименованиеВида);
КонецЕсли;
КонецЕсли;
СтрокиУсловия.Добавить(СтрокаУсловие);
ОтборГде.Добавить("СправочникСопоставления.Представление <> """"");
Продолжить;
ИначеЕсли СтрНачинаетсяС(Колонка.ИмяКолонки, "ДополнительныйРеквизит_") Тогда
ИмяКолонкиСправочника = "Значение";
ТабличнаяЧасть = "ДополнительныеРеквизиты";
СтрокиУсловия.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонУсловияДополнительныйРеквизит, Колонка.ИмяКолонки));
ТипКолонки = Колонка.ТипКолонки.Типы()[0];
Если ТипЗнч(ТипКолонки) = Тип("Строка") И Колонка.ТипКолонки.КвалификаторыСтроки.Длина = 0 Тогда
Продолжить; // Нельзя сравнивать строки неограниченной длины.
КонецЕсли;
ОбъектаТипаКолонки = Метаданные.НайтиПоТипу(ТипКолонки);
Если ОбъектаТипаКолонки <> Неопределено Тогда
ШаблонГде = "СправочникСопоставления.Значение <> ЗНАЧЕНИЕ(%1.ПустаяСсылка)";
ОтборГде.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонГде, ОбъектаТипаКолонки.ПолноеИмя()));
КонецЕсли;
Продолжить;
КонецЕсли;
ИмяКолонкиСправочника = "Ссылка." + Колонка.ИмяКолонки;
ТипКолонки = Колонка.ТипКолонки.Типы()[0];
Если ТипКолонки = Тип("Строка") Тогда
Если Колонка.ТипКолонки.КвалификаторыСтроки.Длина = 0 Тогда
СтрокиУсловия.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
"ВЫРАЗИТЬ(СправочникСопоставления.%1 КАК Строка(500)) = ВЫРАЗИТЬ(ТаблицаСопоставления.%2 КАК Строка(500))",
ИмяКолонкиСправочника, Колонка.ИмяКолонки));
Иначе
СтрокиУсловия.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
"СправочникСопоставления.%1 = ТаблицаСопоставления.%2", ИмяКолонкиСправочника, Колонка.ИмяКолонки));
КонецЕсли;
ШаблонГде = "СправочникСопоставления.%1 <> """"";
ОтборГде.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонГде, ИмяКолонкиСправочника));
ИначеЕсли ТипКолонки = Тип("Число") Или ТипКолонки = Тип("Дата") Или ТипКолонки = Тип("Булево") Тогда
СтрокиУсловия.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
"СправочникСопоставления.%1 = ТаблицаСопоставления.%2", ИмяКолонкиСправочника, Колонка.ИмяКолонки));
Иначе
ИнфоОбъект = ИнформацияОбОбъектеМетаданныхПоТипу(ТипКолонки);
Если ИнфоОбъект.ТипОбъекта = "Справочник" Тогда
ТекстУсловияСправочник = Новый Массив;
Справочник = Метаданные.Справочники.Найти(ИнфоОбъект.ИмяОбъекта); // ОбъектМетаданныхСправочник
Для каждого СтрокаВвода Из Справочник.ВводПоСтроке Цикл
#Удаление
Если СтрокаВвода.Имя = "Код" И НЕ Справочник.Автонумерация Тогда
ТекстУсловияВВодаПоСтроке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
"СправочникСопоставления.%1.Код %2 ТаблицаСопоставления.%3", // АПК:1297 фрагмент запроса не локализуется.
ИмяКолонкиСправочника, ТипСравнения, Колонка.ИмяКолонки);
Иначе
ТекстУсловияВВодаПоСтроке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
"СправочникСопоставления.%1.%2 %3 ТаблицаСопоставления.%4", // АПК:1297 фрагмент запроса не локализуется.
ИмяКолонкиСправочника, СтрокаВвода.Имя, ТипСравнения, Колонка.ИмяКолонки);
КонецЕсли;
#КонецУдаления
#Вставка
// ============================================================================================
// РК: НАЧАЛО ВСТАВКИ - Убрана проверка на Автонумерацию для возможности сопоставления по коду справочников с автонумерацией
// ============================================================================================
// РК: Убрана проверка на Автонумерацию для возможности сопоставления по коду справочников с автонумерацией
Если СтрокаВвода.Имя = "Код" Тогда
ТекстУсловияВВодаПоСтроке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
"СправочникСопоставления.%1.Код %2 ТаблицаСопоставления.%3", // АПК:1297 фрагмент запроса не локализуется.
ИмяКолонкиСправочника, ТипСравнения, Колонка.ИмяКолонки);
Иначе
ТекстУсловияВВодаПоСтроке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
"СправочникСопоставления.%1.%2 %3 ТаблицаСопоставления.%4", // АПК:1297 фрагмент запроса не локализуется.
ИмяКолонкиСправочника, СтрокаВвода.Имя, ТипСравнения, Колонка.ИмяКолонки);
КонецЕсли;
// ============================================================================================
// РК: КОНЕЦ ВСТАВКИ
// ============================================================================================
#КонецВставки
ТекстУсловияСправочник.Добавить(ТекстУсловияВВодаПоСтроке);
КонецЦикла;
СтрокиУсловия.Добавить(" ( " + СтрСоединить(ТекстУсловияСправочник, " ИЛИ ") + " )");
ИначеЕсли ИнфоОбъект.ТипОбъекта = "Перечисление" Тогда
СтрокиУсловия.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
"СправочникСопоставления.%1 = ТаблицаСопоставления.%2", ИмяКолонкиСправочника, Колонка.ИмяКолонки));
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Условия = Новый Структура("УсловиеОбъединения , Где, ТабличнаяЧасть");
Условия.УсловиеОбъединения = СтрСоединить(СтрокиУсловия, " И ");
Условия.Где = СтрСоединить(ОтборГде, " И ");
Условия.ТабличнаяЧасть = ТабличнаяЧасть;
Возврат Условия;
КонецФункции
#КонецОбласти