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