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