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