1.3.1.126: #36 — серии ввода остатков в окно распределения.

Лаеннек остаётся в колонке «Серия». Строки без характеристики с одной серией и ГТД сворачиваются.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
mihailkudravcev
2026-10-09 17:17:37 +03:00
parent e3fdfe9a1d
commit fba8671cd2
4 changed files with 116 additions and 3 deletions
+8
View File
@@ -4,6 +4,14 @@
---
## 1.3.1.126 (2026-10-09)
### #36: серии ввода остатков
- Тип «учёт себестоимости по сериям» (лаеннек) — серия в колонке строки.
- Тип «управление остатками серий» — колонка пустая, количество в табличной части «Серии» с тем же идентификатором строки.
- Строки без характеристики с одной серией и одним ГТД сворачиваются.
## 1.3.1.125 (2026-10-07)
### #68: явный отказ партнёр-веток вне узла crm3-dev
+1 -1
View File
@@ -1 +1 @@
1.3.1.125
1.3.1.126
+1 -1
View File
@@ -62,7 +62,7 @@
<xr:Item xsi:type="xr:MDObjectRef">Role.РК_ОсновнаяРоль</xr:Item>
</DefaultRoles>
<Vendor/>
<Version>1.3.1.125</Version>
<Version>1.3.1.126</Version>
<DefaultStyle/>
<DefaultLanguage>Language.Русский</DefaultLanguage>
<BriefInformation/>
@@ -1096,6 +1096,7 @@
Исключение
КонецПопытки;
СтрокиСклада = СвернутьСтрокиБезХарактеристики(СтрокиСклада);
Для Каждого СтрТ Из СтрокиСклада Цикл
ДобавитьСтрокуТоваровДокументаВвода(Док, СтрТ);
КонецЦикла;
@@ -1168,6 +1169,7 @@
Исключение
КонецПопытки;
СтрокиГруппы = СвернутьСтрокиБезХарактеристики(СтрокиГруппы);
Для Каждого СтрТ Из СтрокиГруппы Цикл
ДобавитьСтрокуТоваровДокументаВвода(Док, СтрТ);
КонецЦикла;
@@ -1204,7 +1206,14 @@
НовСтр = Док.Товары.Добавить();
НовСтр.Номенклатура = СтрТ.Номенклатура;
НовСтр.Характеристика = СтрТ.Характеристика;
НовСтр.Серия = СтрТ.СерияСсылка;
СкладПолитики = СтрТ.Склад;
Если Не ЗначениеЗаполнено(СкладПолитики) Тогда
СкладПолитики = Док.Склад;
КонецЕсли;
// Учёт себестоимости по сериям — колонка «Серия». Управление остатками — окно (ТЧ Серии).
Если СерияУказываетсяВКолонке(Док, СтрТ.Номенклатура, СкладПолитики) Тогда
НовСтр.Серия = СтрТ.СерияСсылка;
КонецЕсли;
НовСтр.Количество = КолДок;
НовСтр.КоличествоУпаковок = КолДок;
НовСтр.Сумма = СтрТ.Стоимость;
@@ -1225,16 +1234,112 @@
НовСтр.НомерГТД = СтрТ.НомерГТДСсылка;
КонецЕсли;
Если ЗначениеЗаполнено(СтрТ.СерияСсылка) Тогда
Если Не ЗначениеЗаполнено(НовСтр.ИдентификаторСтроки) Тогда
НовСтр.ИдентификаторСтроки = Строка(Новый УникальныйИдентификатор);
КонецЕсли;
СтрСер = Док.Серии.Добавить();
СтрСер.Номенклатура = НовСтр.Номенклатура;
СтрСер.Характеристика = НовСтр.Характеристика;
СтрСер.Серия = СтрТ.СерияСсылка;
СтрСер.Количество = НовСтр.Количество;
СтрСер.КоличествоУпаковок = НовСтр.Количество;
СтрСер.ИдентификаторСтроки = НовСтр.ИдентификаторСтроки;
КонецЕсли;
КонецПроцедуры
Функция СерияУказываетсяВКолонке(Док, Номенклатура, Склад)
Кэш = Неопределено;
Если Не Док.ДополнительныеСвойства.Свойство("КэшСерияВКолонке", Кэш) Тогда
Кэш = Новый Соответствие;
Док.ДополнительныеСвойства.Вставить("КэшСерияВКолонке", Кэш);
КонецЕсли;
КлючСклада = "";
Если ЗначениеЗаполнено(Склад) Тогда
КлючСклада = Строка(Склад.УникальныйИдентификатор());
КонецЕсли;
Ключ = Строка(Номенклатура.УникальныйИдентификатор()) + "|" + КлючСклада;
ЗначениеКэша = Кэш.Получить(Ключ);
Если ЗначениеКэша <> Неопределено Тогда
Возврат ЗначениеКэша;
КонецЕсли;
ТипПолитики = Неопределено;
Вид = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Номенклатура, "ВидНоменклатуры");
Если ЗначениеЗаполнено(Вид) И ЗначениеЗаполнено(Склад) Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| Пол.ПолитикаУчетаСерий.ТипПолитики КАК ТипПолитики
|ИЗ
| Справочник.ВидыНоменклатуры.ПолитикиУчетаСерий КАК Пол
|ГДЕ
| Пол.Ссылка = &Вид
| И Пол.Склад = &Склад
| И Пол.ПолитикаУчетаСерий <> ЗНАЧЕНИЕ(Справочник.ПолитикиУчетаСерий.ПустаяСсылка)";
Запрос.УстановитьПараметр("Вид", Вид);
Запрос.УстановитьПараметр("Склад", Склад);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
ТипПолитики = Выборка.ТипПолитики;
КонецЕсли;
КонецЕсли;
Если Не ЗначениеЗаполнено(ТипПолитики) И ЗначениеЗаполнено(Вид) Тогда
Политика = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Вид, "ПолитикаУчетаСерий");
Если ЗначениеЗаполнено(Политика) Тогда
ТипПолитики = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Политика, "ТипПолитики");
КонецЕсли;
КонецЕсли;
ВКолонке = ТипПолитики = Перечисления.ТипыПолитикУказанияСерий.УчетСебестоимостиПоСериям
Или ТипПолитики = Перечисления.ТипыПолитикУказанияСерий.СправочноеУказаниеСерий;
Кэш.Вставить(Ключ, ВКолонке);
Возврат ВКолонке;
КонецФункции
Функция СвернутьСтрокиБезХарактеристики(Строки)
Результат = Новый Массив;
Индекс = Новый Соответствие;
Для Каждого СтрТ Из Строки Цикл
Если ЗначениеЗаполнено(СтрТ.Характеристика) Или Не ЗначениеЗаполнено(СтрТ.СерияСсылка) Тогда
Результат.Добавить(СтрТ);
Продолжить;
КонецЕсли;
КлючГТД = "";
Если ЗначениеЗаполнено(СтрТ.НомерГТДСсылка) Тогда
КлючГТД = Строка(СтрТ.НомерГТДСсылка.УникальныйИдентификатор());
КонецЕсли;
Ключ = Строка(СтрТ.Номенклатура.УникальныйИдентификатор())
+ "|" + Строка(СтрТ.СерияСсылка.УникальныйИдентификатор())
+ "|" + КлючГТД;
Уже = Индекс.Получить(Ключ);
Если Уже = Неопределено Тогда
Индекс.Вставить(Ключ, СтрТ);
Результат.Добавить(СтрТ);
Иначе
Уже.Количество = КоличествоСтрокиВвода(Уже) + КоличествоСтрокиВвода(СтрТ);
Уже.КоличествоОрганизации = Уже.Количество;
Уже.Стоимость = Уже.Стоимость + СтрТ.Стоимость;
Уже.СтоимостьРегл = Уже.СтоимостьРегл + СтрТ.СтоимостьРегл;
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
Функция КоличествоСтрокиВвода(СтрТ)
Если СтрТ.КоличествоОрганизации <> 0 Тогда
Возврат СтрТ.КоличествоОрганизации;
КонецЕсли;
Возврат СтрТ.Количество;
КонецФункции
// Расчёт СуммаНДС / СуммаСНДС / СуммаБезНДС / НДСРегл после заполнения строк (#33).
// Штатный путь — ПакетнаяОбработкаТабличнойЧасти (как в форме/модуле ВводОстатковТоваров).
//