#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ПрограммныйИнтерфейс
Функция ПолучитьБлокируемыеРеквизитыОбъекта() Экспорт
Результат = Новый Массив;
Результат.Добавить("УчетДоходов");
Результат.Добавить("УчетЗатрат");
Результат.Добавить("ДопускаетсяОбособлениеСверхПотребности");
Результат.Добавить("УчетРасчетовСПоставщиками");
Результат.Добавить("УчетВнеоборотныхАктивов");
Результат.Добавить("УчетДенежныхСредств;ГруппаУчетДС");
Результат.Добавить("НалогообложениеНДС;НалогообложениеНДС");
Результат.Добавить("НалогообложениеНДСОпределяетсяВДокументе;РежимНалогообложенияОпределяетсяЗначением,РежимНалогообложенияОпределяетсяВДокументе");
Результат.Добавить("ИсполнениеГосударственныхКонтрактов");
НаправленияДеятельностиЛокализация.ДополнитьБлокируемыеРеквизитыОбъекта(Результат);
Возврат Результат;
КонецФункции
Функция ИспользуетсяУчетПоНаправлениям() Экспорт
Возврат ПолучитьФункциональнуюОпцию("ИспользоватьУчетЗатратПоНаправлениямДеятельности")
ИЛИ ПолучитьФункциональнуюОпцию("ИспользоватьУчетВнеоборотныхАктивовПоНаправлениямДеятельности")
ИЛИ ПолучитьФункциональнуюОпцию("ИспользоватьУчетРасчетовСПоставщикамиПоНаправлениямДеятельности")
ИЛИ ПолучитьФункциональнуюОпцию("ИспользоватьУчетДоходовПоНаправлениямДеятельности")
ИЛИ ПолучитьФункциональнуюОпцию("ИспользоватьУчетДСпоНаправлениямДеятельностиРаздельно")
ИЛИ ПолучитьФункциональнуюОпцию("ИспользоватьУчетДСпоНаправлениямДеятельностиПоКорреспонденции");
КонецФункции
Функция ПараметрыЗаполненияНалогообложениеНДСПродажи() Экспорт
ПараметрыЗаполнения = УчетНДСУПКлиентСервер.ПараметрыЗаполненияНалогообложенияНДСПродажи();
ПараметрыЗаполнения.Дата = ТекущаяДатаСеанса();
ПараметрыЗаполнения.РеализацияТоваров = Истина;
ПараметрыЗаполнения.РеализацияРаботУслуг = Истина;
ПараметрыЗаполнения.ЭтоЗаказ = Истина;
Возврат ПараметрыЗаполнения;
КонецФункции
#КонецОбласти
#Область ОбработчикиСобытий
Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Запрос = Новый Запрос;
Если Параметры.ВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.Элементы Тогда
СтрокаОтбора = " И НаправленияДеятельности.Статус = &Статус";
ИначеЕсли Параметры.ВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.Группы Тогда
СтрокаОтбора = " И НаправленияДеятельности.ЭтоГруппа";
Иначе
СтрокаОтбора = " И (НаправленияДеятельности.Статус = &Статус ИЛИ НаправленияДеятельности.ЭтоГруппа)";
КонецЕсли;
Запрос.УстановитьПараметр("Статус", Перечисления.СтатусыНаправленияДеятельности.Используется);
Если Параметры.Свойство("Отбор") Тогда
Если Параметры.Отбор.Свойство("УчетЗатратИлиРасчетовСПоставщиками") И Параметры.Отбор.УчетЗатратИлиРасчетовСПоставщиками Тогда
СтрокаОтбора = СтрокаОтбора + " И (НаправленияДеятельности.УчетЗатрат = ИСТИНА
|ИЛИ НаправленияДеятельности.УчетРасчетовСПоставщиками = ИСТИНА)";
КонецЕсли;
Если Параметры.Отбор.Свойство("УчетЗатратИлиРасчетовСКлиентами")
И Параметры.Отбор.УчетЗатратИлиРасчетовСКлиентами Тогда
СтрокаОтбора = СтрокаОтбора + " И (НаправленияДеятельности.УчетЗатрат = ИСТИНА
|ИЛИ НаправленияДеятельности.УчетДоходов = ИСТИНА)";
КонецЕсли;
Если Параметры.Отбор.Свойство("ТипНаправленияДеятельности") Тогда
СтрокаОтбора = СтрокаОтбора + " И НаправленияДеятельности.ТипНаправленияДеятельности В (&ТипНаправленияДеятельности)";
Запрос.УстановитьПараметр("ТипНаправленияДеятельности", Параметры.Отбор.ТипНаправленияДеятельности);
КонецЕсли;
МетаРеквизиты = Метаданные.Справочники.НаправленияДеятельности.Реквизиты;
ТипБулево = Тип("Булево");
Для Каждого КлючИЗначение Из Параметры.Отбор Цикл
Если ТипЗнч(КлючИЗначение.Значение) = ТипБулево Тогда
МетаРеквизит = МетаРеквизиты.Найти(КлючИЗначение.Ключ);
Если МетаРеквизит <> Неопределено И МетаРеквизит.Тип.СодержитТип(ТипБулево) Тогда
СтрокаОтбора = СтрокаОтбора + "
| И НаправленияДеятельности." + КлючИЗначение.Ключ + " = " + ?(КлючИЗначение.Значение, "ИСТИНА", "ЛОЖЬ") + "
|";
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если Параметры.Свойство("Ссылка") Тогда
Если ТипЗнч(Параметры.Ссылка) = Тип("СправочникСсылка.ДоговорыКонтрагентов")
И Параметры.Свойство("ТипДоговора") Тогда
Если Параметры.ТипДоговора = Перечисления.ТипыДоговоров.СПокупателем
ИЛИ Параметры.ТипДоговора = Перечисления.ТипыДоговоров.СКомиссионером Тогда
СтрокаОтбора = СтрокаОтбора + " И НаправленияДеятельности.УчетДоходов = ИСТИНА";
ИначеЕсли Параметры.ТипДоговора = Перечисления.ТипыДоговоров.СПоставщиком
ИЛИ Параметры.ТипДоговора = Перечисления.ТипыДоговоров.СКомитентом
ИЛИ Параметры.ТипДоговора = Перечисления.ТипыДоговоров.Импорт
ИЛИ Параметры.ТипДоговора = Перечисления.ТипыДоговоров.ВвозИзЕАЭС
ИЛИ Параметры.ТипДоговора = Перечисления.ТипыДоговоров.СПереработчиком
ИЛИ Параметры.ТипДоговора = Перечисления.ТипыДоговоров.СПоклажедателем Тогда
СтрокаОтбора = СтрокаОтбора + " И (НаправленияДеятельности.УчетЗатрат = ИСТИНА
|ИЛИ НаправленияДеятельности.УчетРасчетовСПоставщиками = ИСТИНА)";
Иначе
СтрокаОтбора = СтрокаОтбора + " И НаправленияДеятельности.УчетЗатрат = ИСТИНА";
КонецЕсли;
ИначеЕсли ТипЗнч(Параметры.Ссылка) = Тип("ДокументСсылка.ВозвратТоваровМеждуОрганизациями")
ИЛИ ТипЗнч(Параметры.Ссылка) = Тип("ДокументСсылка.ДвижениеПрочихАктивовПассивов")
ИЛИ ТипЗнч(Параметры.Ссылка) = Тип("ДокументСсылка.ОтчетПоКомиссииМеждуОрганизациями")
ИЛИ ТипЗнч(Параметры.Ссылка) = Тип("ДокументСсылка.ОтчетПоКомиссииМеждуОрганизациямиОСписании")
ИЛИ ТипЗнч(Параметры.Ссылка) = Тип("ДокументСсылка.ПередачаТоваровМеждуОрганизациями")
ИЛИ ТипЗнч(Параметры.Ссылка) = Тип("ДокументСсылка.ПересортицаТоваров")
ИЛИ ТипЗнч(Параметры.Ссылка) = Тип("ДокументСсылка.ПрочиеДоходыРасходы")
ИЛИ ТипЗнч(Параметры.Ссылка) = Тип("СправочникСсылка.ДоговорыМеждуОрганизациями") Тогда
СтрокаОтбора = СтрокаОтбора + " И (НаправленияДеятельности.УчетДоходов = ИСТИНА
| ИЛИ НаправленияДеятельности.УчетЗатрат = ИСТИНА
| ИЛИ НаправленияДеятельности.УчетРасчетовСПоставщиками = ИСТИНА)";
КонецЕсли;
КонецЕсли;
СтрокаПоиска = ?(Параметры.СтрокаПоиска = Неопределено, "", Параметры.СтрокаПоиска);
Запрос.УстановитьПараметр("СтрокаВвода", ОбщегоНазначения.СформироватьСтрокуДляПоискаВЗапросе(СтрокаПоиска) + "%" );
Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 50
| НаправленияДеятельности.Ссылка КАК Ссылка,
| ПРЕДСТАВЛЕНИЕ(НаправленияДеятельности.Ссылка) КАК Представление,
| НаправленияДеятельности.ПометкаУдаления КАК ПометкаУдаления
|ИЗ
| Справочник.НаправленияДеятельности КАК НаправленияДеятельности
|ГДЕ
| &УсловияПоиска" + СтрокаОтбора;
УсловияПоиска = "НаправленияДеятельности.Наименование ПОДОБНО &СтрокаВвода СПЕЦСИМВОЛ ""~""";
Для НомерДопЯзыка = 1 По МультиязычностьСервер.КоличествоДополнительныхЯзыков() Цикл
Если МультиязычностьСервер.ИспользуетсяДополнительныйЯзык(НомерДопЯзыка) Тогда
ИмяКонстантыЯзыка = МультиязычностьСервер.ИмяКонстантыЯзыка(НомерДопЯзыка);
Если Метаданные.Константы.Найти(ИмяКонстантыЯзыка) = Неопределено Тогда
Продолжить;
КонецЕсли;
ИменаРеквизитов = МультиязычностьСервер.ИменаРеквизитовСУчетомКодаЯзыка("Наименование", Константы[ИмяКонстантыЯзыка].Получить());
УсловияПоиска = УсловияПоиска + "
| ИЛИ " + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("НаправленияДеятельности.%1 ПОДОБНО &СтрокаВвода СПЕЦСИМВОЛ ""~""",
ИменаРеквизитов["Наименование"]);
КонецЕсли;
КонецЦикла;
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&УсловияПоиска", "(" + УсловияПоиска + ")");
Выборка = Запрос.Выполнить().Выбрать();
ДанныеВыбора = Новый СписокЗначений;
Пока Выборка.Следующий() Цикл
ТекстПредставление = Выборка.Представление;
Если Выборка.ПометкаУдаления Тогда
СтруктураЗначение = Новый Структура("Значение, ПометкаУдаления", Выборка.Ссылка, Выборка.ПометкаУдаления);
ДанныеВыбора.Добавить(СтруктураЗначение, ТекстПредставление,, БиблиотекаКартинок.ПомеченныйНаУдалениеЭлемент);
Иначе
ДанныеВыбора.Добавить(Выборка.Ссылка, ТекстПредставление);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка)
МультиязычностьКлиентСервер.ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка);
КонецПроцедуры
Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка)
МультиязычностьКлиентСервер.ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
#Область Назначения
Функция ШаблонНазначения(Объект) Экспорт
ШаблонНазначения = Справочники.Назначения.ШаблонНового();
Если Объект.УчетЗатрат Тогда
ШаблонНазначения.НаправлениеДеятельности = Объект.Ссылка;
КонецЕсли;
Возврат ШаблонНазначения;
КонецФункции
#КонецОбласти
#Область ОбновлениеИнформационнойБазы
Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт
Обработчик = Обработчики.Добавить();
Обработчик.Процедура = "Справочники.НаправленияДеятельности.ОбработатьДанныеДляПереходаНаНовуюВерсию";
Обработчик.Версия = "11.5.24.25";
Обработчик.РежимВыполнения = "Отложенно";
Обработчик.Идентификатор = Новый УникальныйИдентификатор("7fde082f-8db7-487a-94ca-0f2f9de143a3");
Обработчик.Многопоточный = Истина;
Обработчик.ПроцедураЗаполненияДанныхОбновления = "Справочники.НаправленияДеятельности.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию";
Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы";
СписокОписаний = Новый Массив;
СписокОписаний.Добавить(НСтр("ru = 'Обновление справочника ""Направление деятельности"":'"));
СписокОписаний.Добавить(НСтр("ru = '- Заполнение мультиязычных реквизитов справочника';"));
Обработчик.Комментарий = СтрСоединить(СписокОписаний, Символы.ПС);
Обработчик.Порядок = Перечисления.ПорядокОбработчиковОбновления.Обычный;
Читаемые = Новый Массив;
Читаемые.Добавить(Метаданные.Справочники.НаправленияДеятельности.ПолноеИмя());
Обработчик.ЧитаемыеОбъекты = СтрСоединить(Читаемые, ",");
Изменяемые = Новый Массив;
Изменяемые.Добавить(Метаданные.Справочники.НаправленияДеятельности.ПолноеИмя());
Обработчик.ИзменяемыеОбъекты = СтрСоединить(Изменяемые, ",");
Блокируемые = Новый Массив;
Блокируемые.Добавить(Метаданные.Справочники.НаправленияДеятельности.ПолноеИмя());
Обработчик.БлокируемыеОбъекты = СтрСоединить(Блокируемые, ",");
КонецПроцедуры
Процедура ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры) Экспорт
ПараметрыВыборки = Параметры.ПараметрыВыборки;
ПараметрыВыборки.ПолныеИменаОбъектов = ПустаяСсылка().Метаданные().ПолноеИмя();
ПараметрыВыборки.СпособВыборки = ОбновлениеИнформационнойБазы.СпособВыборкиСсылки();
ИспользуютсяДопЯзыки = Ложь;
Для Каждого ИспользуетсяДопЯзык Из МультиязычностьСервер.СведенияОЯзыках().Используется Цикл
Если ИспользуетсяДопЯзык.Значение = Истина Тогда
ИспользуютсяДопЯзыки = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Если Не ИспользуютсяДопЯзыки Тогда
Возврат;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| НаправленияДеятельности.Ссылка КАК Ссылка
|ИЗ
| Справочник.НаправленияДеятельности КАК НаправленияДеятельности
|ГДЕ
| НЕ НаправленияДеятельности.Наименование = """"
| И НаправленияДеятельности.НаименованиеЯзык1 = """"
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ
| НаправленияДеятельности.Ссылка КАК Ссылка
|ИЗ
| Справочник.НаправленияДеятельности КАК НаправленияДеятельности
|ГДЕ
| НЕ НаправленияДеятельности.Наименование = """"
| И НаправленияДеятельности.НаименованиеЯзык2 = """"
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ
| НаправленияДеятельности.Ссылка КАК Ссылка
|ИЗ
| Справочник.НаправленияДеятельности КАК НаправленияДеятельности
|ГДЕ
| НЕ ВЫРАЗИТЬ(НаправленияДеятельности.Комментарий КАК СТРОКА(150)) = """"
| И ВЫРАЗИТЬ(НаправленияДеятельности.КомментарийЯзык1 КАК СТРОКА(150)) = """"
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ
| НаправленияДеятельности.Ссылка КАК Ссылка
|ИЗ
| Справочник.НаправленияДеятельности КАК НаправленияДеятельности
|ГДЕ
| НЕ ВЫРАЗИТЬ(НаправленияДеятельности.Комментарий КАК СТРОКА(150)) = """"
| И ВЫРАЗИТЬ(НаправленияДеятельности.КомментарийЯзык2 КАК СТРОКА(150)) = """"";
ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"));
КонецПроцедуры
Процедура ОбработатьДанныеДляПереходаНаНовуюВерсию(Параметры) Экспорт
Параметры.ОбработкаЗавершена = Ложь;
ПолноеИмяОбъекта = ПустаяСсылка().Метаданные().ПолноеИмя();
ОбновляемыеДанные = ОбновлениеИнформационнойБазы.ДанныеДляОбновленияВМногопоточномОбработчике(Параметры);
Если ОбновляемыеДанные.Количество() = 0 Тогда
Параметры.ОбработкаЗавершена =
ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена(Параметры.Очередь, ПолноеИмяОбъекта);
Возврат;
КонецЕсли;
ОбъектовОбработано = 0;
ПроблемныхОбъектов = 0;
ИсключенияПриОбновлении = Новый Массив;
СписокОписаний = Новый Массив;
СписокОписаний.Добавить(НСтр("ru = 'Не удалось обработать справочник ""Направление деятельности"" по обработчику:'"));
СписокОписаний.Добавить(НСтр("ru = '- Заполнение мультиязычных реквизитов справочника';"));
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ДанныеДляОбновления.Ссылка КАК Ссылка
|ПОМЕСТИТЬ ВТ
|ИЗ
| &ДанныеДляОбновления КАК ДанныеДляОбновления
|;
|
|
|ВЫБРАТЬ
| ВТ.Ссылка КАК Ссылка,
| НаправленияДеятельности.ВерсияДанных КАК ВерсияДанных
|ИЗ
| ВТ КАК ВТ
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.НаправленияДеятельности КАК НаправленияДеятельности
| ПО ВТ.Ссылка = НаправленияДеятельности.Ссылка";
Запрос.УстановитьПараметр("ДанныеДляОбновления", ОбновляемыеДанные);
Справочник = Запрос.Выполнить().Выбрать();
Пока Справочник.Следующий() Цикл
ПричинаИсключения = 0;
Рекомендация = "";
НачатьТранзакцию();
Попытка
ПричинаИсключения = 1;
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить(ПолноеИмяОбъекта);
ЭлементБлокировки.УстановитьЗначение("Ссылка", Справочник.Ссылка);
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
Блокировка.Заблокировать();
СправочникОбъект = ОбновлениеИнформационнойБазыУТ.ПроверитьПолучитьОбъект(
Справочник.Ссылка, Справочник.ВерсияДанных, Параметры.Очередь);
ПричинаИсключения = 2;
Рекомендация = НСтр("ru = 'Проверьте данные справочника вручную.'");
ОбъектИзменен = Ложь;
Если СправочникОбъект <> Неопределено Тогда
Если ЗначениеЗаполнено(СправочникОбъект.Наименование) Тогда
Если Не ЗначениеЗаполнено(СправочникОбъект.НаименованиеЯзык1) Тогда
СправочникОбъект.НаименованиеЯзык1 = СправочникОбъект.Наименование;
КонецЕсли;
Если Не ЗначениеЗаполнено(СправочникОбъект.НаименованиеЯзык2) Тогда
СправочникОбъект.НаименованиеЯзык2 = СправочникОбъект.Наименование;
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(СправочникОбъект.Комментарий) Тогда
Если Не ЗначениеЗаполнено(СправочникОбъект.КомментарийЯзык1) Тогда
СправочникОбъект.КомментарийЯзык1 = СправочникОбъект.Комментарий;
КонецЕсли;
Если Не ЗначениеЗаполнено(СправочникОбъект.КомментарийЯзык2) Тогда
СправочникОбъект.КомментарийЯзык2 = СправочникОбъект.Комментарий;
КонецЕсли;
КонецЕсли;
ОбъектИзменен = Истина;
КонецЕсли;
ПричинаИсключения = 3;
Если ОбъектИзменен Тогда
ОбновлениеИнформационнойБазы.ЗаписатьДанные(СправочникОбъект);
Иначе
ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(Справочник.Ссылка);
КонецЕсли;
ОбъектовОбработано = ОбъектовОбработано + 1;
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ПроблемныхОбъектов = ПроблемныхОбъектов + 1;
ОбновлениеИнформационнойБазыУТ.СообщитьОНеудачнойОбработке(ИнформацияОбОшибке(), Справочник.Ссылка);
Если ПричинаИсключения = 2 Тогда
ОписаниеПроблемы = ОбновлениеИнформационнойБазыУТ.ПроблемаСДанными(
Справочник.Ссылка, Рекомендация, ИнформацияОбОшибке());
ИсключенияПриОбновлении.Добавить(ОписаниеПроблемы);
ИначеЕсли ПричинаИсключения = 3 Тогда
ОбновлениеИнформационнойБазыУТ.ЗаписатьПлохиеДанные(
ИсключенияПриОбновлении, ОбъектовОбработано, Параметры);
ВызватьИсключение СтрСоединить(СписокОписаний, Символы.ПС);
КонецЕсли;
КонецПопытки;
КонецЦикла;
Параметры.ОбработкаЗавершена =
ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена(Параметры.Очередь, ПолноеИмяОбъекта);
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#КонецЕсли