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