РК_ЗагрузкаОстатков 1.3.1.62: кол. склад и финансовое раздельно, себестоимость rh_.
В таблицу приходят два количества и сумма только финансового контура; комиссия без серий. Документы ввода заполняют сумму из rh_, как волна 1. Нужен ws-rhana ≥ 0.0.0.38. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -48,12 +48,55 @@
|
||||
НовСтр.Количество = ЧислоИзЗначения(ЗначениеСвойства(СтрокаAPI, "qty_commission",
|
||||
ЗначениеСвойства(СтрокаAPI, "qty_org", НовСтр.Количество)), 0);
|
||||
НовСтр.КоличествоОрганизации = НовСтр.Количество;
|
||||
НовСтр.СерияИдентификатор = UUIDИзСтроки("");
|
||||
НовСтр.Серия = "";
|
||||
НовСтр.СерияНомер = "";
|
||||
НовСтр.СерияСсылка = Справочники.СерииНоменклатуры.ПустаяСсылка();
|
||||
НовСтр.СоглашениеИдентификатор = 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", Ложь));
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
@@ -112,17 +155,19 @@
|
||||
Хар = НайтиИлиСоздатьХарактеристику(СтрТ, Ном, РежимТест, Результат);
|
||||
СтрТ.Характеристика = Хар;
|
||||
|
||||
Сер = НайтиИлиСоздатьСерию(СтрТ, Ном, СкладЦель, СуффиксДатыСер, РежимТест,
|
||||
КэшТребуетсяСерия, КэшСерий, Результат);
|
||||
СтрТ.СерияСсылка = Сер;
|
||||
Если НоменклатураИспользуетСерии(Ном, КэшТребуетсяСерия) И Не ЗначениеЗаполнено(Сер) Тогда
|
||||
Если ПустаяСтрока(СтрТ.КомментарийСопоставления) Или СтрТ.КомментарийСопоставления = "OK" Тогда
|
||||
СтрТ.КомментарийСопоставления = "Серия не найдена"
|
||||
+ ?(РежимТест, " (тест)", "")
|
||||
+ ?(СоздаватьЗаглушкиСерий, "", "; заглушки выключены");
|
||||
Если СтрТ.Количество <> 0 Тогда
|
||||
Сер = НайтиИлиСоздатьСерию(СтрТ, Ном, СкладЦель, СуффиксДатыСер, РежимТест,
|
||||
КэшТребуетсяСерия, КэшСерий, Результат);
|
||||
СтрТ.СерияСсылка = Сер;
|
||||
Если НоменклатураИспользуетСерии(Ном, КэшТребуетсяСерия) И Не ЗначениеЗаполнено(Сер) Тогда
|
||||
Если ПустаяСтрока(СтрТ.КомментарийСопоставления) Или СтрТ.КомментарийСопоставления = "OK" Тогда
|
||||
СтрТ.КомментарийСопоставления = "Серия не найдена"
|
||||
+ ?(РежимТест, " (тест)", "")
|
||||
+ ?(СоздаватьЗаглушкиСерий, "", "; заглушки выключены");
|
||||
КонецЕсли;
|
||||
Результат.НеСопоставлено = Результат.НеСопоставлено + 1;
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
Результат.НеСопоставлено = Результат.НеСопоставлено + 1;
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
ЗаполнитьНомерГТДСтроки(СтрТ);
|
||||
@@ -140,7 +185,7 @@
|
||||
КонецФункции
|
||||
|
||||
// Сопоставление комиссионных строк (переданные 2.5): соглашение, партнёр, контрагент, договор.
|
||||
// Склад не обязателен. Серии — только существующие или созданные из исходных данных.
|
||||
// Склад не обязателен. Серии в комиссионном товаре не используются.
|
||||
//
|
||||
Функция СопоставитьВходящиеКомиссионныеТовары(РежимТест = Истина) Экспорт
|
||||
|
||||
@@ -150,14 +195,6 @@
|
||||
Результат.Вставить("СозданоСерий", 0);
|
||||
Результат.Вставить("СозданоХарактеристик", 0);
|
||||
|
||||
СуффиксДатыСер = Формат(?(ЗначениеЗаполнено(ДатаДокументовВвода), ДатаДокументовВвода, ДатаОстатков), "ДФ=yyyyMMdd");
|
||||
Если ПустаяСтрока(СуффиксДатыСер) Тогда
|
||||
СуффиксДатыСер = Формат(ТекущаяДатаСеанса(), "ДФ=yyyyMMdd");
|
||||
КонецЕсли;
|
||||
|
||||
КэшТребуетсяСерия = Новый Соответствие;
|
||||
КэшСерий = Новый Соответствие;
|
||||
|
||||
Для Каждого СтрТ Из ВходящиеКомиссионныеТовары Цикл
|
||||
|
||||
СтрТ.Сопоставлено = Ложь;
|
||||
@@ -203,19 +240,6 @@
|
||||
Хар = НайтиИлиСоздатьХарактеристику(СтрТ, Ном, РежимТест, Результат);
|
||||
СтрТ.Характеристика = Хар;
|
||||
|
||||
Сер = НайтиИлиСоздатьСерию(СтрТ, Ном, СтрТ.Склад, СуффиксДатыСер, РежимТест,
|
||||
КэшТребуетсяСерия, КэшСерий, Результат);
|
||||
СтрТ.СерияСсылка = Сер;
|
||||
Если НоменклатураИспользуетСерии(Ном, КэшТребуетсяСерия) И Не ЗначениеЗаполнено(Сер) Тогда
|
||||
Если ПустаяСтрока(СтрТ.КомментарийСопоставления) Или СтрТ.КомментарийСопоставления = "OK" Тогда
|
||||
СтрТ.КомментарийСопоставления = "Серия не найдена"
|
||||
+ ?(РежимТест, " (тест)", "")
|
||||
+ ?(СоздаватьЗаглушкиСерий, "", "; заглушки выключены");
|
||||
КонецЕсли;
|
||||
Результат.НеСопоставлено = Результат.НеСопоставлено + 1;
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
ЗаполнитьНомерГТДСтроки(СтрТ);
|
||||
|
||||
СтрТ.Сопоставлено = Истина;
|
||||
@@ -232,7 +256,8 @@
|
||||
|
||||
// Создание документов ВводОстатковТоваров по сопоставленным строкам.
|
||||
// Собственные — 1 документ на склад; комиссия 2.5 — 1 документ на соглашение+партнёра (без склада).
|
||||
// Себестоимость не заполняется (нет данных в API) — только оперативный учёт количества.
|
||||
// Количество в документе — финансовое (rh_), если не 0, иначе складское.
|
||||
// Себестоимость — из rh_ (сумма USD, СуммаРегл); серии только у собственных строк.
|
||||
//
|
||||
// Параметры:
|
||||
// РежимТест - Булево - только подсчёт без записи
|
||||
@@ -494,7 +519,7 @@
|
||||
Док.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ВводОстатковСобственныхТоваров;
|
||||
Док.Комментарий = ТекстТега + ", склад " + СокрЛП(Строка(СкладДок));
|
||||
Док.ОтражатьВОперативномУчете = Истина;
|
||||
Док.ОтражатьСебестоимость = Ложь;
|
||||
Док.ОтражатьСебестоимость = ЕстьСтоимостьВСтроках(СтрокиСклада);
|
||||
Док.ЦенаВключаетНДС = Ложь;
|
||||
|
||||
Попытка
|
||||
@@ -502,11 +527,20 @@
|
||||
Исключение
|
||||
КонецПопытки;
|
||||
|
||||
Попытка
|
||||
Док.Валюта = ЗначениеНастроекПовтИсп.ВалютаРегламентированногоУчетаОрганизации(Организация);
|
||||
Исключение
|
||||
Док.Валюта = Константы.ВалютаРегламентированногоУчета.Получить();
|
||||
КонецПопытки;
|
||||
Если Док.ОтражатьСебестоимость Тогда
|
||||
Попытка
|
||||
Док.Валюта = Константы.ВалютаУправленческогоУчета.Получить();
|
||||
Исключение
|
||||
Док.Валюта = Неопределено;
|
||||
КонецПопытки;
|
||||
КонецЕсли;
|
||||
Если Не ЗначениеЗаполнено(Док.Валюта) Тогда
|
||||
Попытка
|
||||
Док.Валюта = ЗначениеНастроекПовтИсп.ВалютаРегламентированногоУчетаОрганизации(Организация);
|
||||
Исключение
|
||||
Док.Валюта = Константы.ВалютаРегламентированногоУчета.Получить();
|
||||
КонецПопытки;
|
||||
КонецЕсли;
|
||||
|
||||
Если Не ЗначениеЗаполнено(Док.НалогообложениеНДС) Тогда
|
||||
Док.НалогообложениеНДС = Перечисления.ТипыНалогообложенияНДС.ПродажаОблагаетсяНДС;
|
||||
@@ -551,14 +585,23 @@
|
||||
Док.Договор = Первая.Договор;
|
||||
Док.Комментарий = ТекстТега + ", комиссия 2.5, " + СокрЛП(Строка(Первая.Партнер));
|
||||
Док.ОтражатьВОперативномУчете = Истина;
|
||||
Док.ОтражатьСебестоимость = Ложь;
|
||||
Док.ОтражатьСебестоимость = ЕстьСтоимостьВСтроках(СтрокиГруппы);
|
||||
Док.ЦенаВключаетНДС = Ложь;
|
||||
|
||||
Попытка
|
||||
Док.Валюта = ЗначениеНастроекПовтИсп.ВалютаРегламентированногоУчетаОрганизации(Организация);
|
||||
Исключение
|
||||
Док.Валюта = Константы.ВалютаРегламентированногоУчета.Получить();
|
||||
КонецПопытки;
|
||||
Если Док.ОтражатьСебестоимость Тогда
|
||||
Попытка
|
||||
Док.Валюта = Константы.ВалютаУправленческогоУчета.Получить();
|
||||
Исключение
|
||||
Док.Валюта = Неопределено;
|
||||
КонецПопытки;
|
||||
КонецЕсли;
|
||||
Если Не ЗначениеЗаполнено(Док.Валюта) Тогда
|
||||
Попытка
|
||||
Док.Валюта = ЗначениеНастроекПовтИсп.ВалютаРегламентированногоУчетаОрганизации(Организация);
|
||||
Исключение
|
||||
Док.Валюта = Константы.ВалютаРегламентированногоУчета.Получить();
|
||||
КонецПопытки;
|
||||
КонецЕсли;
|
||||
|
||||
Если Не ЗначениеЗаполнено(Док.НалогообложениеНДС) Тогда
|
||||
Док.НалогообложениеНДС = Перечисления.ТипыНалогообложенияНДС.ПродажаОблагаетсяНДС;
|
||||
@@ -592,14 +635,30 @@
|
||||
|
||||
Процедура ДобавитьСтрокуТоваровДокументаВвода(Док, СтрТ)
|
||||
|
||||
КолДок = СтрТ.КоличествоОрганизации;
|
||||
Если КолДок = 0 Тогда
|
||||
КолДок = СтрТ.Количество;
|
||||
КонецЕсли;
|
||||
Если КолДок = 0 Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
НовСтр = Док.Товары.Добавить();
|
||||
НовСтр.Номенклатура = СтрТ.Номенклатура;
|
||||
НовСтр.Характеристика = СтрТ.Характеристика;
|
||||
НовСтр.Серия = СтрТ.СерияСсылка;
|
||||
НовСтр.Количество = СтрТ.Количество;
|
||||
НовСтр.КоличествоУпаковок = СтрТ.Количество;
|
||||
НовСтр.Цена = 0;
|
||||
НовСтр.Сумма = 0;
|
||||
НовСтр.Количество = КолДок;
|
||||
НовСтр.КоличествоУпаковок = КолДок;
|
||||
НовСтр.Сумма = СтрТ.Стоимость;
|
||||
Если КолДок <> 0 И СтрТ.Стоимость <> 0 Тогда
|
||||
НовСтр.Цена = Окр(СтрТ.Стоимость / КолДок, 2);
|
||||
Иначе
|
||||
НовСтр.Цена = 0;
|
||||
КонецЕсли;
|
||||
Попытка
|
||||
НовСтр.СуммаРегл = СтрТ.СтоимостьРегл;
|
||||
Исключение
|
||||
КонецПопытки;
|
||||
Попытка
|
||||
НовСтр.СтавкаНДС = СтрТ.Номенклатура.СтавкаНДС;
|
||||
Исключение
|
||||
@@ -618,6 +677,17 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ЕстьСтоимостьВСтроках(Строки)
|
||||
|
||||
Для Каждого СтрТ Из Строки Цикл
|
||||
Если СтрТ.Стоимость <> 0 Или СтрТ.СтоимостьРегл <> 0 Тогда
|
||||
Возврат Истина;
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
Возврат Ложь;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ЗаполнитьСтрокуВходящихДанныхИзAPI(НовСтр, СтрокаAPI)
|
||||
|
||||
НовСтр.НоменклатураИдентификатор = UUIDИзСтроки(ЗначениеСвойства(СтрокаAPI, "nomenclature_guid", ""));
|
||||
@@ -645,18 +715,34 @@
|
||||
КонецЕсли;
|
||||
|
||||
НовСтр.ГТДИдентификатор = UUIDИзСтроки(ЗначениеСвойства(СтрокаAPI, "gtd_guid", ""));
|
||||
НовСтр.ГТД = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "gtd_name", "")));
|
||||
ГТДТекст = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "gtd_name", "")));
|
||||
Если ПустаяСтрока(ГТДТекст) Тогда
|
||||
ГТДТекст = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "gtd_code", "")));
|
||||
КонецЕсли;
|
||||
Если ПустаяСтрока(ГТДТекст) Тогда
|
||||
ГТДТекст = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "gtd_number", "")));
|
||||
КонецЕсли;
|
||||
НовСтр.ГТД = ГТДТекст;
|
||||
|
||||
НовСтр.ОрганизацияИдентификатор = UUIDИзСтроки(ЗначениеСвойства(СтрокаAPI, "organization_guid", ""));
|
||||
НовСтр.ОрганизацияНаименование = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "organization_name", "")));
|
||||
|
||||
НовСтр.Количество = ЧислоИзЗначения(ЗначениеСвойства(СтрокаAPI, "qty_warehouse",
|
||||
КолСклад = ЧислоИзЗначения(ЗначениеСвойства(СтрокаAPI, "qty_warehouse", 0), 0);
|
||||
КолФин = ЧислоИзЗначения(ЗначениеСвойства(СтрокаAPI, "qty_financial",
|
||||
ЗначениеСвойства(Строка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, "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);
|
||||
НовСтр.ВидНоменклатурыНаименование = СокрЛП(Строка(ВидИмя));
|
||||
НовСтр.ПолитикаСерии = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "policy_use_series", "")));
|
||||
НовСтр.ПолитикаХарактеристик = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "policy_use_characteristics", "")));
|
||||
|
||||
@@ -1073,6 +1159,19 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция БулевоИзЗначения(Значение)
|
||||
|
||||
Если ТипЗнч(Значение) = Тип("Булево") Тогда
|
||||
Возврат Значение;
|
||||
КонецЕсли;
|
||||
Если Значение = Неопределено Или Значение = Null Тогда
|
||||
Возврат Ложь;
|
||||
КонецЕсли;
|
||||
Стр = НРег(СокрЛП(Строка(Значение)));
|
||||
Возврат Стр = "true" Или Стр = "1" Или Стр = "да" Или Стр = "истина";
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#КонецЕсли
|
||||
|
||||
Reference in New Issue
Block a user