Загрузка данных
&НаСервере
Процедура ПриСозданииНаСервере(пОтказ, пСтандартнаяОбработка)
ДатаНачалаВыполнения=ТекущаяДата();
Элементы.ГруппаПодвал.Видимость=Ложь;
УчетнаяЗапись=Параметры.УчетнаяЗапись;
Для Каждого лДокумент Из Параметры.Документы Цикл
ТаблицаДокументы.Добавить().Ссылка=лДокумент;
Склад=лДокумент.Склад;
Для Каждого лСтрокаТоварыОтбор Из лДокумент.ТоварыОтбор Цикл
лСтрокаТовары=Товары.Добавить();
ЗаполнитьЗначенияСвойств(лСтрокаТовары, лСтрокаТоварыОтбор);
лСтрокаТовары.КоличествоВыбрано=лСтрокаТоварыОтбор.КоличествоОтобрано;
лСтрокаТовары.ЯчейкаОткуда=лСтрокаТоварыОтбор.Ячейка;
лСтрокаТовары.ЯчейкаКуда=лДокумент.ЗонаОтгрузки;
КонецЦикла;
КонецЦикла;
#Область СверткаИСортировка
лТзТовары=Товары.Выгрузить();
лТзТовары.Свернуть("Номенклатура, ЯчейкаОткуда, ЯчейкаКуда", "Количество, КоличествоВыбрано");
лТзТовары.Колонки.Добавить("Секция");
лТзТовары.Колонки.Добавить("Линия", Новый ОписаниеТипов("Число"));
лТзТовары.Колонки.Добавить("Стеллаж", Новый ОписаниеТипов("Число"));
лТзТовары.Колонки.Добавить("Ярус", Новый ОписаниеТипов("Число"));
Для Каждого лСтрокаТзТовары Из лТзТовары Цикл
ЗаполнитьЗначенияСвойств(лСтрокаТзТовары, лСтрокаТзТовары.ЯчейкаОткуда, "Секция, Линия, Стеллаж, Ярус");
КонецЦикла;
лТзТовары.Сортировать("Секция, Линия, Стеллаж, Ярус, Номенклатура");
Товары.Загрузить(лТзТовары);
#КонецОбласти
ЯчейкаКуда=лДокумент.ЗонаОтгрузки;
Элементы.ГруппаЯчейкаКуда.Видимость=Ложь;
Элементы.ТоварыЯчейкаКуда.Видимость=Ложь;
ИспользоватьПодключаемоеОборудование=Истина;
Заголовок="Отбор товары ("+?(ЗначениеЗаполнено(УчетнаяЗапись), УчетнаяЗапись, "внутренние")+")";
Элементы.Комментарий.Видимость=Не ЗначениеЗаполнено(УчетнаяЗапись);
Если Элементы.Комментарий.Видимость Тогда
Элементы.Комментарий.Заголовок=ТаблицаДокументы[0].Ссылка.Распоряжение.Комментарий;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ТоварыВыбор(пЭлемент, пВыбраннаяСтрока, пПоле, пСтандартнаяОбработка)
пСтандартнаяОбработка=Ложь;
Если Не ВРаботе Тогда
Если Не мВзятьВРаботу() Тогда Возврат; КонецЕсли;
КонецЕсли;
ТсПлатформаМодули.МПКлиент().ФормаСтатусУстановить(ЭтаФорма, "");
мВвестиКоличество(Товары.НайтиПоИдентификатору(пВыбраннаяСтрока));
КонецПроцедуры
&НаСервереБезКонтекста
Функция мУпаковкаПолучить()
Возврат Справочники.УпаковкиЕдиницыИзмерения.НайтиПоНаименованию("1 шт"); // для Кореаны только 1 единица измерения на все
КонецФункции
&НаСервереБезКонтекста
Функция мПодключениеУТПолучить()
#Если Не МобильноеПриложениеСервер Тогда
Возврат Справочники.ТсПодключения.НайтиПоНаименованию("УТ КМаркет Кореана рабочая"); // отладка
#КонецЕсли
лПодключение=ТсПлатформаОбщий.КонстантаПолучить("ТсПлатформаПодключениеЧерезСервис");
Если Не ЗначениеЗаполнено(лПодключение) Тогда Сообщить("Не заполнена константа подключение через сервис"); Возврат Неопределено; КонецЕсли;
лЗапрос=Новый Запрос;
лЗапрос.УстановитьПараметр("ПодключениеИсточник", лПодключение);
лЗапрос.Текст=
"ВЫБРАТЬ
| ТсОбменПравилаВыгрузокКонфигураций.ПодключениеПриемник КАК ПодключениеПриемник
|ИЗ
| Справочник.ТсОбменПравилаВыгрузокКонфигураций КАК ТсОбменПравилаВыгрузокКонфигураций
|ГДЕ
| ТсОбменПравилаВыгрузокКонфигураций.ПодключениеИсточник = &ПодключениеИсточник
| И Не ТсОбменПравилаВыгрузокКонфигураций.ПометкаУдаления
| И ТсОбменПравилаВыгрузокКонфигураций.Включен";
лВыборка=лЗапрос.Выполнить().Выбрать();
Если Не лВыборка.Следующий() Тогда Сообщить("Не найдено правило выгрузки в УТ"); Возврат Неопределено; КонецЕсли;
Возврат лВыборка.ПодключениеПриемник;
КонецФункции
//&НаСервере
//Функция мПолучитьЭтикеткуОзон(пДокРасходныйОрдерНаТоварыСсылка)
// лПараметры=Новый Структура("РасходныйОрдерНаТовары", ""+пДокРасходныйОрдерНаТоварыСсылка.УникальныйИдентификатор());
// лТекстОшибки="";
// лДанные=ТсПлатформаМодули.Пользовательский().СделатьПользовательскийЗапросКСерверу("ПолучитьЭтикеткиОзон", лПараметры, лТекстОшибки);
// Если лДанные=Неопределено Тогда Возврат Ложь; КонецЕсли;
// Возврат Истина;
//КонецФункции
&НаСервере
Функция мСтрокиТоваровДляСтрокиЗадания(пТзТовары, пСтрокаТоварыОтбор, пЯчейкаКуда)
лМассивСтрок=Новый Массив;
лСтрокиТовары=пТзТовары.НайтиСтроки(Новый Структура("Номенклатура, ЯчейкаКуда", пСтрокаТоварыОтбор.Номенклатура, пЯчейкаКуда));
Для Каждого лСтрокаТовары Из лСтрокиТовары Цикл
Если лСтрокаТовары.ЯчейкаОткуда=пСтрокаТоварыОтбор.Ячейка Тогда лМассивСтрок.Добавить(лСтрокаТовары); КонецЕсли;
КонецЦикла;
Для Каждого лСтрокаТовары Из лСтрокиТовары Цикл
Если лСтрокаТовары.ЯчейкаОткуда<>пСтрокаТоварыОтбор.Ячейка Тогда лМассивСтрок.Добавить(лСтрокаТовары); КонецЕсли;
КонецЦикла;
Возврат лМассивСтрок;
КонецФункции
&НаСервере
Функция мЗавершитьЗаданиеСервер(пТекстОшибки)
Для каждого лСтрокаТовары Из Товары Цикл
Если лСтрокаТовары.Количество<лСтрокаТовары.КоличествоВыбрано Тогда
пТекстОшибки="В строке: "+(Товары.Индекс(лСтрокаТовары)+1)+" выбрано больше чем надо!";
Возврат Ложь;
КонецЕсли;
КонецЦикла;
лТзТовары=Товары.Выгрузить();
лМассивРасходныеОрдераНаТовары=Новый Массив;
НачатьТранзакцию();
Для Каждого лСтрокаТаблицаДокументы Из ТаблицаДокументы Цикл
лДокументОбъект=лСтрокаТаблицаДокументы.Ссылка.ПолучитьОбъект();
Если Ложь Тогда лДокументОбъект=Документы.ОтборРазмещениеТоваров.СоздатьДокумент(); КонецЕсли;
лВсеОтобраны=Истина;
Для Каждого лСтрокаТоварыОтбор Из лДокументОбъект.ТоварыОтбор Цикл
лСтрокиТовары=лТзТовары.НайтиСтроки(Новый Структура("ЯчейкаОткуда, Номенклатура", лСтрокаТоварыОтбор.Ячейка, лСтрокаТоварыОтбор.Номенклатура));
Если лСтрокиТовары.Количество()=0 Тогда пТекстОшибки="Ошибка документ был изменен!"; Возврат Ложь; КонецЕсли;
лСтрокаТовары=лСтрокиТовары[0];
лКоличествоОтобрано=Мин(лСтрокаТоварыОтбор.Количество, лСтрокаТовары.КоличествоВыбрано);
лСтрокаТовары.КоличествоВыбрано=лСтрокаТовары.КоличествоВыбрано-лКоличествоОтобрано;
лСтрокаТоварыОтбор.КоличествоОтобрано=лКоличествоОтобрано;
лСтрокаТоварыОтбор.КоличествоУпаковокОтобрано=лСтрокаТоварыОтбор.КоличествоОтобрано;
Если лСтрокаТоварыОтбор.Количество<>лСтрокаТоварыОтбор.КоличествоОтобрано Тогда лВсеОтобраны=Ложь; КонецЕсли;
КонецЦикла;
лДокументОбъект.ДатаОкончанияВыполнения=ТекущаяДата();
лДокументОбъект.Ответственный=ПараметрыСеанса.ТсПользователиТекущийПользователь;
лДокументОбъект.Статус=?(лВсеОтобраны, Перечисления.СтатусыОтборовРазмещенийТоваров.ВыполненоБезОшибок, Перечисления.СтатусыОтборовРазмещенийТоваров.ВыполненоСОшибками);
лДокументОбъект.Записать(); // ?(лДокументОбъект.Проведен, РежимЗаписиДокумента.Проведение, РежимЗаписиДокумента.Запись) смысла проводить нет, все равно нет движений тут
Если Не лВсеОтобраны Тогда Продолжить; КонецЕсли;
лРасходныйОрдерНаТоварыСсылка=лСтрокаТаблицаДокументы.Ссылка.Распоряжение;
Если Не ЗначениеЗаполнено(лРасходныйОрдерНаТоварыСсылка) Тогда Продолжить; КонецЕсли;
Если Не ЗначениеЗаполнено(лРасходныйОрдерНаТоварыСсылка.НомерМаркетплейса) Тогда Продолжить; КонецЕсли;
Если лМассивРасходныеОрдераНаТовары.Найти(лРасходныйОрдерНаТоварыСсылка)<>Неопределено Тогда Продолжить; КонецЕсли;
лМассивРасходныеОрдераНаТовары.Добавить(лРасходныйОрдерНаТоварыСсылка);
лДокРасходныйОрдерНаТоварыОбъект=лРасходныйОрдерНаТоварыСсылка.ПолучитьОбъект();
лДокРасходныйОрдерНаТоварыОбъект.ОбменДанными.Загрузка=Истина; // Для того чтобы можно было упаковывать уже, но нам не нужно чтобы он уходил в 1с, в 1с и так он алгоритмом сделается
лДокРасходныйОрдерНаТоварыОбъект.Статус=Перечисления.СтатусыРасходныхОрдеров.КПроверке;
лДокРасходныйОрдерНаТоварыОбъект.Записать();
КонецЦикла;
ЗафиксироватьТранзакцию(); // чтобы либо все записались нормально, либо ни один
//Для Каждого лДокРасходныйОрдерНаТовары Из лМассивРасходныеОрдераНаТовары Цикл
// Если лДокРасходныйОрдерНаТовары.УчетнаяЗапись.Маркетплейс=Перечисления.Маркетплейсы.Озон Тогда
// лТекстОшибки="";
// Если Не мСобратьЗаказВОзон(лДокРасходныйОрдерНаТовары, лТекстОшибки) Тогда
// Сообщить("Не смогли собрать заказ Озон, ответ сервера: "+лТекстОшибки);
// Продолжить;
// КонецЕсли;
//
// мПолучитьЭтикеткуОзон(лДокРасходныйОрдерНаТовары);
// КонецЕсли;
//КонецЦикла;
Возврат Истина;
КонецФункции
&НаКлиенте
Функция мЗавершитьЗаданиеКлиент()
лТекстОшибки="";
Если Не мЗавершитьЗаданиеСервер(лТекстОшибки) Тогда Сообщить(лТекстОшибки); Возврат Ложь; КонецЕсли;
ОткрытьФорму(ТсПлатформаОбщий.ПолучитьИмяОбъектаФормы(ИмяФормы)+".Форма.ОтборСписок", Новый Структура("УчетнаяЗапись, Склад, СкладскаяОперация", УчетнаяЗапись, Склад, Неопределено));
ЗавершитьРаботуБезВопросов=Истина;
Закрыть();
Возврат Истина;
КонецФункции
&НаКлиенте
Функция мЗавершитьНеВсеОтобраныОповещение(пРезультат, пПараметры) Экспорт
Если пРезультат<>КодВозвратаДиалога.Да Тогда Возврат Истина; КонецЕсли;
мЗавершитьЗаданиеКлиент();
КонецФункции
&НаКлиенте
Процедура Завершить(Команда)
Для Каждого лСтрокаТовары Из Товары Цикл
Если лСтрокаТовары.Количество=лСтрокаТовары.КоличествоВыбрано Тогда Продолжить; КонецЕсли;
лОписаниеОповещения=Новый ОписаниеОповещения("мЗавершитьНеВсеОтобраныОповещение", ЭтотОбъект, Новый Структура);
ПоказатьВопрос(лОписаниеОповещения, "Не все товары отобраны, завершить задание с ошибками?", РежимДиалогаВопрос.ДаНет);
Возврат;
КонецЦикла;
мЗавершитьЗаданиеКлиент();
КонецПроцедуры
//&НаКлиенте
//Функция мПроверкаЧтоВсеЗаполнилиИЕслиДаТоОтключениеОтбора(пДанныеСтроки)
// Если Не ЗначениеЗаполнено(ЯчейкаОткуда) Тогда Возврат Ложь; КонецЕсли; // не нужно обрабатывать
//
// лЕстьНезаполненныеЯчейки=Ложь;
// Для Каждого лСтрокаТовары Из Товары Цикл // Если где то не выбрано все, то не сбрасываем отборы
// Если ЯчейкаОткуда<>лСтрокаТовары.ЯчейкаОткуда Тогда Продолжить; КонецЕсли;
// Если лСтрокаТовары.Количество<>лСтрокаТовары.КоличествоВыбрано Тогда лЕстьНезаполненныеЯчейки=Истина; КонецЕсли;
// КонецЦикла;
// Если лЕстьНезаполненныеЯчейки Тогда Возврат Истина; КонецЕсли;
//
// #Область ПолучаемСледующуюЯчейкуВКоторойКоличествоНеСовпадает
// лЯчейкаОткудаНовая="";
// лИндексСтроки=Товары.Индекс(пДанныеСтроки);
// Для лИнд=лИндексСтроки+1 По Товары.Количество()-1 Цикл
// лСтрокаТовары=Товары[лИнд];
// Если лСтрокаТовары.Количество=лСтрокаТовары.КоличествоВыбрано Тогда Продолжить; КонецЕсли;
// лЯчейкаОткудаНовая=лСтрокаТовары.ЯчейкаОткуда;
// Прервать;
// КонецЦикла;
// #КонецОбласти
//
// ЯчейкаОткуда=лЯчейкаОткудаНовая;
// ЯчейкаПодтверждена=Ложь;
// мЯчейкаОткудаПриИзменении();
//
// мТоварыОбновитьОтборПоЯчейкам();
//КонецФункции
&НаКлиенте
Функция мСледующаяЯчейка()
лДошлиДоЯчейкиОткуда=Ложь; лНашлиСледующую=Ложь;
Для Каждого лСтрокаТовары Из Товары Цикл
Если лСтрокаТовары.ЯчейкаОткуда<>ЯчейкаОткуда и лДошлиДоЯчейкиОткуда Тогда лНашлиСледующую=Истина; Прервать; КонецЕсли;
Если лСтрокаТовары.ЯчейкаОткуда=ЯчейкаОткуда Тогда лДошлиДоЯчейкиОткуда=Истина; КонецЕсли;
КонецЦикла;
ЯчейкаОткуда=?(лНашлиСледующую, лСтрокаТовары.ЯчейкаОткуда, "");
ЯчейкаПодтверждена=Ложь;
мЯчейкаОткудаПриИзменении();
мТоварыОбновитьОтборПоЯчейкам();
КонецФункции
&НаКлиенте
Функция мТоварыВсеОтобраны()
Для Каждого лСтрокаТовары Из Товары Цикл // Если где то не выбрано все, то не сбрасываем отборы
Если лСтрокаТовары.Количество<>лСтрокаТовары.КоличествоВыбрано Тогда Возврат Ложь; КонецЕсли;
КонецЦикла;
Возврат Истина;
КонецФункции
&НаКлиенте
Функция мКоличествоПриИзменении()
Если мТоварыВсеОтобраны() и Не Элементы.Завершить.Видимость Тогда
Элементы.Завершить.Видимость=Истина;
Элементы.СледующаяЯчейка.Видимость=Ложь;
КонецЕсли;
КонецФункции
&НаКлиенте
Функция ОбработатьШтрихкод(пШтрихкод) Экспорт
Если Не ВРаботе Тогда
Если Не мВзятьВРаботу() Тогда Возврат Ложь; КонецЕсли;
КонецЕсли;
Если Не ЗначениеЗаполнено(пШтрихкод) Тогда Возврат Истина; КонецЕсли;
лЯчейка=ТсПлатформаМодули.ПользовательскийКлиент().НайтиЯчейкуПоКоду(пШтрихкод, Склад);
Если ЗначениеЗаполнено(лЯчейка) Тогда
Если Товары.НайтиСтроки(Новый Структура("ЯчейкаОткуда", лЯчейка)).Количество()=0 Тогда
ТсПлатформаМодули.МПКлиент().ФормаСтатусУстановить(ЭтаФорма, "Выбрана ячейка: "+лЯчейка+" которой нет в документе", Ложь);
Сообщить(СтрокаСтатуса);
Возврат Истина;
КонецЕсли;
ЯчейкаОткуда=лЯчейка;
ЯчейкаПодтверждена=Истина;
мЯчейкаОткудаПриИзменении();
ТсПлатформаМодули.МПКлиент().ФормаСтатусУстановить(ЭтаФорма, "Установлена ячейка: "+лЯчейка);
Возврат Истина;
КонецЕсли;
лСтруктураНоменклатура=ТсПлатформаМодули.ПользовательскийКлиент().НайтиТоварПоШК(пШтрихкод);
Если ЗначениеЗаполнено(лСтруктураНоменклатура.Номенклатура) Тогда
Если Не ЗначениеЗаполнено(ЯчейкаОткуда) Тогда
Сообщить("Сначала выберите ячейку отбора");
Возврат Истина;
КонецЕсли;
Если Не ЯчейкаПодтверждена Тогда
Сообщить("Нужно подтвердить ячейку сканированием");
Возврат Истина;
КонецЕсли;
лСтрокаДанные=Неопределено;
лОбработано=Ложь;
Для Каждого лСтрокаТовары Из Товары.НайтиСтроки(Новый Структура("Номенклатура", лСтруктураНоменклатура.Номенклатура)) Цикл
Если ЗначениеЗаполнено(ЯчейкаОткуда) и лСтрокаТовары.ЯчейкаОткуда<>ЯчейкаОткуда Тогда Продолжить; КонецЕсли;
лСтрокаТовары.КоличествоВыбрано=лСтрокаТовары.КоличествоВыбрано+1; // смотрим уже при завершении больше чем нужно или нет
лСтрокаДанные=лСтрокаТовары;
лОбработано=Истина;
Прервать; // не может быть больше одной строки
КонецЦикла;
Если лОбработано Тогда
// мПроверкаЧтоВсеЗаполнилиИЕслиДаТоОтключениеОтбора(лСтрокаТовары);
мКоличествоПриИзменении();
КонецЕсли;
ТсПлатформаМодули.МПКлиент().ФормаСтатусУстановить(ЭтаФорма, "Штрихкод: "+пШтрихкод+?(лОбработано, " обработан", " не найден"), Не лОбработано);
Возврат Истина;
КонецЕсли;
ТсПлатформаМодули.МПКлиент().ФормаСтатусУстановить(ЭтаФорма, "Не нашли: "+пШтрихкод, Ложь);
КонецФункции
&НаКлиенте
Функция мВвестиШтрихкодОповещение(пРезультат, пПараметры) Экспорт
Если пРезультат=Неопределено Тогда Возврат Истина; КонецЕсли;
ОбработатьШтрихкод(пРезультат);
КонецФункции
&НаКлиенте
Процедура ВвестиШтрихкод(Команда)
лОписаниеОповещения=Новый ОписаниеОповещения("мВвестиШтрихкодОповещение", ЭтотОбъект, Новый Структура);
ПоказатьВводСтроки(лОписаниеОповещения,, "Введите штрихкод", 50);
КонецПроцедуры
&НаСервере
Функция мТоварыОбновитьОтборПоЯчейкам()
//Элементы.ВыйтиИзЯчейки.Видимость=ЗначениеЗаполнено(ЯчейкаОткуда);
Элементы.Завершить.Видимость=Не ЗначениеЗаполнено(ЯчейкаОткуда);
Если Не ЗначениеЗаполнено(ЯчейкаОткуда) и Не ЗначениеЗаполнено(ЯчейкаКуда) Тогда
Элементы.Товары.ОтборСтрок=Неопределено;
Возврат Истина;
КонецЕсли;
лСтруктураОтбора=Новый Структура;
Если ЗначениеЗаполнено(ЯчейкаОткуда) Тогда лСтруктураОтбора.Вставить("ЯчейкаОткуда", ЯчейкаОткуда); КонецЕсли;
Если ЗначениеЗаполнено(ЯчейкаКуда) Тогда лСтруктураОтбора.Вставить("ЯчейкаКуда", ЯчейкаКуда); КонецЕсли;
Элементы.Товары.ОтборСтрок=Новый ФиксированнаяСтруктура(лСтруктураОтбора);
Возврат Истина;
КонецФункции
&НаКлиенте
Процедура ЯчейкаКудаПриИзменении(Элемент)
мТоварыОбновитьОтборПоЯчейкам();
Элементы.ТоварыЯчейкаКуда.Видимость=Не ЗначениеЗаполнено(ЯчейкаКуда);
КонецПроцедуры
&НаКлиенте
Функция мЯчейкаОткудаПриИзменении()
мТоварыОбновитьОтборПоЯчейкам();
Элементы.ТоварыЯчейкаОткуда.Видимость=Не ЗначениеЗаполнено(ЯчейкаОткуда);
Элементы.СледующаяЯчейка.Видимость=ЗначениеЗаполнено(ЯчейкаОткуда);
КонецФункции
&НаКлиенте
Процедура ЯчейкаОткудаПриИзменении(Элемент)
мЯчейкаОткудаПриИзменении();
ЯчейкаПодтверждена=ЗначениеЗаполнено(ЯчейкаОткуда); // Если вручную то потверждаем
КонецПроцедуры
&НаКлиенте
Процедура ВыйтиИзЯчейки(Команда)
ЯчейкаОткуда="";
ЯчейкаПодтверждена=Ложь;
мЯчейкаОткудаПриИзменении();
Элементы.ВыйтиИзЯчейки.Видимость=ЗначениеЗаполнено(ЯчейкаОткуда);
КонецПроцедуры
&НаКлиенте
Функция мВвестиКоличествоОповещение(пРезультат, пПараметры) Экспорт
Если пРезультат=Неопределено Тогда Возврат Истина; КонецЕсли;
пПараметры.ДанныеСтроки.КоличествоВыбрано=пРезультат; // смотрим уже при завершении больше чем нужно или нет
//мПроверкаЧтоВсеЗаполнилиИЕслиДаТоОтключениеОтбора(пПараметры.ДанныеСтроки);
мКоличествоПриИзменении();
КонецФункции
&НаКлиенте
Функция мВвестиКоличество(пДанныеСтроки)
лОписаниеОповещения=Новый ОписаниеОповещения("мВвестиКоличествоОповещение", ЭтотОбъект, Новый Структура("ДанныеСтроки", пДанныеСтроки));
лПараметры=Новый Структура("Номенклатура, Количество, КоличествоВыбрано");
ЗаполнитьЗначенияСвойств(лПараметры, пДанныеСтроки);
ОткрытьФорму(ТсПлатформаОбщий.ПолучитьИмяОбъектаФормы(ИмяФормы)+".Форма.ПодборКоличество", лПараметры, ЭтаФорма, ЭтаФорма,,, лОписаниеОповещения);
КонецФункции
&НаКлиенте
Процедура ОбработкаОповещения(пИмяСобытия, пПараметр, пИсточник)
// ПодключаемоеОборудование
Если пИмяСобытия="Штрихкод" И ВводДоступен() Тогда
ОбработатьШтрихкод(пПараметр);
КонецЕсли;
// Конец ПодключаемоеОборудование
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(пОтказ)
МенеджерОборудованияКлиент.ПодключитьОборудование(УникальныйИдентификатор);
КонецПроцедуры
&НаКлиенте
Процедура СканироватьКамерой(Команда)
ТсПлатформаМодули.МПКлиент().СканироватьШтрихкод(ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура ЯчейкаКудаОчистить(Команда)
ЯчейкаКуда="";
ЯчейкаКудаПриИзменении(Элементы.ЯчейкаКуда);
КонецПроцедуры
&НаКлиенте
Процедура ЯчейкаОткудаОчистить(Команда)
ЯчейкаОткуда="";
ЯчейкаПодтверждена=Ложь;
мЯчейкаОткудаПриИзменении();
КонецПроцедуры
&НаКлиенте
Процедура ЯчейкаВыбрать(Команда)
лДанныеСтроки=Элементы.Товары.ТекущиеДанные;
Если лДанныеСтроки=Неопределено Тогда Сообщить("Выберите строку товара"); Возврат; КонецЕсли;
Если лДанныеСтроки.КоличествоВыбрано>=лДанныеСтроки.Количество Тогда Сообщить("Товар в этой строке уже отобран"); Возврат; КонецЕсли;
//Если Не ВРаботе Тогда
// Если Не мВзятьВРаботу() Тогда Возврат; КонецЕсли;
//КонецЕсли;
лОписаниеОповещения=Новый ОписаниеОповещения("мЯчейкаВыбратьОповещение", ЭтотОбъект, Новый Структура("ИдентификаторСтроки", лДанныеСтроки.ПолучитьИдентификатор()));
лПараметры=Новый Структура("Склад, Номенклатура, ТекущаяЯчейка, Режим", Склад, лДанныеСтроки.Номенклатура, лДанныеСтроки.ЯчейкаОткуда, "Отбор");
ОткрытьФорму(ТсПлатформаОбщий.ПолучитьИмяОбъектаФормы(ИмяФормы)+".Форма.ПриемВыборЯчейки", лПараметры, ЭтаФорма, ЭтаФорма,,, лОписаниеОповещения);
КонецПроцедуры
&НаКлиенте
Функция мЯчейкаВыбратьОповещение(пРезультат, пПараметры) Экспорт
Если пРезультат=Неопределено Тогда Возврат Истина; КонецЕсли;
лТекстСообщения="";
Если Не мСтрокуПеренестиВЯчейку(пПараметры.ИдентификаторСтроки, пРезультат, лТекстСообщения) Тогда
ТсПлатформаМодули.МПКлиент().ФормаСтатусУстановить(ЭтаФорма, лТекстСообщения, Ложь);
Сообщить(лТекстСообщения);
Возврат Ложь;
КонецЕсли;
ЯчейкаОткуда=пРезультат;
ЯчейкаПодтверждена=Ложь; // выбрали из списка — подтверждаем сканированием, как в форме размещения
мЯчейкаОткудаПриИзменении();
ТсПлатформаМодули.МПКлиент().ФормаСтатусУстановить(ЭтаФорма, лТекстСообщения);
КонецФункции
&НаСервере
Функция мОстатокВЯчейкеПолучить(пНоменклатура, пЯчейка)
лЗапрос=Новый Запрос;
лЗапрос.УстановитьПараметр("Номенклатура", пНоменклатура);
лЗапрос.УстановитьПараметр("Ячейка", пЯчейка);
лЗапрос.УстановитьПараметр("Склад", Склад);
лЗапрос.Текст=
"ВЫБРАТЬ
| ТоварыВЯчейках.Количество КАК Количество
|ИЗ
| РегистрСведений.ТоварыВЯчейках КАК ТоварыВЯчейках
|ГДЕ
| ТоварыВЯчейках.Номенклатура = &Номенклатура
| И ТоварыВЯчейках.Ячейка = &Ячейка
| И ТоварыВЯчейках.Склад = &Склад";
лВыборка=лЗапрос.Выполнить().Выбрать();
Возврат ?(лВыборка.Следующий(), лВыборка.Количество, 0);
КонецФункции
&НаСервере
Функция мСтрокуПеренестиВЯчейку(пИдентификаторСтроки, пЯчейка, пТекстСообщения)
лСтрокаТовары=Товары.НайтиПоИдентификатору(пИдентификаторСтроки);
Если лСтрокаТовары=Неопределено Тогда пТекстСообщения="Строка товара не найдена, выберите её заново"; Возврат Ложь; КонецЕсли;
лЯчейкаПрежняя=лСтрокаТовары.ЯчейкаОткуда;
Если лЯчейкаПрежняя=пЯчейка Тогда пТекстСообщения="Отсканируйте ячейку: "+пЯчейка; Возврат Истина; КонецЕсли;
лОсталосьОтобрать=лСтрокаТовары.Количество-лСтрокаТовары.КоличествоВыбрано;
Если лОсталосьОтобрать<=0 Тогда пТекстСообщения="Товар в этой строке уже отобран"; Возврат Ложь; КонецЕсли;
// Свободно в ячейке: остаток по регистру минус то, что из неё по этому заданию уже забрали или ещё заберут
лСвободно=мОстатокВЯчейкеПолучить(лСтрокаТовары.Номенклатура, пЯчейка);
Для Каждого лСтрокаВЯчейке Из Товары.НайтиСтроки(Новый Структура("Номенклатура, ЯчейкаОткуда", лСтрокаТовары.Номенклатура, пЯчейка)) Цикл
лСвободно=лСвободно-лСтрокаВЯчейке.Количество;
КонецЦикла;
Если лСвободно<=0 Тогда пТекстСообщения="В ячейке "+пЯчейка+" свободного остатка этого товара нет (всё уже в задании)"; Возврат Ложь; КонецЕсли;
лПереносим=Мин(лОсталосьОтобрать, лСвободно);
лСтруктураОтбора=Новый Структура("Номенклатура, ЯчейкаОткуда, ЯчейкаКуда", лСтрокаТовары.Номенклатура, пЯчейка, лСтрокаТовары.ЯчейкаКуда);
лСтрокиПриемник=Товары.НайтиСтроки(лСтруктураОтбора);
Если лСтрокиПриемник.Количество()=0 Тогда
лСтрокаПриемник=Товары.Добавить();
ЗаполнитьЗначенияСвойств(лСтрокаПриемник, лСтруктураОтбора);
Иначе
лСтрокаПриемник=лСтрокиПриемник[0];
КонецЕсли;
лСтрокаПриемник.Количество=лСтрокаПриемник.Количество+лПереносим;
лСтрокаТовары.Количество=лСтрокаТовары.Количество-лПереносим;
Если лСтрокаТовары.Количество=0 Тогда Товары.Удалить(лСтрокаТовары); КонецЕсли; // выбрано в ней было 0, иначе перенесли бы не всё
// мТоварыСортировать();
пТекстСообщения="Из ячейки "+пЯчейка+" взять: "+лПереносим+" шт"
+?(лПереносим<лОсталосьОтобрать, ", остальные "+(лОсталосьОтобрать-лПереносим)+" шт — из "+лЯчейкаПрежняя, "")
+". Отсканируйте ячейку.";
Возврат Истина;
КонецФункции
&НаСервере
Функция мТекущееПодключениеПолучитьНаименование()
лЗапрос=Новый Запрос;
лЗапрос.Текст=
"ВЫБРАТЬ
| ТсОбменПравилаВыгрузокКонфигураций.ПодключениеПриемник.Наименование КАК Наименование
|ИЗ
| Справочник.ТсОбменПравилаВыгрузокКонфигураций КАК ТсОбменПравилаВыгрузокКонфигураций
|ГДЕ
| ТсОбменПравилаВыгрузокКонфигураций.Входящее";
лВыборка=лЗапрос.Выполнить().Выбрать();
Если Не лВыборка.Следующий() Тогда Возврат "Не подключено"; КонецЕсли;
Возврат лВыборка.Наименование;
КонецФункции
&НаСервере
Функция мДокументВзятьВРаботу()
лМассивДокументы=Новый Массив;
Для Каждого лСтрокаТаблицаДокументы Из ТаблицаДокументы Цикл
Если лСтрокаТаблицаДокументы.Ссылка.Статус=Перечисления.СтатусыОтборовРазмещенийТоваров.Подготовлено Тогда
лМассивДокументы.Добавить(""+лСтрокаТаблицаДокументы.Ссылка.УникальныйИдентификатор());
Продолжить;
КонецЕсли;
Сообщить("Задание: "+лСтрокаТаблицаДокументы.Ссылка+" уже взято в работу параллельно, нужно вернуться в предыдущую форму и выбрать заново документы!");
Возврат Ложь;
КонецЦикла;
лСтруктураПараметры=Новый Структура("Документы, Пользователь, Подключение, РабочееМесто", лМассивДокументы, ПараметрыСеанса.ТсПользователиТекущийПользователь.Наименование, мТекущееПодключениеПолучитьНаименование(), ПараметрыСеанса.РабочееМестоКлиента.Наименование);
лТекстОшибки="";
лДанные=ТсПлатформаМодули.Пользовательский().СделатьПользовательскийЗапросКСерверу("ДокументыОтбораВзятьВРаботу", лСтруктураПараметры, лТекстОшибки);
Если лДанные=Неопределено или лДанные=Ложь Тогда Сообщить(лТекстОшибки); Возврат Ложь; КонецЕсли;
// На сервере изменили, придет и так это
//Для Каждого лСтрокаТаблицаДокументы Из ТаблицаДокументы Цикл
// Если лСтрокаТаблицаДокументы.Ссылка.Статус=Перечисления.СтатусыОтборовРазмещенийТоваров.ВРаботе Тогда Продолжить; КонецЕсли; // может уже дойти
// лДокументОбъект=лСтрокаТаблицаДокументы.Ссылка.ПолучитьОбъект();
// лДокументОбъект.ОбменДанными.Загрузка=Истина; // чтобы не зарегистрировалось к обмену, статус в УТ будет изменен в пользовательском запросе выше
// лДокументОбъект.Статус=Перечисления.СтатусыОтборовРазмещенийТоваров.ВРаботе;
// Попытка лДокументОбъект.Записать(РежимЗаписиДокумента.Запись); Исключение КонецПопытки; // тут может быть такое что в момент записи уже пришло
//КонецЦикла;
Возврат Истина;
КонецФункции
&НаКлиенте
Функция мВзятьВРаботу()
Если Не мДокументВзятьВРаботу() Тогда Возврат Ложь; КонецЕсли;
ВРаботе=Истина;
Элементы.ГруппаНижняяКп.Видимость=Истина;
Элементы.ГруппаПодвал.Видимость=Истина;
Элементы.ВзятьВРаботу.Видимость=Ложь;
//мКоличествоПриИзменении();
Возврат Истина;
КонецФункции
&НаКлиенте
Процедура ВзятьВРаботу(Команда)
мВзятьВРаботу();
КонецПроцедуры
&НаКлиенте
Процедура СледующаяЯчейка(Команда)
мСледующаяЯчейка()
КонецПроцедуры
&НаСервере
Функция мДокументВернутьВСтатусПодготовлено()
НачатьТранзакцию();
Для Каждого лСтрокаТаблицаДокументы Из ТаблицаДокументы Цикл
Попытка
лДокументОбъект=лСтрокаТаблицаДокументы.Ссылка.ПолучитьОбъект();
лДокументОбъект.Статус=Перечисления.СтатусыОтборовРазмещенийТоваров.Подготовлено;
лДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
Исключение
лИнформацияОбОшибке=ИнформацияОбОшибке();
Сообщить(ТсПлатформаОбщий.ПолучитьПолноеОписаниеОшибки(лИнформацияОбОшибке));
ОтменитьТранзакцию();
Возврат Ложь;
КонецПопытки;
КонецЦикла;
ЗафиксироватьТранзакцию();
Возврат Истина;
КонецФункции
&НаКлиенте
Функция мПередЗакрытиемОповещение(пРезультат, пПараметры) Экспорт
Если пРезультат<>КодВозвратаДиалога.Да Тогда Возврат Истина; КонецЕсли;
Если Не мДокументВернутьВСтатусПодготовлено() Тогда Возврат Истина; КонецЕсли;
ЗавершитьРаботуБезВопросов=Истина;
Закрыть();
КонецФункции
&НаКлиенте
Процедура ПередЗакрытием(пОтказ, пЗавершениеРаботы, пТекстПредупреждения, пСтандартнаяОбработка)
Если пЗавершениеРаботы Тогда Возврат; КонецЕсли;
Если пОтказ Тогда Возврат; КонецЕсли;
Если ЗавершитьРаботуБезВопросов Тогда Возврат; КонецЕсли;
Если Не ВРаботе Тогда Возврат; КонецЕсли;
пОтказ=Истина;
лОписаниеОповещения=Новый ОписаниеОповещения("мПередЗакрытиемОповещение", ЭтотОбъект, Новый Структура);
ПоказатьВопрос(лОписаниеОповещения, "Отбор еще не закончен, выйти?", РежимДиалогаВопрос.ДаНет);
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьНоменклатуру(Команда)
ПоказатьЗначение(, Элементы.Товары.ТекущиеДанные.Номенклатура);
КонецПроцедуры