9cd242af48
Команда на форме: пары −/+ без/с серией и группы net≈0 перед сопоставлением. Co-authored-by: Cursor <cursoragent@cursor.com>
1332 lines
80 KiB
Plaintext
1332 lines
80 KiB
Plaintext
|
||
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
|
||
|
||
#Область ПрограммныйИнтерфейс
|
||
|
||
// Заполняет ТЧ ВходящиеСобственныеТовары строками остатков Transfer API (mode=combined по умолчанию).
|
||
//
|
||
Процедура ЗаполнитьВходящиеСобственныеТоварыИзОтветаОстатков(ОтветAPI, ОчищатьПередЗаполнением = Истина) Экспорт
|
||
|
||
Если ОчищатьПередЗаполнением Тогда
|
||
ВходящиеСобственныеТовары.Очистить();
|
||
КонецЕсли;
|
||
|
||
СтрокиОтвета = Неопределено;
|
||
Если ТипЗнч(ОтветAPI) = Тип("Структура") Или ТипЗнч(ОтветAPI) = Тип("Соответствие") Тогда
|
||
СтрокиОтвета = ЗначениеСвойства(ОтветAPI, "rows", Неопределено);
|
||
КонецЕсли;
|
||
Если ТипЗнч(СтрокиОтвета) <> Тип("Массив") Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
Для Каждого СтрокаAPI Из СтрокиОтвета Цикл
|
||
НовСтр = ВходящиеСобственныеТовары.Добавить();
|
||
ЗаполнитьСтрокуВходящихДанныхИзAPI(НовСтр, СтрокаAPI);
|
||
КонецЦикла;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Заполняет ТЧ ВходящиеКомиссионныеТовары остатками mode=commission (переданные 2.5).
|
||
//
|
||
Процедура ЗаполнитьВходящиеКомиссионныеТоварыИзОтветаОстатков(ОтветAPI, ОчищатьПередЗаполнением = Истина) Экспорт
|
||
|
||
Если ОчищатьПередЗаполнением Тогда
|
||
ВходящиеКомиссионныеТовары.Очистить();
|
||
КонецЕсли;
|
||
|
||
СтрокиОтвета = Неопределено;
|
||
Если ТипЗнч(ОтветAPI) = Тип("Структура") Или ТипЗнч(ОтветAPI) = Тип("Соответствие") Тогда
|
||
СтрокиОтвета = ЗначениеСвойства(ОтветAPI, "rows", Неопределено);
|
||
КонецЕсли;
|
||
Если ТипЗнч(СтрокиОтвета) <> Тип("Массив") Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
Для Каждого СтрокаAPI Из СтрокиОтвета Цикл
|
||
НовСтр = ВходящиеКомиссионныеТовары.Добавить();
|
||
ЗаполнитьСтрокуВходящихДанныхИзAPI(НовСтр, СтрокаAPI);
|
||
НовСтр.Количество = ЧислоИзЗначения(ЗначениеСвойства(СтрокаAPI, "qty_commission",
|
||
ЗначениеСвойства(СтрокаAPI, "qty_org", НовСтр.Количество)), 0);
|
||
НовСтр.КоличествоОрганизации = НовСтр.Количество;
|
||
НовСтр.СоглашениеИдентификатор = UUIDИзСтроки(ЗначениеСвойства(СтрокаAPI, "agreement_guid", ""));
|
||
НовСтр.СоглашениеНаименование = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "agreement_name", "")));
|
||
НовСтр.ПартнерИдентификатор = UUIDИзСтроки(ЗначениеСвойства(СтрокаAPI, "partner_guid", ""));
|
||
НовСтр.ПартнерНаименование = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "partner_name", "")));
|
||
НовСтр.КонтрагентИдентификатор = UUIDИзСтроки(ЗначениеСвойства(СтрокаAPI, "contractor_guid", ""));
|
||
НовСтр.КонтрагентНаименование = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "contractor_name", "")));
|
||
НовСтр.НазначениеИдентификатор = UUIDИзСтроки(ЗначениеСвойства(СтрокаAPI, "purpose_guid", ""));
|
||
НовСтр.Назначение = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "purpose_name", "")));
|
||
НовСтр.ВидЗапасовИдентификатор = UUIDИзСтроки(ЗначениеСвойства(СтрокаAPI, "inventory_kind_guid", ""));
|
||
НовСтр.ВидЗапасов = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "inventory_kind_name", "")));
|
||
НовСтр.ТипЗапасов = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "inventory_kind_type", "")));
|
||
КонецЦикла;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Заполняет ТЧ ПолитикаУчетаНоменклатуры ответом POST /v1/stock/nomenclature-policy.
|
||
//
|
||
Процедура ЗаполнитьПолитикуУчетаИзОтвета(ОтветAPI, ОчищатьПередЗаполнением = Истина) Экспорт
|
||
|
||
Если ОчищатьПередЗаполнением Тогда
|
||
ПолитикаУчетаНоменклатуры.Очистить();
|
||
КонецЕсли;
|
||
|
||
СтрокиОтвета = Неопределено;
|
||
Если ТипЗнч(ОтветAPI) = Тип("Структура") Или ТипЗнч(ОтветAPI) = Тип("Соответствие") Тогда
|
||
СтрокиОтвета = ЗначениеСвойства(ОтветAPI, "rows", Неопределено);
|
||
КонецЕсли;
|
||
Если ТипЗнч(СтрокиОтвета) <> Тип("Массив") Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
Для Каждого СтрокаAPI Из СтрокиОтвета Цикл
|
||
НовСтр = ПолитикаУчетаНоменклатуры.Добавить();
|
||
НовСтр.ВидНоменклатурыИдентификатор = UUIDИзСтроки(ЗначениеСвойства(СтрокаAPI, "kind_guid", ""));
|
||
НовСтр.ВидНоменклатурыНаименование = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "kind_name", "")));
|
||
НовСтр.ИспользоватьСерии = БулевоИзЗначения(ЗначениеСвойства(СтрокаAPI, "use_series", Ложь));
|
||
НовСтр.НастройкаИспользованияСерий = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "series_usage", "")));
|
||
НовСтр.ИспользоватьНомерСерии = БулевоИзЗначения(ЗначениеСвойства(СтрокаAPI, "use_series_number", Ложь));
|
||
НовСтр.ИспользоватьСрокГодностиСерии = БулевоИзЗначения(ЗначениеСвойства(СтрокаAPI, "use_series_expire", Ложь));
|
||
НовСтр.ТочностьУказанияСрокаГодностиСерии = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "series_expire_accuracy", "")));
|
||
НовСтр.ИспользоватьRFIDМеткиСерии = БулевоИзЗначения(ЗначениеСвойства(СтрокаAPI, "use_series_rfid", Ложь));
|
||
НовСтр.ИспользоватьХарактеристики = БулевоИзЗначения(ЗначениеСвойства(СтрокаAPI, "use_characteristics", Ложь));
|
||
НовСтр.ИспользованиеХарактеристик = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "characteristics_usage", "")));
|
||
НовСтр.ВестиУчетПоГТД = БулевоИзЗначения(ЗначениеСвойства(СтрокаAPI, "use_gtd", Ложь));
|
||
НовСтр.ВестиУчетСертификатовНоменклатуры = БулевоИзЗначения(ЗначениеСвойства(СтрокаAPI, "use_certificates", Ложь));
|
||
КонецЦикла;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Сопоставление строк ТЧ с НСИ целевой ИБ.
|
||
// Серии создаются только если не найдены; заглушки Перенос_* — только при СоздаватьЗаглушкиСерий.
|
||
//
|
||
// Параметры:
|
||
// РежимТест - Булево - Истина: только поиск, без создания серий/характеристик
|
||
//
|
||
// Возвращаемое значение:
|
||
// Структура - Сопоставлено, НеСопоставлено, СозданоСерий, СозданоХарактеристик
|
||
//
|
||
Функция СопоставитьВходящиеСобственныеТовары(РежимТест = Истина) Экспорт
|
||
|
||
Результат = Новый Структура;
|
||
Результат.Вставить("Сопоставлено", 0);
|
||
Результат.Вставить("НеСопоставлено", 0);
|
||
Результат.Вставить("СозданоСерий", 0);
|
||
Результат.Вставить("СозданоХарактеристик", 0);
|
||
|
||
СуффиксДатыСер = Формат(?(ЗначениеЗаполнено(ДатаДокументовВвода), ДатаДокументовВвода, ДатаОстатков), "ДФ=yyyyMMdd");
|
||
Если ПустаяСтрока(СуффиксДатыСер) Тогда
|
||
СуффиксДатыСер = Формат(ТекущаяДатаСеанса(), "ДФ=yyyyMMdd");
|
||
КонецЕсли;
|
||
|
||
КэшТребуетсяСерия = Новый Соответствие;
|
||
КэшСерий = Новый Соответствие;
|
||
|
||
Для Каждого СтрТ Из ВходящиеСобственныеТовары Цикл
|
||
|
||
СтрТ.Сопоставлено = Ложь;
|
||
СтрТ.КомментарийСопоставления = "";
|
||
СтрТ.Номенклатура = Справочники.Номенклатура.ПустаяСсылка();
|
||
СтрТ.Склад = Справочники.Склады.ПустаяСсылка();
|
||
СтрТ.Характеристика = Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка();
|
||
СтрТ.СерияСсылка = Справочники.СерииНоменклатуры.ПустаяСсылка();
|
||
СтрТ.НомерГТДСсылка = Справочники.НомераГТД.ПустаяСсылка();
|
||
|
||
Ном = НайтиНоменклатуруСтроки(СтрТ);
|
||
Если Не ЗначениеЗаполнено(Ном) Тогда
|
||
СтрТ.КомментарийСопоставления = "Номенклатура не найдена";
|
||
Результат.НеСопоставлено = Результат.НеСопоставлено + 1;
|
||
Продолжить;
|
||
КонецЕсли;
|
||
СтрТ.Номенклатура = Ном;
|
||
|
||
СкладЦель = НайтиСкладСтроки(СтрТ);
|
||
Если Не ЗначениеЗаполнено(СкладЦель) Тогда
|
||
СтрТ.КомментарийСопоставления = "Склад не найден";
|
||
Результат.НеСопоставлено = Результат.НеСопоставлено + 1;
|
||
Продолжить;
|
||
КонецЕсли;
|
||
СтрТ.Склад = СкладЦель;
|
||
|
||
Хар = НайтиИлиСоздатьХарактеристику(СтрТ, Ном, РежимТест, Результат);
|
||
СтрТ.Характеристика = Хар;
|
||
|
||
Если СтрТ.Количество <> 0 Тогда
|
||
Сер = НайтиИлиСоздатьСерию(СтрТ, Ном, СкладЦель, СуффиксДатыСер, РежимТест,
|
||
КэшТребуетсяСерия, КэшСерий, Результат);
|
||
СтрТ.СерияСсылка = Сер;
|
||
Если НоменклатураИспользуетСерии(Ном, КэшТребуетсяСерия) И Не ЗначениеЗаполнено(Сер) Тогда
|
||
Если ПустаяСтрока(СтрТ.КомментарийСопоставления) Или СтрТ.КомментарийСопоставления = "OK" Тогда
|
||
СтрТ.КомментарийСопоставления = "Серия не найдена"
|
||
+ ?(РежимТест, " (тест)", "")
|
||
+ ?(СоздаватьЗаглушкиСерий, "", "; заглушки выключены");
|
||
КонецЕсли;
|
||
Результат.НеСопоставлено = Результат.НеСопоставлено + 1;
|
||
Продолжить;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
ЗаполнитьНомерГТДСтроки(СтрТ);
|
||
|
||
СтрТ.Сопоставлено = Истина;
|
||
Если ПустаяСтрока(СтрТ.КомментарийСопоставления) Тогда
|
||
СтрТ.КомментарийСопоставления = "OK";
|
||
КонецЕсли;
|
||
Результат.Сопоставлено = Результат.Сопоставлено + 1;
|
||
|
||
КонецЦикла;
|
||
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
// Сопоставление комиссионных строк (переданные 2.5): соглашение, партнёр, контрагент, договор.
|
||
// Склад не обязателен. Серии и ГТД — как в документах волны 1.
|
||
//
|
||
Функция СопоставитьВходящиеКомиссионныеТовары(РежимТест = Истина) Экспорт
|
||
|
||
Результат = Новый Структура;
|
||
Результат.Вставить("Сопоставлено", 0);
|
||
Результат.Вставить("НеСопоставлено", 0);
|
||
Результат.Вставить("СозданоСерий", 0);
|
||
Результат.Вставить("СозданоХарактеристик", 0);
|
||
|
||
СуффиксДатыСер = Формат(?(ЗначениеЗаполнено(ДатаДокументовВвода), ДатаДокументовВвода, ДатаОстатков), "ДФ=yyyyMMdd");
|
||
Если ПустаяСтрока(СуффиксДатыСер) Тогда
|
||
СуффиксДатыСер = Формат(ТекущаяДатаСеанса(), "ДФ=yyyyMMdd");
|
||
КонецЕсли;
|
||
|
||
КэшТребуетсяСерия = Новый Соответствие;
|
||
КэшСерий = Новый Соответствие;
|
||
|
||
Для Каждого СтрТ Из ВходящиеКомиссионныеТовары Цикл
|
||
|
||
СтрТ.Сопоставлено = Ложь;
|
||
СтрТ.КомментарийСопоставления = "";
|
||
СтрТ.Номенклатура = Справочники.Номенклатура.ПустаяСсылка();
|
||
СтрТ.Склад = Справочники.Склады.ПустаяСсылка();
|
||
СтрТ.Характеристика = Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка();
|
||
СтрТ.СерияСсылка = Справочники.СерииНоменклатуры.ПустаяСсылка();
|
||
СтрТ.НомерГТДСсылка = Справочники.НомераГТД.ПустаяСсылка();
|
||
СтрТ.Соглашение = Справочники.СоглашенияСКлиентами.ПустаяСсылка();
|
||
СтрТ.Партнер = Справочники.Партнеры.ПустаяСсылка();
|
||
СтрТ.Контрагент = Справочники.Контрагенты.ПустаяСсылка();
|
||
СтрТ.Договор = Справочники.ДоговорыКонтрагентов.ПустаяСсылка();
|
||
|
||
Ном = НайтиНоменклатуруСтроки(СтрТ);
|
||
Если Не ЗначениеЗаполнено(Ном) Тогда
|
||
СтрТ.КомментарийСопоставления = "Номенклатура не найдена";
|
||
Результат.НеСопоставлено = Результат.НеСопоставлено + 1;
|
||
Продолжить;
|
||
КонецЕсли;
|
||
СтрТ.Номенклатура = Ном;
|
||
|
||
СкладЦель = НайтиСкладСтроки(СтрТ);
|
||
Если ЗначениеЗаполнено(СкладЦель) Тогда
|
||
СтрТ.Склад = СкладЦель;
|
||
КонецЕсли;
|
||
|
||
Согл = НайтиСоглашениеСтроки(СтрТ);
|
||
Если Не ЗначениеЗаполнено(Согл) Тогда
|
||
СтрТ.КомментарийСопоставления = "Соглашение не найдено";
|
||
Результат.НеСопоставлено = Результат.НеСопоставлено + 1;
|
||
Продолжить;
|
||
КонецЕсли;
|
||
СтрТ.Соглашение = Согл;
|
||
|
||
ЗаполнитьПартнераКонтрагентаДоговорСтроки(СтрТ, Согл);
|
||
Если Не ЗначениеЗаполнено(СтрТ.Партнер) Тогда
|
||
СтрТ.КомментарийСопоставления = "Партнер / комиссионер не найден";
|
||
Результат.НеСопоставлено = Результат.НеСопоставлено + 1;
|
||
Продолжить;
|
||
КонецЕсли;
|
||
|
||
Хар = НайтиИлиСоздатьХарактеристику(СтрТ, Ном, РежимТест, Результат);
|
||
СтрТ.Характеристика = Хар;
|
||
|
||
Сер = НайтиИлиСоздатьСерию(СтрТ, Ном, СтрТ.Склад, СуффиксДатыСер, РежимТест,
|
||
КэшТребуетсяСерия, КэшСерий, Результат);
|
||
СтрТ.СерияСсылка = Сер;
|
||
Если НоменклатураИспользуетСерии(Ном, КэшТребуетсяСерия) И Не ЗначениеЗаполнено(Сер) Тогда
|
||
Если ПустаяСтрока(СтрТ.КомментарийСопоставления) Или СтрТ.КомментарийСопоставления = "OK" Тогда
|
||
СтрТ.КомментарийСопоставления = "Серия не найдена"
|
||
+ ?(РежимТест, " (тест)", "")
|
||
+ ?(СоздаватьЗаглушкиСерий, "", "; заглушки выключены");
|
||
КонецЕсли;
|
||
Результат.НеСопоставлено = Результат.НеСопоставлено + 1;
|
||
Продолжить;
|
||
КонецЕсли;
|
||
|
||
ЗаполнитьНомерГТДСтроки(СтрТ);
|
||
|
||
СтрТ.Сопоставлено = Истина;
|
||
Если ПустаяСтрока(СтрТ.КомментарийСопоставления) Тогда
|
||
СтрТ.КомментарийСопоставления = "OK";
|
||
КонецЕсли;
|
||
Результат.Сопоставлено = Результат.Сопоставлено + 1;
|
||
|
||
КонецЦикла;
|
||
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
// Схлопывает строки ТЧ ВходящиеКомиссионныеТовары:
|
||
// 1) отрицательная без серии + положительная с серией (|qty| равны) — обе удаляются;
|
||
// 2) оставшиеся группы с net qty ≈ 0 — все строки группы удаляются.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Структура - БылоСтрок, СталоСтрок, УдаленоСтрок, УдаленоПар, УдаленоГруппNetZero
|
||
//
|
||
Функция СвернутьКомиссионныеОстатки() Экспорт
|
||
|
||
Результат = Новый Структура;
|
||
Результат.Вставить("БылоСтрок", ВходящиеКомиссионныеТовары.Количество());
|
||
Результат.Вставить("СталоСтрок", 0);
|
||
Результат.Вставить("УдаленоСтрок", 0);
|
||
Результат.Вставить("УдаленоПар", 0);
|
||
Результат.Вставить("УдаленоГруппNetZero", 0);
|
||
|
||
Если Результат.БылоСтрок = 0 Тогда
|
||
Возврат Результат;
|
||
КонецЕсли;
|
||
|
||
Удаляемые = Новый Соответствие;
|
||
|
||
Группы = Новый Соответствие;
|
||
Для Каждого СтрТ Из ВходящиеКомиссионныеТовары Цикл
|
||
Ключ = КлючАналитикиКомиссионнойСтроки(СтрТ);
|
||
СтрокиГруппы = Группы.Получить(Ключ);
|
||
Если СтрокиГруппы = Неопределено Тогда
|
||
СтрокиГруппы = Новый Массив;
|
||
Группы.Вставить(Ключ, СтрокиГруппы);
|
||
КонецЕсли;
|
||
СтрокиГруппы.Добавить(СтрТ);
|
||
КонецЦикла;
|
||
|
||
Для Каждого ЭлементГруппы Из Группы Цикл
|
||
СтрокиГруппы = ЭлементГруппы.Значение;
|
||
Помеченные = Новый Соответствие;
|
||
|
||
Отрицательные = Новый Массив;
|
||
ПоложительныеССерией = Новый Массив;
|
||
Для Каждого СтрТ Из СтрокиГруппы Цикл
|
||
Если Помеченные.Получить(СтрТ) <> Неопределено Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
Кол = СтрТ.Количество;
|
||
Если Кол < 0 И Не СерияЗаполненаВСтрокеКомиссии(СтрТ) Тогда
|
||
Отрицательные.Добавить(СтрТ);
|
||
ИначеЕсли Кол > 0 И СерияЗаполненаВСтрокеКомиссии(СтрТ) Тогда
|
||
ПоложительныеССерией.Добавить(СтрТ);
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
|
||
Для Каждого НегСтр Из Отрицательные Цикл
|
||
Если Помеченные.Получить(НегСтр) <> Неопределено Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
НужноеКол = -НегСтр.Количество;
|
||
Для Каждого ПозСтр Из ПоложительныеССерией Цикл
|
||
Если Помеченные.Получить(ПозСтр) <> Неопределено Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
Если ПозСтр.Количество = НужноеКол Тогда
|
||
Помеченные.Вставить(НегСтр, Истина);
|
||
Помеченные.Вставить(ПозСтр, Истина);
|
||
Результат.УдаленоПар = Результат.УдаленоПар + 1;
|
||
Прервать;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
КонецЦикла;
|
||
|
||
Остаток = Новый Массив;
|
||
СуммаКол = 0;
|
||
Для Каждого СтрТ Из СтрокиГруппы Цикл
|
||
Если Помеченные.Получить(СтрТ) <> Неопределено Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
Остаток.Добавить(СтрТ);
|
||
СуммаКол = СуммаКол + СтрТ.Количество;
|
||
КонецЦикла;
|
||
|
||
Если Остаток.Количество() > 1 И Abs(СуммаКол) < 0.000001 Тогда
|
||
Для Каждого СтрТ Из Остаток Цикл
|
||
Помеченные.Вставить(СтрТ, Истина);
|
||
КонецЦикла;
|
||
Результат.УдаленоГруппNetZero = Результат.УдаленоГруппNetZero + 1;
|
||
КонецЕсли;
|
||
|
||
Для Каждого ЭлементПометки Из Помеченные Цикл
|
||
Удаляемые.Вставить(ЭлементПометки.Ключ, Истина);
|
||
КонецЦикла;
|
||
КонецЦикла;
|
||
|
||
Для Инд = ВходящиеКомиссионныеТовары.Количество() - 1 По 0 Цикл
|
||
СтрТ = ВходящиеКомиссионныеТовары[Инд];
|
||
Если Удаляемые.Получить(СтрТ) <> Неопределено Тогда
|
||
ВходящиеКомиссионныеТовары.Удалить(Инд);
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
|
||
Результат.УдаленоСтрок = Удаляемые.Количество();
|
||
Результат.СталоСтрок = ВходящиеКомиссионныеТовары.Количество();
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
// Создание документов ВводОстатковТоваров по сопоставленным строкам.
|
||
// Собственные — 1 документ на склад; комиссия 2.5 — 1 документ на соглашение+партнёра (без склада).
|
||
// Количество в документе — финансовое (rh_), если не 0, иначе складское.
|
||
// Себестоимость — из rh_ (сумма USD, СуммаРегл). Серии и ГТД — у собственных и комиссии.
|
||
//
|
||
// Параметры:
|
||
// РежимТест - Булево - только подсчёт без записи
|
||
//
|
||
// Возвращаемое значение:
|
||
// Структура - СозданоДокументов, СозданоДокументовКомиссии, УдаленоДокументов,
|
||
// СтрокВДокументах, СтрокКомиссии, Пропущено, Ошибок, ТекстТега
|
||
//
|
||
Функция СоздатьДокументыВводаОстатков(РежимТест = Истина) Экспорт
|
||
|
||
Результат = Новый Структура;
|
||
Результат.Вставить("СозданоДокументов", 0);
|
||
Результат.Вставить("СозданоДокументовКомиссии", 0);
|
||
Результат.Вставить("УдаленоДокументов", 0);
|
||
Результат.Вставить("СтрокВДокументах", 0);
|
||
Результат.Вставить("СтрокКомиссии", 0);
|
||
Результат.Вставить("Пропущено", 0);
|
||
Результат.Вставить("Ошибок", 0);
|
||
Результат.Вставить("ТекстТега", "");
|
||
|
||
Если Не ЗначениеЗаполнено(Организация) Тогда
|
||
ВызватьИсключение "Укажите организацию для документов ввода остатков";
|
||
КонецЕсли;
|
||
Если Не ЗначениеЗаполнено(ДатаДокументовВвода) Тогда
|
||
ВызватьИсключение "Укажите дату документов ввода";
|
||
КонецЕсли;
|
||
|
||
ТекстТега = ТегКомментарияДокументов();
|
||
Результат.ТекстТега = ТекстТега;
|
||
|
||
СозданныеДокументы.Очистить();
|
||
|
||
СтрокиПоСкладу = СгруппироватьСопоставленныеСтрокиПоСкладу();
|
||
СтрокиКомиссии = СгруппироватьСопоставленныеСтрокиКомиссии();
|
||
|
||
Если ПерезаписатьДокументы И Не РежимТест
|
||
И (СтрокиПоСкладу.Количество() > 0 Или СтрокиКомиссии.Количество() > 0) Тогда
|
||
Результат.УдаленоДокументов = УдалитьПрежниеДокументыВолны(ТекстТега);
|
||
КонецЕсли;
|
||
|
||
Для Каждого ЭлементСклада Из СтрокиПоСкладу Цикл
|
||
|
||
СкладДок = ЭлементСклада.Ключ;
|
||
СтрокиСклада = ЭлементСклада.Значение;
|
||
Если СтрокиСклада.Количество() = 0 Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
|
||
Попытка
|
||
Если РежимТест Тогда
|
||
Результат.СозданоДокументов = Результат.СозданоДокументов + 1;
|
||
Результат.СтрокВДокументах = Результат.СтрокВДокументах + СтрокиСклада.Количество();
|
||
ДобавитьВСозданныеДокументы(Неопределено, "Собственные", СкладДок,
|
||
Неопределено, Неопределено, СтрокиСклада, ТекстТега + ", склад " + СокрЛП(Строка(СкладДок)), Истина);
|
||
Продолжить;
|
||
КонецЕсли;
|
||
|
||
Док = СоздатьДокументПоСкладу(СкладДок, СтрокиСклада, ТекстТега);
|
||
Если ЗначениеЗаполнено(Док) Тогда
|
||
Результат.СозданоДокументов = Результат.СозданоДокументов + 1;
|
||
Результат.СтрокВДокументах = Результат.СтрокВДокументах + Док.Товары.Количество();
|
||
Для Каждого СтрТ Из СтрокиСклада Цикл
|
||
СтрТ.ДокументВвода = Док.Ссылка;
|
||
СтрТ.ЗагруженоВДокумент = Истина;
|
||
КонецЦикла;
|
||
ДобавитьВСозданныеДокументы(Док.Ссылка, "Собственные", СкладДок,
|
||
Неопределено, Неопределено, СтрокиСклада, Док.Комментарий, Ложь);
|
||
КонецЕсли;
|
||
Исключение
|
||
Результат.Ошибок = Результат.Ошибок + 1;
|
||
КонецПопытки;
|
||
|
||
КонецЦикла;
|
||
|
||
Для Каждого ЭлементГруппы Из СтрокиКомиссии Цикл
|
||
|
||
СтрокиГруппы = ЭлементГруппы.Значение;
|
||
Если СтрокиГруппы.Количество() = 0 Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
|
||
Попытка
|
||
Если РежимТест Тогда
|
||
Результат.СозданоДокументовКомиссии = Результат.СозданоДокументовКомиссии + 1;
|
||
Результат.СтрокКомиссии = Результат.СтрокКомиссии + СтрокиГруппы.Количество();
|
||
Первая = СтрокиГруппы[0];
|
||
ДобавитьВСозданныеДокументы(Неопределено, "Комиссия 2.5", Неопределено,
|
||
Первая.Соглашение, Первая.Партнер, СтрокиГруппы,
|
||
ТекстТега + ", комиссия 2.5, " + СокрЛП(Строка(Первая.Партнер)), Истина);
|
||
Продолжить;
|
||
КонецЕсли;
|
||
|
||
Док = СоздатьДокументКомиссии(СтрокиГруппы, ТекстТега);
|
||
Если ЗначениеЗаполнено(Док) Тогда
|
||
Результат.СозданоДокументовКомиссии = Результат.СозданоДокументовКомиссии + 1;
|
||
Результат.СтрокКомиссии = Результат.СтрокКомиссии + Док.Товары.Количество();
|
||
Для Каждого СтрТ Из СтрокиГруппы Цикл
|
||
СтрТ.ДокументВвода = Док.Ссылка;
|
||
СтрТ.ЗагруженоВДокумент = Истина;
|
||
КонецЦикла;
|
||
ДобавитьВСозданныеДокументы(Док.Ссылка, "Комиссия 2.5", Неопределено,
|
||
Док.СоглашениеСКомиссионером, Док.Партнер, СтрокиГруппы, Док.Комментарий, Ложь);
|
||
КонецЕсли;
|
||
Исключение
|
||
Результат.Ошибок = Результат.Ошибок + 1;
|
||
КонецПопытки;
|
||
|
||
КонецЦикла;
|
||
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
#КонецОбласти
|
||
|
||
#Область СлужебныеПроцедурыИФункции
|
||
|
||
Процедура ДобавитьВСозданныеДокументы(ДокументСсылка, ВидОстатков, Склад, Соглашение, Партнер, СтрокиТоваров, Комментарий, ЭтоТест)
|
||
|
||
НовСтр = СозданныеДокументы.Добавить();
|
||
Если ЗначениеЗаполнено(ДокументСсылка) Тогда
|
||
НовСтр.Документ = ДокументСсылка;
|
||
КонецЕсли;
|
||
НовСтр.ВидОстатков = ВидОстатков;
|
||
Если ЗначениеЗаполнено(Склад) Тогда
|
||
НовСтр.Склад = Склад;
|
||
КонецЕсли;
|
||
Если ЗначениеЗаполнено(Соглашение) Тогда
|
||
НовСтр.Соглашение = Соглашение;
|
||
КонецЕсли;
|
||
Если ЗначениеЗаполнено(Партнер) Тогда
|
||
НовСтр.Партнер = Партнер;
|
||
КонецЕсли;
|
||
НовСтр.КоличествоСтрок = СтрокиТоваров.Количество();
|
||
Колво = 0;
|
||
Для Каждого СтрТ Из СтрокиТоваров Цикл
|
||
Колво = Колво + СтрТ.Количество;
|
||
КонецЦикла;
|
||
НовСтр.КоличествоТоваров = Колво;
|
||
НовСтр.Комментарий = Комментарий;
|
||
НовСтр.ЭтоТест = ЭтоТест;
|
||
|
||
КонецПроцедуры
|
||
|
||
Функция ТегКомментарияДокументов()
|
||
|
||
Суффикс = Формат(ДатаДокументовВвода, "ДФ=yyyyMMdd");
|
||
Если ПустаяСтрока(Суффикс) Тогда
|
||
Суффикс = Формат(ДатаОстатков, "ДФ=yyyyMMdd");
|
||
КонецЕсли;
|
||
Возврат "РК_ПереносОстатков " + Суффикс;
|
||
|
||
КонецФункции
|
||
|
||
Функция СгруппироватьСопоставленныеСтрокиПоСкладу()
|
||
|
||
Группы = Новый Соответствие;
|
||
Для Каждого СтрТ Из ВходящиеСобственныеТовары Цикл
|
||
Если Не СтрТ.Сопоставлено Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
Если Не ЗначениеЗаполнено(СтрТ.Склад) Или Не ЗначениеЗаполнено(СтрТ.Номенклатура) Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
Если СтрТ.Количество <= 0 Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
КлючСклада = Строка(СтрТ.Склад.УникальныйИдентификатор());
|
||
СтрокиСклада = Группы.Получить(КлючСклада);
|
||
Если СтрокиСклада = Неопределено Тогда
|
||
СтрокиСклада = Новый Массив;
|
||
Группы.Вставить(КлючСклада, СтрокиСклада);
|
||
КонецЕсли;
|
||
СтрокиСклада.Добавить(СтрТ);
|
||
КонецЦикла;
|
||
|
||
// Переключить ключи на ссылки складов для удобства обхода.
|
||
Результат = Новый Соответствие;
|
||
Для Каждого СтрТ Из ВходящиеСобственныеТовары Цикл
|
||
Если Не СтрТ.Сопоставлено Или Не ЗначениеЗаполнено(СтрТ.Склад) Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
КлючСклада = Строка(СтрТ.Склад.УникальныйИдентификатор());
|
||
СтрокиСклада = Группы.Получить(КлючСклада);
|
||
Если СтрокиСклада <> Неопределено И Результат.Получить(СтрТ.Склад) = Неопределено Тогда
|
||
Результат.Вставить(СтрТ.Склад, СтрокиСклада);
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция СгруппироватьСопоставленныеСтрокиКомиссии()
|
||
|
||
Группы = Новый Соответствие;
|
||
Для Каждого СтрТ Из ВходящиеКомиссионныеТовары Цикл
|
||
Если Не СтрТ.Сопоставлено Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
Если Не ЗначениеЗаполнено(СтрТ.Соглашение) Или Не ЗначениеЗаполнено(СтрТ.Номенклатура) Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
Если СтрТ.Количество <= 0 Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
КлючГруппы = Строка(СтрТ.Соглашение.УникальныйИдентификатор())
|
||
+ "|" + Строка(СтрТ.Партнер.УникальныйИдентификатор())
|
||
+ "|" + Строка(СтрТ.Договор.УникальныйИдентификатор());
|
||
СтрокиГруппы = Группы.Получить(КлючГруппы);
|
||
Если СтрокиГруппы = Неопределено Тогда
|
||
СтрокиГруппы = Новый Массив;
|
||
Группы.Вставить(КлючГруппы, СтрокиГруппы);
|
||
КонецЕсли;
|
||
СтрокиГруппы.Добавить(СтрТ);
|
||
КонецЦикла;
|
||
Возврат Группы;
|
||
|
||
КонецФункции
|
||
|
||
Функция УдалитьПрежниеДокументыВолны(ТекстТега)
|
||
|
||
Удалено = 0;
|
||
Запрос = Новый Запрос;
|
||
Запрос.Текст =
|
||
"ВЫБРАТЬ
|
||
| Ввод.Ссылка КАК Ссылка
|
||
|ИЗ
|
||
| Документ.ВводОстатковТоваров КАК Ввод
|
||
|ГДЕ
|
||
| НЕ Ввод.ПометкаУдаления
|
||
| И НЕ Ввод.Проведен
|
||
| И Ввод.Организация = &Организация
|
||
| И Ввод.Комментарий ПОДОБНО &Тег
|
||
| И Ввод.ХозяйственнаяОперация В (
|
||
| ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВводОстатковСобственныхТоваров),
|
||
| ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВводОстатковТоваровПереданныхНаКомиссию2_5))";
|
||
Запрос.УстановитьПараметр("Организация", Организация);
|
||
Запрос.УстановитьПараметр("Тег", "%" + ТекстТега + "%");
|
||
|
||
Выборка = Запрос.Выполнить().Выбрать();
|
||
Пока Выборка.Следующий() Цикл
|
||
Попытка
|
||
ДокОб = Выборка.Ссылка.ПолучитьОбъект();
|
||
ДокОб.Удалить();
|
||
Удалено = Удалено + 1;
|
||
Исключение
|
||
КонецПопытки;
|
||
КонецЦикла;
|
||
Возврат Удалено;
|
||
|
||
КонецФункции
|
||
|
||
Функция СоздатьДокументПоСкладу(СкладДок, СтрокиСклада, ТекстТега)
|
||
|
||
Док = Документы.ВводОстатковТоваров.СоздатьДокумент();
|
||
Док.Дата = ДатаДокументовВвода;
|
||
Док.Организация = Организация;
|
||
Док.Склад = СкладДок;
|
||
Док.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ВводОстатковСобственныхТоваров;
|
||
Док.Комментарий = ТекстТега + ", склад " + СокрЛП(Строка(СкладДок));
|
||
Док.ОтражатьВОперативномУчете = Истина;
|
||
Док.ОтражатьСебестоимость = ЕстьСтоимостьВСтроках(СтрокиСклада);
|
||
Док.ЦенаВключаетНДС = Ложь;
|
||
|
||
Попытка
|
||
Док.Подразделение = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СкладДок, "Подразделение");
|
||
Исключение
|
||
КонецПопытки;
|
||
|
||
Если Док.ОтражатьСебестоимость Тогда
|
||
Попытка
|
||
Док.Валюта = Константы.ВалютаУправленческогоУчета.Получить();
|
||
Исключение
|
||
Док.Валюта = Неопределено;
|
||
КонецПопытки;
|
||
КонецЕсли;
|
||
Если Не ЗначениеЗаполнено(Док.Валюта) Тогда
|
||
Попытка
|
||
Док.Валюта = ЗначениеНастроекПовтИсп.ВалютаРегламентированногоУчетаОрганизации(Организация);
|
||
Исключение
|
||
Док.Валюта = Константы.ВалютаРегламентированногоУчета.Получить();
|
||
КонецПопытки;
|
||
КонецЕсли;
|
||
|
||
Если Не ЗначениеЗаполнено(Док.НалогообложениеНДС) Тогда
|
||
Док.НалогообложениеНДС = Перечисления.ТипыНалогообложенияНДС.ПродажаОблагаетсяНДС;
|
||
КонецЕсли;
|
||
Попытка
|
||
ПараметрыНДС = Документы.ВводОстатковТоваров.ИнициализироватьПараметрыВидовДеятельностиНДС(Док);
|
||
УчетНДСУП.ЗаполнитьВидДеятельностиНДС(Док.ВидДеятельностиНДС, ПараметрыНДС);
|
||
Исключение
|
||
КонецПопытки;
|
||
|
||
Для Каждого СтрТ Из СтрокиСклада Цикл
|
||
ДобавитьСтрокуТоваровДокументаВвода(Док, СтрТ);
|
||
КонецЦикла;
|
||
|
||
Если Док.Товары.Количество() = 0 Тогда
|
||
Возврат Документы.ВводОстатковТоваров.ПустаяСсылка();
|
||
КонецЕсли;
|
||
|
||
ОбщегоНазначенияУТ.ЗаполнитьИдентификаторыДокумента(Док, "Товары");
|
||
Попытка
|
||
ПараметрыУказанияСерий = НоменклатураСервер.ПараметрыУказанияСерий(Док, Документы.ВводОстатковТоваров);
|
||
НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(Док, ПараметрыУказанияСерий);
|
||
Исключение
|
||
КонецПопытки;
|
||
|
||
Док.ОбменДанными.Загрузка = Ложь;
|
||
Док.Записать(РежимЗаписиДокумента.Запись);
|
||
Возврат Док;
|
||
|
||
КонецФункции
|
||
|
||
Функция СоздатьДокументКомиссии(СтрокиГруппы, ТекстТега)
|
||
|
||
Первая = СтрокиГруппы[0];
|
||
Док = Документы.ВводОстатковТоваров.СоздатьДокумент();
|
||
Док.Дата = ДатаДокументовВвода;
|
||
Док.Организация = Организация;
|
||
Док.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ВводОстатковТоваровПереданныхНаКомиссию2_5;
|
||
Док.СоглашениеСКомиссионером = Первая.Соглашение;
|
||
Док.Партнер = Первая.Партнер;
|
||
Док.Контрагент = Первая.Контрагент;
|
||
Док.Договор = Первая.Договор;
|
||
Док.Комментарий = ТекстТега + ", комиссия 2.5, " + СокрЛП(Строка(Первая.Партнер));
|
||
Док.ОтражатьВОперативномУчете = Истина;
|
||
Док.ОтражатьСебестоимость = ЕстьСтоимостьВСтроках(СтрокиГруппы);
|
||
Док.ЦенаВключаетНДС = Ложь;
|
||
|
||
Если Док.ОтражатьСебестоимость Тогда
|
||
Попытка
|
||
Док.Валюта = Константы.ВалютаУправленческогоУчета.Получить();
|
||
Исключение
|
||
Док.Валюта = Неопределено;
|
||
КонецПопытки;
|
||
КонецЕсли;
|
||
Если Не ЗначениеЗаполнено(Док.Валюта) Тогда
|
||
Попытка
|
||
Док.Валюта = ЗначениеНастроекПовтИсп.ВалютаРегламентированногоУчетаОрганизации(Организация);
|
||
Исключение
|
||
Док.Валюта = Константы.ВалютаРегламентированногоУчета.Получить();
|
||
КонецПопытки;
|
||
КонецЕсли;
|
||
|
||
Если Не ЗначениеЗаполнено(Док.НалогообложениеНДС) Тогда
|
||
Док.НалогообложениеНДС = Перечисления.ТипыНалогообложенияНДС.ПродажаОблагаетсяНДС;
|
||
КонецЕсли;
|
||
Попытка
|
||
ПараметрыНДС = Документы.ВводОстатковТоваров.ИнициализироватьПараметрыВидовДеятельностиНДС(Док);
|
||
УчетНДСУП.ЗаполнитьВидДеятельностиНДС(Док.ВидДеятельностиНДС, ПараметрыНДС);
|
||
Исключение
|
||
КонецПопытки;
|
||
|
||
Для Каждого СтрТ Из СтрокиГруппы Цикл
|
||
ДобавитьСтрокуТоваровДокументаВвода(Док, СтрТ);
|
||
КонецЦикла;
|
||
|
||
Если Док.Товары.Количество() = 0 Тогда
|
||
Возврат Документы.ВводОстатковТоваров.ПустаяСсылка();
|
||
КонецЕсли;
|
||
|
||
ОбщегоНазначенияУТ.ЗаполнитьИдентификаторыДокумента(Док, "Товары");
|
||
Попытка
|
||
ПараметрыУказанияСерий = НоменклатураСервер.ПараметрыУказанияСерий(Док, Документы.ВводОстатковТоваров);
|
||
НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(Док, ПараметрыУказанияСерий);
|
||
Исключение
|
||
КонецПопытки;
|
||
|
||
Док.ОбменДанными.Загрузка = Ложь;
|
||
Док.Записать(РежимЗаписиДокумента.Запись);
|
||
Возврат Док;
|
||
|
||
КонецФункции
|
||
|
||
Процедура ДобавитьСтрокуТоваровДокументаВвода(Док, СтрТ)
|
||
|
||
КолДок = СтрТ.КоличествоОрганизации;
|
||
Если КолДок = 0 Тогда
|
||
КолДок = СтрТ.Количество;
|
||
КонецЕсли;
|
||
Если КолДок = 0 Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
НовСтр = Док.Товары.Добавить();
|
||
НовСтр.Номенклатура = СтрТ.Номенклатура;
|
||
НовСтр.Характеристика = СтрТ.Характеристика;
|
||
НовСтр.Серия = СтрТ.СерияСсылка;
|
||
НовСтр.Количество = КолДок;
|
||
НовСтр.КоличествоУпаковок = КолДок;
|
||
НовСтр.Сумма = СтрТ.Стоимость;
|
||
Если КолДок <> 0 И СтрТ.Стоимость <> 0 Тогда
|
||
НовСтр.Цена = Окр(СтрТ.Стоимость / КолДок, 2);
|
||
Иначе
|
||
НовСтр.Цена = 0;
|
||
КонецЕсли;
|
||
Попытка
|
||
НовСтр.СуммаРегл = СтрТ.СтоимостьРегл;
|
||
Исключение
|
||
КонецПопытки;
|
||
Попытка
|
||
НовСтр.СтавкаНДС = СтрТ.Номенклатура.СтавкаНДС;
|
||
Исключение
|
||
КонецПопытки;
|
||
Если ЗначениеЗаполнено(СтрТ.НомерГТДСсылка) Тогда
|
||
НовСтр.НомерГТД = СтрТ.НомерГТДСсылка;
|
||
КонецЕсли;
|
||
Если ЗначениеЗаполнено(СтрТ.СерияСсылка) Тогда
|
||
СтрСер = Док.Серии.Добавить();
|
||
СтрСер.Номенклатура = НовСтр.Номенклатура;
|
||
СтрСер.Характеристика = НовСтр.Характеристика;
|
||
СтрСер.Серия = СтрТ.СерияСсылка;
|
||
СтрСер.Количество = НовСтр.Количество;
|
||
СтрСер.КоличествоУпаковок = НовСтр.Количество;
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
Функция ЕстьСтоимостьВСтроках(Строки)
|
||
|
||
Для Каждого СтрТ Из Строки Цикл
|
||
Если СтрТ.Стоимость <> 0 Или СтрТ.СтоимостьРегл <> 0 Тогда
|
||
Возврат Истина;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
Возврат Ложь;
|
||
|
||
КонецФункции
|
||
|
||
Процедура ЗаполнитьСтрокуВходящихДанныхИз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", "")));
|
||
НовСтр.СерияНомер = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "series_number", "")));
|
||
Если ПустаяСтрока(НовСтр.Серия) И Не ПустаяСтрока(НовСтр.СерияНомер) Тогда
|
||
НовСтр.Серия = НовСтр.СерияНомер;
|
||
КонецЕсли;
|
||
|
||
НовСтр.ГТДИдентификатор = UUIDИзСтроки(ЗначениеСвойства(СтрокаAPI, "gtd_guid", ""));
|
||
ГТДТекст = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "gtd_name", "")));
|
||
Если ПустаяСтрока(ГТДТекст) Тогда
|
||
ГТДТекст = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "gtd_code", "")));
|
||
КонецЕсли;
|
||
Если ПустаяСтрока(ГТДТекст) Тогда
|
||
ГТДТекст = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "gtd_number", "")));
|
||
КонецЕсли;
|
||
НовСтр.ГТД = ГТДТекст;
|
||
|
||
НовСтр.ОрганизацияИдентификатор = UUIDИзСтроки(ЗначениеСвойства(СтрокаAPI, "organization_guid", ""));
|
||
НовСтр.ОрганизацияНаименование = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "organization_name", "")));
|
||
|
||
КолСклад = ЧислоИзЗначения(ЗначениеСвойства(СтрокаAPI, "qty_warehouse", 0), 0);
|
||
КолФин = ЧислоИзЗначения(ЗначениеСвойства(СтрокаAPI, "qty_financial",
|
||
ЗначениеСвойства(СтрокаAPI, "qty_org", 0)), 0);
|
||
НовСтр.Количество = КолСклад;
|
||
НовСтр.КоличествоОрганизации = КолФин;
|
||
НовСтр.КоличествоКОтгрузке = ЧислоИзЗначения(ЗначениеСвойства(СтрокаAPI, "qty_to_ship", 0), 0);
|
||
|
||
НовСтр.Стоимость = ЧислоИзЗначения(ЗначениеСвойства(СтрокаAPI, "cost_mgmt", 0), 0);
|
||
НовСтр.СтоимостьРегл = ЧислоИзЗначения(ЗначениеСвойства(СтрокаAPI, "cost_regl", 0), 0);
|
||
НовСтр.Валюта = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "currency_mgmt", "")));
|
||
НовСтр.ВалютаРегл = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "currency_regl", "")));
|
||
|
||
ВидGUID = ЗначениеСвойства(СтрокаAPI, "kind_guid", ЗначениеСвойства(СтрокаAPI, "policy_kind_guid", ""));
|
||
ВидИмя = ЗначениеСвойства(СтрокаAPI, "kind_name", ЗначениеСвойства(СтрокаAPI, "policy_kind_name", ""));
|
||
НовСтр.ВидНоменклатурыИдентификатор = UUIDИзСтроки(ВидGUID);
|
||
НовСтр.ВидНоменклатурыНаименование = СокрЛП(Строка(ВидИмя));
|
||
НовСтр.ра_ВидНоменклатурыCRM326 = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "kind_crm326_name", "")));
|
||
НовСтр.ПолитикаСерии = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "policy_use_series", "")));
|
||
НовСтр.ПолитикаХарактеристик = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "policy_use_characteristics", "")));
|
||
|
||
НовСтр.Сопоставлено = Ложь;
|
||
НовСтр.КомментарийСопоставления = "";
|
||
|
||
КонецПроцедуры
|
||
|
||
Функция НайтиНоменклатуруСтроки(СтрТ)
|
||
|
||
Ном = Справочники.Номенклатура.ПустаяСсылка();
|
||
Арт = СокрЛП(СтрТ.Артикул);
|
||
ИмяНом = СокрЛП(СтрТ.НоменклатураНаименование);
|
||
КодНом = СокрЛП(СтрТ.НоменклатураКод);
|
||
|
||
Если ЗначениеЗаполнено(Арт) Тогда
|
||
Ном = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", Арт);
|
||
КонецЕсли;
|
||
|
||
Если Не ЗначениеЗаполнено(Ном) Тогда
|
||
СсылкаПоГуид = СсылкаПоUUID(Справочники.Номенклатура, СтрТ.НоменклатураИдентификатор);
|
||
Если ЗначениеЗаполнено(СсылкаПоГуид) И ОбщегоНазначения.СсылкаСуществует(СсылкаПоГуид) Тогда
|
||
Ном = СсылкаПоГуид;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Если Не ЗначениеЗаполнено(Ном) И ЗначениеЗаполнено(КодНом) Тогда
|
||
Ном = Справочники.Номенклатура.НайтиПоКоду(КодНом);
|
||
КонецЕсли;
|
||
|
||
Если Не ЗначениеЗаполнено(Ном) И ЗначениеЗаполнено(ИмяНом) Тогда
|
||
Ном = Справочники.Номенклатура.НайтиПоНаименованию(ИмяНом, Истина);
|
||
КонецЕсли;
|
||
|
||
Если ЗначениеЗаполнено(Ном) И ЗначениеЗаполнено(ИмяНом) Тогда
|
||
Если СокрЛП(Ном.Наименование) <> ИмяНом Тогда
|
||
СтрТ.КомментарийСопоставления = "Номенклатура не совпала по имени: " + ИмяНом + " → " + Ном.Наименование;
|
||
Возврат Справочники.Номенклатура.ПустаяСсылка();
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Возврат Ном;
|
||
|
||
КонецФункции
|
||
|
||
Функция НайтиСкладСтроки(СтрТ)
|
||
|
||
СкладЦель = СсылкаПоUUID(Справочники.Склады, СтрТ.СкладИдентификатор);
|
||
Если ЗначениеЗаполнено(СкладЦель) И ОбщегоНазначения.СсылкаСуществует(СкладЦель) Тогда
|
||
Возврат СкладЦель;
|
||
КонецЕсли;
|
||
|
||
ИмяСкл = СокрЛП(СтрТ.СкладНаименование);
|
||
Если ЗначениеЗаполнено(ИмяСкл) Тогда
|
||
Возврат Справочники.Склады.НайтиПоНаименованию(ИмяСкл, Истина);
|
||
КонецЕсли;
|
||
Возврат Справочники.Склады.ПустаяСсылка();
|
||
|
||
КонецФункции
|
||
|
||
Функция НайтиИлиСоздатьХарактеристику(СтрТ, Ном, РежимТест, Результат)
|
||
|
||
Хар = Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка();
|
||
ИмяХар = СокрЛП(СтрТ.ХарактеристикаНаименование);
|
||
ВидНом = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ном, "ВидНоменклатуры");
|
||
|
||
ИспХар = Ложь;
|
||
Попытка
|
||
ИспХар = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ном, "ВидНоменклатуры.ИспользоватьХарактеристики") = Истина;
|
||
Исключение
|
||
Попытка
|
||
ИспХар = ВидНом.ИспользоватьХарактеристики;
|
||
Исключение
|
||
КонецПопытки;
|
||
КонецПопытки;
|
||
|
||
Если ЗначениеЗаполнено(ИмяХар) Тогда
|
||
Хар = Справочники.ХарактеристикиНоменклатуры.НайтиПоНаименованию(ИмяХар, Истина, , Ном);
|
||
Если Не ЗначениеЗаполнено(Хар) Тогда
|
||
Хар = Справочники.ХарактеристикиНоменклатуры.НайтиПоНаименованию(ИмяХар, Истина, , ВидНом);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Если Не ЗначениеЗаполнено(Хар) Тогда
|
||
СсылкаПоГуид = СсылкаПоUUID(Справочники.ХарактеристикиНоменклатуры, СтрТ.ХарактеристикаИдентификатор);
|
||
Если ЗначениеЗаполнено(СсылкаПоГуид) И ОбщегоНазначения.СсылкаСуществует(СсылкаПоГуид) Тогда
|
||
ВладХар = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СсылкаПоГуид, "Владелец");
|
||
Если ВладХар = Ном Или ВладХар = ВидНом Тогда
|
||
Хар = СсылкаПоГуид;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Если Не ЗначениеЗаполнено(Хар) И ИспХар И ЗначениеЗаполнено(ИмяХар) И Не РежимТест Тогда
|
||
Попытка
|
||
НовХар = Справочники.ХарактеристикиНоменклатуры.СоздатьЭлемент();
|
||
НовХар.Владелец = ВидНом;
|
||
НовХар.Наименование = ИмяХар;
|
||
НовХар.Записать();
|
||
Хар = НовХар.Ссылка;
|
||
Результат.СозданоХарактеристик = Результат.СозданоХарактеристик + 1;
|
||
Исключение
|
||
СтрТ.КомментарийСопоставления = "Ошибка создания характеристики: " + ИмяХар;
|
||
КонецПопытки;
|
||
КонецЕсли;
|
||
|
||
Если Не ИспХар Тогда
|
||
Хар = Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка();
|
||
КонецЕсли;
|
||
|
||
Возврат Хар;
|
||
|
||
КонецФункции
|
||
|
||
Функция НоменклатураИспользуетСерии(Ном, КэшТребуетсяСерия)
|
||
|
||
КлючТребСер = Строка(Ном.УникальныйИдентификатор());
|
||
ТребуетсяСерия = КэшТребуетсяСерия.Получить(КлючТребСер);
|
||
Если ТребуетсяСерия <> Неопределено Тогда
|
||
Возврат ТребуетсяСерия;
|
||
КонецЕсли;
|
||
ТребуетсяСерия = Ложь;
|
||
Попытка
|
||
ТребуетсяСерия = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ном, "ВидНоменклатуры.ИспользоватьСерии") = Истина;
|
||
Исключение
|
||
Попытка
|
||
ТребуетсяСерия = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ном, "ВидНоменклатуры").ИспользоватьСерии;
|
||
Исключение
|
||
КонецПопытки;
|
||
КонецПопытки;
|
||
КэшТребуетсяСерия.Вставить(КлючТребСер, ТребуетсяСерия);
|
||
Возврат ТребуетсяСерия;
|
||
|
||
КонецФункции
|
||
|
||
Процедура ЗаполнитьНомерГТДСтроки(СтрТ)
|
||
|
||
Если Не ЗначениеЗаполнено(СтрТ.ГТД) Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
КодГТД = СокрЛП(СтрТ.ГТД);
|
||
СтрТ.НомерГТДСсылка = Справочники.НомераГТД.НайтиПоКоду(КодГТД);
|
||
Если Не ЗначениеЗаполнено(СтрТ.НомерГТДСсылка) Тогда
|
||
СтрТ.НомерГТДСсылка = Справочники.НомераГТД.НайтиПоРеквизиту("РегистрационныйНомер", КодГТД);
|
||
КонецЕсли;
|
||
Если Не ЗначениеЗаполнено(СтрТ.НомерГТДСсылка) Тогда
|
||
СтрТ.НомерГТДСсылка = Справочники.НомераГТД.НайтиПоНаименованию(КодГТД, Истина);
|
||
КонецЕсли;
|
||
Если Не ЗначениеЗаполнено(СтрТ.НомерГТДСсылка) Тогда
|
||
СсылкаГТД = СсылкаПоUUID(Справочники.НомераГТД, СтрТ.ГТДИдентификатор);
|
||
Если ЗначениеЗаполнено(СсылкаГТД) И ОбщегоНазначения.СсылкаСуществует(СсылкаГТД) Тогда
|
||
СтрТ.НомерГТДСсылка = СсылкаГТД;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
Функция НайтиСоглашениеСтроки(СтрТ)
|
||
|
||
Согл = СсылкаПоUUID(Справочники.СоглашенияСКлиентами, СтрТ.СоглашениеИдентификатор);
|
||
Если ЗначениеЗаполнено(Согл) И ОбщегоНазначения.СсылкаСуществует(Согл) Тогда
|
||
Возврат Согл;
|
||
КонецЕсли;
|
||
ИмяСогл = СокрЛП(СтрТ.СоглашениеНаименование);
|
||
Если ЗначениеЗаполнено(ИмяСогл) Тогда
|
||
Возврат Справочники.СоглашенияСКлиентами.НайтиПоНаименованию(ИмяСогл, Истина);
|
||
КонецЕсли;
|
||
Возврат Справочники.СоглашенияСКлиентами.ПустаяСсылка();
|
||
|
||
КонецФункции
|
||
|
||
Процедура ЗаполнитьПартнераКонтрагентаДоговорСтроки(СтрТ, Соглашение)
|
||
|
||
Партнер = СсылкаПоUUID(Справочники.Партнеры, СтрТ.ПартнерИдентификатор);
|
||
Если Не (ЗначениеЗаполнено(Партнер) И ОбщегоНазначения.СсылкаСуществует(Партнер)) Тогда
|
||
Партнер = Справочники.Партнеры.ПустаяСсылка();
|
||
ИмяПарт = СокрЛП(СтрТ.ПартнерНаименование);
|
||
Если ЗначениеЗаполнено(ИмяПарт) Тогда
|
||
Партнер = Справочники.Партнеры.НайтиПоНаименованию(ИмяПарт, Истина);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Если Не ЗначениеЗаполнено(Партнер) И ЗначениеЗаполнено(Соглашение) Тогда
|
||
Попытка
|
||
Партнер = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Соглашение, "Партнер");
|
||
Исключение
|
||
КонецПопытки;
|
||
КонецЕсли;
|
||
СтрТ.Партнер = Партнер;
|
||
|
||
Контр = СсылкаПоUUID(Справочники.Контрагенты, СтрТ.КонтрагентИдентификатор);
|
||
Если Не (ЗначениеЗаполнено(Контр) И ОбщегоНазначения.СсылкаСуществует(Контр)) Тогда
|
||
Контр = Справочники.Контрагенты.ПустаяСсылка();
|
||
ИмяКонтр = СокрЛП(СтрТ.КонтрагентНаименование);
|
||
Если ЗначениеЗаполнено(ИмяКонтр) Тогда
|
||
Контр = Справочники.Контрагенты.НайтиПоНаименованию(ИмяКонтр, Истина);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Если Не ЗначениеЗаполнено(Контр) И ЗначениеЗаполнено(Соглашение) Тогда
|
||
Попытка
|
||
Контр = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Соглашение, "Контрагент");
|
||
Исключение
|
||
КонецПопытки;
|
||
КонецЕсли;
|
||
Если Не ЗначениеЗаполнено(Контр) И ЗначениеЗаполнено(Партнер) Тогда
|
||
Попытка
|
||
Контр = ПартнерыИКонтрагенты.ПолучитьКонтрагентаПартнераПоУмолчанию(Партнер);
|
||
Исключение
|
||
КонецПопытки;
|
||
КонецЕсли;
|
||
Если Не ЗначениеЗаполнено(Контр) И ЗначениеЗаполнено(Партнер) Тогда
|
||
ЗапросК = Новый Запрос(
|
||
"ВЫБРАТЬ ПЕРВЫЕ 1
|
||
| К.Ссылка КАК Ссылка
|
||
|ИЗ
|
||
| Справочник.Контрагенты КАК К
|
||
|ГДЕ
|
||
| К.Партнер = &Партнер
|
||
| И НЕ К.ПометкаУдаления");
|
||
ЗапросК.УстановитьПараметр("Партнер", Партнер);
|
||
ВыбК = ЗапросК.Выполнить().Выбрать();
|
||
Если ВыбК.Следующий() Тогда
|
||
Контр = ВыбК.Ссылка;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
СтрТ.Контрагент = Контр;
|
||
|
||
Договор = СсылкаПоUUID(Справочники.ДоговорыКонтрагентов, СтрТ.ДоговорИдентификатор);
|
||
Если Не (ЗначениеЗаполнено(Договор) И ОбщегоНазначения.СсылкаСуществует(Договор)) Тогда
|
||
Договор = Справочники.ДоговорыКонтрагентов.ПустаяСсылка();
|
||
ИмяДог = СокрЛП(СтрТ.ДоговорНаименование);
|
||
Если ЗначениеЗаполнено(ИмяДог) Тогда
|
||
Договор = Справочники.ДоговорыКонтрагентов.НайтиПоНаименованию(ИмяДог, Истина);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Если Не ЗначениеЗаполнено(Договор) И ЗначениеЗаполнено(Соглашение) Тогда
|
||
Попытка
|
||
Договор = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Соглашение, "Договор");
|
||
Исключение
|
||
КонецПопытки;
|
||
КонецЕсли;
|
||
СтрТ.Договор = Договор;
|
||
|
||
КонецПроцедуры
|
||
|
||
Функция НайтиИлиСоздатьСерию(СтрТ, Ном, СкладЦель, СуффиксДатыСер, РежимТест,
|
||
КэшТребуетсяСерия, КэшСерий, Результат)
|
||
|
||
Сер = Справочники.СерииНоменклатуры.ПустаяСсылка();
|
||
ВидНом = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ном, "ВидНоменклатуры");
|
||
ТребуетсяСерия = НоменклатураИспользуетСерии(Ном, КэшТребуетсяСерия);
|
||
|
||
ИмяСерии = СокрЛП(СтрТ.Серия);
|
||
НомерСерии = СокрЛП(СтрТ.СерияНомер);
|
||
ЭтоЗаглушка = Ложь;
|
||
|
||
Если Не ЗначениеЗаполнено(ИмяСерии) И Не ЗначениеЗаполнено(НомерСерии) Тогда
|
||
Если Не ТребуетсяСерия Тогда
|
||
Возврат Сер;
|
||
КонецЕсли;
|
||
Если Не СоздаватьЗаглушкиСерий Тогда
|
||
СтрТ.КомментарийСопоставления = "Серия обязательна, в источнике пустая (заглушки выключены)";
|
||
Возврат Сер;
|
||
КонецЕсли;
|
||
КодСклЗагл = "КОМ";
|
||
Если ЗначениеЗаполнено(СкладЦель) Тогда
|
||
Попытка
|
||
КодСклЗагл = СокрЛП(Строка(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СкладЦель, "Код")));
|
||
Исключение
|
||
КодСклЗагл = "";
|
||
КонецПопытки;
|
||
Если ПустаяСтрока(КодСклЗагл) Тогда
|
||
КодСклЗагл = Лев(СтрЗаменить(Строка(СкладЦель.УникальныйИдентификатор()), "-", ""), 8);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
ИмяСерии = "Перенос_" + КодСклЗагл + "_" + СуффиксДатыСер;
|
||
СтрТ.Серия = ИмяСерии;
|
||
ЭтоЗаглушка = Истина;
|
||
КонецЕсли;
|
||
|
||
СсылкаПоГуид = СсылкаПоUUID(Справочники.СерииНоменклатуры, СтрТ.СерияИдентификатор);
|
||
Если ЗначениеЗаполнено(СсылкаПоГуид) И ОбщегоНазначения.СсылкаСуществует(СсылкаПоГуид) Тогда
|
||
Возврат СсылкаПоГуид;
|
||
КонецЕсли;
|
||
|
||
ВидСер = Неопределено;
|
||
ИспНомерСерии = Истина;
|
||
Попытка
|
||
НастрСер = Справочники.ВидыНоменклатуры.НастройкиИспользованияСерий(ВидНом, СкладЦель);
|
||
ВидСер = НастрСер.ВладелецСерий;
|
||
ИспНомерСерии = НастрСер.ИспользоватьНомерСерии;
|
||
Исключение
|
||
ВидСер = ВидНом;
|
||
КонецПопытки;
|
||
Если Не ЗначениеЗаполнено(ВидСер) Тогда
|
||
ВидСер = ВидНом;
|
||
КонецЕсли;
|
||
|
||
КлючПоискаНомера = ?(ЗначениеЗаполнено(НомерСерии), НомерСерии, ИмяСерии);
|
||
КлючКэшСер = Строка(ВидСер.УникальныйИдентификатор()) + "|" + ИмяСерии + "|" + КлючПоискаНомера;
|
||
СерИзКэш = КэшСерий.Получить(КлючКэшСер);
|
||
Если СерИзКэш <> Неопределено Тогда
|
||
Возврат СерИзКэш;
|
||
КонецЕсли;
|
||
|
||
Если ИспНомерСерии И ЗначениеЗаполнено(КлючПоискаНомера) Тогда
|
||
Сер = Справочники.СерииНоменклатуры.НайтиПоРеквизиту("Номер", КлючПоискаНомера, , ВидСер);
|
||
КонецЕсли;
|
||
Если Не ЗначениеЗаполнено(Сер) И ЗначениеЗаполнено(ИмяСерии) Тогда
|
||
Сер = Справочники.СерииНоменклатуры.НайтиПоНаименованию(ИмяСерии, Истина, , ВидСер);
|
||
КонецЕсли;
|
||
Если Не ЗначениеЗаполнено(Сер) И ЗначениеЗаполнено(НомерСерии) И НомерСерии <> ИмяСерии Тогда
|
||
Сер = Справочники.СерииНоменклатуры.НайтиПоНаименованию(НомерСерии, Истина, , ВидСер);
|
||
КонецЕсли;
|
||
|
||
МожноСоздать = Не РежимТест И ЗначениеЗаполнено(ИмяСерии);
|
||
Если ЭтоЗаглушка Тогда
|
||
МожноСоздать = МожноСоздать И СоздаватьЗаглушкиСерий;
|
||
КонецЕсли;
|
||
|
||
Если Не ЗначениеЗаполнено(Сер) И МожноСоздать Тогда
|
||
Попытка
|
||
ОбСер = Справочники.СерииНоменклатуры.ПустойОбъект(ВидСер);
|
||
Если ИспНомерСерии Тогда
|
||
НомерСер = КлючПоискаНомера;
|
||
Если ЭтоЗаглушка И СтрНачинаетсяС(ИмяСерии, "Перенос_") Тогда
|
||
НомерСер = Сред(ИмяСерии, СтрДлина("Перенос_") + 1);
|
||
КонецЕсли;
|
||
ОбСер.Номер = НомерСер;
|
||
Иначе
|
||
Попытка
|
||
ОбСер.Наименование = ИмяСерии;
|
||
Исключение
|
||
КонецПопытки;
|
||
КонецЕсли;
|
||
ОбСер.Записать();
|
||
Сер = ОбСер.Ссылка;
|
||
Результат.СозданоСерий = Результат.СозданоСерий + 1;
|
||
Исключение
|
||
СтрТ.КомментарийСопоставления = "Ошибка создания серии: " + ИмяСерии;
|
||
КонецПопытки;
|
||
КонецЕсли;
|
||
|
||
Если ЗначениеЗаполнено(Сер) Тогда
|
||
КэшСерий.Вставить(КлючКэшСер, Сер);
|
||
ИначеЕсли ТребуетсяСерия Тогда
|
||
Если ПустаяСтрока(СтрТ.КомментарийСопоставления) Или СтрТ.КомментарийСопоставления = "OK" Тогда
|
||
СтрТ.КомментарийСопоставления = "Серия не найдена" + ?(РежимТест, " (тест)", "");
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Возврат Сер;
|
||
|
||
КонецФункции
|
||
|
||
Функция СсылкаПоUUID(Менеджер, Идентификатор)
|
||
|
||
Если Не ЗначениеЗаполнено(Идентификатор) Тогда
|
||
Возврат Менеджер.ПустаяСсылка();
|
||
КонецЕсли;
|
||
Попытка
|
||
Возврат Менеджер.ПолучитьСсылку(Идентификатор);
|
||
Исключение
|
||
Возврат Менеджер.ПустаяСсылка();
|
||
КонецПопытки;
|
||
|
||
КонецФункции
|
||
|
||
Функция UUIDИзСтроки(Значение)
|
||
|
||
Текст = НРег(СокрЛП(Строка(Значение)));
|
||
Если ПустаяСтрока(Текст) Или Текст = "00000000-0000-0000-0000-000000000000" Тогда
|
||
Возврат Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000");
|
||
КонецЕсли;
|
||
Попытка
|
||
Возврат Новый УникальныйИдентификатор(Текст);
|
||
Исключение
|
||
Возврат Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000");
|
||
КонецПопытки;
|
||
|
||
КонецФункции
|
||
|
||
Функция ЗначениеСвойства(Источник, Имя, ПоУмолчанию)
|
||
|
||
Если Источник = Неопределено Тогда
|
||
Возврат ПоУмолчанию;
|
||
КонецЕсли;
|
||
Если ТипЗнч(Источник) = Тип("Структура") Или ТипЗнч(Источник) = Тип("ФиксированнаяСтруктура") Тогда
|
||
Если Источник.Свойство(Имя) Тогда
|
||
Возврат Источник[Имя];
|
||
КонецЕсли;
|
||
Возврат ПоУмолчанию;
|
||
КонецЕсли;
|
||
Если ТипЗнч(Источник) = Тип("Соответствие") Или ТипЗнч(Источник) = Тип("ФиксированноеСоответствие") Тогда
|
||
Значение = Источник.Получить(Имя);
|
||
Если Значение = Неопределено Тогда
|
||
Возврат ПоУмолчанию;
|
||
КонецЕсли;
|
||
Возврат Значение;
|
||
КонецЕсли;
|
||
Возврат ПоУмолчанию;
|
||
|
||
КонецФункции
|
||
|
||
Функция ЧислоИзЗначения(Значение, ПоУмолчанию)
|
||
|
||
Если Значение = Неопределено Или Значение = Null Тогда
|
||
Возврат ПоУмолчанию;
|
||
КонецЕсли;
|
||
Попытка
|
||
Возврат Число(Значение);
|
||
Исключение
|
||
Возврат ПоУмолчанию;
|
||
КонецПопытки;
|
||
|
||
КонецФункции
|
||
|
||
Функция КлючАналитикиКомиссионнойСтроки(СтрТ)
|
||
|
||
Возврат Строка(СтрТ.НоменклатураИдентификатор) + "|"
|
||
+ СокрЛП(СтрТ.НоменклатураКод) + "|"
|
||
+ СокрЛП(СтрТ.Артикул) + "|"
|
||
+ Строка(СтрТ.СоглашениеИдентификатор) + "|"
|
||
+ СокрЛП(СтрТ.СоглашениеНаименование) + "|"
|
||
+ Строка(СтрТ.ПартнерИдентификатор) + "|"
|
||
+ СокрЛП(СтрТ.ПартнерНаименование) + "|"
|
||
+ Строка(СтрТ.КонтрагентИдентификатор) + "|"
|
||
+ СокрЛП(СтрТ.КонтрагентНаименование) + "|"
|
||
+ Строка(СтрТ.ОрганизацияИдентификатор) + "|"
|
||
+ Строка(СтрТ.СкладИдентификатор) + "|"
|
||
+ Строка(СтрТ.ХарактеристикаИдентификатор) + "|"
|
||
+ СокрЛП(СтрТ.ГТД) + "|"
|
||
+ СокрЛП(СтрТ.Назначение) + "|"
|
||
+ СокрЛП(СтрТ.ВидЗапасов);
|
||
|
||
КонецФункции
|
||
|
||
Функция СерияЗаполненаВСтрокеКомиссии(СтрТ)
|
||
|
||
Если ЗначениеЗаполнено(СтрТ.СерияИдентификатор) Тогда
|
||
Возврат Истина;
|
||
КонецЕсли;
|
||
Если Не ПустаяСтрока(СокрЛП(СтрТ.Серия)) Тогда
|
||
Возврат Истина;
|
||
КонецЕсли;
|
||
Возврат Не ПустаяСтрока(СокрЛП(СтрТ.СерияНомер));
|
||
|
||
КонецФункции
|
||
|
||
Функция БулевоИзЗначения(Значение)
|
||
|
||
Если ТипЗнч(Значение) = Тип("Булево") Тогда
|
||
Возврат Значение;
|
||
КонецЕсли;
|
||
Если Значение = Неопределено Или Значение = Null Тогда
|
||
Возврат Ложь;
|
||
КонецЕсли;
|
||
Стр = НРег(СокрЛП(Строка(Значение)));
|
||
Возврат Стр = "true" Или Стр = "1" Или Стр = "да" Или Стр = "истина";
|
||
|
||
КонецФункции
|
||
|
||
#КонецОбласти
|
||
|
||
#КонецЕсли
|