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