#Область ОписаниеПеременных
&НаКлиенте
Перем КэшированныеЗначения;
&НаКлиенте
Перем ТекущиеДанныеИсходноеСостояние;
#КонецОбласти
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
УстановитьУсловноеОформление();
Если Параметры.Свойство("АвтоТест") Тогда
Возврат;
КонецЕсли;
СтруктураДанных = Новый Структура;
Если ЭтоАдресВременногоХранилища(Параметры.АдресВХранилище) Тогда
СтруктураДанных = ПолучитьИзВременногоХранилища(Параметры.АдресВХранилище);
ИначеЕсли Параметры.Свойство("ПараметрыЗаполнения") Тогда
СтруктураДанных = Параметры.ПараметрыЗаполнения;
КонецЕсли;
Если СтруктураДанных.Количество() > 0 Тогда
Если СтруктураДанных.Свойство("Дата") Тогда
Объект.Дата = СтруктураДанных.Дата;
Иначе
Объект.Дата = ТекущаяДатаСеанса();
КонецЕсли;
УстановитьИспользованиеЦенообразования(Объект.Дата);
ЗаполнитьИсходныеТоварыПодготовитьПараметрыЗаполнения(СтруктураДанных);
Иначе
Объект.Дата = ТекущаяДатаСеанса();
УстановитьИспользованиеЦенообразования(Объект.Дата);
КонецЕсли;
Если Параметры.Свойство("ПечатьНаПринтер", ПечатьНаПринтер)
И СтруктураДанных.Свойство("Товары") Тогда
ПроверитьЗаполнениеШаблоновЭтикеток(СтруктураДанных.Товары, Отказ);
Если Отказ Тогда
Возврат;
КонецЕсли;
Иначе
ОбщегоНазначенияУТ.НастроитьПодключаемоеОборудование(ЭтаФорма);
ИспользоватьОбменСПодключаемымОборудованиемOffline = ПолучитьФункциональнуюОпцию(
"ИспользоватьОбменСПодключаемымОборудованиемOffline");
КонецЕсли;
ПоддерживаемыеТипыПодключаемогоОборудования = "СканерШтрихкода";
ОбщегоНазначенияУТ.НастроитьПодключаемоеОборудование(ЭтаФорма);
ИспользоватьАссортимент = ПолучитьФункциональнуюОпцию("ИспользоватьАссортимент");
ПравоРегистрацииШтрихкодовНоменклатурыДоступно = ШтрихкодированиеНоменклатурыСервер.ПравоРегистрацииШтрихкодовНоменклатурыДоступно();
ЗагрузитьНастройкиОтбораПоУмолчанию();
Объект.НазначениеШаблона = Перечисления.НазначенияШаблоновЭтикетокИЦенников.ЦенникДляТоваров;
Если СтруктураДанных.Свойство("Товары") Тогда
Если ЗначениеЗаполнено(СтруктураДанных.СтруктураДействий) Тогда
ПараметрДействия = Неопределено;
Если СтруктураДанных.СтруктураДействий.Свойство("ЗаполнитьОрганизацию", ПараметрДействия) Тогда
Объект.Организация = ПараметрДействия;
КонецЕсли;
Если СтруктураДанных.СтруктураДействий.Свойство("ЗаполнитьСклад", ПараметрДействия) Тогда
Если ЗначениеЗаполнено(ПараметрДействия) И ТипЗнч(ПараметрДействия) = Тип("СправочникСсылка.Склады") Тогда
ТипСклада = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПараметрДействия, "ТипСклада");
ЭтоРозничныйСклад = (ТипСклада = Перечисления.ТипыСкладов.РозничныйМагазин);
Если ЭтоРозничныйСклад Тогда
УстановитьЭлементОтбораСКД("Склад", ПараметрДействия, Истина);
Объект.Склад = ПараметрДействия;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если СтруктураДанных.СтруктураДействий.Свойство("ЗаполнитьВидЦены", ПараметрДействия) Тогда
Объект.ВидЦены = ПараметрДействия;
КонецЕсли;
Если СтруктураДанных.СтруктураДействий.Свойство("ЗаполнитьПравилоОбмена", ПараметрДействия) Тогда
Объект.ПравилоОбмена = ПараметрДействия;
КонецЕсли;
Если СтруктураДанных.СтруктураДействий.Свойство("ПоказыватьКолонкуКоличествоВДокументе", ПараметрДействия) Тогда
Элементы.ТоварыКоличествоВДокументе.Видимость = ПараметрДействия;
КонецЕсли;
Если СтруктураДанных.СтруктураДействий.Свойство("УстановитьРежимПечатиИзДокумента", ПараметрДействия) Тогда
ПечатьИзДокумента = Истина;
Элементы.Настройки.Видимость = Ложь;
КонецЕсли;
ЗаполнитьКоличествоЭтикетокПоДокументу = СтруктураДанных.СтруктураДействий.Свойство("ЗаполнитьКоличествоЭтикетокПоДокументу", ПараметрДействия);
ЗаполнитьКоличествоЭтикетокПоОстаткамНаСкладе = СтруктураДанных.СтруктураДействий.Свойство("ЗаполнитьКоличествоЭтикетокПоОстаткамНаСкладе", ПараметрДействия);
ЗаполнитьКоличествоЦенниковПоДокументу = СтруктураДанных.СтруктураДействий.Свойство("ЗаполнитьКоличествоЦенниковПоДокументу", ПараметрДействия);
ЗаполнитьКоличествоЦенниковПоОстаткамНаСкладе = СтруктураДанных.СтруктураДействий.Свойство("ЗаполнитьКоличествоЦенниковПоОстаткамНаСкладе", ПараметрДействия);
Если СтруктураДанных.СтруктураДействий.Свойство("УстановитьРежим", ПараметрДействия) Тогда
УстановитьРежим(ПараметрДействия);
Иначе
ВызватьИсключение НСтр("ru = 'Режим печати не установлен'");
КонецЕсли;
Если СтруктураДанных.СтруктураДействий.Свойство("ЗаполнитьТаблицуТоваров", ПараметрДействия) Тогда
ЗаполнитьТаблицуТоваровНаСервере(Истина);
Если СтруктураДанных.Товары.Колонки.Найти("Цена") <> Неопределено Тогда
Для Каждого СтрокаТЧ Из СтруктураДанных.Товары Цикл
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("Номенклатура", СтрокаТЧ.Номенклатура);
ПараметрыОтбора.Вставить("Характеристика", СтрокаТЧ.Характеристика);
Если ИспользуетсяЦенообразование25 Тогда
Если ПолучитьФункциональнуюОпцию("ИспользоватьУпаковкиНоменклатуры") Тогда
ПараметрыОтбора.Вставить("Упаковка", СтрокаТЧ.Упаковка);
КонецЕсли;
Если ИспользоватьСерииНоменклатуры Тогда
ПараметрыОтбора.Вставить("Серия", СтрокаТЧ.Серия);
КонецЕсли;
КонецЕсли;
НайденныеСтроки = Объект.Товары.НайтиСтроки(ПараметрыОтбора);
Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл
НайденнаяСтрока.Цена = СтрокаТЧ.Цена;
КонецЦикла;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Иначе
ЗаполнитьКоличествоЭтикетокПоДокументу = Ложь;
ЗаполнитьКоличествоЭтикетокПоОстаткамНаСкладе = Истина;
ЗаполнитьКоличествоЦенниковПоДокументу = Ложь;
ЗаполнитьКоличествоЦенниковПоОстаткамНаСкладе = Истина;
УстановитьРежимПечатьЭтикетокИЦенниковНаСервере();
КонецЕсли;
ОбновитьШаблоныВлияющиеНаВидимостьЭлементов();
ОбновитьВидимостьЗависимыхОтШаблонаПолей();
Элементы.ТоварыУстановитьНовыйШтрихкод.Доступность = ПравоДоступа("Изменение", Метаданные.РегистрыСведений.ШтрихкодыНоменклатуры);
Если ИспользоватьАссортимент Тогда
Объект.РежимПолученияЦен = 2;
Иначе
Объект.РежимПолученияЦен = 1;
Элементы.Склад.Видимость = Ложь;
КонецЕсли;
ПереключательРежимаПолученияЦенПриИзмененииСервер();
ЗаполнитьЗначенияПоУмолчанию();
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если Источник = "ПодключаемоеОборудование"
И ВводДоступен() Тогда
Если ИмяСобытия = "ScanData" И МенеджерОборудованияУТКлиент.ЕстьНеобработанноеСобытие() Тогда
ОбработатьШтрихкоды(МенеджерОборудованияУТКлиент.ПреобразоватьДанныеСоСканераВМассив(Параметр));
КонецЕсли;
КонецЕсли;
Если Источник = "ПодключаемоеОборудование"
И ИмяСобытия = "НеизвестныеШтрихкоды"
И Параметр.ФормаВладелец = УникальныйИдентификатор Тогда
ДанныеШтрихкодов = Новый Массив;
Для Каждого ПолученныйШтрихкод Из Параметр.ПолученыНовыеШтрихкоды Цикл
ДанныеШтрихкодов.Добавить(ПолученныйШтрихкод);
КонецЦикла;
Для Каждого ПолученныйШтрихкод Из Параметр.ЗарегистрированныеШтрихкоды Цикл
ДанныеШтрихкодов.Добавить(ПолученныйШтрихкод);
КонецЦикла;
ОбработатьШтрихкоды(ДанныеШтрихкодов);
КонецЕсли;
Если ИмяСобытия = "Запись_ШаблоныЭтикетокИЦенников" Тогда
ОбновитьШаблоныВлияющиеНаВидимостьЭлементов();
ОбновитьВидимостьЗависимыхОтШаблонаПолей();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
Если ИсточникВыбора.ИмяФормы = "Обработка.ПодборТоваровВДокументПродажи.Форма.Форма" Тогда
ОбработкаВыбораПодборНаСервере(ВыбранноеЗначение);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Если ПечатьНаПринтер Тогда
Отказ = Истина;
ПечатьНаПринтер(Неопределено);
Иначе
МенеджерОборудованияКлиент.НачатьПодключениеОборудованиеПриОткрытииФормы(Неопределено, ЭтаФорма, ПоддерживаемыеТипыПодключаемогоОборудования);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриЗакрытии()
МенеджерОборудованияКлиент.НачатьОтключениеОборудованиеПриЗакрытииФормы(Неопределено, ЭтаФорма);
КонецПроцедуры
&НаСервере
Процедура ПриСохраненииДанныхВНастройкахНаСервере(Настройки)
Если ЭтоАдресВременногоХранилища(СохраненныеНастройки) Тогда
ТаблицаСохраненныеНастройки = ПолучитьИзВременногоХранилища(СохраненныеНастройки);
Для Каждого СтрокаТЧ Из ТаблицаСохраненныеНастройки Цикл
Настройки.Вставить(СтрокаТЧ.Ключ, СтрокаТЧ.Значение);
КонецЦикла;
СохраненныеНастройки = ПоместитьВоВременноеХранилище(ТаблицаСохраненныеНастройки, УникальныйИдентификатор);
Иначе
Настройки.Вставить("НастройкиОтбора",Новый ХранилищеЗначения(КомпоновщикНастроек.Настройки));
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки)
Если Параметры.Свойство("АдресВХранилище") И ЭтоАдресВременногоХранилища(Параметры.АдресВХранилище) Тогда
ТаблицаСохраненныеНастройки = Новый ТаблицаЗначений;
ТаблицаСохраненныеНастройки.Колонки.Добавить("Ключ");
ТаблицаСохраненныеНастройки.Колонки.Добавить("Значение");
Для Каждого КлючИЗначение Из Настройки Цикл
НоваяСтрока = ТаблицаСохраненныеНастройки.Добавить();
НоваяСтрока.Ключ = КлючИЗначение.Ключ;
НоваяСтрока.Значение = КлючИЗначение.Значение;
КонецЦикла;
СохраненныеНастройки = ПоместитьВоВременноеХранилище(ТаблицаСохраненныеНастройки, УникальныйИдентификатор);
Объект.СкладскаяГруппа = Настройки["Объект.СкладскаяГруппа"];
Объект.Вариант = Настройки["Объект.Вариант"];
Настройки.Очистить();
Иначе
ВидимостьОтбора = Настройки.Получить("ВидимостьОтбора");
Элементы.ГруппаОтбор.Видимость = ВидимостьОтбора;
Если ВидимостьОтбора Тогда
Элементы.Отбор.Заголовок = НСтр("ru = 'Скрыть отбор'");
Иначе
Элементы.Отбор.Заголовок = НСтр("ru = 'Показать отбор'");
КонецЕсли;
ВидимостьРежимаЗаполнения = Настройки.Получить("ВидимостьРежимаЗаполнения");
Элементы.ГруппаРежимЗаполнения.Видимость = ВидимостьРежимаЗаполнения;
Если ВидимостьРежимаЗаполнения Тогда
Элементы.РежимЗаполнения.Заголовок = НСтр("ru = 'Скрыть режим заполнения'");
Иначе
Элементы.РежимЗаполнения.Заголовок = НСтр("ru = 'Показать режим заполнения'");
КонецЕсли;
НастройкиОтбора = Настройки.Получить("НастройкиОтбора");
Если НастройкиОтбора <> Неопределено Тогда
КомпоновщикНастроек.ЗагрузитьНастройки(НастройкиОтбора.Получить());
Иначе
ЗагрузитьНастройкиОтбораПоУмолчанию();
КонецЕсли;
Режим = Настройки.Получить("Режим");
Если ЗначениеЗаполнено(Режим)
И (Режим = "ПечатьЭтикетокИЦенников" ИЛИ Режим = "ПечатьЦенников" ИЛИ Режим = "ПечатьЭтикеток") Тогда
УстановитьРежим(Режим);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура СкладПриИзменении(Элемент)
УстановитьЭлементОтбораСКД("Склад", Объект.Склад, ЗначениеЗаполнено(Объект.Склад));
КонецПроцедуры
&НаКлиенте
Процедура ПолеПереключательРежимаПолученияЦенПриИзменении(Элемент)
ПереключательРежимаПолученияЦенПриИзмененииСервер();
ОтключитьОтметкуНезаполненного();
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытий
&НаКлиенте
Процедура ТоварыШаблонЦенникаПриИзменении(Элемент)
ОбновитьВидимостьЗависимыхОтШаблонаПолей();
КонецПроцедуры
&НаКлиенте
Процедура ТоварыШаблонЭтикеткиПриИзменении(Элемент)
ОбновитьВидимостьЗависимыхОтШаблонаПолей();
КонецПроцедуры
&НаКлиенте
Процедура ТоварыПриАктивизацииЯчейки(Элемент)
Если Не Элемент.ТекущийЭлемент = Элементы.ТоварыШтрихкод Тогда
Возврат;
КонецЕсли;
ТекущиеДанные = Элементы.Товары.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
Элементы.ТоварыШтрихкод.СписокВыбора.Очистить();
Возврат;
КонецЕсли;
Структура = Новый Структура;
Структура.Вставить("Номенклатура", ТекущиеДанные.Номенклатура);
Структура.Вставить("Характеристика", ТекущиеДанные.Характеристика);
Структура.Вставить("Упаковка", ТекущиеДанные.Упаковка);
Элементы.ТоварыШтрихкод.СписокВыбора.ЗагрузитьЗначения(РозничныеПродажиВызовСервера.ПолучитьШтрихкодыНоменклатуры(Структура));
КонецПроцедуры
&НаКлиенте
Процедура ТоварыПередНачаломИзменения(Элемент, Отказ)
ТекущиеДанные = Элементы.Товары.ТекущиеДанные;
ТекущиеДанныеИсходноеСостояние = Новый Структура;
ТекущиеДанныеИсходноеСостояние.Вставить("Упаковка", ТекущиеДанные.Упаковка);
ТекущиеДанныеИсходноеСостояние.Вставить("КоличествоВДокументе", ТекущиеДанные.КоличествоВДокументе);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
ТекущиеДанныеИсходноеСостояние = Новый Структура;
ТекущиеДанныеИсходноеСостояние.Вставить("Упаковка", ПредопределенноеЗначение("Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка"));
ТекущиеДанныеИсходноеСостояние.Вставить("КоличествоВДокументе", 0);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыНоменклатураПриИзменении(Элемент)
ТекущиеДанные = Новый Структура("Номенклатура, Характеристика, Серия, Упаковка");
ЗаполнитьЗначенияСвойств(ТекущиеДанные, Элементы.Товары.ТекущиеДанные);
ЗаполнитьЗначенияСвойств(Элементы.Товары.ТекущиеДанные, ПриИзмененииНоменклатуры(ТекущиеДанные));
КонецПроцедуры
&НаКлиенте
Процедура ТоварыХарактеристикаПриИзменении(Элемент)
ТекущиеДанные = Новый Структура("Номенклатура, Характеристика, Серия, Упаковка");
ЗаполнитьЗначенияСвойств(ТекущиеДанные, Элементы.Товары.ТекущиеДанные);
ЗаполнитьЗначенияСвойств(Элементы.Товары.ТекущиеДанные, ПриИзмененииНоменклатуры(ТекущиеДанные));
КонецПроцедуры
&НаКлиенте
Процедура ТоварыУпаковкаПриИзменении(Элемент)
ТекущиеДанные = Новый Структура("Номенклатура, Характеристика, Серия, Упаковка, СтараяУпаковка, СтароеКоличествоВДокументе, КоличествоЭтикеток");
ЗаполнитьЗначенияСвойств(ТекущиеДанные, Элементы.Товары.ТекущиеДанные);
ТекущиеДанные.СтараяУпаковка = ТекущиеДанныеИсходноеСостояние.Упаковка;
ТекущиеДанные.СтароеКоличествоВДокументе = ТекущиеДанныеИсходноеСостояние.КоличествоВДокументе;
ЗаполнитьЗначенияСвойств(Элементы.Товары.ТекущиеДанные, ПриИзмененииНоменклатуры(ТекущиеДанные));
КонецПроцедуры
&НаКлиенте
Процедура ТоварыСерияПриИзменении(Элемент)
ТекущиеДанные = Новый Структура("Номенклатура, Характеристика, Серия, Упаковка");
ЗаполнитьЗначенияСвойств(ТекущиеДанные, Элементы.Товары.ТекущиеДанные);
ЗаполнитьЗначенияСвойств(Элементы.Товары.ТекущиеДанные, ПриИзмененииНоменклатуры(ТекущиеДанные));
КонецПроцедуры
&НаКлиенте
Процедура ВидЦеныПриИзменении(Элемент)
Если Не ЗначениеЗаполнено(Объект.ВидЦены) Тогда
Возврат;
КонецЕсли;
ПерезаполнитьЦены();
КонецПроцедуры
&НаКлиенте
Процедура ВидЦеныДополнительноПриИзменении(Элемент)
Если Не ЗначениеЗаполнено(Объект.ВидЦеныДополнительно) Тогда
Возврат;
КонецЕсли;
ПерезаполнитьЦены();
КонецПроцедуры
&НаКлиенте
Процедура ДатаВидЦеныПриИзменении(Элемент)
УстановитьИспользованиеЦенообразования(Объект.Дата);
ОбновитьВидимостьСерии();
Если Не ЗначениеЗаполнено(Объект.ВидЦены) Тогда
Возврат;
КонецЕсли;
ПерезаполнитьЦены();
КонецПроцедуры
&НаКлиенте
Процедура ДатаВидЦеныДополнительноПриИзменении(Элемент)
УстановитьИспользованиеЦенообразования(Объект.ДатаДополнительно);
ОбновитьВидимостьСерии();
Если Не ЗначениеЗаполнено(Объект.ВидЦеныДополнительно) Тогда
Возврат;
КонецЕсли;
ПерезаполнитьЦены();
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура ВыбратьВыделенныеСтроки(Команда)
МассивСтрок = Элементы.Товары.ВыделенныеСтроки;
Если МассивСтрок.Количество() = 0 Тогда
ТекстСообщения = НСтр("ru = 'В списке отсутствуют выделенные строки'");
ПоказатьПредупреждение(Неопределено, ТекстСообщения);
Возврат;
КонецЕсли;
Для Каждого НомерСтроки Из МассивСтрок Цикл
СтрокаТЧ = Объект.Товары.НайтиПоИдентификатору(НомерСтроки);
СтрокаТЧ.Выбран = Истина;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ИсключитьВыделенныеСтроки(Команда)
МассивСтрок = Элементы.Товары.ВыделенныеСтроки;
Если МассивСтрок.Количество() = 0 Тогда
ТекстСообщения = НСтр("ru = 'В списке отсутствуют выделенные строки'");
ПоказатьПредупреждение(Неопределено, ТекстСообщения);
Возврат;
КонецЕсли;
Для Каждого НомерСтроки Из МассивСтрок Цикл
СтрокаТЧ = Объект.Товары.НайтиПоИдентификатору(НомерСтроки);
СтрокаТЧ.Выбран = Ложь;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура УстановитьКоличествоПоУмолчанию(Команда)
УстановитьКоличествоПоУмолчаниюНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьТаблицуТоваров(Команда)
ОчиститьСообщения();
Если НЕ ПроверитьЗаполнение() Тогда
Возврат;
КонецЕсли;
Если Объект.Товары.Количество() = 0 Тогда
ЗаполнитьТаблицуТоваровНаСервере(Ложь);
Иначе
ТекстВопроса = НСтр("ru = 'Сохранить данные о количестве, шаблонах в табличной части при перезаполнении?'");
ОписаниеОповещения = Новый ОписаниеОповещения("ЗаполнитьТаблицуТоваровЗавершение", ЭтотОбъект);
ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, РежимДиалогаВопрос.ДаНетОтмена,,КодВозвратаДиалога.Да);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьТаблицуТоваровЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
Результат = РезультатВопроса;
Если Результат = КодВозвратаДиалога.Да Тогда
ЗаполнитьТаблицуТоваровНаСервере(Истина);
ИначеЕсли Результат = КодВозвратаДиалога.Нет Тогда
ЗаполнитьТаблицуТоваровНаСервере(Ложь);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Печать(Команда)
ОчиститьСообщения();
РезультатПроверки = ВыполнитьПроверку(ЭтаФорма);
Если Не РезультатПроверки.ТоварыВыбраны Тогда
ТекстСообщения = НСтр("ru = 'Не выбрано ни одного товара'");
ПоказатьПредупреждение(Неопределено, ТекстСообщения);
Возврат;
КонецЕсли;
Если РезультатПроверки.ПроверкаВыполнена Тогда
ПараметрКоманды = Новый Массив;
ПараметрКоманды.Добавить(ПредопределенноеЗначение("Справочник.Номенклатура.ПустаяСсылка"));
ИменаМакетов = "";
Если Режим = "ПечатьЭтикетокИЦенников" Тогда
ИменаМакетов = "ЭтикеткаТовары,ЦенникТовары";
ИначеЕсли Режим = "ПечатьЦенников" Тогда
ИменаМакетов = "ЦенникТовары";
ИначеЕсли Режим = "ПечатьЭтикеток" Тогда
ИменаМакетов = "ЭтикеткаТовары";
КонецЕсли;
УправлениеПечатьюКлиент.ВыполнитьКомандуПечати(
"Обработка.ПечатьЭтикетокИЦенников",
ИменаМакетов,
ПараметрКоманды,
ЭтаФорма,
ПолучитьПараметры());
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПечатьНаПринтер(Команда)
ИменаМакетов = "ЭтикеткаТовары";
ИмяМенеджераПечати = "Обработка.ПечатьЭтикетокИЦенников";
МассивОбъектов = Новый Массив;
МассивОбъектов.Добавить(ПредопределенноеЗначение("Справочник.Номенклатура.ПустаяСсылка"));
УправлениеПечатьюКлиент.ВыполнитьКомандуПечатиНаПринтер(ИмяМенеджераПечати, ИменаМакетов, МассивОбъектов,
ПолучитьПараметры());
КонецПроцедуры
&НаКлиенте
Процедура ПоказатьСкрытьОтбор(Команда)
ВидимостьОтбора = НЕ ВидимостьОтбора;
Элементы.ГруппаОтбор.Видимость = ВидимостьОтбора;
Если ВидимостьОтбора Тогда
Элементы.Отбор.Заголовок = НСтр("ru = 'Скрыть отбор'");
Иначе
Элементы.Отбор.Заголовок = НСтр("ru = 'Показать отбор'");
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПоказатьСкрытьРежимЗаполнения(Команда)
ВидимостьРежимаЗаполнения = НЕ ВидимостьРежимаЗаполнения;
Элементы.ГруппаРежимЗаполнения.Видимость = ВидимостьРежимаЗаполнения;
Если ВидимостьРежимаЗаполнения Тогда
Элементы.РежимЗаполнения.Заголовок = НСтр("ru = 'Скрыть режим заполнения'");
Иначе
Элементы.РежимЗаполнения.Заголовок = НСтр("ru = 'Показать режим заполнения'");
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УстановитьКоличествоЦенников(Команда)
МассивСтрок = Элементы.Товары.ВыделенныеСтроки;
Если МассивСтрок.Количество() = 0 Тогда
ТекстСообщения = НСтр("ru = 'В списке отсутствуют выделенные строки'");
ПоказатьПредупреждение(Неопределено, ТекстСообщения);
Возврат;
КонецЕсли;
ВыбранноеЗначение = Неопределено;
ДопПараметры = Новый Структура("МассивСтрок, ВыбранноеЗначение", МассивСтрок, ВыбранноеЗначение);
ОписаниеОповещения = Новый ОписаниеОповещения("УстановитьКоличествоЦенниковЗавершение", ЭтотОбъект, ДопПараметры);
ТекстПодсказки = НСтр("ru = 'Введите количество ценников'");
ПоказатьВводЧисла(ОписаниеОповещения, ВыбранноеЗначение, ТекстПодсказки, 10, 2);
КонецПроцедуры
&НаКлиенте
Процедура УстановитьКоличествоЦенниковЗавершение(Число, ДополнительныеПараметры) Экспорт
МассивСтрок = ДополнительныеПараметры.МассивСтрок;
ВыбранноеЗначение = ?(Число = Неопределено, ДополнительныеПараметры.ВыбранноеЗначение, Число);
Если (Число <> Неопределено) Тогда
Для Каждого НомерСтроки Из МассивСтрок Цикл
СтрокаТЧ = Объект.Товары.НайтиПоИдентификатору(НомерСтроки);
СтрокаТЧ.КоличествоЦенников = ВыбранноеЗначение;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УстановитьКоличествоЭтикеток(Команда)
МассивСтрок = Элементы.Товары.ВыделенныеСтроки;
Если МассивСтрок.Количество() = 0 Тогда
ТекстСообщения = НСтр("ru = 'В списке отсутствуют выделенные строки'");
ПоказатьПредупреждение(Неопределено, ТекстСообщения);
Возврат;
КонецЕсли;
ВыбранноеЗначение = Неопределено;
ДопПараметры = Новый Структура("МассивСтрок, ВыбранноеЗначение", МассивСтрок, ВыбранноеЗначение);
ОписаниеОповещения = Новый ОписаниеОповещения("УстановитьКоличествоЭтикетокЗавершение", ЭтотОбъект, ДопПараметры);
ТекстПодсказки = НСтр("ru = 'Введите количество'");
ПоказатьВводЧисла(ОписаниеОповещения, ВыбранноеЗначение, ТекстПодсказки, 10, 2);
КонецПроцедуры
&НаКлиенте
Процедура УстановитьКоличествоЭтикетокЗавершение(Число, ДополнительныеПараметры) Экспорт
МассивСтрок = ДополнительныеПараметры.МассивСтрок;
ВыбранноеЗначение = ?(Число = Неопределено, ДополнительныеПараметры.ВыбранноеЗначение, Число);
Если (Число <> Неопределено) Тогда
Для Каждого НомерСтроки Из МассивСтрок Цикл
СтрокаТЧ = Объект.Товары.НайтиПоИдентификатору(НомерСтроки);
СтрокаТЧ.КоличествоЭтикеток = ВыбранноеЗначение;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УстановитьШаблонЦенников(Команда)
МассивСтрок = Элементы.Товары.ВыделенныеСтроки;
Если МассивСтрок.Количество() = 0 Тогда
ТекстСообщения = НСтр("ru = 'В списке отсутствуют выделенные строки'");
ПоказатьПредупреждение(Неопределено, ТекстСообщения);
Возврат;
КонецЕсли;
ПараметрыФормыВыбора = Новый Структура;
ПараметрыФормыВыбора.Вставить("Отбор", Новый Структура("Назначение", ПредопределенноеЗначение("Перечисление.НазначенияШаблоновЭтикетокИЦенников.ЦенникДляТоваров")));
ДопПараметры = Новый Структура("МассивСтрок", МассивСтрок);
ОписаниеОповещения = Новый ОписаниеОповещения("УстановитьШаблонЦенниковЗавершение", ЭтотОбъект, ДопПараметры);
ОткрытьФорму("Справочник.ШаблоныЭтикетокИЦенников.ФормаВыбора",
ПараметрыФормыВыбора, ЭтаФорма,,,, ОписаниеОповещения, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура УстановитьШаблонЦенниковЗавершение(Результат, ДополнительныеПараметры) Экспорт
МассивСтрок = ДополнительныеПараметры.МассивСтрок;
ВыбранноеЗначение = Результат;
Если ЗначениеЗаполнено(ВыбранноеЗначение) Тогда
Для Каждого НомерСтроки Из МассивСтрок Цикл
СтрокаТЧ = Объект.Товары.НайтиПоИдентификатору(НомерСтроки);
СтрокаТЧ.ШаблонЦенника = ВыбранноеЗначение;
КонецЦикла;
КонецЕсли;
ОбновитьВидимостьЗависимыхОтШаблонаПолей();
КонецПроцедуры
&НаКлиенте
Процедура УстановитьШаблонЭтикеток(Команда)
МассивСтрок = Элементы.Товары.ВыделенныеСтроки;
Если МассивСтрок.Количество() = 0 Тогда
ТекстСообщения = НСтр("ru = 'В списке отсутствуют выделенные строки'");
ПоказатьПредупреждение(Неопределено, ТекстСообщения);
Возврат;
КонецЕсли;
ПараметрыФормыВыбора = Новый Структура;
ПараметрыФормыВыбора.Вставить("Отбор", Новый Структура("Назначение", ПредопределенноеЗначение("Перечисление.НазначенияШаблоновЭтикетокИЦенников.ЭтикеткаДляТоваров")));
ДопПараметры = Новый Структура("МассивСтрок", МассивСтрок);
ОписаниеОповещения = Новый ОписаниеОповещения("УстановитьШаблонЭтикетокЗавершение", ЭтотОбъект, ДопПараметры);
ОткрытьФорму("Справочник.ШаблоныЭтикетокИЦенников.ФормаВыбора",
ПараметрыФормыВыбора, ЭтаФорма,,,, ОписаниеОповещения, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура УстановитьШаблонЭтикетокЗавершение(Результат, ДополнительныеПараметры) Экспорт
МассивСтрок = ДополнительныеПараметры.МассивСтрок;
ВыбранноеЗначение = Результат;
Если ЗначениеЗаполнено(ВыбранноеЗначение) Тогда
Для Каждого НомерСтроки Из МассивСтрок Цикл
СтрокаТЧ = Объект.Товары.НайтиПоИдентификатору(НомерСтроки);
СтрокаТЧ.ШаблонЭтикетки = ВыбранноеЗначение;
КонецЦикла;
КонецЕсли;
ОбновитьВидимостьЗависимыхОтШаблонаПолей();
КонецПроцедуры
&НаКлиенте
Процедура УстановитьРежимПечатьЦенников(Команда)
УстановитьРежимПечатьЦенниковНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура УстановитьРежимПечатьЭтикетокИЦенников(Команда)
УстановитьРежимПечатьЭтикетокИЦенниковНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура УстановитьРежимПечатьЭтикеток(Команда)
УстановитьРежимПечатьЭтикетокНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура УстановитьНовыйШтрихкодEAN13(Команда)
МассивСтрок = Элементы.Товары.ВыделенныеСтроки;
Если МассивСтрок.Количество() = 0 Тогда
ТекстСообщения = НСтр("ru = 'В списке отсутствуют выделенные строки'");
ПоказатьПредупреждение(Неопределено, ТекстСообщения);
Возврат;
КонецЕсли;
ОписаниеОшибки = "";
Результат = УстановитьНовыеШтрихкодыEAN13НаСервере(ОписаниеОшибки);
Если Результат = 0 И ЗначениеЗаполнено(ОписаниеОшибки) Тогда
ПоказатьПредупреждение(Неопределено, ОписаниеОшибки);
Возврат;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВосстановитьНастройкиОтбораПоУмолчанию(Команда)
ЗагрузитьНастройкиОтбораПоУмолчанию();
КонецПроцедуры
&НаКлиенте
Процедура ПоискПоШтрихкодуВыполнить(Команда)
ОчиститьСообщения();
Оповещение = Новый ОписаниеОповещения("ПоискПоШтрихкодуЗавершение", ЭтотОбъект);
ШтрихкодированиеНоменклатурыКлиент.ПоказатьВводШтрихкода(Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура ПоискПоШтрихкодуЗавершение(ДанныхШтрихкода, ДополнительныеПараметры) Экспорт
ОбработатьШтрихкоды(ДанныхШтрихкода);
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьДанныеИзТСД(Команда)
ОчиститьСообщения();
МенеджерОборудованияКлиент.НачатьЗагрузкуДанныеИзТСД(
Новый ОписаниеОповещения("ЗагрузитьИзТСДЗавершение", ЭтотОбъект),
УникальныйИдентификатор);
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьИзТСДЗавершение(Результат, Параметры) Экспорт
Если Результат.Результат Тогда
ОбработатьШтрихкоды(Результат.ТаблицаТоваров);
Иначе
МенеджерОборудованияУТКлиент.СообщитьОбОшибке(Результат);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПодобратьТовары(Команда)
ОценкаПроизводительностиКлиент.ЗамерВремени(
"Обработка.ПечатьЭтикетокИЦенников.ФормаТовары.Команда.ПодобратьТовары",,Истина);
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("РежимПодбораБезКоличественныхПараметров", Истина);
ПараметрыФормы.Вставить("РежимПодбораБезСуммовыхПараметров", Истина);
ПараметрыФормы.Вставить("СкрыватьКолонкуВидЦены", Истина);
ПараметрыФормы.Вставить("СкрыватьКомандуЦеныНоменклатуры", Истина);
ПараметрыФормы.Вставить("СкрыватьКомандуОстаткиНаСкладах", Истина);
ПараметрыФормы.Вставить("СкрыватьКнопкуЗапрашиватьКоличество", Истина);
ПараметрыФормы.Вставить("Документ ", ПредопределенноеЗначение("Документ.УстановкаЦенНоменклатуры.ПустаяСсылка"));
ПараметрыФормы.Вставить("Заголовок", НСтр("ru = 'Подбор товаров'"));
ПараметрыФормы.Вставить("Дата", Объект.Дата);
ПараметрыФормы.Вставить("НеРазбиватьНаборыПоКомплектующим", Истина);
ОткрытьФорму("Обработка.ПодборТоваровВДокументПродажи.Форма", ПараметрыФормы, ЭтаФорма, УникальныйИдентификатор);
КонецПроцедуры
&НаКлиенте
Процедура ВыбратьВариантЗаполненияУпаковок(Команда)
ВыбранныеСтроки = Новый Массив;
ОчищатьСообщения = Истина;
Если Элементы.Товары.ВыделенныеСтроки.Количество() = 0 Тогда
ПроверитьОчиститьСообщения(ОчищатьСообщения);
ТекстСообщения = НСтр("ru = 'Не выделено ни одной строки. Заполнение упаковок невозможно.'");
ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения);
Возврат;
КонецЕсли;
Для Каждого ИдентификаторСтроки Из Элементы.Товары.ВыделенныеСтроки Цикл
Строка = Объект.Товары.НайтиПоИдентификатору(ИдентификаторСтроки);
Если Строка <> Неопределено Тогда
Если Строка.Выбран Тогда
Если Строка.КоличествоЭтикеток = 0 Тогда
ПроверитьОчиститьСообщения(ОчищатьСообщения);
ТекстСообщения = НСтр("ru = 'В строке %Номер% не указано количество этикеток. Упаковки в ней не будут заполнены.'");
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Номер%", Строка.НомерСтроки);
ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения, );
Иначе
ВыбранныеСтроки.Добавить(ИдентификаторСтроки);
КонецЕсли;
Иначе
ПроверитьОчиститьСообщения(ОчищатьСообщения);
ТекстСообщения = НСтр("ru = 'Строка %Номер% не выбрана. Упаковки в ней не будут заполнены.'");
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Номер%", Строка.НомерСтроки);
ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения);
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если ВыбранныеСтроки.Количество() = 0 Тогда
Возврат;
КонецЕсли;
ОписаниеОповещенияОЗакрытии = Новый ОписаниеОповещения("ВыбратьВариантЗаполненияУпаковокЗавершение", ЭтаФорма, ВыбранныеСтроки);
ПараметрыОткрываемойФормы = Новый Структура("Вариант, СкладскаяГруппа", Объект.Вариант, Объект.СкладскаяГруппа);
ОткрытьФорму("Обработка.ПечатьЭтикетокИЦенников.Форма.ВыборВариантаЗаполненияУпаковками",
ПараметрыОткрываемойФормы, ЭтаФорма,,,, ОписаниеОповещенияОЗакрытии, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура РазбитьСтроку(Команда)
ТаблицаФормы = Элементы.Товары;
ДанныеТаблицы = Объект.Товары;
ПараметрыРазбиенияСтроки = РаботаСТабличнымиЧастямиКлиент.ПараметрыРазбиенияСтроки();
Если Режим = "ПечатьЦенников" Тогда
ПараметрыРазбиенияСтроки.ИмяПоляКоличество = "КоличествоЦенников";
ИначеЕсли Режим = "ПечатьЭтикеток" Тогда
ПараметрыРазбиенияСтроки.ИмяПоляКоличество = "КоличествоЭтикеток";
Иначе
ВызватьИсключение НСтр("ru = 'Команда разбиения строк не поддерживается в режиме печати ценников и этикеток'");
КонецЕсли;
ПараметрыРазбиенияСтроки.Заголовок = НСтр("ru = 'Введите количество этикеток в новой строке'");
РаботаСТабличнымиЧастямиКлиент.РазбитьСтроку(ДанныеТаблицы, ТаблицаФормы,, ПараметрыРазбиенияСтроки);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаСервере
Процедура УстановитьУсловноеОформление()
УсловноеОформление.Элементы.Очистить();
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыКоличествоЭтикеток.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.ШаблонЭтикетки");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.LightGray);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыКоличествоЦенников.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.ШаблонЦенника");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.LightGray);
НоменклатураСервер.УстановитьУсловноеОформлениеЕдиницИзмерения(ЭтаФорма);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыКоличествоЦенников.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.Выбран");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.КоличествоЦенников");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Истина);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыШаблонЦенника.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.Выбран");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.ШаблонЦенника");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Истина);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыКоличествоЭтикеток.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.Выбран");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.КоличествоЭтикеток");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Истина);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыШаблонЭтикетки.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.Выбран");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.ШаблонЭтикетки");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Истина);
НоменклатураСервер.УстановитьУсловноеОформлениеХарактеристикНоменклатуры(ЭтаФорма);
КонецПроцедуры
#Область ЗаполнениеИИнициализация
&НаСервере
Процедура ЗаполнитьЗначенияПоУмолчанию()
Объект.ВидЦены = Справочники.ВидыЦен.ВидЦеныПоУмолчанию(Объект.ВидЦены);
Объект.Склад = ЗначениеНастроекПовтИсп.ПолучитьРозничныйСкладПоУмолчанию(Объект.Склад);
Объект.Организация = ЗначениеНастроекПовтИсп.ПолучитьОрганизациюПоУмолчанию(Объект.Организация);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьИсходныеТоварыПодготовитьПараметрыЗаполнения(ПараметрыЗаполнения)
Если ТипЗнч(ПараметрыЗаполнения.Товары) <> Тип("ТаблицаЗначений") Тогда
Порядок = 1;
ТипЧисло = Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3, ДопустимыйЗнак.Неотрицательный));
Товары = Новый ТаблицаЗначений;
Товары.Колонки.Добавить("Порядок", ТипЧисло);
Товары.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
Товары.Колонки.Добавить("Упаковка", Новый ОписаниеТипов("СправочникСсылка.УпаковкиЕдиницыИзмерения"));
Товары.Колонки.Добавить("Характеристика", Новый ОписаниеТипов("СправочникСсылка.ХарактеристикиНоменклатуры"));
Товары.Колонки.Добавить("Количество", ТипЧисло);
Для Каждого СтрокаТоваров Из ПараметрыЗаполнения.Товары Цикл
НоваяСтрока = Товары.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТоваров);
НоваяСтрока.Порядок = Порядок;
Порядок = Порядок + 1;
КонецЦикла;
ПараметрыЗаполнения.Товары = Товары.Скопировать();
КонецЕсли;
Объект.ИсходныеДанныеТовары.Загрузить(ПараметрыЗаполнения.Товары);
КонецПроцедуры
#КонецОбласти
#Область Прочее
&НаСервере
Функция ПолучитьПараметры()
Товары = Новый ТаблицаЗначений;
Товары.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
Товары.Колонки.Добавить("Характеристика", Новый ОписаниеТипов("СправочникСсылка.ХарактеристикиНоменклатуры"));
Товары.Колонки.Добавить("Упаковка", Новый ОписаниеТипов("СправочникСсылка.УпаковкиЕдиницыИзмерения"));
Товары.Колонки.Добавить("Цена", Новый ОписаниеТипов("Число"));
Товары.Колонки.Добавить("ЦенаДополнительно", Новый ОписаниеТипов("Число"));
Товары.Колонки.Добавить("Штрихкод", Новый ОписаниеТипов("Строка"));
Товары.Колонки.Добавить("ШаблонЦенника", Новый ОписаниеТипов("СправочникСсылка.ШаблоныЭтикетокИЦенников"));
Товары.Колонки.Добавить("КоличествоЦенников", Новый ОписаниеТипов("Число"));
Товары.Колонки.Добавить("ШаблонЭтикетки", Новый ОписаниеТипов("СправочникСсылка.ШаблоныЭтикетокИЦенников"));
Товары.Колонки.Добавить("ШаблонЭтикеткиПодготовлено", Новый ОписаниеТипов("СправочникСсылка.ШаблоныЭтикетокИЦенников"));
Товары.Колонки.Добавить("КоличествоЭтикеток", Новый ОписаниеТипов("Число"));
Товары.Колонки.Добавить("ОстатокНаСкладе", Новый ОписаниеТипов("Число"));
Товары.Колонки.Добавить("КоличествоВДокументе", Новый ОписаниеТипов("Число"));
Товары.Колонки.Добавить("Весовой", Новый ОписаниеТипов("Булево"));
Товары.Колонки.Добавить("ДатаПоследнегоИзмененияЦены", Новый ОписаниеТипов("Дата"));
Товары.Колонки.Добавить("ДатаПоследнегоИзмененияЦеныДополнительно", Новый ОписаниеТипов("Дата"));
Для Каждого СтрокаТЧ Из Объект.Товары Цикл
Если Не СтрокаТЧ.Выбран Тогда
Продолжить;
КонецЕсли;
НоваяСтрока = Товары.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТЧ);
Если НЕ ЗначениеЗаполнено(НоваяСтрока.ШаблонЭтикетки) Тогда
НоваяСтрока.КоличествоЭтикеток = 0;
КонецЕсли;
Если НЕ ЗначениеЗаполнено(НоваяСтрока.ШаблонЦенника) Тогда
НоваяСтрока.КоличествоЦенников = 0;
КонецЕсли;
КонецЦикла;
МаксимальныйКодВесовогоТовара = ПодключаемоеОборудованиеOfflineВызовСервера.МаксимальныйКодВесовогоТовара();
УстановитьПривилегированныйРежим(Истина);
ПравилоВыгрузкиВВесы = (ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.ПравилоОбмена, "ТипПодключаемогоОборудования") = Перечисления.ТипыПодключаемогоОборудования.ВесыСПечатьюЭтикеток);
УстановитьПривилегированныйРежим(Ложь);
СтранаРегистрации = ?(ЗначениеЗаполнено(Объект.Организация), ЗначениеНастроекКлиентСерверПовтИсп.СтранаРегистрацииОрганизации(Объект.Организация), Константы.ОсновнаяСтрана.Получить());
ПараметрыПечати = Новый Структура;
ПараметрыПечати.Вставить("Товары", ПоместитьВоВременноеХранилище(Товары, УникальныйИдентификатор));
ПараметрыПечати.Вставить("Организация", Объект.Организация);
ПараметрыПечати.Вставить("СтранаРегистрации", СтранаРегистрации);
ПараметрыПечати.Вставить("ПравилоОбмена", Объект.ПравилоОбмена);
ПараметрыПечати.Вставить("МаксимальныйКодВесовогоТовара", МаксимальныйКодВесовогоТовара);
ПараметрыПечати.Вставить("ПравилоВыгрузкиВВесы", ПравилоВыгрузкиВВесы);
ПараметрыПечати.Вставить("ВидЦены", Объект.ВидЦены);
ПараметрыПечати.Вставить("Дата", Объект.Дата);
ПараметрыПечати.Вставить("Склад", Объект.Склад);
ПараметрыПечати.Вставить("ВидЦеныДополнительно", Объект.ВидЦеныДополнительно);
ПараметрыПечати.Вставить("ДатаДополнительно", Объект.ДатаДополнительно);
ПараметрыПечати.Вставить("СтруктураМакетаШаблона", Неопределено);
Возврат ПараметрыПечати;
КонецФункции
&НаСервере
Процедура УстановитьРежимПечатьЭтикетокИЦенниковНаСервере()
АвтоЗаголовок = Ложь;
Режим = "ПечатьЭтикетокИЦенников";
Если ПечатьИзДокумента Тогда
Заголовок = НСтр("ru = 'Печать этикеток и ценников из документа'");
Иначе
Заголовок = НСтр("ru = 'Печать этикеток и ценников'");
КонецЕсли;
ОбновитьВидимостьЭлементов();
КонецПроцедуры
&НаСервере
Процедура УстановитьРежимПечатьЭтикетокНаСервере()
АвтоЗаголовок = Ложь;
Режим = "ПечатьЭтикеток";
Если ПечатьИзДокумента Тогда
Заголовок = НСтр("ru = 'Печать этикеток из документа'");
Иначе
Заголовок = НСтр("ru = 'Печать этикеток'");
КонецЕсли;
ОбновитьВидимостьЭлементов();
КонецПроцедуры
&НаСервере
Процедура ОбновитьВидимостьЭлементов()
ВидимостьЭтикетки = Ложь;
ВидимостьЦенники = Ложь;
Если Режим = "ПечатьЭтикетокИЦенников" Тогда
ВидимостьЭтикетки = Истина;
ВидимостьЦенники = Истина;
ИначеЕсли Режим = "ПечатьЦенников" Тогда
ВидимостьЭтикетки = Ложь;
ВидимостьЦенники = Истина;
ИначеЕсли Режим = "ПечатьЭтикеток" Тогда
ВидимостьЭтикетки = Истина;
ВидимостьЦенники = Ложь;
КонецЕсли;
Элементы.ТоварыРазбитьСтроку.Видимость = Не (ВидимостьЦенники И ВидимостьЭтикетки);
Элементы.ТоварыКоличествоЭтикеток.Видимость = ВидимостьЭтикетки;
Элементы.ТоварыШаблонЭтикетки.Видимость = ВидимостьЭтикетки;
Элементы.ТоварыУстановитьШаблонЭтикеток.Видимость = ВидимостьЭтикетки;
Элементы.ТоварыУстановитьКоличествоЭтикеток.Видимость = ВидимостьЭтикетки;
Элементы.РежимЗаполненияЭтикеток.Видимость = ВидимостьЭтикетки;
Элементы.ЗаполнитьКоличествоЭтикетокПоДокументу.Видимость = ВидимостьЭтикетки И ПечатьИзДокумента;
Элементы.ТоварыКоличествоЦенников.Видимость = ВидимостьЦенники;
Элементы.ТоварыШаблонЦенника.Видимость = ВидимостьЦенники;
Элементы.ТоварыУстановитьШаблонЦенников.Видимость = ВидимостьЦенники;
Элементы.ТоварыУстановитьКоличествоЦенников.Видимость = ВидимостьЦенники;
Элементы.РежимЗаполненияЦенников.Видимость = ВидимостьЦенники;
Элементы.ЗаполнитьКоличествоЦенниковПоДокументу.Видимость = ВидимостьЦенники И ПечатьИзДокумента;
Элементы.ТоварыВыбратьВариантЗаполненияУпаковок.Видимость = ВидимостьЭтикетки;
ОбновитьВидимостьСерии();
КонецПроцедуры
&НаСервере
Процедура ОбновитьВидимостьСерии()
Элементы.ТоварыСерия.Видимость = ИспользоватьСерииНоменклатуры;
КонецПроцедуры
&НаСервере
Процедура УстановитьРежимПечатьЦенниковНаСервере()
АвтоЗаголовок = Ложь;
Режим = "ПечатьЦенников";
Если ПечатьИзДокумента Тогда
Заголовок = НСтр("ru = 'Печать ценников из документа'");
Иначе
Заголовок = НСтр("ru = 'Печать ценников'");
КонецЕсли;
ОбновитьВидимостьЭлементов();
КонецПроцедуры
&НаСервере
Процедура УстановитьРежим(ПараметрРежим)
Если ПараметрРежим = "ПечатьЭтикетокИЦенников" Тогда
УстановитьРежимПечатьЭтикетокИЦенниковНаСервере();
ИначеЕсли ПараметрРежим = "ПечатьЦенников" Тогда
УстановитьРежимПечатьЦенниковНаСервере();
ИначеЕсли ПараметрРежим = "ПечатьЭтикеток" Тогда
УстановитьРежимПечатьЭтикетокНаСервере();
Иначе
ВызватьИсключение НСтр("ru = 'Установленный режим печати не поддерживается'");
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция УстановитьНовыеШтрихкодыEAN13НаСервере(ОписаниеОшибки = "")
Количество = 0;
МассивСтрок = Элементы.Товары.ВыделенныеСтроки;
Штрихкоды = Новый Соответствие;
НачатьТранзакцию();
Попытка
Блокировка = Новый БлокировкаДанных();
ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ШтрихкодыНоменклатуры");
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
Блокировка.Заблокировать();
МаксимальныеЗначенияКодовШтучныхШтрихкодов = РегистрыСведений.ШтрихкодыНоменклатуры.ПолучитьМаксимальныеЗначенияКодовШтучныхШтрихкодов();
МаксимальноеЗначениеКодаВесовыхШтрихкодов = РегистрыСведений.ШтрихкодыНоменклатуры.ПолучитьМаксимальноеЗначениеКодаВесовыхШтрихкодов();
МаксимальныйКодШтучногоТовара = РегистрыСведений.ШтрихкодыНоменклатуры.МаксимальныйКодШтучногоТовара();
МаксимальныйКодВесовогоТовара = РегистрыСведений.ШтрихкодыНоменклатуры.МаксимальныйКодВесовогоТовара();
ПрефиксУзлаШтрихкода = РегистрыСведений.ШтрихкодыНоменклатуры.ПрефиксУзлаШтрихкода();
Для Каждого НомерСтроки Из МассивСтрок Цикл
СтрокаТЧ = Объект.Товары.НайтиПоИдентификатору(НомерСтроки);
Если Не ЗначениеЗаполнено(СтрокаТЧ.Штрихкод) Тогда
Количество = Количество + 1;
Иначе
Продолжить;
КонецЕсли;
Код = Неопределено;
Диапазон = Неопределено;
Если Не СтрокаТЧ.Весовой Тогда
Для Каждого СтрокаТЧМаксимальныеЗначения Из МаксимальныеЗначенияКодовШтучныхШтрихкодов Цикл
Если Не СтрокаТЧМаксимальныеЗначения.Код < МаксимальныйКодШтучногоТовара Тогда
Продолжить;
КонецЕсли;
СтрокаТЧМаксимальныеЗначения.Код = СтрокаТЧМаксимальныеЗначения.Код + 1;
Код = СтрокаТЧМаксимальныеЗначения.Код;
Диапазон = СтрокаТЧМаксимальныеЗначения.Диапазон;
Прервать;
КонецЦикла;
Если Код = Неопределено Тогда
ВызватьИсключение РегистрыСведений.ШтрихкодыНоменклатуры.ТекстСообщенияНетСвободныхКодовШтучныхШтрихкодов();
КонецЕсли;
Штрихкод = РегистрыСведений.ШтрихкодыНоменклатуры.ПолучитьШтрихкодПоКоду(Код, Диапазон, ПрефиксУзлаШтрихкода);
Иначе
Если МаксимальноеЗначениеКодаВесовыхШтрихкодов = Неопределено ИЛИ МаксимальноеЗначениеКодаВесовыхШтрихкодов >= МаксимальныйКодВесовогоТовара Тогда
ВызватьИсключение РегистрыСведений.ШтрихкодыНоменклатуры.ТекстСообщенияНетСвободныхКодовВесовыхШтрихкодов();
КонецЕсли;
МаксимальноеЗначениеКодаВесовыхШтрихкодов = МаксимальноеЗначениеКодаВесовыхШтрихкодов + 1;
Штрихкод = РегистрыСведений.ШтрихкодыНоменклатуры.ПолучитьШтрихкодВесовогоТовараПоКоду(МаксимальноеЗначениеКодаВесовыхШтрихкодов, ПрефиксУзлаШтрихкода);
КонецЕсли;
НовыйШтрихкод = РегистрыСведений.ШтрихкодыНоменклатуры.СоздатьМенеджерЗаписи();
НовыйШтрихкод.Номенклатура = СтрокаТЧ.Номенклатура;
Если ПолучитьФункциональнуюОпцию("ИспользоватьХарактеристикиНоменклатуры") Тогда
НовыйШтрихкод.Характеристика = СтрокаТЧ.Характеристика;
КонецЕсли;
Если ПолучитьФункциональнуюОпцию("ИспользоватьУпаковкиНоменклатуры") Тогда
НовыйШтрихкод.Упаковка = СтрокаТЧ.Упаковка;
КонецЕсли;
НовыйШтрихкод.Штрихкод = Штрихкод;
НовыйШтрихкод.Записать();
Если СтрокаТЧ.Весовой Тогда
Штрихкоды.Вставить(СтрокаТЧ, РегистрыСведений.ШтрихкодыНоменклатуры.ПодготовитьШтрихкод(НовыйШтрихкод.Штрихкод));
Иначе
Штрихкоды.Вставить(СтрокаТЧ, НовыйШтрихкод.Штрихкод);
КонецЕсли;
КонецЦикла;
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ОписаниеОшибки = НСтр("ru = 'При записи штрихкодов произошла ошибка.
|Запись штрихкодов не выполнена.
|Дополнительное описание:
|%ДополнительноеОписание%'");
ОписаниеОшибки = СтрЗаменить(ОписаниеОшибки, "%ДополнительноеОписание%", ИнформацияОбОшибке().Описание);
Возврат 0;
КонецПопытки;
Для Каждого КлючИЗначение Из Штрихкоды Цикл
КлючИЗначение.Ключ.Штрихкод = КлючИЗначение.Значение;
КонецЦикла;
Возврат Количество;
КонецФункции
&НаСервере
Процедура УстановитьКоличествоПоУмолчаниюВСтрокеТЧНаСервере(СтрокаТЧ)
Если ЗаполнитьКоличествоЭтикетокПоДокументу И НЕ ЗаполнитьКоличествоЭтикетокПоОстаткамНаСкладе Тогда
СтрокаТЧ.КоличествоЭтикеток = СтрокаТЧ.КоличествоВДокументе;
ИначеЕсли ЗаполнитьКоличествоЭтикетокПоДокументу И ЗаполнитьКоличествоЭтикетокПоОстаткамНаСкладе Тогда
СтрокаТЧ.КоличествоЭтикеток = ?(СтрокаТЧ.КоличествоВДокументе > СтрокаТЧ.ОстатокНаСкладе,СтрокаТЧ.ОстатокНаСкладе,СтрокаТЧ.КоличествоВДокументе);
ИначеЕсли НЕ ЗаполнитьКоличествоЭтикетокПоДокументу И ЗаполнитьКоличествоЭтикетокПоОстаткамНаСкладе Тогда
СтрокаТЧ.КоличествоЭтикеток = ?(СтрокаТЧ.ОстатокНаСкладе > 0, СтрокаТЧ.ОстатокНаСкладе, 0);
КонецЕсли;
Если ЗаполнитьКоличествоЦенниковПоДокументу И НЕ ЗаполнитьКоличествоЦенниковПоОстаткамНаСкладе Тогда
СтрокаТЧ.КоличествоЦенников = ?(СтрокаТЧ.КоличествоВДокументе > 0, 1, 0);
ИначеЕсли ЗаполнитьКоличествоЦенниковПоДокументу И ЗаполнитьКоличествоЦенниковПоОстаткамНаСкладе Тогда
СтрокаТЧ.КоличествоЦенников = ?(СтрокаТЧ.ОстатокНаСкладе > 0 ИЛИ СтрокаТЧ.КоличествоВДокументе > 0, 1, 0);
ИначеЕсли НЕ ЗаполнитьКоличествоЦенниковПоДокументу И ЗаполнитьКоличествоЦенниковПоОстаткамНаСкладе Тогда
СтрокаТЧ.КоличествоЦенников = ?(СтрокаТЧ.ОстатокНаСкладе > 0, 1, 0);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УстановитьПараметрыДанных(СтруктураНастроек)
СтруктураНастроек.ПараметрыДанных.Вставить("Организация", Объект.Организация);
Если ЗначениеЗаполнено(Объект.Дата) Тогда
СтруктураНастроек.ПараметрыДанных.Вставить("Дата", Объект.Дата);
Иначе
СтруктураНастроек.ПараметрыДанных.Вставить("Дата", ТекущаяДатаСеанса());
КонецЕсли;
Если ЗначениеЗаполнено(Объект.ДатаДополнительно) Тогда
СтруктураНастроек.ПараметрыДанных.Вставить("ДатаДополнительно", Объект.ДатаДополнительно);
Иначе
СтруктураНастроек.ПараметрыДанных.Вставить("ДатаДополнительно", ТекущаяДатаСеанса());
КонецЕсли;
МаксимальныйКодВесовогоТовара = ПодключаемоеОборудованиеOfflineВызовСервера.МаксимальныйКодВесовогоТовара();
УстановитьПривилегированныйРежим(Истина);
ПравилоВыгрузкиВВесы = (ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.ПравилоОбмена, "ТипПодключаемогоОборудования") = Перечисления.ТипыПодключаемогоОборудования.ВесыСПечатьюЭтикеток);
УстановитьПривилегированныйРежим(Ложь);
СтруктураНастроек.ПараметрыДанных.Вставить("ВидЦены", Объект.ВидЦены);
СтруктураНастроек.ПараметрыДанных.Вставить("ВидЦеныДополнительно", Объект.ВидЦеныДополнительно);
СтруктураНастроек.ПараметрыДанных.Вставить("ПравилоОбмена", Объект.ПравилоОбмена);
СтруктураНастроек.ПараметрыДанных.Вставить("МаксимальныйКодВесовогоТовара", МаксимальныйКодВесовогоТовара);
СтруктураНастроек.ПараметрыДанных.Вставить("ПравилоВыгрузкиВВесы", ПравилоВыгрузкиВВесы);
СтруктураНастроек.ПараметрыДанных.Вставить("ОбъектПланирования", АссортиментСервер.ОбъектПланирования(Объект.Склад, Объект.Дата));
КонецПроцедуры
&НаСервере
Процедура УстановитьОбязательныеПоляДанных(СтруктураНастроек, ДобавитьШаблоны = Ложь)
СтруктураНастроек.ОбязательныеПоля.Добавить("Штрихкод");
СтруктураНастроек.ОбязательныеПоля.Добавить("Количество");
СтруктураНастроек.ОбязательныеПоля.Добавить("Номенклатура");
Если ПолучитьФункциональнуюОпцию("ИспользоватьХарактеристикиНоменклатуры") Тогда
СтруктураНастроек.ОбязательныеПоля.Добавить("Характеристика");
СтруктураНастроек.ОбязательныеПоля.Добавить("ХарактеристикиИспользуются");
КонецЕсли;
Если ИспользоватьСерииНоменклатуры Тогда
СтруктураНастроек.ОбязательныеПоля.Добавить("Серия");
КонецЕсли;
Если ПолучитьФункциональнуюОпцию("ИспользоватьУпаковкиНоменклатуры") Тогда
СтруктураНастроек.ОбязательныеПоля.Добавить("Упаковка");
КонецЕсли;
СтруктураНастроек.ОбязательныеПоля.Добавить("Весовой");
СтруктураНастроек.ОбязательныеПоля.Добавить("ОстатокНаСкладе");
СтруктураНастроек.ОбязательныеПоля.Добавить("Цена");
СтруктураНастроек.ОбязательныеПоля.Добавить("ДатаПоследнегоИзмененияЦены");
Если ИспользоватьВидЦеныДополнительно И ЗначениеЗаполнено(Объект.ВидЦеныДополнительно) Тогда
СтруктураНастроек.ОбязательныеПоля.Добавить("ЦенаДополнительно");
СтруктураНастроек.ОбязательныеПоля.Добавить("ДатаПоследнегоИзмененияЦеныДополнительно");
КонецЕсли;
Если ДобавитьШаблоны Тогда
СтруктураНастроек.ОбязательныеПоля.Добавить("Номенклатура.ВидНоменклатуры.ШаблонЭтикетки");
СтруктураНастроек.ОбязательныеПоля.Добавить("Номенклатура.ВидНоменклатуры.ШаблонЦенника");
СтруктураНастроек.ОбязательныеПоля.Добавить("Номенклатура.ШаблонЭтикетки");
СтруктураНастроек.ОбязательныеПоля.Добавить("Номенклатура.ШаблонЦенника");
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьТаблицуТоваровНаСервере(СохранятьШаблоныИКоличество, ОбновлениеДанныхПоВыбраннымТоварам = Ложь)
КонтролироватьАссортимент = Ложь;
Если Объект.РежимПолученияЦен = 2 Тогда
КонтролироватьАссортимент = АссортиментСерверПовтИсп.КонтролироватьАссортимент(Объект.Склад, Объект.Дата);
КонецЕсли;
Если СохранятьШаблоныИКоличество Тогда
Если ИспользуетсяЦенообразование25 Тогда
ТаблицаВыбранныеПозиции = Объект.Товары.Выгрузить(,"Номенклатура, Характеристика, Серия, Упаковка, ШаблонЦенника, КоличествоЦенников, ШаблонЭтикетки, КоличествоЭтикеток");
Иначе
ТаблицаВыбранныеПозиции = Объект.Товары.Выгрузить(,"Номенклатура, Характеристика, Упаковка, ШаблонЦенника, КоличествоЦенников, ШаблонЭтикетки, КоличествоЭтикеток");
КонецЕсли;
КонецЕсли;
СтруктураНастроек = Обработки.ПечатьЭтикетокИЦенников.СтруктураНастроек();
УстановитьОбязательныеПоляДанных(СтруктураНастроек, Истина);
УстановитьПараметрыДанных(СтруктураНастроек);
СтруктураНастроек.КомпоновщикНастроек = КомпоновщикНастроек;
Если Объект.ИсходныеДанныеТовары.Количество() > 0 ИЛИ ПечатьИзДокумента ИЛИ ОбновлениеДанныхПоВыбраннымТоварам Тогда
Если КонтролироватьАссортимент Тогда
СтруктураНастроек.ИмяМакетаСхемыКомпоновкиДанных = "ПоляШаблонаТоварыАссортимент";
Иначе
СтруктураНастроек.ИмяМакетаСхемыКомпоновкиДанных = "ПоляШаблонаТовары";
КонецЕсли;
Если ОбновлениеДанныхПоВыбраннымТоварам Тогда
Если ИспользуетсяЦенообразование25 Тогда
ИсходныеДанные = Объект.Товары.Выгрузить(,"Номенклатура, Характеристика, Серия, Упаковка");
Иначе
ИсходныеДанные = Объект.Товары.Выгрузить(,"Номенклатура, Характеристика, Упаковка");
КонецЕсли;
ИсходныеДанные.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число"));
СтруктураНастроек.ИсходныеДанные = ИсходныеДанные;
Иначе
СтруктураНастроек.ИсходныеДанные = Объект.ИсходныеДанныеТовары.Выгрузить();
КонецЕсли;
Иначе
Если КонтролироватьАссортимент Тогда
СтруктураНастроек.ИмяМакетаСхемыКомпоновкиДанных = "ПоляШаблонаБДТоварыАссортимент";
Иначе
СтруктураНастроек.ИмяМакетаСхемыКомпоновкиДанных = "ПоляШаблонаБДТовары";
КонецЕсли;
КонецЕсли;
Объект.Товары.Очистить();
НомерСтроки = 0;
СтруктураНастроек.ИспользуетсяЦенообразование25 = ИспользуетсяЦенообразование25;
СтруктураРезультата = Обработки.ПечатьЭтикетокИЦенников.ПодготовитьСтруктуруДанных(СтруктураНастроек, "Товары");
ПроверятьЕдиничнуюУпаковку = Истина;
Если СтруктураРезультата.Таблица.Колонки.Найти("ИспользоватьУпаковки") = Неопределено
Или СтруктураРезультата.Таблица.Колонки.Найти("НеОднаЕдиничнаяУпаковка") = Неопределено Тогда
ПроверятьЕдиничнуюУпаковку = Ложь;
КонецЕсли;
ИспользоватьХарактеристикиНоменклатуры = ПолучитьФункциональнуюОпцию("ИспользоватьХарактеристикиНоменклатуры");
ИспользоватьУпаковкиНоменклатуры = ПолучитьФункциональнуюОпцию("ИспользоватьУпаковкиНоменклатуры");
Для Каждого СтрокаТЧ Из СтруктураРезультата.Таблица Цикл
НоваяСтрока = Объект.Товары.Добавить();
НоваяСтрока.Номенклатура = СтрокаТЧ.Номенклатура;
Если ИспользоватьХарактеристикиНоменклатуры Тогда
НоваяСтрока.Характеристика = СтрокаТЧ.Характеристика;
КонецЕсли;
Если ИспользоватьСерииНоменклатуры Тогда
НоваяСтрока.Серия = СтрокаТЧ.Серия;
КонецЕсли;
Если ИспользоватьУпаковкиНоменклатуры Тогда
НоваяСтрока.Упаковка = СтрокаТЧ.Упаковка;
КонецЕсли;
НоваяСтрока.Цена = СтрокаТЧ.Цена;
НоваяСтрока.ДатаПоследнегоИзмененияЦены = СтрокаТЧ.ДатаПоследнегоИзмененияЦены;
Если ЗначениеЗаполнено(Объект.ВидЦеныДополнительно) Тогда
НоваяСтрока.ЦенаДополнительно = СтрокаТЧ.ЦенаДополнительно;
НоваяСтрока.ДатаПоследнегоИзмененияЦеныДополнительно = СтрокаТЧ.ДатаПоследнегоИзмененияЦеныДополнительно;
КонецЕсли;
Если СтрокаТЧ.Весовой Тогда
НоваяСтрока.Штрихкод = РегистрыСведений.ШтрихкодыНоменклатуры.ПодготовитьШтрихкод(СтрокаТЧ.Штрихкод);
Иначе
НоваяСтрока.Штрихкод = СтрокаТЧ.Штрихкод;
КонецЕсли;
ШаблонЦенникаВидаНоменклатуры = СтрокаТЧ[СтруктураРезультата.СоответствиеПолейСКДКолонкамТаблицы.Получить("Номенклатура.ВидНоменклатуры.ШаблонЦенника")];
ШаблонЦенникаНоменклатуры = СтрокаТЧ[СтруктураРезультата.СоответствиеПолейСКДКолонкамТаблицы.Получить("Номенклатура.ШаблонЦенника")];
НоваяСтрока.ШаблонЦенника = ?(ЗначениеЗаполнено(ШаблонЦенникаНоменклатуры), ШаблонЦенникаНоменклатуры, ШаблонЦенникаВидаНоменклатуры);
ШаблонЦенникаВидаНоменклатуры = СтрокаТЧ[СтруктураРезультата.СоответствиеПолейСКДКолонкамТаблицы.Получить("Номенклатура.ВидНоменклатуры.ШаблонЭтикетки")];
ШаблонЦенникаНоменклатуры = СтрокаТЧ[СтруктураРезультата.СоответствиеПолейСКДКолонкамТаблицы.Получить("Номенклатура.ШаблонЭтикетки")];
НоваяСтрока.ШаблонЭтикетки = ?(ЗначениеЗаполнено(ШаблонЦенникаНоменклатуры), ШаблонЦенникаНоменклатуры, ШаблонЦенникаВидаНоменклатуры);
НоваяСтрока.ОстатокНаСкладе = СтрокаТЧ.ОстатокНаСкладе;
НоваяСтрока.КоличествоВДокументе = СтрокаТЧ.Количество;
НоваяСтрока.Весовой = СтрокаТЧ.Весовой;
Если ИспользоватьХарактеристикиНоменклатуры Тогда
НоваяСтрока.ХарактеристикиИспользуются = СтрокаТЧ.ХарактеристикиИспользуются;
КонецЕсли;
УстановитьКоличествоПоУмолчаниюВСтрокеТЧНаСервере(НоваяСтрока);
Если СохранятьШаблоныИКоличество Тогда
ПараметрыОтбора = Новый Структура();
ПараметрыОтбора.Вставить("Номенклатура", НоваяСтрока.Номенклатура);
Если ИспользоватьХарактеристикиНоменклатуры Тогда
ПараметрыОтбора.Вставить("Характеристика", НоваяСтрока.Характеристика);
КонецЕсли;
Если ИспользоватьСерииНоменклатуры Тогда
ПараметрыОтбора.Вставить("Серия", НоваяСтрока.Серия);
КонецЕсли;
Если ИспользоватьУпаковкиНоменклатуры Тогда
ПараметрыОтбора.Вставить("Упаковка", НоваяСтрока.Упаковка);
КонецЕсли;
НайденныеСтроки = ТаблицаВыбранныеПозиции.НайтиСтроки(ПараметрыОтбора);
Если НайденныеСтроки.Количество() > 0 Тогда
ЗаполнитьЗначенияСвойств(НоваяСтрока, НайденныеСтроки[0]);
КонецЕсли;
КонецЕсли;
НоваяСтрока.Выбран = Истина;
НомерСтроки = НомерСтроки + 1;
Если ПроверятьЕдиничнуюУпаковку Тогда
Если СтрокаТЧ.ИспользоватьУпаковки
И СтрокаТЧ.НеОднаЕдиничнаяУпаковка Тогда
ТекстСообщения = НСтр("ru = 'У номенклатуры ""%Номенклатура%"" используется несколько упаковок с единицей измерения ""%ЕдиницаИзмерения%"" и коэффициентом 1. Для корректной привязки штрихкодов рекомендуется использовать одну единичную упаковку.'");
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Номенклатура%", Строка(СтрокаТЧ.Номенклатура));
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%ЕдиницаИзмерения%", Строка(СтрокаТЧ.ЕдиницаИзмерения));
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения,
СтрокаТЧ.Номенклатура,
ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("Объект.Товары", НомерСтроки, "Номенклатура"),
"Объект",
Ложь);
КонецЕсли;
КонецЕсли;
КонецЦикла;
ОбновитьВидимостьЗависимыхОтШаблонаПолей();
Элементы.Товары.Обновить();
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция ВыполнитьПроверку(Форма)
ЕстьОшибки = Ложь;
Для Каждого СтрокаТЧ Из Форма.Объект.Товары Цикл
Если Не СтрокаТЧ.Выбран Тогда
Продолжить;
КонецЕсли;
НомерСтроки = СтрокаТЧ.НомерСтроки - 1;
Если Форма.Режим = "ПечатьЭтикеток" Или Форма.Режим = "ПечатьЭтикетокИЦенников" Тогда
Если СтрокаТЧ.КоличествоЭтикеток = 0 Тогда
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не заполнено количество этикеток в строке: %1'"),
НомерСтроки + 1);
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
ТекстСообщения,,
"Объект.Товары["+НомерСтроки+"].КоличествоЭтикеток",,
ЕстьОшибки);
КонецЕсли;
Если НЕ ЗначениеЗаполнено(СтрокаТЧ.ШаблонЭтикетки) Тогда
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не выбран шаблон этикетки в строке: %1'"),
НомерСтроки + 1);
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
ТекстСообщения,,
"Объект.Товары["+НомерСтроки+"].ШаблонЭтикетки",,
ЕстьОшибки);
КонецЕсли;
КонецЕсли;
Если Форма.Режим = "ПечатьЦенников" Или Форма.Режим = "ПечатьЭтикетокИЦенников" Тогда
Если СтрокаТЧ.КоличествоЦенников = 0 Тогда
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не заполнено количество ценников в строке: %1'"),
НомерСтроки + 1);
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
ТекстСообщения,,
"Объект.Товары["+НомерСтроки+"].КоличествоЦенников",,
ЕстьОшибки);
КонецЕсли;
Если НЕ ЗначениеЗаполнено(СтрокаТЧ.ШаблонЦенника) Тогда
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не выбран шаблон ценника в строке: %1'"),
НомерСтроки + 1);
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
ТекстСообщения,,
"Объект.Товары["+НомерСтроки+"].ШаблонЦенника",,
ЕстьОшибки);
КонецЕсли;
КонецЕсли;
КонецЦикла;
Отбор = Новый Структура("Выбран", Истина);
ТоварыВыбраны = Форма.Объект.Товары.НайтиСтроки(Отбор).Количество() > 0;
Возврат Новый Структура("ТоварыВыбраны, ПроверкаВыполнена", ТоварыВыбраны, Не ЕстьОшибки И Форма.ПроверитьЗаполнение());
КонецФункции
&НаСервере
Процедура ПроверитьЗаполнениеШаблоновЭтикеток(ТоварыДляПечати, ЕстьОшибки = Ложь)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Товары.Номенклатура КАК Номенклатура
|ПОМЕСТИТЬ Товары
|ИЗ
| &ТаблицаТовары КАК Товары
|
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура
|;
|
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| Товары.Номенклатура КАК Номенклатура,
| ВЫБОР
| КОГДА СпрНоменклатура.ШаблонЭтикетки <> ЗНАЧЕНИЕ(Справочник.ШаблоныЭтикетокИЦенников.ПустаяСсылка)
| ТОГДА СпрНоменклатура.ШаблонЭтикетки
| ИНАЧЕ СпрНоменклатура.ВидНоменклатуры.ШаблонЭтикетки
| КОНЕЦ КАК ШаблонЭтикетки
|ИЗ
| Товары КАК Товары
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНоменклатура
| ПО Товары.Номенклатура = СпрНоменклатура.Ссылка";
Запрос.УстановитьПараметр("ТаблицаТовары", ТоварыДляПечати);
ТаблицаТоваров = Запрос.Выполнить().Выгрузить();
Отбор = Новый Структура("ШаблонЭтикетки", Справочники.ШаблоныЭтикетокИЦенников.ПустаяСсылка());
СтрокиТоваров = ТаблицаТоваров.НайтиСтроки(Отбор);
Для Каждого СтрокаТоваров Из СтрокиТоваров Цикл
ТекстСообщения = НСтр("ru = 'У номенклатуры ""%Номенклатура%"" не выбран шаблон этикетки.'");
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Номенклатура%", Строка(СтрокаТоваров.Номенклатура));
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, СтрокаТоваров.Номенклатура, "", "", ЕстьОшибки);
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура УстановитьКоличествоПоУмолчаниюНаСервере()
Для Каждого СтрокаТЧ Из Объект.Товары Цикл
УстановитьКоличествоПоУмолчаниюВСтрокеТЧНаСервере(СтрокаТЧ);
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция УстановитьЭлементОтбораСКД(ИмяПараметра, ЗначениеПараметра, Использование = Истина)
НайденныйЭлемент = Неопределено;
Поле = Новый ПолеКомпоновкиДанных(ИмяПараметра);
Отбор = КомпоновщикНастроек.Настройки.Отбор;
Для каждого ЭлементОтбора Из Отбор.Элементы Цикл
Если ТипЗнч(ЭлементОтбора) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда
Продолжить;
КонецЕсли;
Если ЭлементОтбора.ЛевоеЗначение = Поле Тогда
НайденныйЭлемент = ЭлементОтбора;
КонецЕсли;
КонецЦикла;
Если НайденныйЭлемент = Неопределено Тогда
НайденныйЭлемент = Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
КонецЕсли;
Если ТипЗнч(ЗначениеПараметра) = Тип("Массив") Тогда
НайденныйЭлемент.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
СписокЗначений = Новый СписокЗначений;
СписокЗначений.ЗагрузитьЗначения(ЗначениеПараметра);
ПравоеЗначение = СписокЗначений;
ИначеЕсли ТипЗнч(ЗначениеПараметра) = Тип("СправочникСсылка.Склады") И Справочники.Склады.ЭтоГруппа(ЗначениеПараметра) Тогда
НайденныйЭлемент.ВидСравнения = ВидСравненияКомпоновкиДанных.ВИерархии;
ПравоеЗначение = ЗначениеПараметра;
Иначе
НайденныйЭлемент.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ПравоеЗначение = ЗначениеПараметра;
КонецЕсли;
НайденныйЭлемент.Использование = Использование;
НайденныйЭлемент.ЛевоеЗначение = Поле;
НайденныйЭлемент.ПравоеЗначение = ПравоеЗначение;
Возврат НайденныйЭлемент;
КонецФункции
&НаСервере
Процедура ЗагрузитьНастройкиОтбораПоУмолчанию()
СхемаКомпоновкиДанных = Обработки.ПечатьЭтикетокИЦенников.ПолучитьМакет("ПоляШаблонаТовары");
НаборДанных25 = СхемаКомпоновкиДанных.НаборыДанных.Найти("НаборДанных2_5");
Если НаборДанных25 <> Неопределено Тогда
Если ИспользуетсяЦенообразование25 Тогда
СхемаКомпоновкиДанных.НаборыДанных.НаборДанных.Запрос = НаборДанных25.Запрос;
КонецЕсли;
СхемаКомпоновкиДанных.НаборыДанных.Удалить(НаборДанных25);
КонецЕсли;
ТекстЗапроса = СхемаКомпоновкиДанных.НаборыДанных.НаборДанных.Запрос;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ТекстЗапросаКоэффициентУпаковки1",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"УпаковкиНоменклатуры",
"ИсходныеДанные.Номенклатура"));
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ТекстЗапросаКоэффициентУпаковки2",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"ЕдиничныеУпаковкиВладельцы.Упаковка",
"ЕдиничныеУпаковкиВладельцы.Номенклатура"));
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ТекстЗапросаКоэффициентУпаковки3",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"ИсходныеДанные.Упаковка",
"ИсходныеДанные.Номенклатура"));
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ТекстЗапросаКоэффициентУпаковки4",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"ЕдиничныеУпаковкиНоменклатур.Упаковка",
"ЕдиничныеУпаковкиНоменклатур.Номенклатура"));
Если ИспользуетсяЦенообразование25 Тогда
ЗаменяемыйТекст = "&ДанныеПоСериямПереопределяемый";
Если ПолучитьФункциональнуюОпцию("ИспользоватьСерииНоменклатуры") Тогда
ТекстЗамены = "ИсходныеДанные.Серия";
Иначе
ТекстЗамены = "ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)";
КонецЕсли;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
ЗаменяемыйТекст,
ТекстЗамены);
КонецЕсли;
СхемаКомпоновкиДанных.НаборыДанных.НаборДанных.Запрос = ТекстЗапроса;
КомпоновщикНастроек.Инициализировать(
Новый ИсточникДоступныхНастроекКомпоновкиДанных(ПоместитьВоВременноеХранилище(СхемаКомпоновкиДанных, ЭтаФорма.УникальныйИдентификатор)));
КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
КомпоновщикНастроек.Восстановить(СпособВосстановленияНастроекКомпоновкиДанных.ПроверятьДоступность);
КонецПроцедуры
&НаСервере
Функция ПриИзмененииНоменклатуры(ТекущиеДанные)
СтруктураНастроек = Обработки.ПечатьЭтикетокИЦенников.СтруктураНастроек();
УстановитьОбязательныеПоляДанных(СтруктураНастроек, Истина);
УстановитьПараметрыДанных(СтруктураНастроек);
Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
Таблица.Колонки.Добавить("Характеристика", Новый ОписаниеТипов("СправочникСсылка.ХарактеристикиНоменклатуры"));
Если ИспользоватьСерииНоменклатуры Тогда
Таблица.Колонки.Добавить("Серия", Новый ОписаниеТипов("СправочникСсылка.СерииНоменклатуры"));
КонецЕсли;
Таблица.Колонки.Добавить("Упаковка", Новый ОписаниеТипов("СправочникСсылка.УпаковкиЕдиницыИзмерения"));
Таблица.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число"));
НоваяСтрока = Таблица.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, ТекущиеДанные);
СтруктураНастроек.ИмяМакетаСхемыКомпоновкиДанных = "ПоляШаблонаТовары";
СтруктураНастроек.ИсходныеДанные = Таблица;
СтруктураНастроек.ИспользуетсяЦенообразование25 = ИспользуетсяЦенообразование25;
СтруктураРезультата = Обработки.ПечатьЭтикетокИЦенников.ПодготовитьСтруктуруДанных(СтруктураНастроек, "Товары");
Данные = СтруктураРезультата.Таблица[0];
ВозвращаемоеЗначение = Новый Структура("Штрихкод, Весовой, ОстатокНаСкладе, Цена, ДатаПоследнегоИзмененияЦены, ШаблонЭтикетки, ШаблонЦенника, ХарактеристикиИспользуются");
ВозвращаемоеЗначение.Штрихкод = РегистрыСведений.ШтрихкодыНоменклатуры.ПодготовитьШтрихкод(
Данные[СтруктураРезультата.СоответствиеПолейСКДКолонкамТаблицы["Штрихкод"]]);
ВозвращаемоеЗначение.Цена = Данные[СтруктураРезультата.СоответствиеПолейСКДКолонкамТаблицы["Цена"]];
ВозвращаемоеЗначение.ДатаПоследнегоИзмененияЦены = Данные[СтруктураРезультата.СоответствиеПолейСКДКолонкамТаблицы["ДатаПоследнегоИзмененияЦены"]];
ВозвращаемоеЗначение.Весовой = Данные[СтруктураРезультата.СоответствиеПолейСКДКолонкамТаблицы["Весовой"]];
ВозвращаемоеЗначение.ОстатокНаСкладе = Данные[СтруктураРезультата.СоответствиеПолейСКДКолонкамТаблицы["ОстатокНаСкладе"]];
Если ПолучитьФункциональнуюОпцию("ИспользоватьХарактеристикиНоменклатуры") Тогда
ВозвращаемоеЗначение.ХарактеристикиИспользуются = Данные[СтруктураРезультата.СоответствиеПолейСКДКолонкамТаблицы["ХарактеристикиИспользуются"]];
Иначе
ВозвращаемоеЗначение.ХарактеристикиИспользуются = Ложь;
КонецЕсли;
ШаблонЦенникаВидаНоменклатуры = Данные[СтруктураРезультата.СоответствиеПолейСКДКолонкамТаблицы.Получить("Номенклатура.ВидНоменклатуры.ШаблонЦенника")];
ШаблонЦенникаНоменклатуры = Данные[СтруктураРезультата.СоответствиеПолейСКДКолонкамТаблицы.Получить("Номенклатура.ШаблонЦенника")];
ВозвращаемоеЗначение.ШаблонЦенника = ?(ЗначениеЗаполнено(ШаблонЦенникаНоменклатуры), ШаблонЦенникаНоменклатуры, ШаблонЦенникаВидаНоменклатуры);
ШаблонЦенникаВидаНоменклатуры = Данные[СтруктураРезультата.СоответствиеПолейСКДКолонкамТаблицы.Получить("Номенклатура.ВидНоменклатуры.ШаблонЭтикетки")];
ШаблонЦенникаНоменклатуры = Данные[СтруктураРезультата.СоответствиеПолейСКДКолонкамТаблицы.Получить("Номенклатура.ШаблонЭтикетки")];
ВозвращаемоеЗначение.ШаблонЭтикетки = ?(ЗначениеЗаполнено(ШаблонЦенникаНоменклатуры), ШаблонЦенникаНоменклатуры, ШаблонЦенникаВидаНоменклатуры);
Если ТекущиеДанные.Свойство("СтараяУпаковка") Тогда
КоэффициентСтаройУпаковки = Справочники.УпаковкиЕдиницыИзмерения.КоэффициентУпаковки(ТекущиеДанные.СтараяУпаковка, ТекущиеДанные.Номенклатура);
КоэффициентУпаковки = Справочники.УпаковкиЕдиницыИзмерения.КоэффициентУпаковки(ТекущиеДанные.Упаковка, ТекущиеДанные.Номенклатура);
КоличествоВДокументе = ТекущиеДанные.СтароеКоличествоВДокументе
/ ?(ЗначениеЗаполнено(КоэффициентУпаковки), КоэффициентУпаковки, 1)
* ?(ЗначениеЗаполнено(КоэффициентСтаройУпаковки), КоэффициентСтаройУпаковки, 1);
КоличествоЭтикеток = ТекущиеДанные.КоличествоЭтикеток
/ ?(ЗначениеЗаполнено(КоэффициентУпаковки), КоэффициентУпаковки, 1)
* ?(ЗначениеЗаполнено(КоэффициентСтаройУпаковки), КоэффициентСтаройУпаковки, 1);
ВозвращаемоеЗначение.Вставить("КоличествоЭтикеток", КоличествоЭтикеток);
ВозвращаемоеЗначение.Вставить("Количество", КоличествоВДокументе);
ВозвращаемоеЗначение.Вставить("КоличествоВДокументе", КоличествоВДокументе);
КонецЕсли;
Возврат ВозвращаемоеЗначение;
КонецФункции
&НаСервере
Функция ДобавитьНоменклатуруПоШтрихкодам(ДанныеШтрихкодов)
НеизвестныеШтрихкоды = Новый Массив;
Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
Таблица.Колонки.Добавить("Характеристика", Новый ОписаниеТипов("СправочникСсылка.ХарактеристикиНоменклатуры"));
Если ИспользоватьСерииНоменклатуры Тогда
Таблица.Колонки.Добавить("Серия", Новый ОписаниеТипов("СправочникСсылка.СерииНоменклатуры"));
КонецЕсли;
Таблица.Колонки.Добавить("Упаковка", Новый ОписаниеТипов("СправочникСсылка.УпаковкиЕдиницыИзмерения"));
Таблица.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число"));
КэшированныеЗначения = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначения();
КэшированныеЗначения.ПравоРегистрацииШтрихкодовНоменклатурыДоступно = ПравоРегистрацииШтрихкодовНоменклатурыДоступно;
ПрефиксыВесовыхШтрихкодов = ЗначениеНастроекПовтИсп.ПолучитьПрефиксыВесовыхШтрихкодов();
НеЗакешированныеРанееШтрихкоды = Новый Массив;
Для Каждого ТекШтрихкод Из ДанныеШтрихкодов Цикл
ТекШтрихкод.Штрихкод = ВРег(СокрЛП(ТекШтрихкод.Штрихкод));
РегистрыСведений.ШтрихкодыНоменклатуры.ПреобразоватьВесовойШтрихкод(ТекШтрихкод, ПрефиксыВесовыхШтрихкодов);
Если Не ЗначениеЗаполнено(КэшированныеЗначения.Штрихкоды[ТекШтрихкод.Штрихкод])
Или КэшированныеЗначения.Штрихкоды[ТекШтрихкод.Штрихкод].НеизвестныйШтрихкод Тогда
НеЗакешированныеРанееШтрихкоды.Добавить(ТекШтрихкод.Штрихкод);
КонецЕсли;
КонецЦикла;
Если НеЗакешированныеРанееШтрихкоды.Количество() > 0 Тогда
РегистрыСведений.ШтрихкодыНоменклатуры.ПолучитьДанныеПоШтрихкодам(КэшированныеЗначения, НеЗакешированныеРанееШтрихкоды);
КонецЕсли;
Для Каждого ТекШтрихкод Из ДанныеШтрихкодов Цикл
ДобавляемыеДанные = КэшированныеЗначения.Штрихкоды[ТекШтрихкод.Штрихкод];
Если ДобавляемыеДанные.НеизвестныйШтрихкод Тогда
НеизвестныеШтрихкоды.Добавить(ТекШтрихкод);
Иначе
НоваяСтрока = Таблица.Добавить();
НоваяСтрока.Номенклатура = ДобавляемыеДанные.Номенклатура;
НоваяСтрока.Характеристика = ДобавляемыеДанные.Характеристика;
НоваяСтрока.Упаковка = ДобавляемыеДанные.Упаковка;
КонецЕсли;
КонецЦикла;
ДобавитьТовары(Таблица);
Возврат НеизвестныеШтрихкоды;
КонецФункции
&НаСервере
Процедура ДобавитьТовары(Таблица)
СтруктураНастроек = Обработки.ПечатьЭтикетокИЦенников.СтруктураНастроек();
УстановитьОбязательныеПоляДанных(СтруктураНастроек, Истина);
УстановитьПараметрыДанных(СтруктураНастроек);
СтруктураНастроек.ИмяМакетаСхемыКомпоновкиДанных = "ПоляШаблонаТовары";
СтруктураНастроек.ИсходныеДанные = Таблица;
СтруктураНастроек.ИспользуетсяЦенообразование25 = ИспользуетсяЦенообразование25;
СтруктураРезультата = Обработки.ПечатьЭтикетокИЦенников.ПодготовитьСтруктуруДанных(СтруктураНастроек, "Товары");
Для Каждого СтрокаТЧ Из СтруктураРезультата.Таблица Цикл
НоваяСтрока = Объект.Товары.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТЧ);
НоваяСтрока.Штрихкод = РегистрыСведений.ШтрихкодыНоменклатуры.ПодготовитьШтрихкод(
СтрокаТЧ[СтруктураРезультата.СоответствиеПолейСКДКолонкамТаблицы["Штрихкод"]]);
НоваяСтрока.Цена = СтрокаТЧ[СтруктураРезультата.СоответствиеПолейСКДКолонкамТаблицы["Цена"]];
НоваяСтрока.Весовой = СтрокаТЧ[СтруктураРезультата.СоответствиеПолейСКДКолонкамТаблицы["Весовой"]];
НоваяСтрока.ОстатокНаСкладе = СтрокаТЧ[СтруктураРезультата.СоответствиеПолейСКДКолонкамТаблицы["ОстатокНаСкладе"]];
ШаблонЦенникаВидаНоменклатуры = СтрокаТЧ[СтруктураРезультата.СоответствиеПолейСКДКолонкамТаблицы.Получить("Номенклатура.ВидНоменклатуры.ШаблонЦенника")];
ШаблонЦенникаНоменклатуры = СтрокаТЧ[СтруктураРезультата.СоответствиеПолейСКДКолонкамТаблицы.Получить("Номенклатура.ШаблонЦенника")];
НоваяСтрока.ШаблонЦенника = ?(ЗначениеЗаполнено(ШаблонЦенникаНоменклатуры), ШаблонЦенникаНоменклатуры, ШаблонЦенникаВидаНоменклатуры);
ШаблонЦенникаВидаНоменклатуры = СтрокаТЧ[СтруктураРезультата.СоответствиеПолейСКДКолонкамТаблицы.Получить("Номенклатура.ВидНоменклатуры.ШаблонЭтикетки")];
ШаблонЦенникаНоменклатуры = СтрокаТЧ[СтруктураРезультата.СоответствиеПолейСКДКолонкамТаблицы.Получить("Номенклатура.ШаблонЭтикетки")];
НоваяСтрока.ШаблонЭтикетки = ?(ЗначениеЗаполнено(ШаблонЦенникаНоменклатуры), ШаблонЦенникаНоменклатуры, ШаблонЦенникаВидаНоменклатуры);
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ОбработатьШтрихкоды(ДанныеШтрихкодов)
Если Не ШтрихкодированиеНоменклатурыКлиент.ШтрихкодыВалидны(ДанныеШтрихкодов) Тогда
Возврат;
КонецЕсли;
Если ТипЗнч(ДанныеШтрихкодов) = Тип("Массив") Тогда
МассивШтрихкодов = ДанныеШтрихкодов;
Иначе
МассивШтрихкодов = Новый Массив;
МассивШтрихкодов.Добавить(ДанныеШтрихкодов);
КонецЕсли;
СтруктураПараметровДействия = Новый Структура;
СтруктураПараметровДействия.Вставить("НеизвестныеШтрихкоды", ДобавитьНоменклатуруПоШтрихкодам(МассивШтрихкодов));
СтруктураПараметровДействия.Вставить("ФормаВладелец", УникальныйИдентификатор);
Если ПравоРегистрацииШтрихкодовНоменклатурыДоступно
И СтруктураПараметровДействия.НеизвестныеШтрихкоды.Количество() > 0 Тогда
ШтрихкодированиеНоменклатурыКлиент.ОбработатьНеизвестныеШтрихкоды(СтруктураПараметровДействия, КэшированныеЗначения, ЭтаФорма);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбработкаВыбораПодборНаСервере(ВыбранноеЗначение)
Таблица = ПолучитьИзВременногоХранилища(ВыбранноеЗначение.АдресТоваровВХранилище);
ДобавитьТовары(Таблица);
КонецПроцедуры
&НаСервере
Процедура ОбновитьВидимостьЗависимыхОтШаблонаПолей()
Если ШаблоныВлияющиеНаВидимостьЭлементов = Неопределено Тогда
ОбновитьШаблоныВлияющиеНаВидимостьЭлементов();
КонецЕсли;
Если Режим = "ПечатьЭтикеток" Или Режим = "ПечатьЭтикетокИЦенников" Тогда
Шаблоны = Объект.Товары.Выгрузить(, "ШаблонЭтикетки").ВыгрузитьКолонку("ШаблонЭтикетки");
Иначе
Шаблоны = Новый Массив;
КонецЕсли;
Если Режим = "ПечатьЦенников" Или Режим = "ПечатьЭтикетокИЦенников" Тогда
Ценники = Объект.Товары.Выгрузить(, "ШаблонЦенника").ВыгрузитьКолонку("ШаблонЦенника");
Для Каждого Шаблон Из Ценники Цикл
Если Шаблоны.Найти(Шаблон) = Неопределено Тогда
Шаблоны.Добавить(Шаблон);
КонецЕсли;
КонецЦикла;
КонецЕсли;
ИспользоватьВидЦеныДополнительно = Ложь;
ВидимостьПравилоОбмена = Ложь;
Для Каждого Шаблон Из Шаблоны Цикл
Если ШаблоныВлияющиеНаВидимостьЭлементов.ВидЦеныДополнительно.Найти(Шаблон) <> Неопределено Тогда
ИспользоватьВидЦеныДополнительно = Истина;
КонецЕсли;
Если ШаблоныВлияющиеНаВидимостьЭлементов.ПравилоОбмена.Найти(Шаблон) <> Неопределено Тогда
ВидимостьПравилоОбмена = Истина;
КонецЕсли;
КонецЦикла;
Элементы.ВидЦеныДополнительно.Видимость = ИспользоватьВидЦеныДополнительно;
Элементы.ДатаВидЦеныДополнительно.Видимость = ИспользоватьВидЦеныДополнительно;
Элементы.ТоварыЦенаДополнительно.Видимость = ИспользоватьВидЦеныДополнительно;
Элементы.ПравилоОбмена.Видимость = ВидимостьПравилоОбмена;
КонецПроцедуры
&НаСервере
Процедура ПереключательРежимаПолученияЦенПриИзмененииСервер()
Элементы.ВидЦены.Видимость = Объект.РежимПолученияЦен = 1;
Элементы.Склад.Видимость = Объект.РежимПолученияЦен = 2;
КонецПроцедуры
&НаСервере
Процедура ОбновитьШаблоныВлияющиеНаВидимостьЭлементов()
ШаблоныВлияющиеНаВидимостьЭлементов = Новый Структура;
ШаблоныВлияющиеНаВидимостьЭлементов.Вставить("ВидЦеныДополнительно", Новый Массив);
ШаблоныВлияющиеНаВидимостьЭлементов.Вставить("ПравилоОбмена", Новый Массив);
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ШаблоныЭтикетокИЦенников.Ссылка,
| ШаблоныЭтикетокИЦенников.Шаблон
|ИЗ
| Справочник.ШаблоныЭтикетокИЦенников КАК ШаблоныЭтикетокИЦенников
|ГДЕ
| ШаблоныЭтикетокИЦенников.Назначение В(&Назначение)";
Назначения = Новый Массив;
Назначения.Добавить(Перечисления.НазначенияШаблоновЭтикетокИЦенников.ЭтикеткаДляТоваров);
Назначения.Добавить(Перечисления.НазначенияШаблоновЭтикетокИЦенников.ЦенникДляТоваров);
Запрос.УстановитьПараметр("Назначение", Назначения);
УстановитьПривилегированныйРежим(Истина);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Шаблон = Выборка.Шаблон;
ПараметрыМакета = Шаблон.Получить();
Для Каждого Параметр Из ПараметрыМакета.ПараметрыШаблона Цикл
Если СтрНайти(Параметр.Ключ ,"КодПодключаемогоОборудованияOffline") > 0 Тогда
Если ШаблоныВлияющиеНаВидимостьЭлементов.ПравилоОбмена.Найти(Выборка.Ссылка) = Неопределено Тогда
ШаблоныВлияющиеНаВидимостьЭлементов.ПравилоОбмена.Добавить(Выборка.Ссылка);
КонецЕсли;
КонецЕсли;
Если СтрНайти(Параметр.Ключ ,"PLU") > 0 Тогда
Если ШаблоныВлияющиеНаВидимостьЭлементов.ПравилоОбмена.Найти(Выборка.Ссылка) = Неопределено Тогда
ШаблоныВлияющиеНаВидимостьЭлементов.ПравилоОбмена.Добавить(Выборка.Ссылка);
КонецЕсли;
КонецЕсли;
Если СтрНайти(Параметр.Ключ ,"ЦенаДополнительно") > 0 Тогда
Если ШаблоныВлияющиеНаВидимостьЭлементов.ВидЦеныДополнительно.Найти(Выборка.Ссылка) = Неопределено Тогда
ШаблоныВлияющиеНаВидимостьЭлементов.ВидЦеныДополнительно.Добавить(Выборка.Ссылка);
КонецЕсли;
КонецЕсли;
Если СтрНайти(Параметр.Ключ, "ВидЦеныДополнительно") > 0 Тогда
Если ШаблоныВлияющиеНаВидимостьЭлементов.ВидЦеныДополнительно.Найти(Выборка.Ссылка) = Неопределено Тогда
ШаблоныВлияющиеНаВидимостьЭлементов.ВидЦеныДополнительно.Добавить(Выборка.Ссылка);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ВыбратьВариантЗаполненияУпаковокЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Результат = Неопределено Тогда
Возврат;
КонецЕсли;
Объект.Вариант = Результат.Вариант;
Объект.СкладскаяГруппа = Результат.СкладскаяГруппа;
ВыбранныеСтроки = ДополнительныеПараметры;
Если Объект.Вариант = "Оптимально" Тогда
РазбитьПоУпаковкамНаСервере(ВыбранныеСтроки);
ИначеЕсли Объект.Вариант = "ПоСкладскоГруппе" Тогда
РазбитьПоУпаковкамНаСервере(ВыбранныеСтроки, Ложь, Результат.СкладскаяГруппа);
Иначе
РазбитьПоУпаковкамНаСервере(ВыбранныеСтроки, Истина);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура РазбитьПоУпаковкамНаСервере(ВыбранныеСтроки, Базовыми = Ложь, СкладскаяГруппа = Неопределено)
Товары = Объект.Товары;
Для каждого ИдентификаторСтроки Из ВыбранныеСтроки Цикл
СтрокаТовар = Товары.НайтиПоИдентификатору(ИдентификаторСтроки);
ИндексСтроки = Товары.Индекс(СтрокаТовар);
СтрокаТовар.КоличествоВДокументе = ?(СтрокаТовар.КоличествоВДокументе, СтрокаТовар.КоличествоЭтикеток, СтрокаТовар.КоличествоВДокументе);
ТаблицаУпаковок = СкладыСервер.ПолучитьУпаковки(СтрокаТовар.Номенклатура, Базовыми, СкладскаяГруппа);
КоэффициентУпаковки = Справочники.УпаковкиЕдиницыИзмерения.КоэффициентУпаковки(СтрокаТовар.Упаковка, СтрокаТовар.Номенклатура);
ТребуемоеКоличество = СтрокаТовар.КоличествоВДокументе*?(КоэффициентУпаковки,КоэффициентУпаковки,1);
ТребуемоеКоличество = ?(ТребуемоеКоличество,
ТребуемоеКоличество,
СтрокаТовар.КоличествоЭтикеток *
?(КоэффициентУпаковки,КоэффициентУпаковки,1));
СкладыСервер.РазбитьУпаковками(ТаблицаУпаковок, ТребуемоеКоличество);
ДобавленоСтрок = 0;
Для каждого СтрокаУпаковка Из ТаблицаУпаковок Цикл
Если Не СтрокаУпаковка.Количество Тогда Продолжить КонецЕсли;
НоваяСтрока = Товары.Вставить(ИндексСтроки+1);
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТовар);
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаУпаковка);
Структура = Новый Структура;
Структура.Вставить("Номенклатура", НоваяСтрока.Номенклатура);
Структура.Вставить("Характеристика", НоваяСтрока.Характеристика);
Структура.Вставить("Упаковка", НоваяСтрока.Упаковка);
Штрихкоды = РозничныеПродажиВызовСервера.ПолучитьШтрихкодыНоменклатуры(Структура);
Если ШтрихКоды.Количество() Тогда
НоваяСтрока.ШтрихКод = ШтрихКоды[0];
Иначе
НоваяСтрока.ШтрихКод = "";
КонецЕсли;
НоваяСтрока.КоличествоВДокументе = СтрокаУпаковка.КоличествоУпаковок;
НоваяСтрока.КоличествоЭтикеток = СтрокаУпаковка.КоличествоУпаковок;
НоваяСтрока.КоличествоЦенников = СтрокаУпаковка.КоличествоУпаковок;
ДобавленоСтрок = ДобавленоСтрок + 1;
КонецЦикла;
Если ДобавленоСтрок Тогда
Товары.Удалить(ИндексСтроки);
КонецЕсли;
КонецЦикла;
Если ЭтоАдресВременногоХранилища(СохраненныеНастройки) Тогда
ТаблицаСохраненныеНастройки = ПолучитьИзВременногоХранилища(СохраненныеНастройки);
СтрокаНастройки = ТаблицаСохраненныеНастройки.Найти("Объект.Вариант", "Ключ");
Если СтрокаНастройки <> Неопределено Тогда СтрокаНастройки.Значение = Объект.Вариант; КонецЕсли;
СтрокаНастройки = ТаблицаСохраненныеНастройки.Найти("Объект.СкладскаяГруппа", "Ключ");
Если СтрокаНастройки <> Неопределено Тогда СтрокаНастройки.Значение = Объект.СкладскаяГруппа; КонецЕсли;
СохраненныеНастройки = ПоместитьВоВременноеХранилище(ТаблицаСохраненныеНастройки, УникальныйИдентификатор);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УстановитьИспользованиеЦенообразования(Дата = Неопределено)
ИспользуетсяЦенообразование25 = ЦенообразованиеВызовСервера.ИспользуетсяЦенообразование25(Дата);
ИспользоватьСерииНоменклатуры = ИспользуетсяЦенообразование25
И ПолучитьФункциональнуюОпцию("ИспользоватьСерииНоменклатуры");
КонецПроцедуры
&НаКлиенте
Процедура ПерезаполнитьЦены()
Если Объект.Товары.Количество() > 0 Тогда
Кнопки = Новый СписокЗначений;
Кнопки.Добавить(КодВозвратаДиалога.Да, НСтр("ru = 'Перезаполнить'"));
Кнопки.Добавить(КодВозвратаДиалога.Нет, НСтр("ru = 'Нет'"));
ТекстВопроса = НСтр("ru = 'Перезаполнить цены?'");
ОписаниеОповещения = Новый ОписаниеОповещения("ПерезаполнитьЦеныВопросЗавершение", ЭтотОбъект);
ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, Кнопки,, КодВозвратаДиалога.Да);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПерезаполнитьЦеныВопросЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Результат = КодВозвратаДиалога.Да Тогда
ЗаполнитьТаблицуТоваровНаСервере(Истина, Истина);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьОчиститьСообщения(НадоОчищать)
Если НадоОчищать Тогда
ОчиститьСообщения();
НадоОчищать = Ложь;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#КонецОбласти