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