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