#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ПрограммныйИнтерфейс
Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт
НеРедактируемыеРеквизиты = Новый Массив;
Возврат НеРедактируемыеРеквизиты;
КонецФункции
Функция ПолучитьБлокируемыеРеквизитыОбъекта() Экспорт
Результат = Новый Массив;
Результат.Добавить("ПериодичностьОформленияВыработки");
Результат.Добавить("ИспользоватьКТУ");
Результат.Добавить("ИспользоватьТарифныеСтавки");
Результат.Добавить("ИспользоватьОтработанноеВремя");
Результат.Добавить("ИспользоватьБригадныеНаряды;
|ВидыНарядовБригады, ВидыНарядовРаботники, ВидыНарядовБригадыИРаботники");
Результат.Добавить("ИспользоватьПерсональныеНаряды;
|ВидыНарядовБригады, ВидыНарядовРаботники, ВидыНарядовБригадыИРаботники");
Результат.Добавить("СпособНастройкиГрафикаРаботы");
Результат.Добавить("ГрафикиРаботы; ГрафикРаботы");
Результат.Добавить("ПроизводственноеПодразделение");
Результат.Добавить("ПроизводствоПоЗаказам");
Результат.Добавить("ПроизводствоБезЗаказов");
Результат.Добавить("ИспользуетсяСписаниеЗатратНаВыпуск;
|ОтдельнымДокументом, ПоПравиламРаспределения");
Возврат Результат;
КонецФункции
Функция ПолучитьПодразделениеДиспетчерПоУмолчанию(Знач Пользователь = Неопределено) Экспорт
Подразделение = Справочники.СтруктураПредприятия.ПустаяСсылка();
Возврат Подразделение;
КонецФункции
Функция КоличествоПодразделенийДиспетчеров() Экспорт
УстановитьПривилегированныйРежим(Истина);
Запрос = Новый Запрос(
"ВЫБРАТЬ
| КОЛИЧЕСТВО(*) КАК Количество
|ИЗ
| Справочник.СтруктураПредприятия КАК СтруктураПредприятия
|ГДЕ
| НЕ СтруктураПредприятия.ПометкаУдаления
| И СтруктураПредприятия.ПодразделениеДиспетчер
| И СтруктураПредприятия.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыОрганизацийПодразделений.Действует)");
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Количество = Выборка.Количество;
Иначе
Количество = 0;
КонецЕсли;
Возврат Количество;
КонецФункции
Функция ИспользуетсяНесколькоПодразделенийДиспетчеров() Экспорт
Возврат КоличествоПодразделенийДиспетчеров() > 1;
КонецФункции
Процедура ПроверитьИспользованиеПараметровПроизводства(Параметры, АдресХранилища) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| ТаблицаПоиска.Ссылка
|ИЗ
| Документ.ДвижениеПродукцииИМатериалов КАК ТаблицаПоиска
|ГДЕ
| ТаблицаПоиска.Отправитель = &Подразделение
| И ТаблицаПоиска.ХозяйственнаяОперация В (
| ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ПередачаПродукцииИзПроизводства),
| ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВыпускПродукцииНаСклад),
| ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВыпускПродукцииВПодразделение))
| И НЕ ТаблицаПоиска.ПоРаспоряжениям
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ ПЕРВЫЕ 1
| ВыпускПродукции.Ссылка
|ИЗ
| Документ.ВыпускПродукции КАК ВыпускПродукции
|ГДЕ
| ВыпускПродукции.Подразделение = &Подразделение
| И НЕ ВыпускПродукции.ВыпускПоРаспоряжениям
|;
|";
Запрос.УстановитьПараметр("Подразделение", Параметры.Объект);
УстановитьПривилегированныйРежим(Истина);
Результат = Запрос.ВыполнитьПакет();
УстановитьПривилегированныйРежим(Ложь);
РезультатПроверки = Новый Структура;
РезультатПроверки.Вставить("ИспользуетсяДляПроизводстваБезЗаказов", НЕ Результат[0].Пустой());
ПоместитьВоВременноеХранилище(РезультатПроверки, АдресХранилища);
КонецПроцедуры
Функция ЦеховаяКладоваяПоУмолчанию(Подразделение) Экспорт
Если ПолучитьФункциональнуюОпцию("ИспользоватьНесколькоСкладов") Тогда
Если НЕ ЗначениеЗаполнено(Подразделение) Тогда
Возврат Справочники.Склады.ПустаяСсылка();
КонецЕсли;
ТекстЗапроса =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 2
| Таблица.Ссылка КАК Склад
|ИЗ
| Справочник.Склады КАК Таблица
|ГДЕ
| НЕ Таблица.ПометкаУдаления
| И НЕ Таблица.ЭтоГруппа
| И Таблица.Подразделение = &Подразделение
| И Таблица.ЦеховаяКладовая";
Иначе
ТекстЗапроса =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 2
| Таблица.Ссылка КАК Склад
|ИЗ
| Справочник.Склады КАК Таблица
|ГДЕ
| НЕ Таблица.ПометкаУдаления
| И НЕ Таблица.ЭтоГруппа
| И Таблица.ЦеховаяКладовая";
КонецЕсли;
Запрос = Новый Запрос(ТекстЗапроса);
Запрос.УстановитьПараметр("Подразделение", Подразделение);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() И Выборка.Количество() = 1 Тогда
Склад = Выборка.Склад;
Иначе
Склад = Справочники.Склады.ПустаяСсылка();
КонецЕсли;
Возврат Склад;
КонецФункции
Функция ЗначенияПоУмолчанию() Экспорт
СтруктураЗначений = Новый Структура;
СтруктураЗначений.Вставить("Ссылка", Справочники.СтруктураПредприятия.ПустаяСсылка());
СтруктураЗначений.Вставить("ВариантОбособленногоУчетаТоваров", Перечисления.ВариантыОбособленногоУчетаТоваров.НеВедется);
СтруктураЗначений.Вставить("ПроизводственноеПодразделение", Ложь);
СтруктураЗначений.Вставить("ИнтервалПланирования", Неопределено);
СтруктураЗначений.Вставить("НачалоИнтервалаПланирования", '00010101');
СтруктураЗначений.Вставить("ОкончаниеИнтервалаПланирования", '00010101');
СтруктураЗначений.Вставить("ГрафикРаботы", Неопределено);
СтруктураЗначений.Вставить("ПодразделениеДиспетчер", Ложь);
СтруктураЗначений.Вставить("ИспользоватьСерииНоменклатуры", Ложь);
СтруктураЗначений.Вставить("УчитыватьСебестоимостьПоСериям", Ложь);
СтруктураЗначений.Вставить("ПроизводствоПоЗаказам", Ложь);
СтруктураЗначений.Вставить("ПроизводствоБезЗаказов", Ложь);
СтруктураЗначений.Вставить("ИспользуетсяСписаниеЗатратНаВыпуск", Ложь);
СтруктураЗначений.Вставить("ИспользоватьПооперационноеУправление", Ложь);
СтруктураЗначений.Вставить("ИспользоватьМатериалыВОперациях", Ложь);
СтруктураЗначений.Вставить("ИспользоватьВыходныеИзделияВОперациях", Ложь);
СтруктураЗначений.Вставить("ИспользоватьПооперационноеПланирование", Ложь);
СтруктураЗначений.Вставить("ПериодичностьОформленияВыработки", Неопределено);
СтруктураЗначений.Вставить("ИспользоватьКТУ", Ложь);
СтруктураЗначений.Вставить("ИспользоватьТарифныеСтавки", Ложь);
СтруктураЗначений.Вставить("ИспользоватьОтработанноеВремя", Ложь);
СтруктураЗначений.Вставить("ИспользоватьБригадныеНаряды", Ложь);
СтруктураЗначений.Вставить("ИспользоватьПерсональныеНаряды", Ложь);
СтруктураЗначений.Вставить("СпособНастройкиГрафикаРаботы", Перечисления.СпособыНастройкиГрафикаРаботыПодразделений.ОсновнойКалендарьПредприятия);
СтруктураЗначений.Вставить("ИспользоватьСменныеЗадания", Ложь);
СтруктураЗначений.Вставить("ИспользоватьПроизводственныеУчастки", Ложь);
СтруктураЗначений.Вставить("Статус", Перечисления.СтатусыОрганизацийПодразделений.Действует);
Возврат СтруктураЗначений
КонецФункции
Функция ДействующиеПараметрыУчета(Подразделения = Неопределено) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| СтруктураПредприятия.Ссылка КАК Ссылка,
| СтруктураПредприятия.Представление КАК Представление,
| СтруктураПредприятия.ВариантОбособленногоУчетаТоваров КАК ВариантОбособленногоУчетаТоваров,
| СтруктураПредприятия.ПроизводственноеПодразделение КАК ПроизводственноеПодразделение,
| СтруктураПредприятия.ИнтервалПланирования КАК ИнтервалПланирования,
| СтруктураПредприятия.НачалоИнтервалаПланирования КАК НачалоИнтервалаПланирования,
| СтруктураПредприятия.ОкончаниеИнтервалаПланирования КАК ОкончаниеИнтервалаПланирования,
| СтруктураПредприятия.ГрафикРаботы КАК ГрафикРаботы,
| СтруктураПредприятия.СпособПооперационногоУправления КАК СпособПооперационногоУправления,
| СтруктураПредприятия.ПодразделениеДиспетчер КАК ПодразделениеДиспетчер,
| СтруктураПредприятия.ИспользоватьСерииНоменклатуры КАК ИспользоватьСерииНоменклатуры,
| СтруктураПредприятия.УчитыватьСебестоимостьПоСериям КАК УчитыватьСебестоимостьПоСериям,
| СтруктураПредприятия.ПроизводствоПоЗаказам КАК ПроизводствоПоЗаказам,
| СтруктураПредприятия.ПроизводствоБезЗаказов КАК ПроизводствоБезЗаказов,
| СтруктураПредприятия.ИспользуетсяСписаниеЗатратНаВыпуск КАК ИспользуетсяСписаниеЗатратНаВыпуск,
| СтруктураПредприятия.ИспользоватьПооперационноеУправление КАК ИспользоватьПооперационноеУправление,
| СтруктураПредприятия.ИспользоватьМатериалыВОперациях КАК ИспользоватьМатериалыВОперациях,
| СтруктураПредприятия.ИспользоватьВыходныеИзделияВОперациях КАК ИспользоватьВыходныеИзделияВОперациях,
| СтруктураПредприятия.ИспользоватьПооперационноеПланирование КАК ИспользоватьПооперационноеПланирование,
| СтруктураПредприятия.ПериодичностьОформленияВыработки КАК ПериодичностьОформленияВыработки,
| СтруктураПредприятия.ИспользоватьКТУ КАК ИспользоватьКТУ,
| СтруктураПредприятия.ИспользоватьТарифныеСтавки КАК ИспользоватьТарифныеСтавки,
| СтруктураПредприятия.ИспользоватьОтработанноеВремя КАК ИспользоватьОтработанноеВремя,
| СтруктураПредприятия.ИспользоватьБригадныеНаряды КАК ИспользоватьБригадныеНаряды,
| СтруктураПредприятия.ИспользоватьПерсональныеНаряды КАК ИспользоватьПерсональныеНаряды,
| СтруктураПредприятия.СпособНастройкиГрафикаРаботы КАК СпособНастройкиГрафикаРаботы,
| СтруктураПредприятия.ИспользоватьСменныеЗадания КАК ИспользоватьСменныеЗадания,
| СтруктураПредприятия.ИспользоватьПроизводственныеУчастки КАК ИспользоватьПроизводственныеУчастки,
| СтруктураПредприятия.Статус КАК Статус
|ИЗ
| Справочник.СтруктураПредприятия КАК СтруктураПредприятия
|ГДЕ
| ВЫБОР
| КОГДА &ПоВсем
| ТОГДА ИСТИНА
| ИНАЧЕ СтруктураПредприятия.Ссылка В (&Подразделения)
| КОНЕЦ
| И СтруктураПредприятия.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыОрганизацийПодразделений.Действует)
| И НЕ СтруктураПредприятия.ПометкаУдаления";
Запрос.УстановитьПараметр("Подразделения", Подразделения);
Запрос.УстановитьПараметр("ПоВсем", Подразделения = Неопределено);
РезультатЗапроса = Запрос.Выполнить().Выгрузить();
Возврат РезультатЗапроса;
КонецФункции
Функция ОписаниеДействующихПараметров(Подразделение, ДатаДействия = Неопределено, ДействующиеПараметрыУчета = Неопределено) Экспорт
Если ДействующиеПараметрыУчета = Неопределено Тогда
ДействующиеПараметрыУчетаПоПодразделениям = ДействующиеПараметрыУчета(Подразделение);
Если ДействующиеПараметрыУчетаПоПодразделениям.Количество() > 0 Тогда
ДействующиеПараметрыУчета = ДействующиеПараметрыУчетаПоПодразделениям[0];
Иначе
ДействующиеПараметрыУчета = ЗначенияПоУмолчанию();
КонецЕсли;
КонецЕсли;
Если ДатаДействия = Неопределено Тогда
ДатаДействия = ТекущаяДатаСеанса();
КонецЕсли;
СтрокаШаблон = "%1: %2." + Символы.ПС;
СтрокаШаблонБулево = "%1." + Символы.ПС;
СтрокаОписанияНастроек = СтрШаблон(СтрокаШаблон,
НСтр("ru = 'Статус'"),
ДействующиеПараметрыУчета.Статус);
Если ПолучитьФункциональнуюОпцию("ФормироватьВидыЗапасовПоПодразделениямМенеджерам") Тогда
СтрокаОписанияНастроек = СтрокаОписанияНастроек
+ СтрШаблон(СтрокаШаблон,
НСтр("ru = 'Обособленный учет товаров по подразделению'"),
ДействующиеПараметрыУчета.ВариантОбособленногоУчетаТоваров);
КонецЕсли;
Если ПолучитьФункциональнуюОпцию("ИспользоватьПроизводство") Тогда
Если ДействующиеПараметрыУчета.ПроизводственноеПодразделение Тогда
СтрокаОписанияНастроек = СтрокаОписанияНастроек
+ СтрШаблон(СтрокаШаблонБулево,
НСтр("ru = 'Подразделение является производственным'"));
Иначе
СтрокаОписанияНастроек = СтрокаОписанияНастроек
+ СтрШаблон(СтрокаШаблонБулево,
НСтр("ru = 'Подразделение не является производственным'"));
КонецЕсли;
Если ДействующиеПараметрыУчета.СпособНастройкиГрафикаРаботы = Перечисления.СпособыНастройкиГрафикаРаботыПодразделений.ОсновнойКалендарьПредприятия Тогда
КалендарьПредприятия = Константы.ОсновнойКалендарьПредприятия.Получить();
Если НЕ ЗначениеЗаполнено(КалендарьПредприятия) Тогда
КалендарьПредприятия = НСтр("ru = 'не задан'");
КонецЕсли;
СтрокаОписанияНастроек = СтрокаОписанияНастроек
+ СтрШаблон(СтрокаШаблон,
НСтр("ru = 'Основной график работы предпрития'"),
КалендарьПредприятия);
ИначеЕсли ДействующиеПараметрыУчета.СпособНастройкиГрафикаРаботы = Перечисления.СпособыНастройкиГрафикаРаботыПодразделений.ИндивидуальныйГрафик Тогда
СтрокаОписанияНастроек = СтрокаОписанияНастроек
+ СтрШаблон(СтрокаШаблон,
НСтр("ru = 'Индивидуальный график работы'"),
ДействующиеПараметрыУчета.ГрафикРаботы);
Иначе
СтрокаОписанияНастроек = СтрокаОписанияНастроек
+ СтрШаблон(СтрокаШаблонБулево,
НСтр("ru = 'Не указан график работы'"));
КонецЕсли;
Если ДействующиеПараметрыУчета.ПроизводственноеПодразделение Тогда
Если ДействующиеПараметрыУчета.ИспользоватьБригадныеНаряды И ДействующиеПараметрыУчета.ИспользоватьПерсональныеНаряды Тогда
СтрокаОписанияНастроек = СтрокаОписанияНастроек
+ СтрШаблон(СтрокаШаблонБулево,
НСтр("ru = 'Исполнителями работ назначаются бригады и работники'"));
ИначеЕсли ДействующиеПараметрыУчета.ИспользоватьБригадныеНаряды Тогда
СтрокаОписанияНастроек = СтрокаОписанияНастроек
+ СтрШаблон(СтрокаШаблонБулево,
НСтр("ru = 'Исполнителями работ назначаются бригады'"));
Иначе
СтрокаОписанияНастроек = СтрокаОписанияНастроек
+ СтрШаблон(СтрокаШаблонБулево,
НСтр("ru = 'Исполнителями работ назначаются работники'"));
КонецЕсли;
КонецЕсли;
Если ДействующиеПараметрыУчета.ИспользоватьКТУ Тогда
СтрокаОписанияНастроек = СтрокаОписанияНастроек
+ СтрШаблон(СтрокаШаблонБулево,
НСтр("ru = 'Выполненные работы распределяются по работникам бригады с учетом коэффициентов трудового участия'"));
Иначе
СтрокаОписанияНастроек = СтрокаОписанияНастроек
+ СтрШаблон(СтрокаШаблонБулево,
НСтр("ru = 'Выполненные работы распределяются по работникам бригады без учета коэффициентов трудового участия'"));
КонецЕсли;
Если ДействующиеПараметрыУчета.ИспользоватьОтработанноеВремя Тогда
СтрокаОписанияНастроек = СтрокаОписанияНастроек
+ СтрШаблон(СтрокаШаблонБулево,
НСтр("ru = 'Выполненные работы распределяются по работникам бригады с учетом отработанного времени'"));
Иначе
СтрокаОписанияНастроек = СтрокаОписанияНастроек
+ СтрШаблон(СтрокаШаблонБулево,
НСтр("ru = 'Выполненные работы распределяются по работникам бригады без учета отработанного времени'"));
КонецЕсли;
Если ДействующиеПараметрыУчета.ИспользоватьТарифныеСтавки Тогда
СтрокаОписанияНастроек = СтрокаОписанияНастроек
+ СтрШаблон(СтрокаШаблонБулево,
НСтр("ru = 'Выполненные работы распределяются по работникам бригады с учетом тарифных ставок'"));
Иначе
СтрокаОписанияНастроек = СтрокаОписанияНастроек
+ СтрШаблон(СтрокаШаблонБулево,
НСтр("ru = 'Выполненные работы распределяются по работникам бригады без учета тарифных ставок'"));
КонецЕсли;
Если Константы.ИспользоватьПериодичностьОформленияВыработки.Получить() Тогда
Если ЗначениеЗаполнено(ДействующиеПараметрыУчета.ПериодичностьОформленияВыработки) Тогда
СтрокаОписанияНастроек = СтрокаОписанияНастроек
+ СтрШаблон(СтрокаШаблон,
НСтр("ru = 'Выработка сотрудников оформляется'"),
ДействующиеПараметрыУчета.ПериодичностьОформленияВыработки);
Иначе
СтрокаОписанияНастроек = СтрокаОписанияНастроек
+ СтрШаблон(СтрокаШаблонБулево,
НСтр("ru = 'Периодичность оформления выработка сотрудников не указана'"));
КонецЕсли;
КонецЕсли;
КонецЕсли;
Возврат СтрокаОписанияНастроек
КонецФункции
#Область Команды
Процедура ДобавитьКомандыСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры) Экспорт
Команда = Документы.ПоручениеЭкспедитору.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании);
Если Команда <> Неопределено Тогда
Команда.РежимЗаписи = "";
КонецЕсли;
БизнесПроцессы.Задание.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании);
КонецПроцедуры
#КонецОбласти
#Область ДляВызоваИзДругихПодсистем
Процедура ПриОпределенииНастроекВерсионированияОбъектов(Настройки) Экспорт
КонецПроцедуры
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт
Ограничение.Текст =
"РазрешитьЧтениеИзменение
|ГДЕ
| ЗначениеРазрешено(Ссылка)";
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#КонецЕсли
#Область ОбработчикиСобытий
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
Если Параметры.Свойство("Отбор") И (Параметры.Отбор.Свойство("ПодразделениеДиспетчерИлиПроизводственноеПодразделение")
Или Параметры.Отбор.Свойство("ПроизводственноеПодразделение")) Тогда
ПроизводствоВызовСервера.СтруктураПредприятияОбработкаПолученияДанныхВыбора(
ДанныеВыбора,
Параметры,
СтандартнаяОбработка);
Возврат;
КонецЕсли;
СтандартнаяОбработка = Ложь;
Если ЗначениеЗаполнено(Параметры.СтрокаПоиска) Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 51
| СтруктураПредприятия.Ссылка КАК Ссылка,
| СтруктураПредприятия.ПометкаУдаления КАК ПометкаУдаления,
| СтруктураПредприятия.Наименование КАК Наименование,
| ВЫБОР
| КОГДА СтруктураПредприятия.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыОрганизацийПодразделений.НеДействует)
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК НеДействует,
| СтруктураПредприятия.Код КАК Код,
| ЛОЖЬ КАК ПодборПоКоду
|ИЗ
| Справочник.СтруктураПредприятия КАК СтруктураПредприятия
|ГДЕ
| СтруктураПредприятия.Наименование ПОДОБНО &Текст
| И НЕ СтруктураПредприятия.ПометкаУдаления
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ ПЕРВЫЕ 51
| СтруктураПредприятия.Ссылка,
| СтруктураПредприятия.ПометкаУдаления,
| СтруктураПредприятия.Наименование КАК Наименование,
| ВЫБОР
| КОГДА СтруктураПредприятия.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыОрганизацийПодразделений.НеДействует)
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ,
| СтруктураПредприятия.Код,
| ИСТИНА
|ИЗ
| Справочник.СтруктураПредприятия КАК СтруктураПредприятия
|ГДЕ
| СтруктураПредприятия.Код ПОДОБНО &Текст
| И НЕ СтруктураПредприятия.ПометкаУдаления
|
|УПОРЯДОЧИТЬ ПО
| Наименование";
Запрос.УстановитьПараметр("Текст", "%" + СокрЛП(Параметры.СтрокаПоиска) + "%");
Если МультиязычностьСервер.ИспользуетсяДополнительныйЯзык("1")
Или МультиязычностьСервер.ИспользуетсяДополнительныйЯзык("2") Тогда
ИменаРеквизитов = МультиязычностьСервер.ИменаРеквизитовСУчетомКодаЯзыка("Наименование");
ШаблонЗамены = СтрЗаменить("СтруктураПредприятия.%1", "%1", ИменаРеквизитов["Наименование"]);
Запрос.Текст = СтрЗаменить(Запрос.Текст, "СтруктураПредприятия.Наименование",
ШаблонЗамены);
КонецЕсли;
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
ДанныеВыбора = Новый СписокЗначений;
Пока Выборка.Следующий() Цикл
ШаблонПредставления = "%1 (%2)";
Если Выборка.ПодборПоКоду Тогда
Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонПредставления,
Выборка.Код, Выборка.Наименование);
Иначе
Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонПредставления,
Выборка.Наименование, Выборка.Код);
КонецЕсли;
Если Выборка.НеДействует Тогда
Элемент = Новый Структура;
Элемент.Вставить("Значение", Выборка.Ссылка);
Элемент.Вставить("ПометкаУдаления", Выборка.ПометкаУдаления);
ТекстПредупреждения = НСтр("ru = 'Выбрано недействующее подразделение.'");
Элемент.Вставить("Предупреждение", ТекстПредупреждения);
ДанныеВыбора.Добавить(Элемент, Представление);
Иначе
ДанныеВыбора.Добавить(Выборка.Ссылка, Представление);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
#КонецЕсли
Процедура ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка)
МультиязычностьКлиентСервер.ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка);
КонецПроцедуры
Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка)
МультиязычностьКлиентСервер.ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка);
КонецПроцедуры
#КонецОбласти
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область СлужебныеПроцедурыИФункции
#Область Печать
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
КонецПроцедуры
#КонецОбласти
#Область Отчеты
Процедура ДобавитьКомандыОтчетов(КомандыОтчетов, Параметры) Экспорт
КонецПроцедуры
#КонецОбласти
#Область ОбновлениеИнформационнойБазы
Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт
Обработчик = Обработчики.Добавить();
Обработчик.Процедура = "Справочники.СтруктураПредприятия.ОбработатьДанныеДляПереходаНаНовуюВерсию";
Обработчик.Версия = "11.5.24.25";
Обработчик.РежимВыполнения = "Отложенно";
Обработчик.Идентификатор = Новый УникальныйИдентификатор("3729d747-7cb7-426a-afb4-002f38ef369c");
Обработчик.Многопоточный = Истина;
Обработчик.ПроцедураЗаполненияДанныхОбновления = "Справочники.СтруктураПредприятия.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию";
Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы";
СписокОписаний = Новый Массив;
СписокОписаний.Добавить(НСтр("ru = 'Обновление справочника ""Подразделение"":'"));
СписокОписаний.Добавить(НСтр("ru = '- Заполнение мультиязычных реквизитов справочника';"));
Обработчик.Комментарий = СтрСоединить(СписокОписаний, Символы.ПС);
Обработчик.Порядок = Перечисления.ПорядокОбработчиковОбновления.Обычный;
Читаемые = Новый Массив;
Читаемые.Добавить(Метаданные.Справочники.СтруктураПредприятия.ПолноеИмя());
Обработчик.ЧитаемыеОбъекты = СтрСоединить(Читаемые, ",");
Изменяемые = Новый Массив;
Изменяемые.Добавить(Метаданные.Справочники.СтруктураПредприятия.ПолноеИмя());
Обработчик.ИзменяемыеОбъекты = СтрСоединить(Изменяемые, ",");
Блокируемые = Новый Массив;
Блокируемые.Добавить(Метаданные.Справочники.СтруктураПредприятия.ПолноеИмя());
Обработчик.БлокируемыеОбъекты = СтрСоединить(Блокируемые, ",");
КонецПроцедуры
Процедура ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры) Экспорт
ПараметрыВыборки = Параметры.ПараметрыВыборки;
ПараметрыВыборки.ПолныеИменаОбъектов = ПустаяСсылка().Метаданные().ПолноеИмя();
ПараметрыВыборки.СпособВыборки = ОбновлениеИнформационнойБазы.СпособВыборкиСсылки();
ИспользуютсяДопЯзыки = Ложь;
Для Каждого ИспользуетсяДопЯзык Из МультиязычностьСервер.СведенияОЯзыках().Используется Цикл
Если ИспользуетсяДопЯзык.Значение = Истина Тогда
ИспользуютсяДопЯзыки = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Если Не ИспользуютсяДопЯзыки Тогда
Возврат;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СтруктураПредприятия.Ссылка КАК Ссылка
|ИЗ
| Справочник.СтруктураПредприятия КАК СтруктураПредприятия
|ГДЕ
| НЕ СтруктураПредприятия.Наименование = """"
| И СтруктураПредприятия.НаименованиеЯзык1 = """"
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ
| СтруктураПредприятия.Ссылка КАК Ссылка
|ИЗ
| Справочник.СтруктураПредприятия КАК СтруктураПредприятия
|ГДЕ
| НЕ СтруктураПредприятия.Наименование = """"
| И СтруктураПредприятия.НаименованиеЯзык2 = """"";
ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"));
КонецПроцедуры
Процедура ОбработатьДанныеДляПереходаНаНовуюВерсию(Параметры) Экспорт
Параметры.ОбработкаЗавершена = Ложь;
ПолноеИмяОбъекта = ПустаяСсылка().Метаданные().ПолноеИмя();
ОбновляемыеДанные = ОбновлениеИнформационнойБазы.ДанныеДляОбновленияВМногопоточномОбработчике(Параметры);
Если ОбновляемыеДанные.Количество() = 0 Тогда
Параметры.ОбработкаЗавершена =
ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена(Параметры.Очередь, ПолноеИмяОбъекта);
Возврат;
КонецЕсли;
ОбъектовОбработано = 0;
ПроблемныхОбъектов = 0;
ИсключенияПриОбновлении = Новый Массив;
СписокОписаний = Новый Массив;
СписокОписаний.Добавить(НСтр("ru = 'Не удалось обработать справочник ""Подразделение"" по обработчику:'"));
СписокОписаний.Добавить(НСтр("ru = '- Заполнение мультиязычных реквизитов справочника';"));
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ДанныеДляОбновления.Ссылка КАК Ссылка
|ПОМЕСТИТЬ ВТ
|ИЗ
| &ДанныеДляОбновления КАК ДанныеДляОбновления
|;
|
|
|ВЫБРАТЬ
| ВТ.Ссылка КАК Ссылка,
| СтруктураПредприятия.ВерсияДанных КАК ВерсияДанных
|ИЗ
| ВТ КАК ВТ
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СтруктураПредприятия КАК СтруктураПредприятия
| ПО ВТ.Ссылка = СтруктураПредприятия.Ссылка";
Запрос.УстановитьПараметр("ДанныеДляОбновления", ОбновляемыеДанные);
Справочник = Запрос.Выполнить().Выбрать();
Пока Справочник.Следующий() Цикл
ПричинаИсключения = 0;
Рекомендация = "";
НачатьТранзакцию();
Попытка
ПричинаИсключения = 1;
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить(ПолноеИмяОбъекта);
ЭлементБлокировки.УстановитьЗначение("Ссылка", Справочник.Ссылка);
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
Блокировка.Заблокировать();
СправочникОбъект = ОбновлениеИнформационнойБазыУТ.ПроверитьПолучитьОбъект(
Справочник.Ссылка, Справочник.ВерсияДанных, Параметры.Очередь);
ПричинаИсключения = 2;
Рекомендация = НСтр("ru = 'Проверьте данные справочника вручную.'");
ОбъектИзменен = Ложь;
Если СправочникОбъект <> Неопределено Тогда
Если Не ЗначениеЗаполнено(СправочникОбъект.НаименованиеЯзык1) Тогда
СправочникОбъект.НаименованиеЯзык1 = СправочникОбъект.Наименование;
КонецЕсли;
Если Не ЗначениеЗаполнено(СправочникОбъект.НаименованиеЯзык2) Тогда
СправочникОбъект.НаименованиеЯзык2 = СправочникОбъект.Наименование;
КонецЕсли;
ОбъектИзменен = Истина;
КонецЕсли;
ПричинаИсключения = 3;
Если ОбъектИзменен Тогда
ОбновлениеИнформационнойБазы.ЗаписатьДанные(СправочникОбъект);
Иначе
ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(Справочник.Ссылка);
КонецЕсли;
ОбъектовОбработано = ОбъектовОбработано + 1;
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ПроблемныхОбъектов = ПроблемныхОбъектов + 1;
ОбновлениеИнформационнойБазыУТ.СообщитьОНеудачнойОбработке(ИнформацияОбОшибке(), Справочник.Ссылка);
Если ПричинаИсключения = 2 Тогда
ОписаниеПроблемы = ОбновлениеИнформационнойБазыУТ.ПроблемаСДанными(
Справочник.Ссылка, Рекомендация, ИнформацияОбОшибке());
ИсключенияПриОбновлении.Добавить(ОписаниеПроблемы);
ИначеЕсли ПричинаИсключения = 3 Тогда
ОбновлениеИнформационнойБазыУТ.ЗаписатьПлохиеДанные(
ИсключенияПриОбновлении, ОбъектовОбработано, Параметры);
ВызватьИсключение СтрСоединить(СписокОписаний, Символы.ПС);
КонецЕсли;
КонецПопытки;
КонецЦикла;
Параметры.ОбработкаЗавершена =
ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена(Параметры.Очередь, ПолноеИмяОбъекта);
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#КонецЕсли