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