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