РК_ЗагрузкаОстатков 1.3.1.49: подбор складов, загрузка и сопоставление остатков.
HTTP-клиент Transfer API, детальная ТЧ входящих остатков и шаг сопоставления НСИ/серий по логике BSL-переноса. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,439 @@
|
||||
|
||||
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
|
||||
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
// Заполняет ТЧ ВходящиеДанные строками остатков Transfer API (mode=combined по умолчанию).
|
||||
//
|
||||
Процедура ЗаполнитьВходящиеДанныеИзОтветаОстатков(ОтветAPI, ОчищатьПередЗаполнением = Истина) Экспорт
|
||||
|
||||
Если ОчищатьПередЗаполнением Тогда
|
||||
ВходящиеДанные.Очистить();
|
||||
КонецЕсли;
|
||||
|
||||
СтрокиОтвета = Неопределено;
|
||||
Если ТипЗнч(ОтветAPI) = Тип("Структура") Или ТипЗнч(ОтветAPI) = Тип("Соответствие") Тогда
|
||||
СтрокиОтвета = ЗначениеСвойства(ОтветAPI, "rows", Неопределено);
|
||||
КонецЕсли;
|
||||
Если ТипЗнч(СтрокиОтвета) <> Тип("Массив") Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Для Каждого СтрокаAPI Из СтрокиОтвета Цикл
|
||||
НовСтр = ВходящиеДанные.Добавить();
|
||||
ЗаполнитьСтрокуВходящихДанныхИзAPI(НовСтр, СтрокаAPI);
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
// Сопоставление строк ТЧ с НСИ целевой ИБ + создание серий-заглушек при необходимости.
|
||||
// Алгоритм — по логике scripts/generate_balances_apply_bsl.py (артикул/GUID/код/имя; серии Перенос_*).
|
||||
//
|
||||
// Параметры:
|
||||
// РежимТест - Булево - Истина: только поиск, без создания серий/характеристик
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Структура - Сопоставлено, НеСопоставлено, СозданоСерий, СозданоХарактеристик
|
||||
//
|
||||
Функция СопоставитьВходящиеДанные(РежимТест = Истина) Экспорт
|
||||
|
||||
Результат = Новый Структура;
|
||||
Результат.Вставить("Сопоставлено", 0);
|
||||
Результат.Вставить("НеСопоставлено", 0);
|
||||
Результат.Вставить("СозданоСерий", 0);
|
||||
Результат.Вставить("СозданоХарактеристик", 0);
|
||||
|
||||
СуффиксДатыСер = Формат(?(ЗначениеЗаполнено(ДатаДокументовВвода), ДатаДокументовВвода, ДатаОстатков), "ДФ=yyyyMMdd");
|
||||
Если ПустаяСтрока(СуффиксДатыСер) Тогда
|
||||
СуффиксДатыСер = Формат(ТекущаяДатаСеанса(), "ДФ=yyyyMMdd");
|
||||
КонецЕсли;
|
||||
|
||||
КэшТребуетсяСерия = Новый Соответствие;
|
||||
КэшСерий = Новый Соответствие;
|
||||
|
||||
Для Каждого СтрТ Из ВходящиеДанные Цикл
|
||||
|
||||
СтрТ.Сопоставлено = Ложь;
|
||||
СтрТ.КомментарийСопоставления = "";
|
||||
СтрТ.Номенклатура = Справочники.Номенклатура.ПустаяСсылка();
|
||||
СтрТ.Склад = Справочники.Склады.ПустаяСсылка();
|
||||
СтрТ.Характеристика = Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка();
|
||||
СтрТ.СерияСсылка = Справочники.СерииНоменклатуры.ПустаяСсылка();
|
||||
СтрТ.НомерГТДСсылка = Справочники.НомераГТД.ПустаяСсылка();
|
||||
|
||||
Ном = НайтиНоменклатуруСтроки(СтрТ);
|
||||
Если Не ЗначениеЗаполнено(Ном) Тогда
|
||||
СтрТ.КомментарийСопоставления = "Номенклатура не найдена";
|
||||
Результат.НеСопоставлено = Результат.НеСопоставлено + 1;
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
СтрТ.Номенклатура = Ном;
|
||||
|
||||
СкладЦель = НайтиСкладСтроки(СтрТ);
|
||||
Если Не ЗначениеЗаполнено(СкладЦель) Тогда
|
||||
СтрТ.КомментарийСопоставления = "Склад не найден";
|
||||
Результат.НеСопоставлено = Результат.НеСопоставлено + 1;
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
СтрТ.Склад = СкладЦель;
|
||||
|
||||
Хар = НайтиИлиСоздатьХарактеристику(СтрТ, Ном, РежимТест, Результат);
|
||||
СтрТ.Характеристика = Хар;
|
||||
|
||||
Сер = НайтиИлиСоздатьСерию(СтрТ, Ном, СкладЦель, СуффиксДатыСер, РежимТест,
|
||||
КэшТребуетсяСерия, КэшСерий, Результат);
|
||||
СтрТ.СерияСсылка = Сер;
|
||||
|
||||
Если ЗначениеЗаполнено(СтрТ.ГТД) Тогда
|
||||
КодГТД = СокрЛП(СтрТ.ГТД);
|
||||
СтрТ.НомерГТДСсылка = Справочники.НомераГТД.НайтиПоКоду(КодГТД);
|
||||
Если Не ЗначениеЗаполнено(СтрТ.НомерГТДСсылка) Тогда
|
||||
СтрТ.НомерГТДСсылка = Справочники.НомераГТД.НайтиПоРеквизиту("РегистрационныйНомер", КодГТД);
|
||||
КонецЕсли;
|
||||
Если Не ЗначениеЗаполнено(СтрТ.НомерГТДСсылка) Тогда
|
||||
СтрТ.НомерГТДСсылка = Справочники.НомераГТД.НайтиПоНаименованию(КодГТД, Истина);
|
||||
КонецЕсли;
|
||||
Если Не ЗначениеЗаполнено(СтрТ.НомерГТДСсылка) Тогда
|
||||
СсылкаГТД = СсылкаПоUUID(Справочники.НомераГТД, СтрТ.ГТДИдентификатор);
|
||||
Если ЗначениеЗаполнено(СсылкаГТД) И ОбщегоНазначения.СсылкаСуществует(СсылкаГТД) Тогда
|
||||
СтрТ.НомерГТДСсылка = СсылкаГТД;
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
|
||||
СтрТ.Сопоставлено = Истина;
|
||||
Если ПустаяСтрока(СтрТ.КомментарийСопоставления) Тогда
|
||||
СтрТ.КомментарийСопоставления = "OK";
|
||||
КонецЕсли;
|
||||
Результат.Сопоставлено = Результат.Сопоставлено + 1;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
Процедура ЗаполнитьСтрокуВходящихДанныхИзAPI(НовСтр, СтрокаAPI)
|
||||
|
||||
НовСтр.НоменклатураИдентификатор = UUIDИзСтроки(ЗначениеСвойства(СтрокаAPI, "nomenclature_guid", ""));
|
||||
НовСтр.НоменклатураНаименование = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "nomenclature_name", "")));
|
||||
НовСтр.НоменклатураКод = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "nomenclature_code", "")));
|
||||
НовСтр.Артикул = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "nomenclature_article", "")));
|
||||
|
||||
НовСтр.СкладИдентификатор = UUIDИзСтроки(ЗначениеСвойства(СтрокаAPI, "warehouse_guid", ""));
|
||||
НовСтр.СкладНаименование = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "warehouse_name", "")));
|
||||
|
||||
НовСтр.ЕдИзмИдентификатор = UUIDИзСтроки(ЗначениеСвойства(СтрокаAPI, "unit_guid", ""));
|
||||
НовСтр.ЕдИзм = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "unit_name", "")));
|
||||
Если ПустаяСтрока(НовСтр.ЕдИзм) Тогда
|
||||
НовСтр.ЕдИзм = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "unit_code", "")));
|
||||
КонецЕсли;
|
||||
|
||||
НовСтр.ХарактеристикаИдентификатор = UUIDИзСтроки(ЗначениеСвойства(СтрокаAPI, "characteristic_guid", ""));
|
||||
НовСтр.ХарактеристикаНаименование = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "characteristic_name", "")));
|
||||
|
||||
НовСтр.СерияИдентификатор = UUIDИзСтроки(ЗначениеСвойства(СтрокаAPI, "series_guid", ""));
|
||||
НовСтр.Серия = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "series_name", "")));
|
||||
|
||||
НовСтр.ГТДИдентификатор = UUIDИзСтроки(ЗначениеСвойства(СтрокаAPI, "gtd_guid", ""));
|
||||
НовСтр.ГТД = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "gtd_name", "")));
|
||||
|
||||
НовСтр.ОрганизацияИдентификатор = UUIDИзСтроки(ЗначениеСвойства(СтрокаAPI, "organization_guid", ""));
|
||||
НовСтр.ОрганизацияНаименование = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "organization_name", "")));
|
||||
|
||||
НовСтр.Количество = ЧислоИзЗначения(ЗначениеСвойства(СтрокаAPI, "qty_warehouse",
|
||||
ЗначениеСвойства(СтрокаAPI, "qty_org", 0)), 0);
|
||||
НовСтр.КоличествоКОтгрузке = ЧислоИзЗначения(ЗначениеСвойства(СтрокаAPI, "qty_to_ship", 0), 0);
|
||||
НовСтр.КоличествоОрганизации = ЧислоИзЗначения(ЗначениеСвойства(СтрокаAPI, "qty_org", 0), 0);
|
||||
|
||||
НовСтр.ВидНоменклатурыИдентификатор = UUIDИзСтроки(ЗначениеСвойства(СтрокаAPI, "policy_kind_guid", ""));
|
||||
НовСтр.ВидНоменклатурыНаименование = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "policy_kind_name", "")));
|
||||
НовСтр.ПолитикаСерии = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "policy_use_series", "")));
|
||||
НовСтр.ПолитикаХарактеристик = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "policy_use_characteristics", "")));
|
||||
|
||||
НовСтр.Сопоставлено = Ложь;
|
||||
НовСтр.КомментарийСопоставления = "";
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция НайтиНоменклатуруСтроки(СтрТ)
|
||||
|
||||
Ном = Справочники.Номенклатура.ПустаяСсылка();
|
||||
Арт = СокрЛП(СтрТ.Артикул);
|
||||
ИмяНом = СокрЛП(СтрТ.НоменклатураНаименование);
|
||||
КодНом = СокрЛП(СтрТ.НоменклатураКод);
|
||||
|
||||
Если ЗначениеЗаполнено(Арт) Тогда
|
||||
Ном = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", Арт);
|
||||
КонецЕсли;
|
||||
|
||||
Если Не ЗначениеЗаполнено(Ном) Тогда
|
||||
СсылкаПоГуид = СсылкаПоUUID(Справочники.Номенклатура, СтрТ.НоменклатураИдентификатор);
|
||||
Если ЗначениеЗаполнено(СсылкаПоГуид) И ОбщегоНазначения.СсылкаСуществует(СсылкаПоГуид) Тогда
|
||||
Ном = СсылкаПоГуид;
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
|
||||
Если Не ЗначениеЗаполнено(Ном) И ЗначениеЗаполнено(КодНом) Тогда
|
||||
Ном = Справочники.Номенклатура.НайтиПоКоду(КодНом);
|
||||
КонецЕсли;
|
||||
|
||||
Если Не ЗначениеЗаполнено(Ном) И ЗначениеЗаполнено(ИмяНом) Тогда
|
||||
Ном = Справочники.Номенклатура.НайтиПоНаименованию(ИмяНом, Истина);
|
||||
КонецЕсли;
|
||||
|
||||
Если ЗначениеЗаполнено(Ном) И ЗначениеЗаполнено(ИмяНом) Тогда
|
||||
Если СокрЛП(Ном.Наименование) <> ИмяНом Тогда
|
||||
СтрТ.КомментарийСопоставления = "Номенклатура не совпала по имени: " + ИмяНом + " → " + Ном.Наименование;
|
||||
Возврат Справочники.Номенклатура.ПустаяСсылка();
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Ном;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция НайтиСкладСтроки(СтрТ)
|
||||
|
||||
СкладЦель = СсылкаПоUUID(Справочники.Склады, СтрТ.СкладИдентификатор);
|
||||
Если ЗначениеЗаполнено(СкладЦель) И ОбщегоНазначения.СсылкаСуществует(СкладЦель) Тогда
|
||||
Возврат СкладЦель;
|
||||
КонецЕсли;
|
||||
|
||||
ИмяСкл = СокрЛП(СтрТ.СкладНаименование);
|
||||
Если ЗначениеЗаполнено(ИмяСкл) Тогда
|
||||
Возврат Справочники.Склады.НайтиПоНаименованию(ИмяСкл, Истина);
|
||||
КонецЕсли;
|
||||
Возврат Справочники.Склады.ПустаяСсылка();
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция НайтиИлиСоздатьХарактеристику(СтрТ, Ном, РежимТест, Результат)
|
||||
|
||||
Хар = Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка();
|
||||
ИмяХар = СокрЛП(СтрТ.ХарактеристикаНаименование);
|
||||
ВидНом = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ном, "ВидНоменклатуры");
|
||||
|
||||
ИспХар = Ложь;
|
||||
Попытка
|
||||
ИспХар = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ном, "ВидНоменклатуры.ИспользоватьХарактеристики") = Истина;
|
||||
Исключение
|
||||
Попытка
|
||||
ИспХар = ВидНом.ИспользоватьХарактеристики;
|
||||
Исключение
|
||||
КонецПопытки;
|
||||
КонецПопытки;
|
||||
|
||||
Если ЗначениеЗаполнено(ИмяХар) Тогда
|
||||
Хар = Справочники.ХарактеристикиНоменклатуры.НайтиПоНаименованию(ИмяХар, Истина, , Ном);
|
||||
Если Не ЗначениеЗаполнено(Хар) Тогда
|
||||
Хар = Справочники.ХарактеристикиНоменклатуры.НайтиПоНаименованию(ИмяХар, Истина, , ВидНом);
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
|
||||
Если Не ЗначениеЗаполнено(Хар) Тогда
|
||||
СсылкаПоГуид = СсылкаПоUUID(Справочники.ХарактеристикиНоменклатуры, СтрТ.ХарактеристикаИдентификатор);
|
||||
Если ЗначениеЗаполнено(СсылкаПоГуид) И ОбщегоНазначения.СсылкаСуществует(СсылкаПоГуид) Тогда
|
||||
ВладХар = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СсылкаПоГуид, "Владелец");
|
||||
Если ВладХар = Ном Или ВладХар = ВидНом Тогда
|
||||
Хар = СсылкаПоГуид;
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
|
||||
Если Не ЗначениеЗаполнено(Хар) И ИспХар И ЗначениеЗаполнено(ИмяХар) И Не РежимТест Тогда
|
||||
Попытка
|
||||
НовХар = Справочники.ХарактеристикиНоменклатуры.СоздатьЭлемент();
|
||||
НовХар.Владелец = ВидНом;
|
||||
НовХар.Наименование = ИмяХар;
|
||||
НовХар.Записать();
|
||||
Хар = НовХар.Ссылка;
|
||||
Результат.СозданоХарактеристик = Результат.СозданоХарактеристик + 1;
|
||||
Исключение
|
||||
СтрТ.КомментарийСопоставления = "Ошибка создания характеристики: " + ИмяХар;
|
||||
КонецПопытки;
|
||||
КонецЕсли;
|
||||
|
||||
Если Не ИспХар Тогда
|
||||
Хар = Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка();
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Хар;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция НайтиИлиСоздатьСерию(СтрТ, Ном, СкладЦель, СуффиксДатыСер, РежимТест,
|
||||
КэшТребуетсяСерия, КэшСерий, Результат)
|
||||
|
||||
Сер = Справочники.СерииНоменклатуры.ПустаяСсылка();
|
||||
ВидНом = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ном, "ВидНоменклатуры");
|
||||
|
||||
КлючТребСер = Строка(Ном.УникальныйИдентификатор());
|
||||
ТребуетсяСерия = КэшТребуетсяСерия.Получить(КлючТребСер);
|
||||
Если ТребуетсяСерия = Неопределено Тогда
|
||||
ТребуетсяСерия = Ложь;
|
||||
Попытка
|
||||
ТребуетсяСерия = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ном, "ВидНоменклатуры.ИспользоватьСерии") = Истина;
|
||||
Исключение
|
||||
Попытка
|
||||
ТребуетсяСерия = ВидНом.ИспользоватьСерии;
|
||||
Исключение
|
||||
КонецПопытки;
|
||||
КонецПопытки;
|
||||
КэшТребуетсяСерия.Вставить(КлючТребСер, ТребуетсяСерия);
|
||||
КонецЕсли;
|
||||
|
||||
ИмяСерии = СокрЛП(СтрТ.Серия);
|
||||
Если Не ЗначениеЗаполнено(ИмяСерии) И ТребуетсяСерия Тогда
|
||||
КодСклЗагл = "";
|
||||
Попытка
|
||||
КодСклЗагл = СокрЛП(Строка(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СкладЦель, "Код")));
|
||||
Исключение
|
||||
КодСклЗагл = "";
|
||||
КонецПопытки;
|
||||
Если ПустаяСтрока(КодСклЗагл) Тогда
|
||||
КодСклЗагл = Лев(СтрЗаменить(Строка(СкладЦель.УникальныйИдентификатор()), "-", ""), 8);
|
||||
КонецЕсли;
|
||||
ИмяСерии = "Перенос_" + КодСклЗагл + "_" + СуффиксДатыСер;
|
||||
СтрТ.Серия = ИмяСерии;
|
||||
КонецЕсли;
|
||||
|
||||
Если Не ТребуетсяСерия И Не ЗначениеЗаполнено(ИмяСерии) Тогда
|
||||
Возврат Сер;
|
||||
КонецЕсли;
|
||||
|
||||
СсылкаПоГуид = СсылкаПоUUID(Справочники.СерииНоменклатуры, СтрТ.СерияИдентификатор);
|
||||
Если ЗначениеЗаполнено(СсылкаПоГуид) И ОбщегоНазначения.СсылкаСуществует(СсылкаПоГуид) Тогда
|
||||
Возврат СсылкаПоГуид;
|
||||
КонецЕсли;
|
||||
|
||||
ВидСер = Неопределено;
|
||||
ИспНомерСерии = Истина;
|
||||
Попытка
|
||||
НастрСер = Справочники.ВидыНоменклатуры.НастройкиИспользованияСерий(ВидНом, СкладЦель);
|
||||
ВидСер = НастрСер.ВладелецСерий;
|
||||
ИспНомерСерии = НастрСер.ИспользоватьНомерСерии;
|
||||
Исключение
|
||||
ВидСер = ВидНом;
|
||||
КонецПопытки;
|
||||
Если Не ЗначениеЗаполнено(ВидСер) Тогда
|
||||
ВидСер = ВидНом;
|
||||
КонецЕсли;
|
||||
|
||||
КлючКэшСер = Строка(ВидСер.УникальныйИдентификатор()) + "|" + ИмяСерии;
|
||||
СерИзКэш = КэшСерий.Получить(КлючКэшСер);
|
||||
Если СерИзКэш <> Неопределено Тогда
|
||||
Возврат СерИзКэш;
|
||||
КонецЕсли;
|
||||
|
||||
Если ИспНомерСерии Тогда
|
||||
Сер = Справочники.СерииНоменклатуры.НайтиПоРеквизиту("Номер", ИмяСерии, , ВидСер);
|
||||
КонецЕсли;
|
||||
Если Не ЗначениеЗаполнено(Сер) Тогда
|
||||
Сер = Справочники.СерииНоменклатуры.НайтиПоНаименованию(ИмяСерии, Истина, , ВидСер);
|
||||
КонецЕсли;
|
||||
|
||||
Если Не ЗначениеЗаполнено(Сер) И Не РежимТест И (ТребуетсяСерия Или ЗначениеЗаполнено(ИмяСерии)) Тогда
|
||||
Попытка
|
||||
ОбСер = Справочники.СерииНоменклатуры.ПустойОбъект(ВидСер);
|
||||
Если ИспНомерСерии Тогда
|
||||
НомерСер = ИмяСерии;
|
||||
Если СтрНачинаетсяС(ИмяСерии, "Перенос_") Тогда
|
||||
НомерСер = Сред(ИмяСерии, СтрДлина("Перенос_") + 1);
|
||||
КонецЕсли;
|
||||
ОбСер.Номер = НомерСер;
|
||||
Иначе
|
||||
Попытка
|
||||
ОбСер.Наименование = ИмяСерии;
|
||||
Исключение
|
||||
КонецПопытки;
|
||||
КонецЕсли;
|
||||
ОбСер.Записать();
|
||||
Сер = ОбСер.Ссылка;
|
||||
Результат.СозданоСерий = Результат.СозданоСерий + 1;
|
||||
Исключение
|
||||
СтрТ.КомментарийСопоставления = "Ошибка создания серии: " + ИмяСерии;
|
||||
КонецПопытки;
|
||||
КонецЕсли;
|
||||
|
||||
Если ЗначениеЗаполнено(Сер) Тогда
|
||||
КэшСерий.Вставить(КлючКэшСер, Сер);
|
||||
ИначеЕсли ТребуетсяСерия Тогда
|
||||
Если ПустаяСтрока(СтрТ.КомментарийСопоставления) Или СтрТ.КомментарийСопоставления = "OK" Тогда
|
||||
СтрТ.КомментарийСопоставления = "Серия не найдена" + ?(РежимТест, " (тест)", "");
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Сер;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция СсылкаПоUUID(Менеджер, Идентификатор)
|
||||
|
||||
Если Не ЗначениеЗаполнено(Идентификатор) Тогда
|
||||
Возврат Менеджер.ПустаяСсылка();
|
||||
КонецЕсли;
|
||||
Попытка
|
||||
Возврат Менеджер.ПолучитьСсылку(Идентификатор);
|
||||
Исключение
|
||||
Возврат Менеджер.ПустаяСсылка();
|
||||
КонецПопытки;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция UUIDИзСтроки(Значение)
|
||||
|
||||
Текст = НРег(СокрЛП(Строка(Значение)));
|
||||
Если ПустаяСтрока(Текст) Или Текст = "00000000-0000-0000-0000-000000000000" Тогда
|
||||
Возврат Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000");
|
||||
КонецЕсли;
|
||||
Попытка
|
||||
Возврат Новый УникальныйИдентификатор(Текст);
|
||||
Исключение
|
||||
Возврат Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000");
|
||||
КонецПопытки;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ЗначениеСвойства(Источник, Имя, ПоУмолчанию)
|
||||
|
||||
Если Источник = Неопределено Тогда
|
||||
Возврат ПоУмолчанию;
|
||||
КонецЕсли;
|
||||
Если ТипЗнч(Источник) = Тип("Структура") Или ТипЗнч(Источник) = Тип("ФиксированнаяСтруктура") Тогда
|
||||
Если Источник.Свойство(Имя) Тогда
|
||||
Возврат Источник[Имя];
|
||||
КонецЕсли;
|
||||
Возврат ПоУмолчанию;
|
||||
КонецЕсли;
|
||||
Если ТипЗнч(Источник) = Тип("Соответствие") Или ТипЗнч(Источник) = Тип("ФиксированноеСоответствие") Тогда
|
||||
Значение = Источник.Получить(Имя);
|
||||
Если Значение = Неопределено Тогда
|
||||
Возврат ПоУмолчанию;
|
||||
КонецЕсли;
|
||||
Возврат Значение;
|
||||
КонецЕсли;
|
||||
Возврат ПоУмолчанию;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ЧислоИзЗначения(Значение, ПоУмолчанию)
|
||||
|
||||
Если Значение = Неопределено Или Значение = Null Тогда
|
||||
Возврат ПоУмолчанию;
|
||||
КонецЕсли;
|
||||
Попытка
|
||||
Возврат Число(Значение);
|
||||
Исключение
|
||||
Возврат ПоУмолчанию;
|
||||
КонецПопытки;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#КонецЕсли
|
||||
Reference in New Issue
Block a user