828 lines
39 KiB
Plaintext
828 lines
39 KiB
Plaintext
|
||
&НаКлиенте
|
||
Перем СтрокаТоваровДляРедактирования;
|
||
&НаКлиенте
|
||
Перем БлокироватьОткрытиеПанелиКоличества;
|
||
&НаКлиенте
|
||
Перем РежимВыделенияТоваров;
|
||
&НаКлиенте
|
||
Перем БлокироватьПереключениеВыдТов;
|
||
|
||
&НаКлиенте
|
||
Процедура ПослеЗаписи(ПараметрыЗаписи)
|
||
////ПослеЗаписиНаСервере();
|
||
КонецПроцедуры
|
||
|
||
&НаСервере
|
||
Процедура ПослеЗаписиНаСервере()
|
||
|
||
тзиб=новый таблицазначений;
|
||
тзиб.Колонки.Добавить("иб",новый ОписаниеТипов("СправочникСсылка.ИБ"));
|
||
Для каждого стр из Объект.Товары цикл
|
||
эл=тзиб.Добавить();
|
||
эл.иб=стр.номенклатура.ИБ;
|
||
КонецЦикла;
|
||
тзиб.Свернуть("иб");
|
||
Для каждого стр из тзиб цикл
|
||
Подключение=ОмСлужебный.ПодключениеУТ(стр.иб);
|
||
Док=Подключение.Документы.ЗаказКлиента.НайтиПоНомеру("МГ"+Объект.Номер,Объект.Дата);
|
||
Если Подключение.ЗначениеЗаполнено(Док) тогда
|
||
Док=Док.ПолучитьОбъект();
|
||
Иначе
|
||
Док=Подключение.Документы.ЗаказКлиента.СоздатьДокумент();
|
||
КонецЕСли;
|
||
Док.Товары.Очистить();
|
||
Для каждого стр из Объект.Товары цикл
|
||
тов=Док.Товары.Добавить();
|
||
уид=Подключение.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, Истина);
|
||
|
||
Если Объект.Статус=ПредопределенноеЗначение("Перечисление.Статусы.Отправлен") Тогда
|
||
ЭтаФорма.ТолькоПросмотр=Истина;
|
||
КонецЕСли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ПриЗакрытии(ЗавершениеРаботы)
|
||
|
||
ОтключитьОбработчикОжидания("РазблокироватьОткрытиеПанелиКоличества");
|
||
ОтключитьОбработчикОжидания("РазблокироватьПереключениеВыдТов");
|
||
|
||
КонецПроцедуры
|
||
|
||
|
||
|
||
|