xmlTSDOrdersVasilek/Documents/Заказ/Forms/ФормаДокумента/Ext/Form/Module.bsl

828 lines
39 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

&НаКлиенте
Перем СтрокаТоваровДляРедактирования;
&НаКлиенте
Перем БлокироватьОткрытиеПанелиКоличества;
&НаКлиенте
Перем РежимВыделенияТоваров;
&НаКлиенте
Перем БлокироватьПереключениеВыдТов;
&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
////ПослеЗаписиНаСервере();
КонецПроцедуры
&НаСервере
Процедура ПослеЗаписиНаСервере()
тзиб=новый таблицазначений;
тзиб.Колонки.Добавить("иб",новый ОписаниеТипов("СправочникСсылка.ИБ"));
Для каждого стр из Объект.Товары цикл
эл=тзиб.Добавить();
эл.иб=стр.номенклатура.ИБ;
КонецЦикла;
тзиб.Свернуть("иб");
Для каждого стр из тзиб цикл
Подключение=ОмСлужебный.ПодключениеУТ(стр.иб);
Док=Подключение.Документы.ЗаказКлиента.НайтиПоНомеру("МГ"+Объект.Номер,Объект.Дата);
Если Подключение.ЗначениеЗаполнено(Док) тогда
Док=Док.ПолучитьОбъект();
Иначе
Док=Подключение.Документы.ЗаказКлиента.СоздатьДокумент();
КонецЕСли;
Док.Товары.Очистить();
Для каждого стр из Объект.Товары цикл
тов=Док.Товары.Добавить();
уид=Подключение.NewObject("УникальныйИдентификатор",Строка(стр.номенклатура.УникальныйИдентификатор()));
тов.Номенклатура=Подключение.Справочники.Номенклатура.ПолучитьСсылку(уид);
тов.Количество=стр.Количество;
тов.КоличествоУпаковок=тов.Количество;
КонецЦикла;
Док.Дата=Объект.Дата;
Док.Номер="МГ-"+Объект.Номер;
Док.ОбменДанными.Загрузка = Истина;
Док.записать();
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура Подобрать(Команда)
Записать();
// После копирования ТЧ есть в документе, а в регистре Корзина для новой ссылки — пусто.
// Без синхронизации ЗаполнитьТЗ() после подбора затрёт скопированные строки.
СинхронизироватьКорзинуИзТоваровНаСервере();
Параметр = Новый Структура("Заказ",Объект.Ссылка);
ФормаВыбора = ПолучитьФорму("Справочник.Номенклатура.Форма.ФормаПодбора",Параметр);
ФормаВыбора.Открыть();
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если ИмяСобытия="ЗакрытиеПодбора" Тогда
ЗаполнитьТЗ();
КонецЕСли;
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьТЗ()
ЗаполнитьТЗНаСервере();
ОбновитьОтображениеТоваров();
СкрытьРежимВыделенияТоваров();
ЗаполнитьСписокТоваровИзТЧ();
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьОтображениеТоваров()
ОбновитьИндексыКартинкиВыдТов();
ОбновитьКоличествоТоваровВДокументе();
// ОбновитьПометкиДублейТоваров();
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьСписокТоваровИзТЧ()
ЗаполнитьСписокТоваровИзТЧНаСервере(СтрокаПоискаТоваров);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьСписокТоваровИзТЧНаСервере(СтрокаПоиска = "")
СинхронизироватьКорзинуИзТоваровНаСервере();
СписокТоваров.Очистить();
СловаПоиска = Новый Массив;
Для Каждого Часть Из СтрРазделить(СокрЛП(СтрокаПоиска), " ", Ложь) Цикл
Если Не ПустаяСтрока(Часть) Тогда
СловаПоиска.Добавить(ВРег(СокрЛП(Часть)));
КонецЕсли;
КонецЦикла;
Для Каждого СтрокаТоваров Из Объект.Товары Цикл
Если Не ЗначениеЗаполнено(СтрокаТоваров.Номенклатура) Тогда
Продолжить;
КонецЕсли;
Наименование = СтрокаТоваров.Номенклатура.Наименование;
КодOffline = СтрокаТоваров.Номенклатура.КодOffline;
Если СловаПоиска.Количество() > 0 Тогда
ТекстПоиска = ВРег(Наименование + " " + Формат(КодOffline, "ЧГ="));
Подходит = Истина;
Для Каждого Слово Из СловаПоиска Цикл
Если СтрНайти(ТекстПоиска, Слово) = 0 Тогда
Подходит = Ложь;
Прервать;
КонецЕсли;
КонецЦикла;
Если Не Подходит Тогда
Продолжить;
КонецЕсли;
КонецЕсли;
СтрокаСписка = СписокТоваров.Добавить();
СтрокаСписка.НомерСтроки = СтрокаТоваров.НомерСтроки;
СтрокаСписка.Номенклатура = СтрокаТоваров.Номенклатура;
СтрокаСписка.Наименование = Наименование;
СтрокаСписка.КодOffline = КодOffline;
СтрокаСписка.Количество = СтрокаТоваров.Количество;
СтрокаСписка.КоличествоПредставление = "× "
+ Формат(СтрокаТоваров.Количество, "ЧДЦ=0; ЧН=0; ЧГ=");
Если ЗначениеЗаполнено(КодOffline) Тогда
СтрокаСписка.КодOfflineПредставление = "код offline: " + Формат(КодOffline, "ЧДЦ=0; ЧН=0; ЧГ=");
Иначе
СтрокаСписка.КодOfflineПредставление = "";
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура НастроитьСписокТоваровНаСервере()
ЗаполнитьСписокТоваровИзТЧНаСервере("");
КонецПроцедуры
&НаКлиенте
Процедура СтрокаПоискаТоваровПриИзменении(Элемент)
ЗаполнитьСписокТоваровИзТЧ();
КонецПроцедуры
&НаКлиенте
Процедура СтрокаПоискаТоваровИзменениеТекстаРедактирования(Элемент, Текст, СтандартнаяОбработка)
СтрокаПоискаТоваров = Текст;
ЗаполнитьСписокТоваровИзТЧ();
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьПометкиДублейТоваров()
СчетчикНоменклатуры = Новый Соответствие;
Для Каждого СтрокаТоваров Из Объект.Товары Цикл
СтрокаТоваров.ДубльТов = Ложь;
Если Не ЗначениеЗаполнено(СтрокаТоваров.Номенклатура) Тогда
Продолжить;
КонецЕсли;
КлючНоменклатуры = Строка(СтрокаТоваров.Номенклатура.УникальныйИдентификатор());
Количество = СчетчикНоменклатуры.Получить(КлючНоменклатуры);
Если Количество = Неопределено Тогда
СчетчикНоменклатуры.Вставить(КлючНоменклатуры, 1);
Иначе
СчетчикНоменклатуры.Вставить(КлючНоменклатуры, Количество + 1);
КонецЕсли;
КонецЦикла;
Для Каждого СтрокаТоваров Из Объект.Товары Цикл
Если Не ЗначениеЗаполнено(СтрокаТоваров.Номенклатура) Тогда
Продолжить;
КонецЕсли;
КлючНоменклатуры = Строка(СтрокаТоваров.Номенклатура.УникальныйИдентификатор());
КоличествоВхождений = СчетчикНоменклатуры.Получить(КлючНоменклатуры);
Если КоличествоВхождений = Неопределено Тогда
КоличествоВхождений = 0;
КонецЕсли;
СтрокаТоваров.ДубльТов = КоличествоВхождений > 1;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьКоличествоТоваровВДокументе()
// Убираем количество товаров, выводим количество строк
//Итого = 0;
//
//Для Каждого СтрокаТоваров Из Объект.Товары Цикл
// Итого = Итого + СтрокаТоваров.Количество;
//КонецЦикла;
КоличествоТоваровВДокументе = Объект.Товары.Количество();
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьТЗНаСервере()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Корзина.Номенклатура КАК Номенклатура,
| СУММА(Корзина.Количество) КАК Количество
|ИЗ
| РегистрСведений.Корзина КАК Корзина
|ГДЕ
| Корзина.Заказ = &Заказ
|
|СГРУППИРОВАТЬ ПО
| Корзина.Номенклатура
|
|УПОРЯДОЧИТЬ ПО
| МИНИМУМ(Корзина.ДатаДобавления)";
Запрос.УстановитьПараметр("Заказ", Объект.Ссылка);
РезультатЗапроса = Запрос.Выполнить().Выгрузить();
Объект.Товары.Загрузить(РезультатЗапроса);
Модифицированность = Истина;
КонецПроцедуры
&НаСервере
Процедура НастроитьОформлениеСпискаТоваров()
// Жирный, размер 34
Элементы.СписокТоваровНоменклатура.Шрифт = Новый Шрифт(, 34, Истина);
// Цвета тоже можно задать программно
Элементы.СписокТоваровКоличество.ЦветТекста = Новый Цвет(46, 125, 50); // #2E7D32
Элементы.СписокТоваровКоличество.ЦветФона = Новый Цвет(232, 245, 233); // #E8F5E9
// Увеличить относительно текущего шрифта элемента (масштаб в %)
// Элементы.СписокТоваровКоличество.Шрифт =
// Новый Шрифт(Элементы.СписокТоваровКоличество.Шрифт,,,,,,, 150);
КонецПроцедуры
&НаСервере
Процедура СинхронизироватьКорзинуИзТоваровНаСервере()
Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда
Возврат;
КонецЕсли;
НаборЗаписей = РегистрыСведений.Корзина.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Заказ.Установить(Объект.Ссылка);
ДатаДобавления = ТекущаяДата();
НомерСтроки = 0;
Для Каждого СтрокаТоваров Из Объект.Товары Цикл
Если Не ЗначениеЗаполнено(СтрокаТоваров.Номенклатура)
Или СтрокаТоваров.Количество <= 0 Тогда
Продолжить;
КонецЕсли;
НомерСтроки = НомерСтроки + 1;
Запись = НаборЗаписей.Добавить();
Запись.Заказ = Объект.Ссылка;
Запись.Номенклатура = СтрокаТоваров.Номенклатура;
Запись.Количество = СтрокаТоваров.Количество;
Запись.ДатаДобавления = ДатаДобавления + НомерСтроки;
КонецЦикла;
НаборЗаписей.Записать();
КонецПроцедуры
&НаКлиенте
Процедура ТоварыПередУдалением(Элемент, Отказ)
УдалитьИзКорзиныНаСервере(Элементы.Товары.ТекущиеДанные.Номенклатура);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
Если РежимВыделенияТоваровАктивен() Тогда
Если СтандартнаяОбработка <> Неопределено Тогда
СтандартнаяОбработка = Ложь;
КонецЕсли;
Возврат;
КонецЕсли;
ОткрытьРедактированиеКоличестваПоСтроке(ВыбраннаяСтрока, СтандартнаяОбработка, Ложь);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыПриАктивизацииСтроки(Элемент)
ОбработатьАктивизациюСтрокиТоваров(Элементы.Товары.ТекущаяСтрока, Ложь);
КонецПроцедуры
&НаКлиенте
Процедура СписокТоваровВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
Если РежимВыделенияТоваровАктивен() Тогда
// На мобильном тап приходит в Выбор, а не в активизацию.
// В режиме выделения переключаем пометку строки ТЧ.
Если СтандартнаяОбработка <> Неопределено Тогда
СтандартнаяОбработка = Ложь;
КонецЕсли;
ПереключитьВыдТовСтроки(ВыбраннаяСтрока, Истина);
Возврат;
КонецЕсли;
ОткрытьРедактированиеКоличестваПоСтроке(ВыбраннаяСтрока, СтандартнаяОбработка, Истина);
КонецПроцедуры
&НаКлиенте
Процедура СписокТоваровПриАктивизацииСтроки(Элемент)
// В режиме выделения переключение делается в СписокТоваровВыбор (мобильный клиент).
Если РежимВыделенияТоваровАктивен() Тогда
Возврат;
КонецЕсли;
ОбработатьАктивизациюСтрокиТоваров(Элементы.СписокТоваров.ТекущаяСтрока, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ОбработатьАктивизациюСтрокиТоваров(ИдентификаторСтроки, ИзСписка)
Если РежимВыделенияТоваровАктивен() Тогда
// Для скрытой ТЧ (если вдруг видна) — по активизации.
Если Не ИзСписка И Не БлокироватьПереключениеВыдТов Тогда
ПереключитьВыдТовСтроки(ИдентификаторСтроки, ИзСписка);
КонецЕсли;
Возврат;
КонецЕсли;
Если БлокироватьОткрытиеПанелиКоличества Тогда
Возврат;
КонецЕсли;
ОткрытьРедактированиеКоличестваПоСтроке(ИдентификаторСтроки, Неопределено, ИзСписка);
КонецПроцедуры
&НаКлиенте
Процедура ПереключитьВыдТовСтроки(ИдентификаторСтроки, ИзСписка = Ложь)
ДанныеСтроки = ПолучитьДанныеСтрокиТоваров(ИдентификаторСтроки, ИзСписка);
Если ДанныеСтроки = Неопределено Тогда
Возврат;
КонецЕсли;
ДанныеСтроки.ВыдТов = Не ДанныеСтроки.ВыдТов;
УстановитьИндексКартинкиВыдТов(ДанныеСтроки);
КонецПроцедуры
&НаКлиенте
Процедура УстановитьИндексКартинкиВыдТов(СтрокаТоваров)
// 0 — левая половина (выбрано), 1 — правая (не выбрано)
Если СтрокаТоваров.ВыдТов Тогда
СтрокаТоваров.ИндексКартинкиВыдТов = 0;
Иначе
СтрокаТоваров.ИндексКартинкиВыдТов = 1;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьИндексыКартинкиВыдТов()
Для Каждого СтрокаТоваров Из Объект.Товары Цикл
УстановитьИндексКартинкиВыдТов(СтрокаТоваров);
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Функция РежимВыделенияТоваровАктивен()
Возврат РежимВыделенияТоваров = Истина;
КонецФункции
&НаКлиенте
Процедура ВыделитьТовары(Команда)
Если РежимВыделенияТоваровАктивен() Тогда
СкрытьРежимВыделенияТоваров();
Иначе
ПоказатьРежимВыделенияТоваров();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПоказатьРежимВыделенияТоваров()
// На мобильном динсписок не даёт нормального множественного выделения с галочками.
// В режиме выделения показываем ТЧ Товары с колонкой ВыдТов (как раньше).
РежимВыделенияТоваров = Истина;
Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаТовары;
Элементы.ПанельПоискаТоваров.Видимость = Ложь;
Элементы.СписокТоваров.Видимость = Ложь;
Элементы.Товары.Видимость = Истина;
Элементы.ТоварыВыдТов.Видимость = Истина;
Элементы.ТоварыВыделить.Пометка = Истина;
Элементы.СписокТоваровВыделить.Пометка = Истина;
ОбновитьВидимостьКнопкиУдаленияВыделенных(Истина);
БлокироватьПереключениеВыдТов = Истина;
ПодключитьОбработчикОжидания("РазблокироватьПереключениеВыдТов", 0.3, Истина);
КонецПроцедуры
&НаКлиенте
Процедура СкрытьРежимВыделенияТоваров()
БлокироватьОткрытиеПанелиКоличества = Истина;
РежимВыделенияТоваров = Ложь;
Элементы.ТоварыВыдТов.Видимость = Ложь;
Элементы.ТоварыВыделить.Пометка = Ложь;
Элементы.СписокТоваровВыделить.Пометка = Ложь;
ОбновитьВидимостьКнопкиУдаленияВыделенных(Ложь);
СброситьВыдТов();
Если Не Элементы.ПанельКоличества.Видимость Тогда
Элементы.Товары.Видимость = Ложь;
Элементы.СписокТоваров.Видимость = Истина;
Элементы.ПанельПоискаТоваров.Видимость = Ложь;
КонецЕсли;
ОтключитьОбработчикОжидания("РазблокироватьОткрытиеПанелиКоличества");
ПодключитьОбработчикОжидания("РазблокироватьОткрытиеПанелиКоличества", 0.5, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьВидимостьКнопкиУдаленияВыделенных(ВидимостьКнопки)
Элементы.ТоварыУдалитьВыделенные.Видимость = ВидимостьКнопки;
Элементы.СписокТоваровУдалитьВыделенные.Видимость = ВидимостьКнопки;
КонецПроцедуры
&НаКлиенте
Процедура СброситьВыдТов()
Для Каждого СтрокаТоваров Из Объект.Товары Цикл
СтрокаТоваров.ВыдТов = Ложь;
УстановитьИндексКартинкиВыдТов(СтрокаТоваров);
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура УдалитьВыделенныеТовары(Команда)
СтрокиКУдалению = Новый Массив;
Для Каждого СтрокаТоваров Из Объект.Товары Цикл
Если СтрокаТоваров.ВыдТов Тогда
СтрокиКУдалению.Добавить(СтрокаТоваров);
КонецЕсли;
КонецЦикла;
Если СтрокиКУдалению.Количество() = 0 Тогда
Возврат;
КонецЕсли;
Для Каждого СтрокаТоваров Из СтрокиКУдалению Цикл
УдалитьИзКорзиныНаСервере(СтрокаТоваров.Номенклатура);
Объект.Товары.Удалить(СтрокаТоваров);
КонецЦикла;
Модифицированность = Истина;
ОбновитьОтображениеТоваров();
СкрытьРежимВыделенияТоваров();
ЗаполнитьСписокТоваровИзТЧ();
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьРедактированиеКоличестваПоСтроке(ИдентификаторСтроки, СтандартнаяОбработка, ИзСписка = Ложь)
Если ЭтаФорма.ТолькоПросмотр
Или Элементы.ПанельКоличества.Видимость
Или БлокироватьОткрытиеПанелиКоличества
Или РежимВыделенияТоваровАктивен() Тогда
Возврат;
КонецЕсли;
ДанныеСтроки = ПолучитьДанныеСтрокиТоваров(ИдентификаторСтроки, ИзСписка);
Если ДанныеСтроки = Неопределено Или Не ЗначениеЗаполнено(ДанныеСтроки.Номенклатура) Тогда
Возврат;
КонецЕсли;
Если СтандартнаяОбработка <> Неопределено Тогда
СтандартнаяОбработка = Ложь;
КонецЕсли;
ПоказатьПанельКоличества(ДанныеСтроки);
КонецПроцедуры
&НаСервере
Процедура УдалитьИзКорзиныНаСервере(ном)
НаборЗаписей = РегистрыСведений.Корзина.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Номенклатура.Установить(ном);
НаборЗаписей.Отбор.Заказ.Установить(Объект.Ссылка);
НаборЗаписей.Записать();
КонецПроцедуры
&НаСервере
Процедура ЗаписатьНаСервере(ном,кол)
Если Не ЗначениеЗаполнено(ном) Тогда
Возврат;
КонецЕсли;
Если кол <= 0 Тогда
УдалитьИзКорзиныНаСервере(ном);
Возврат;
КонецЕсли;
Запись=РегистрыСведений.Корзина.СоздатьМенеджерЗаписи();
Запись.Номенклатура=ном;
Запись.Заказ=Объект.Ссылка;
Запись.Количество=кол;
Запись.ДатаДобавления=ТекущаяДата();
Запись.Записать();
КонецПроцедуры
&НаКлиенте
Процедура ТоварыКоличествоПриИзменении(Элемент)
ЗаписатьНаСервере(Элементы.Товары.ТекущиеДанные.Номенклатура,Элементы.Товары.ТекущиеДанные.Количество);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыПередНачаломИзменения(Элемент, Отказ)
Если РежимВыделенияТоваровАктивен() Тогда
Возврат;
КонецЕсли;
Отказ = Истина;
КонецПроцедуры
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если не значениеЗаполнено(ПараметрыСеанса.ТекущийМагазин) Тогда
Сообщить("Не выбран ТекущийМагазин!");
Отказ=Истина;
КонецЕсли;
Если Параметры.Ключ.Пустая() Тогда
Объект.Магазин=ПараметрыСеанса.ТекущийМагазин;
Объект.Статус=Перечисления.Статусы.Вработе;
Объект.Автор=ОмСлужебный.ТекущийПользователь();
КонецЕсли;
НастроитьСписокТоваровНаСервере();
// НастроитьОформлениеСпискаТоваров();
// УстановитьУсловноеОформлениеДублейТоваров();
КонецПроцедуры
&НаСервере
Процедура УстановитьУсловноеОформлениеДублейТоваров()
ЭлементУО = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = ЭлементУО.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных("Объект.Товары");
ОтборЭлемента = ЭлементУО.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.ДубльТов");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
ОтборЭлемента.Использование = Истина;
ЭлементУО.Оформление.УстановитьЗначениеПараметра("ЦветФона", Новый Цвет(255, 235, 238));
ЭлементУО.Оформление.УстановитьЗначениеПараметра("ЦветТекста", Новый Цвет(183, 28, 28));
КонецПроцедуры
&НаКлиенте
Процедура ТоварыПриИзменении(Элемент)
Если РежимВыделенияТоваровАктивен() Тогда
Возврат;
КонецЕсли;
Если ЗначениеЗаполнено(Элементы.Товары.ТекущиеДанные) Тогда
ЗаписатьНаСервере(Элементы.Товары.ТекущиеДанные.Номенклатура, Элементы.Товары.ТекущиеДанные.Количество);
КонецЕсли;
ОбновитьОтображениеТоваров();
ЗаполнитьСписокТоваровИзТЧ();
КонецПроцедуры
&НаКлиенте
Функция ПолучитьДанныеСтрокиТоваров(ИдентификаторСтроки, ИзСписка = Ложь)
Если ИзСписка Тогда
НоменклатураПоиска = Неопределено;
Если ИдентификаторСтроки <> Неопределено Тогда
СтрокаСписка = СписокТоваров.НайтиПоИдентификатору(ИдентификаторСтроки);
Если СтрокаСписка <> Неопределено Тогда
НоменклатураПоиска = СтрокаСписка.Номенклатура;
КонецЕсли;
КонецЕсли;
Если Не ЗначениеЗаполнено(НоменклатураПоиска) Тогда
ТекущиеДанныеСписка = Элементы.СписокТоваров.ТекущиеДанные;
Если ТекущиеДанныеСписка <> Неопределено Тогда
НоменклатураПоиска = ТекущиеДанныеСписка.Номенклатура;
КонецЕсли;
КонецЕсли;
Если Не ЗначениеЗаполнено(НоменклатураПоиска) Тогда
Возврат Неопределено;
КонецЕсли;
Для Каждого СтрокаДокумента Из Объект.Товары Цикл
Если СтрокаДокумента.Номенклатура = НоменклатураПоиска Тогда
Возврат СтрокаДокумента;
КонецЕсли;
КонецЦикла;
Возврат Неопределено;
КонецЕсли;
Если ИдентификаторСтроки <> Неопределено Тогда
СтрокаТоваров = Объект.Товары.НайтиПоИдентификатору(ИдентификаторСтроки);
Если СтрокаТоваров <> Неопределено Тогда
Возврат СтрокаТоваров;
КонецЕсли;
КонецЕсли;
ТекущиеДанные = Элементы.Товары.ТекущиеДанные;
Если ТекущиеДанные <> Неопределено И ЗначениеЗаполнено(ТекущиеДанные.Номенклатура) Тогда
Возврат ТекущиеДанные;
КонецЕсли;
Возврат Неопределено;
КонецФункции
&НаКлиенте
Процедура ПоказатьПанельКоличества(ДанныеСтроки)
СтрокаТоваровДляРедактирования = ДанныеСтроки;
ВыбраннаяНоменклатураНаименование = ПолучитьНаименованиеНоменклатурыНаСервере(ДанныеСтроки.Номенклатура);
КоличествоРедактирования = ДанныеСтроки.Количество;
Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаТовары;
Элементы.СтраницаРеквизиты.Видимость = Ложь;
Элементы.ПанельПоискаТоваров.Видимость = Ложь;
Элементы.Товары.Видимость = Ложь;
Элементы.СписокТоваров.Видимость = Ложь;
Элементы.ПанельКоличества.Видимость = Истина;
КонецПроцедуры
&НаКлиенте
Процедура СкрытьПанельКоличества()
БлокироватьОткрытиеПанелиКоличества = Истина;
Элементы.ПанельКоличества.Видимость = Ложь;
Элементы.СтраницаРеквизиты.Видимость = Истина;
Элементы.Товары.Видимость = Ложь;
Элементы.СписокТоваров.Видимость = Истина;
Элементы.ПанельПоискаТоваров.Видимость = Ложь;
Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаТовары;
СтрокаТоваровДляРедактирования = Неопределено;
ВыбраннаяНоменклатураНаименование = "";
КоличествоРедактирования = 0;
СкрытьРежимВыделенияТоваров();
ПодключитьОбработчикОжидания("РазблокироватьОткрытиеПанелиКоличества", 0.3, Истина);
КонецПроцедуры
&НаКлиенте
Процедура РазблокироватьОткрытиеПанелиКоличества()
БлокироватьОткрытиеПанелиКоличества = Ложь;
КонецПроцедуры
&НаКлиенте
Процедура РазблокироватьПереключениеВыдТов()
БлокироватьПереключениеВыдТов = Ложь;
КонецПроцедуры
&НаКлиенте
Процедура ПодтвердитьКоличество(Команда)
Если СтрокаТоваровДляРедактирования = Неопределено Тогда
Возврат;
КонецЕсли;
СтрокаТоваровДляРедактирования.Количество = КоличествоРедактирования;
ЗаписатьНаСервере(СтрокаТоваровДляРедактирования.Номенклатура, КоличествоРедактирования);
Если КоличествоРедактирования <= 0 Тогда
Объект.Товары.Удалить(СтрокаТоваровДляРедактирования);
КонецЕсли;
ОбновитьОтображениеТоваров();
СкрытьПанельКоличества();
ЗаполнитьСписокТоваровИзТЧ();
КонецПроцедуры
&НаКлиенте
Процедура ОтменитьКоличество(Команда)
СкрытьПанельКоличества();
КонецПроцедуры
&НаКлиенте
Процедура УвеличитьКоличество(Команда)
КоличествоРедактирования = КоличествоРедактирования + 1;
КонецПроцедуры
&НаКлиенте
Процедура УменьшитьКоличество(Команда)
Если КоличествоРедактирования > 0 Тогда
КоличествоРедактирования = КоличествоРедактирования - 1;
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьНаименованиеНоменклатурыНаСервере(Номенклатура)
Возврат Номенклатура.Наименование;
КонецФункции
&НаКлиенте
Процедура ПриОткрытии(Отказ)
СтрокаТоваровДляРедактирования = Неопределено;
РежимВыделенияТоваров = Ложь;
БлокироватьОткрытиеПанелиКоличества = Истина;
Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаТовары;
Элементы.СтраницаРеквизиты.Видимость = Истина;
Элементы.Товары.Видимость = Ложь;
Элементы.СписокТоваров.Видимость = Истина;
Элементы.ПанельПоискаТоваров.Видимость = Ложь;
Элементы.ТоварыВыдТов.Видимость = Ложь;
Элементы.ТоварыВыделить.Пометка = Ложь;
Элементы.СписокТоваровВыделить.Пометка = Ложь;
ОбновитьВидимостьКнопкиУдаленияВыделенных(Ложь);
ОбновитьОтображениеТоваров();
ЗаполнитьСписокТоваровИзТЧ();
ПодключитьОбработчикОжидания("РазблокироватьОткрытиеПанелиКоличества", 0.5, Истина);
Если Объект.Статус=ПредопределенноеЗначение("Перечисление.Статусы.Отправлен") Тогда
ЭтаФорма.ТолькоПросмотр=Истина;
КонецЕСли;
КонецПроцедуры
&НаКлиенте
Процедура ПриЗакрытии(ЗавершениеРаботы)
ОтключитьОбработчикОжидания("РазблокироватьОткрытиеПанелиКоличества");
ОтключитьОбработчикОжидания("РазблокироватьПереключениеВыдТов");
КонецПроцедуры