#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
УстановитьУсловноеОформление();
Если Параметры.Свойство("АвтоТест") Тогда
Возврат;
КонецЕсли;
Если Параметры.Свойство("Основание") Тогда
РеквизитыОснования = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Параметры.Основание, "Склад, Дата");
Объект.Склад = РеквизитыОснования.Склад;
ИнвентаризационныйПериод.ДатаНачала = НачалоДня(РеквизитыОснования.Дата);
ИнвентаризационныйПериод.ДатаОкончания = КонецМесяца(ТекущаяДатаСеанса());
Иначе
Параметры.Свойство("Склад", Объект.Склад);
Параметры.Свойство("ИнвентаризационныйПериод", ИнвентаризационныйПериод);
КонецЕсли;
Если ЗначениеЗаполнено(ИнвентаризационныйПериод.ДатаНачала) И ЗначениеЗаполнено(ИнвентаризационныйПериод.ДатаОкончания) Тогда
ОпределитьДатуОформленияСкладскихАктов();
КонецЕсли;
Если Не ПолучитьФункциональнуюОпцию("ИспользоватьНесколькоОрганизаций") Тогда
ЕдинственнаяОрганизация = ЗначениеНастроекПовтИсп.ПолучитьОрганизациюПоУмолчанию();
Если Не ЗначениеЗаполнено(ЕдинственнаяОрганизация) Тогда
ТекстОшибки = НСтр("ru = 'Невозможно оформить складские акты, т.к. в настройках программы не введены сведения об организации.'");
Отказ = Истина;
ВызватьИсключение ТекстОшибки;
КонецЕсли;
КонецЕсли;
Если Не ЗначениеЗаполнено(Объект.Склад)
И Не ПолучитьФункциональнуюОпцию("ИспользоватьНесколькоСкладов") Тогда
Объект.Склад = ЗначениеНастроекПовтИсп.ПолучитьСкладПоУмолчанию();
КонецЕсли;
Если ПолучитьФункциональнуюОпцию("ИспользоватьКачествоТоваров") Тогда
Элементы.ДекорацияГруппаУправлениеСтраницаПересортицаПорча.Заголовок
= НСтр("ru = 'С целью оптимизации количества списаний и оприходований товаров рекомендуется произвести зачеты по пересортице и (или) порче.'");
Элементы.ГруппаТоварыКПересортицеКПорче.Заголовок
= НСтр("ru = 'Товары, зачитываемые по пересортице или порче'");
Элементы.ТоварыКПересортицеКПорчеГруппаКолонокТоварКСписанию.Заголовок
= НСтр("ru = 'Списываемый товар / Товар исходного качества'");
Элементы.ТоварыКПересортицеГруппаКолонокТоварКОприходованию.Заголовок
= НСтр("ru = 'Приходуемый товар / Испорченный товар'")
Иначе
Элементы.ДекорацияГруппаУправлениеСтраницаПересортицаПорча.Заголовок
= НСтр("ru = 'С целью оптимизации количества списаний и оприходований товаров рекомендуется произвести зачеты по пересортице.'");
Элементы.ГруппаТоварыКПересортицеКПорче.Заголовок
= НСтр("ru = 'Товары, зачитываемые по пересортице'");
Элементы.ТоварыКПересортицеКПорчеГруппаКолонокТоварКСписанию.Заголовок
= НСтр("ru = 'Списываемый товар'");
Элементы.ТоварыКПересортицеГруппаКолонокТоварКОприходованию.Заголовок
= НСтр("ru = 'Приходуемый товар'");
КонецЕсли;
Если ПолучитьФункциональнуюОпцию("ИспользоватьНесколькоОрганизаций") Тогда
Элементы.ДекорацияСтраницаОформлениеДокументов.Заголовок =
НСтр("ru = 'Сформированные согласно распределению по организациям складские акты. Если есть непроведенные акты - откройте их, заполните необходимые поля и проведите.'");
Иначе
Элементы.ДекорацияСтраницаОформлениеДокументов.Заголовок =
НСтр("ru = 'Сформированные складские акты. Если есть непроведенные акты - откройте их, заполните необходимые поля и проведите.'");
КонецЕсли;
ИспользуетсяИнтеркампани = ПолучитьФункциональнуюОпцию("ИспользоватьПередачиТоваровМеждуОрганизациями");
СхемаКомпоновкиДанных = Обработки.ПомощникОформленияСкладскихАктов.ПолучитьМакет("ОтборНоменклатурыОсновной");
URLСхемы = ПоместитьВоВременноеХранилище(СхемаКомпоновкиДанных, Новый УникальныйИдентификатор());
ИсточникНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(URLСхемы);
ОтборНоменклатуры.Инициализировать(ИсточникНастроек);
ОтборНоменклатуры.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
ОтборНоменклатуры.Восстановить(СпособВосстановленияНастроекКомпоновкиДанных.ПроверятьДоступность);
Если Параметры.Свойство("ОтборНоменклатуры") Тогда
Если Параметры.ОтборНоменклатуры.Свойство("Номенклатура") Тогда
КомпоновкаДанныхКлиентСервер.ДобавитьОтбор(
ОтборНоменклатуры,
"Номенклатура",
Параметры.ОтборНоменклатуры.Номенклатура,
ВидСравненияКомпоновкиДанных.ВСписке);
КонецЕсли;
Если Параметры.ОтборНоменклатуры.Свойство("Характеристика") Тогда
КомпоновкаДанныхКлиентСервер.ДобавитьОтбор(
ОтборНоменклатуры,
"Характеристика",
Параметры.ОтборНоменклатуры.Характеристика,
ВидСравненияКомпоновкиДанных.ВСписке);
КонецЕсли;
УстановитьЗаголовокДекорацииОтбораНоменклатуры();
КонецЕсли;
ЗаполнитьЗначенияПоУмолчаниюСервер();
СкладПриИзмененииСервер();
УстановитьПараметрыФункциональныхОпцийФормы(Новый Структура("Склад", Объект.Склад));
Элементы.ТоварыКСписанию.ОтборСтрок = Новый ФиксированнаяСтруктура("ОперацияСписание", Истина);
Элементы.ТоварыКОприходованию.ОтборСтрок = Новый ФиксированнаяСтруктура("ОперацияОприходование", Истина);
Элементы.ТоварыКПересортицеКПорче.ОтборСтрок = Новый ФиксированнаяСтруктура("ОперацияПорчаПересортица", Истина);
Элементы.ТоварыНеРаспределенные.ОтборСтрок = Новый ФиксированнаяСтруктура("НеРаспределено", Истина);
Объект.ИсточникИнформацииОЦенахДляПечати = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Склад, "ИсточникИнформацииОЦенахДляПечати");
Если Не ЗначениеЗаполнено(Объект.ИсточникИнформацииОЦенахДляПечати) И Не ПолучитьФункциональнуюОпцию("ИспользоватьНесколькоВидовЦен") Тогда
Объект.ИсточникИнформацииОЦенахДляПечати = Перечисления.ИсточникиИнформацииОЦенахДляПечати.ПоСебестоимости;
КонецЕсли;
Если Объект.ИсточникИнформацииОЦенахДляПечати = Перечисления.ИсточникиИнформацииОЦенахДляПечати.ПоСебестоимости Тогда
Объект.ВидЦены = Неопределено;
Иначе
Объект.ВидЦены = Справочники.Склады.УчетныйВидЦены(Объект.Склад);
КонецЕсли;
УстановитьДоступностиВидЦеныСервер(Объект.ИсточникИнформацииОЦенахДляПечати);
МассивОбъектовМетаданных = Новый Массив;
МассивОбъектовМетаданных.Добавить(Метаданные.Документы.СписаниеНедостачТоваров);
МассивОбъектовМетаданных.Добавить(Метаданные.Документы.ОприходованиеИзлишковТоваров);
МассивОбъектовМетаданных.Добавить(Метаданные.Документы.ПорчаТоваров);
МассивОбъектовМетаданных.Добавить(Метаданные.Документы.ПересортицаТоваров);
МассивОбъектовМетаданных.Добавить(Метаданные.Документы.ИнвентаризационнаяОпись);
ПараметрыРазмещения = ПодключаемыеКоманды.ПараметрыРазмещения();
ПараметрыРазмещения.Источники = МассивОбъектовМетаданных;
ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект, ПараметрыРазмещения);
Если ЗначениеЗаполнено(Объект.Склад) Тогда
Если Не СкладыСервер.ИспользоватьОрдернуюСхемуПриОтраженииИзлишковНедостач(Объект.Склад) Тогда
ТекстСообщения = НСтр("ru = 'На складе %Склад% не используется ордерная схема при оформлении излишков, недостач и порчи, поэтому невозможно использовать помощник оформления складских актов.'");
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Склад%", Объект.Склад);
Отказ = Истина;
ВызватьИсключение ТекстСообщения;
КонецЕсли;
КонецЕсли;
СтандартныеПодсистемыСервер.УстановитьУсловноеОформлениеПоляДата(ЭтотОбъект, "ДокументыПоОснованию.Дата",
Элементы.ДокументыПоОснованиюДата.Имя);
НастроитьФормуЛокализация();
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ДекорацияОтборНоменклатурыОбработкаНавигационнойСсылкиЗавершение("", Неопределено);
КонецПроцедуры
&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
Если ЗаданВопросПередЗакрытием Или Элементы.ОсновнаяПанель.ТекущаяСтраница = Элементы.СтраницаНастройки Тогда
Возврат;
ИначеЕсли Не Элементы.ОсновнаяПанель.ТекущаяСтраница = Элементы.СтраницаОформлениеДокументов Тогда
СтандартнаяОбработка = Ложь;
Отказ = Истина;
Если ЗавершениеРаботы Тогда
ТекстПредупреждения = НСтр("ru='Процесс оформления складских актов не завершен.
|Работа помощника будет прервана.'");
Возврат;
КонецЕсли;
СписокКнопок = Новый СписокЗначений;
СписокКнопок.Добавить(КодВозвратаДиалога.Да, НСтр("ru='Закрыть помощник'"));
СписокКнопок.Добавить(КодВозвратаДиалога.Нет, НСтр("ru='Отмена'"));
Оповещение = Новый ОписаниеОповещения("ПередЗакрытиемЗавершение", ЭтаФорма);
ТекстВопроса = НСтр("ru='Процесс оформления не завершен.'");
ПоказатьВопрос(Оповещение, ТекстВопроса, СписокКнопок);
Иначе
СтандартнаяОбработка = Ложь;
Отказ = Истина;
Если ЗавершениеРаботы Тогда
ТекстПредупреждения = НСтр("ru='Работа помощника оформления складских актов будет прервана.'");
Возврат;
КонецЕсли;
КнопкаГотово(Неопределено);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПередЗакрытиемЗавершение(Знач РезультатВопроса, Знач ДополнительныеПараметры) Экспорт
Если РезультатВопроса = Неопределено Или РезультатВопроса = КодВозвратаДиалога.Нет Тогда
Возврат;
КонецЕсли;
ЗаданВопросПередЗакрытием = Истина;
Закрыть();
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если ИмяСобытия = "Создание_СкладскиеАкты"
Или ИмяСобытия = "Запись_СписаниеНедостачТоваров"
Или ИмяСобытия = "Запись_ПорчаТоваров"
Или ИмяСобытия = "Запись_ПересортицаТоваров"
Или ИмяСобытия = "Запись_ОприходованиеИзлишковТоваров"
Или ИмяСобытия = "Запись_ИнвентаризационнаяОпись" Тогда
Элементы.ДокументыПоОснованию.Обновить();;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура СкладПриИзменении(Элемент)
СкладПриИзмененииСервер();
КонецПроцедуры
&НаКлиенте
Процедура ИнвентаризационныйПериодПриИзменении()
ИнвентаризационныйПериодПриИзмененииНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура ОтборСтрокНоменклатурыПриИзменении(Элемент)
УстановитьОтборСтрокПоНоменклатуреСервер();
КонецПроцедуры
&НаКлиенте
Процедура ОтборСтрокНоменклатурыОчистка(Элемент, СтандартнаяОбработка)
УстановитьОтборСтрокПоНоменклатуреСервер();
КонецПроцедуры
&НаКлиенте
Процедура ОтобратьПоТипуОперацииНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ПараметрыФормы = Новый Структура();
ПараметрыФормы.Вставить("ВыбранныеОперации", ОтобратьПоТипуОперации.ВыгрузитьЗначения());
Оповещение = Новый ОписаниеОповещения("ОтобратьПоТипуОперацииНачалоВыбораЗавершение", ЭтаФорма);
ОткрытьФорму("Обработка.ПомощникОформленияСкладскихАктов.Форма.ФормаВыбораОпераций",
ПараметрыФормы, ЭтаФорма, , , , Оповещение, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура ОтобратьПоТипуОперацииНачалоВыбораЗавершение(Знач ТипыОпераций, Знач ДополнительныеПараметры) Экспорт
Если ТипыОпераций = Неопределено Тогда
Возврат;
ИначеЕсли ТипыОпераций.Количество() = 0 Тогда
ОтобратьПоТипуОперации.Очистить();
Иначе
ТекстСписание = НСтр("ru = 'Списание'");
ТекстОприходование = НСтр("ru = 'Оприходование'");
ТекстПорча = НСтр("ru = 'Порча'");
ТекстПересортица = НСтр("ru = 'Пересортица'");
Для Каждого ТипОперации Из ТипыОпераций Цикл
ПредставлениеОперации = ?(ТипОперации = "Списание", ТекстСписание,
?(ТипОперации = "Оприходование", ТекстОприходование,
?(ТипОперации = "Порча", ТекстПорча,
ТекстПересортица)));
ОтобратьПоТипуОперации.Добавить(ТипОперации, ПредставлениеОперации);
КонецЦикла;
Для Каждого Строка Из Объект.Товары Цикл
Строка.ПризнакДляОтбора = Не ОтобратьПоТипуОперации.НайтиПоЗначению(Строка.ОперацияТекст) = Неопределено;
КонецЦикла;
КонецЕсли;
ТоварыНеРаспределенныеОбновитьФильтр();
КонецПроцедуры
&НаКлиенте
Процедура ОтобратьПоТипуОперацииОчистка(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ОтобратьПоТипуОперации.Очистить();
ТоварыНеРаспределенныеОбновитьФильтр();
КонецПроцедуры
&НаКлиенте
Процедура ДекорацияОтборНоменклатурыОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Оповещение = Новый ОписаниеОповещения("ДекорацияОтборНоменклатурыОбработкаНавигационнойСсылкиЗавершение", ЭтаФорма);
ПараметрыФормы = Новый Структура("Адрес", ПоместитьНастройкиОтборНоменклатурыВоВременноеХранилищеСервер(ОтборНоменклатуры));
ОткрытьФорму(
"Обработка.ПомощникОформленияСкладскихАктов.Форма.НастройкаОтбораНоменклатуры",
ПараметрыФормы,
ЭтаФорма,
,,, Оповещение, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура ДекорацияОтборНоменклатурыОбработкаНавигационнойСсылкиЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Результат = Неопределено
Или Не ЗначениеЗаполнено(Результат) Тогда
Возврат;
КонецЕсли;
ОбработатьИзменениеОтбораНоменклатуры(Результат);
КонецПроцедуры
&НаСервере
Процедура ОбработатьИзменениеОтбораНоменклатуры(АдресОтбора)
ОтборНоменклатурыНастройка = ПолучитьИзВременногоХранилища(АдресОтбора);
УдалитьИзВременногоХранилища(АдресОтбора);
ОтборНоменклатуры.ЗагрузитьНастройки(ОтборНоменклатурыНастройка);
СкладПриИзмененииСервер();
СегментыСервер.ВключитьОтборПоСегментуНоменклатурыВСКД(ОтборНоменклатуры);
УстановитьЗаголовокДекорацииОтбораНоменклатуры();
КонецПроцедуры
&НаКлиенте
Процедура ДекорацияИнформированиеОНеоформленныхПересчетахОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
СтруктураБыстрогоОтбора = Новый Структура;
СтруктураБыстрогоОтбора.Вставить("Склад", Объект.Склад);
ПараметрыФормы = Новый Структура("СтруктураБыстрогоОтбора, Статус", СтруктураБыстрогоОтбора, "ТолькоНевыполненные");
ОткрытьФорму("Документ.ПересчетТоваров.Форма.ФормаСписка", ПараметрыФормы, ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура ДекорацияИнформированиеОКоличествеТоваровОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Отбор = Новый Структура("Склад", Объект.Склад);
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Отбор", Отбор);
ПараметрыФормы.Вставить("КлючВарианта", "ОформлениеИзлишковНедостачКонтекст");
ПараметрыФормы.Вставить("КлючНазначенияИспользования", "ОформлениеИзлишковНедостачКонтекст");
ПараметрыФормы.Вставить("СформироватьПриОткрытии", Истина);
ПараметрыФормы.Вставить("ВидимостьКомандВариантовОтчетов", Ложь);
ПараметрыФормы.Вставить("Склад", Объект.Склад);
ОткрытьФорму("Отчет.ОформлениеИзлишковНедостачТоваров.Форма", ПараметрыФормы, ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура ИсточникИнформацииОЦенахДляПечатиПриИзменении(Элемент)
ИсточникИнформацииОЦенахДляПечатиПриИзмененииНаСервере();
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыТоварыКПересортицеКПорче
&НаКлиенте
Процедура ТоварыКПересортицеКПорчеПередУдалением(Элемент, Отказ)
Отказ = Истина;
ТоварыКПересортицеКПорчеПередУдалениемСервер(Элементы.ТоварыКПересортицеКПорче.ВыделенныеСтроки);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыКПересортицеКПорчеВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
СобытиеВыборТЧСписываемыхПриходуемыхТоваров(Поле, Элемент);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыТоварыКСписанию
&НаКлиенте
Процедура ТоварыКСписаниюВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
ПоказатьЗначение(,Элемент.ТекущиеДанные.НоменклатураСписываемая);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыТоварыКОприходованию
&НаКлиенте
Процедура ТоварыКОприходованиюВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
ПоказатьЗначение(,Элемент.ТекущиеДанные.НоменклатураПриходуемая);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыТоварыРаспределенные
&НаКлиенте
Процедура ТоварыРаспределенныеПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр)
Отказ = Истина;
КонецПроцедуры
&НаКлиенте
Процедура ТоварыРаспределенныеПередУдалением(Элемент, Отказ)
Отказ = Истина;
ИдентификаторыВыделенныхСтрок = Новый Массив;
Для Каждого ВыделеннаяСтрока Из Элементы.ТоварыРаспределенные.ВыделенныеСтроки Цикл
ИдентификаторыВыделенныхСтрок.Добавить(ВыделеннаяСтрока);
КонецЦикла;
Для Каждого ИдентификаторВыделеннойСтроки Из ИдентификаторыВыделенныхСтрок Цикл
РедактированиеСтрокиТоварыРаспределенные(ИдентификаторВыделеннойСтроки, 0);
КонецЦикла;
СортироватьТаблицуПоОперацииНоменклатуреХарактеристике(Объект.ТоварыРаспределенные);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыРаспределенныеКоличествоРаспределеноОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора,
Параметры, СтандартнаяОбработка)
ВведенноеЗначение = Число(Текст);
СтандартнаяОбработка =
Не (ВведенноеЗначение > Элементы.ТоварыРаспределенные.ТекущиеДанные.КоличествоРаспределено Или ВведенноеЗначение < 0);
Если Не СтандартнаяОбработка Тогда
ПолеКоличествоРаспределено = ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("ТоварыРаспределенные",
Элементы.ТоварыРаспределенные.ТекущиеДанные.НомерСтроки, "КоличествоРаспределено");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
НСтр("ru='Вводимое значение должно быть не более текущего и не менее нуля.'"), ,
"Объект." + ПолеКоличествоРаспределено);
Иначе
РедактированиеСтрокиТоварыРаспределенные(Элементы.ТоварыРаспределенные.ТекущаяСтрока, ВведенноеЗначение);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ТоварыРаспределенныеВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
СобытиеВыборТЧСписываемыхПриходуемыхТоваров(Поле, Элемент);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыТоварыНеРаспределенные
&НаКлиенте
Процедура ТоварыНеРаспределенныеВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
СобытиеВыборТЧСписываемыхПриходуемыхТоваров(Поле, Элемент);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыДокументыПоОснованию
&НаКлиенте
Процедура ДокументыПоОснованиюВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ПоказатьЗначение(, СсылкаНаДокументПоКлючуЗаписи(ВыбраннаяСтрока));
КонецПроцедуры
&НаКлиенте
Процедура ДокументыПоОснованиюПриАктивизацииСтроки(Элемент)
ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ДокументыПоОснованиюПередНачаломИзменения(Элемент, Отказ)
Отказ = Истина;
ОбщегоНазначенияУТКлиент.ИзменитьЭлемент(Элемент);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Элементы.ДокументыПоОснованию);
КонецПроцедуры
&НаСервере
Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) Экспорт
ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Элементы.ДокументыПоОснованию, Результат);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Элементы.ДокументыПоОснованию);
КонецПроцедуры
&НаКлиенте
Процедура ЗачестьПоПересортицеПоПорче(Команда)
ТекущиеДанныеСписания = Элементы.ТоварыКСписанию.ТекущиеДанные;
Если ТекущиеДанныеСписания = Неопределено Тогда
ТекстСообщения = НСтр("ru='Выделите строку списания, которую нужно зачесть.'");
ПоказатьПредупреждение(Неопределено, ТекстСообщения);
Возврат;
КонецЕсли;
ТекущиеДанныеОприходования = Элементы.ТоварыКОприходованию.ТекущиеДанные;
Если ТекущиеДанныеОприходования = Неопределено Тогда
ТекстСообщения = НСтр("ru='Выделите строку оприходования, которую нужно зачесть.'");
ПоказатьПредупреждение(Неопределено, ТекстСообщения);
Возврат;
КонецЕсли;
МаксимальноеЗначение = Мин(ТекущиеДанныеСписания.Количество, ТекущиеДанныеОприходования.Количество);
ТекстСообщения = НСтр("ru = 'Укажите количество для зачета (максимальное значение - %МаксимальноеЗначение%)'");
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%МаксимальноеЗначение%", МаксимальноеЗначение);
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ТекущиеДанныеСписания", ТекущиеДанныеСписания.ПолучитьИдентификатор());
ДополнительныеПараметры.Вставить("ТекущиеДанныеОприходования", ТекущиеДанныеОприходования.ПолучитьИдентификатор());
ДополнительныеПараметры.Вставить("МаксимальноеЗначение", МаксимальноеЗначение);
ДополнительныеПараметры.Вставить("ТекстСообщения", ТекстСообщения);
Оповещение = Новый ОписаниеОповещения("ЗачестьПоПересортицеПоПорчеЗавершение", ЭтаФорма, ДополнительныеПараметры);
ПоказатьВводЧисла(Оповещение, МаксимальноеЗначение, ТекстСообщения, 15, 3);
КонецПроцедуры
&НаКлиенте
Процедура ЗачестьПоПересортицеПоПорчеЗавершение(Знач ВведенноеЧисло, Знач Параметры) Экспорт
Если ВведенноеЧисло = Неопределено Тогда
Возврат;
ИначеЕсли ВведенноеЧисло <= 0
Или ВведенноеЧисло > Параметры.МаксимальноеЗначение Тогда
Если ВведенноеЧисло > Параметры.МаксимальноеЗначение Тогда
ТекстСообщения = НСтр("ru = 'Указываемое количество не может превышать максимальное, зачитываемое количество.'");
ИначеЕсли ВведенноеЧисло = 0 Тогда
ТекстСообщения = НСтр("ru = 'Указываемое количество не может быть равно нулю.'");
Иначе
ТекстСообщения = НСтр("ru = 'Указываемое количество не может быть отрицательным.'");
КонецЕсли;
Оповещение = Новый ОписаниеОповещения("ЗачестьПоПересортицеПоПорчеПредупреждение", ЭтаФорма, Параметры);
ПоказатьПредупреждение(Оповещение, ТекстСообщения);
Иначе
ЗачестьПоПересортицеПоПорчеЗавершениеСервер(Параметры, ВведенноеЧисло);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗачестьПоПересортицеПоПорчеПредупреждение(Параметры) Экспорт
Оповещение = Новый ОписаниеОповещения("ЗачестьПоПересортицеПоПорчеЗавершение", ЭтаФорма, Параметры);
ПоказатьВводЧисла(Оповещение, Параметры.МаксимальноеЗначение, Параметры.ТекстСообщения, 15, 3);
КонецПроцедуры
&НаКлиенте
Процедура ЗачестьПоПересортицеАвто(Команда)
Результат = ЗачестьПоПересортицеАвтоСервер();
Если Результат = 0 Тогда
ПоказатьПредупреждение(,НСтр("ru='Среди списываемых и приходуемых товаров нет товаров, по которым возможно провести автоматический зачет.'"));
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗачестьПоПорчеАвто(Команда)
Результат = ЗачестьПоПорчеАвтоСервер();
Если Результат = 0 Тогда
ПоказатьПредупреждение(,НСтр("ru='Среди списываемых и приходуемых товаров нет товаров, по которым возможно провести автоматический зачет.'"));
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура КнопкаНазад(Команда)
ДляПереходаНеНуженВопрос = Не ПерейтиНазад(Истина);
Если Не ДляПереходаНеНуженВопрос Тогда
ОчиститьСообщения();
Возврат;
КонецЕсли;
СписокКнопок = Новый СписокЗначений;
СписокКнопок.Добавить(КодВозвратаДиалога.Да, НСтр("ru='Вернуться'"));
СписокКнопок.Добавить(КодВозвратаДиалога.Нет, НСтр("ru='Отмена'"));
Если Элементы.ОсновнаяПанель.ТекущаяСтраница = Элементы.СтраницаОформлениеДокументов Тогда
Оповещение = Новый ОписаниеОповещения("КнопкаНазадЗавершение", ЭтаФорма, Новый Структура("УдаляютсяДокументы"));
ТекстВопроса = НСтр("ru='Все сформированные акты будут удалены. Вернуться назад?'");
ПоказатьВопрос(Оповещение, ТекстВопроса, СписокКнопок);
Иначе
Оповещение = Новый ОписаниеОповещения("КнопкаНазадЗавершение", ЭтаФорма);
ТекстВопроса = НСтр("ru='Процесс оформления не завершен. При возврате к настройкам введенная информация будет утеряна. Вернуться?'");
ПоказатьВопрос(Оповещение, ТекстВопроса, СписокКнопок);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура КнопкаНазадЗавершение(Знач РезультатВопроса, Знач ДополнительныеПараметры) Экспорт
Если РезультатВопроса = КодВозвратаДиалога.Да Тогда
ПерейтиНазад(Ложь);
Если ТипЗнч(ДополнительныеПараметры) = Тип("Структура") И ДополнительныеПараметры.Свойство("УдаляютсяДокументы") Тогда
Оповестить("Создание_СкладскиеАкты");
КонецЕсли;
ОчиститьСообщения();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура КнопкаДалее(Команда)
ТекущаяСтраница = Элементы.ОсновнаяПанель.ТекущаяСтраница;
Если ТекущаяСтраница = Элементы.СтраницаНастройки Тогда
ОчиститьСообщения();
ЕстьОшибки = Ложь;
Если Не ЗначениеЗаполнено(Объект.Склад) Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru='Выберите склад.'"), , "Объект.Склад");
ЕстьОшибки = Истина;
КонецЕсли;
Если Не ЗначениеЗаполнено(ИнвентаризационныйПериод.ДатаНачала) Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru='Выберите дату начала инвентаризационного периода.'"), , "ИнвентаризационныйПериод");
ЕстьОшибки = Истина;
КонецЕсли;
Если Не ЗначениеЗаполнено(ИнвентаризационныйПериод.ДатаОкончания) Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru='Выберите дату окончания инвентаризационного периода.'"), , "ИнвентаризационныйПериод");
ЕстьОшибки = Истина;
КонецЕсли;
Если Не ЗначениеЗаполнено(ДатаОформленияСкладскихАктов) Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru='Выберите дату оформления складских актов.'"), , "ДатаОформленияСкладскихАктов");
ЕстьОшибки = Истина;
КонецЕсли;
Если ДатаОформленияСкладскихАктов < ИнвентаризационныйПериод.ДатаНачала
Или ДатаОформленияСкладскихАктов > ИнвентаризационныйПериод.ДатаОкончания Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru='Выберите дату оформления складских актов в рамках инвентаризационного периода.'"), , "ДатаОформленияСкладскихАктов");
ЕстьОшибки = Истина;
КонецЕсли;
Если КоличествоТоваровКОформлениюСУчетомОтбора = 0 Тогда
ПоказатьПредупреждение(, НСтр("ru='Отсутствуют товары к оформлению складских актов.'"));
ЕстьОшибки = Истина;
КонецЕсли;
Если Не ЕстьОшибки Тогда
ПереходНаШагЗачет();
КонецЕсли;
ИначеЕсли ТекущаяСтраница = Элементы.СтраницаПересортицаПорча Тогда
ПереходНаШагРаспределениеПоОрганизациям();
ИначеЕсли ТекущаяСтраница = Элементы.СтраницаРаспределениеПоОрганизациям Тогда
Если Объект.ТоварыРаспределенные.Количество() = 0 Тогда
ПоказатьПредупреждение(, НСтр("ru='Распределите товары по организациям.'"), , НСтр("ru='Нет данных для оформления'"));
Иначе
ПереходНаШагОформлениеАктов();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура КнопкаГотово(Команда)
МассивНепроведенныхАктов = Неопределено;
МассивПроведенныхАктов = Неопределено;
ПолучитьПроведенныеИНепроведенныеСкладскиеАктыСервер(СкладскиеАкты.ВыгрузитьЗначения(), МассивНепроведенныхАктов, МассивПроведенныхАктов);
Если МассивНепроведенныхАктов.Количество() > 0 Тогда
СписокКнопок = Новый СписокЗначений;
СписокКнопок.Добавить("Отмена", НСтр("ru='Продолжить проведение актов'"));
СписокКнопок.Добавить("Закрыть", НСтр("ru='Закрыть помощник'"));
ТекстВопроса = НСтр("ru='Имеются непроведенные акты.'");
Оповещение = Новый ОписаниеОповещения("КнопкаГотовоАктыНеПроведеныЗавершение",
ЭтаФорма);
ПоказатьВопрос(Оповещение, ТекстВопроса, СписокКнопок);
Иначе
КоличествоТоваров = ПолучитьКоличествоТоваровКОформлениюСервер(Ложь);
Если КоличествоТоваров > 0 Тогда
ТекстВопроса = НСтр("ru='Не закончено оформление складских актов по %КоличествоТоваров%.'");
ТекстВопроса = СтрЗаменить(ТекстВопроса, "%КоличествоТоваров%", "" + КоличествоТоваров + " " +
ОбщегоНазначенияУТКлиентСервер.СклонениеСлова(
КоличествоТоваров,
НСтр("ru='товару, товарам, товарам, м'")));
СписокКнопок = Новый СписокЗначений;
СписокКнопок.Добавить("ПерейтиНа2Шаг", НСтр("ru='Продолжить оформление'"));
СписокКнопок.Добавить("Закрыть", НСтр("ru='Закрыть помощник'"));
Оповещение = Новый ОписаниеОповещения("КнопкаГотовоАктыПроведеныЗавершение", ЭтаФорма);
ПоказатьВопрос(Оповещение,ТекстВопроса, СписокКнопок);
Иначе
ЗаданВопросПередЗакрытием = Истина;
Оповестить("Создание_СкладскиеАкты");
Закрыть();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура КнопкаГотовоАктыПроведеныЗавершение(Знач РезультатВопроса, Знач ДополнительныеПараметры) Экспорт
Если РезультатВопроса = Неопределено Тогда
Возврат;
ИначеЕсли РезультатВопроса = "ПерейтиНа2Шаг" Тогда
ПереходНаШагЗачет();
ИначеЕсли РезультатВопроса = "Закрыть" Тогда
ЗаданВопросПередЗакрытием = Истина;
Оповестить("Создание_СкладскиеАкты");
Закрыть();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура КнопкаГотовоАктыНеПроведеныЗавершение(Знач РезультатВопроса, Знач ДополнительныеПараметры) Экспорт
Если РезультатВопроса = Неопределено Или РезультатВопроса = "Отмена" Тогда
Возврат;
ИначеЕсли РезультатВопроса = "Закрыть" Тогда
ЗаданВопросПередЗакрытием = Истина;
Оповестить("Создание_СкладскиеАкты");
Закрыть();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура КнопкаЗакрыть(Команда)
Закрыть();
КонецПроцедуры
&НаКлиенте
Процедура КнопкаПродолжитьСНовымиОтборами(Команда)
МассивНепроведенныхАктов = Неопределено;
МассивПроведенныхАктов = Неопределено;
ПолучитьПроведенныеИНепроведенныеСкладскиеАктыСервер(СкладскиеАкты.ВыгрузитьЗначения(), МассивНепроведенныхАктов, МассивПроведенныхАктов);
Если МассивНепроведенныхАктов.Количество() > 0 Тогда
СписокКнопок = Новый СписокЗначений;
СписокКнопок.Добавить("Отмена", НСтр("ru='Продолжить проведение актов'"));
СписокКнопок.Добавить("ПродолжитьСНовымиОтборами", НСтр("ru='Продолжить с новыми отборами >'"));
ТекстВопроса = НСтр("ru='Имеются непроведенные акты.'");
Оповещение = Новый ОписаниеОповещения("КнопкаПродолжитьСНовымиОтборамиЗавершение",
ЭтаФорма, Новый Структура("МассивНепроведенныхАктов", МассивНепроведенныхАктов));
ПоказатьВопрос(Оповещение, ТекстВопроса, СписокКнопок);
Иначе
КоличествоТоваровКОформлениюСУчетомОтбора = ПолучитьКоличествоТоваровКОформлениюСервер(Ложь);
Если КоличествоТоваровКОформлениюСУчетомОтбора > 0 Тогда
ТекстВопроса = НСтр("ru='Не закончено оформление складских актов по %КоличествоТоваров%.'");
ТекстВопроса = СтрЗаменить(ТекстВопроса, "%КоличествоТоваров%", "" + КоличествоТоваровКОформлениюСУчетомОтбора + " " +
ОбщегоНазначенияУТКлиентСервер.СклонениеСлова(
КоличествоТоваровКОформлениюСУчетомОтбора,
НСтр("ru='товару, товарам, товарам, м'")));
СписокКнопок = Новый СписокЗначений;
СписокКнопок.Добавить("ПерейтиНа2Шаг", НСтр("ru='Продолжить оформление'"));
СписокКнопок.Добавить("ПродолжитьСНовымиОтборами", НСтр("ru='Продолжить с новыми отборами >'"));
Оповещение = Новый ОписаниеОповещения("КнопкаПродолжитьСНовымиОтборамиНаВторойШагЗавершение",
ЭтаФорма, Новый Структура("МассивНепроведенныхАктов", МассивНепроведенныхАктов));
ПоказатьВопрос(Оповещение, ТекстВопроса, СписокКнопок);
Иначе
ПерейтиКНовымОтборамСервер();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура КнопкаПродолжитьСНовымиОтборамиЗавершение(Знач Результат, Знач ДополнительныеПараметры) Экспорт
Если Результат = Неопределено Или Результат = "Отмена" Тогда
Возврат;
КонецЕсли;
ПерейтиКНовымОтборамСервер();
КонецПроцедуры
&НаКлиенте
Процедура КнопкаПродолжитьСНовымиОтборамиНаВторойШагЗавершение(Знач Результат, Знач ДополнительныеПараметры) Экспорт
Если Результат = Неопределено Тогда
Возврат;
ИначеЕсли Результат = "ПродолжитьСНовымиОтборами" Тогда
ПерейтиКНовымОтборамСервер();
ИначеЕсли Результат = "ПерейтиНа2Шаг" Тогда
ПереходНаШагЗачет();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура РаспределитьНаОрганизацию(Команда)
Если Не ЗначениеЗаполнено(Элементы.ТоварыНеРаспределенные.ВыделенныеСтроки)
Или Элементы.ТоварыНеРаспределенные.ВыделенныеСтроки.Количество() = 0 Тогда
ТекстСообщения = НСтр("ru='Выделите одну или несколько строк для распределения.'");
ПоказатьПредупреждение(Неопределено, ТекстСообщения);
Возврат;
КонецЕсли;
Оповещение = Новый ОписаниеОповещения("РаспределитьНаОрганизациюЗавершение", ЭтаФорма);
ОткрытьФорму("Справочник.Организации.ФормаВыбора", , ЭтаФорма, Новый УникальныйИдентификатор, , , Оповещение,
РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс);
КонецПроцедуры
&НаКлиенте
Процедура РаспределитьНаОрганизациюЗавершение(Знач Результат, Знач Параметры) Экспорт
Если Результат = Неопределено Тогда
Возврат;
КонецЕсли;
РаспределитьНаОрганизациюЗавершениеСервер(Результат, Элементы.ТоварыНеРаспределенные.ВыделенныеСтроки);
КонецПроцедуры
&НаКлиенте
Процедура РаспределитьПоВладельцам(Команда)
Если Не ЗначениеЗаполнено(Элементы.ТоварыНеРаспределенные.ВыделенныеСтроки)
Или Элементы.ТоварыНеРаспределенные.ВыделенныеСтроки.Количество() = 0 Тогда
ТекстСообщения = НСтр("ru='Выделите одну или несколько строк для распределения.'");
ПоказатьПредупреждение(Неопределено, ТекстСообщения);
Возврат;
КонецЕсли;
МассивОрганизаций = Новый Массив;
Для Каждого Строка Из Объект.ВыбранныеОрганизации Цикл
МассивОрганизаций.Добавить(Строка.Организация);
КонецЦикла;
ПараметрыФормы = Новый Структура("МассивОрганизаций", МассивОрганизаций);
Оповещение = Новый ОписаниеОповещения("РаспределитьПоВладельцамЗавершение", ЭтаФорма);
ОткрытьФорму("Обработка.ПомощникОформленияСкладскихАктов.Форма.ФормаВыбораОрганизацийОсновная",
ПараметрыФормы, ЭтаФорма, , , , Оповещение, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура РаспределитьПоВладельцамЗавершение(Знач Результат, Знач ДополнительныеПараметры) Экспорт
Если Результат = Неопределено Тогда
Возврат;
ИначеЕсли ТипЗнч(Результат) = Тип("Массив")
И Результат.Количество() = 0 Тогда
ТекстСообщения = НСтр("ru='Не выбрано организаций для распределения.'");
ПоказатьПредупреждение(Неопределено, ТекстСообщения);
Возврат;
КонецЕсли;
СозданоСтрок = РаспределитьПоОрганизациямЗавершениеСервер(Результат, ДополнительныеПараметры);
Если СозданоСтрок = 0 Тогда
ТекстСообщения = НСтр("ru='Не удалось провести автоматическое распределение по организациям. Возможно у выбранных организаций нет остатков по выбранным товарам.'");
ПоказатьПредупреждение(Неопределено, ТекстСообщения);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОтчетПоОстаткамТоваровОрганизаций(Команда)
ТаблицаВСтроке = ПодготовитьТаблицуТоваровДляОтчетаСервер();
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Отбор", Новый Структура("Склад, ТаблицаВСтроке", Объект.Склад, ТаблицаВСтроке));
ПараметрыФормы.Вставить("ФиксированныеНастройки");
ПараметрыФормы.Вставить("КлючНазначенияИспользования");
ПараметрыФормы.Вставить("СформироватьПриОткрытии", Истина);
ПараметрыФормы.Вставить("ВидимостьКомандВариантовОтчетов", Ложь);
Если ИспользуетсяИнтеркампани Тогда
ПараметрыФормы.Вставить("КлючВарианта", "ОстаткиТоваровДляРаспределенияНедостачИИзлишковИнтеркампани");
Иначе
ПараметрыФормы.Вставить("КлючВарианта", "ОстаткиТоваровДляРаспределенияНедостачИИзлишков");
КонецЕсли;
ОткрытьФорму("Отчет.ОстаткиТоваровОрганизаций.Форма", ПараметрыФормы, ЭтаФорма);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаСервере
Процедура ИнвентаризационныйПериодПриИзмененииНаСервере()
Если ЗначениеЗаполнено(Объект.Склад) Тогда
КоличествоТоваровКОформлению = ПолучитьКоличествоТоваровКОформлениюСервер(Истина);
КоличествоТоваровКОформлениюСУчетомОтбора = ПолучитьКоличествоТоваровКОформлениюСервер(Ложь);
ФлагПоСкладуЕстьНезавершенныеПересчеты = ЕстьНеоформленныеПересчетыПоСкладуСервер(Объект.Склад);
Иначе
ФлагПоСкладуЕстьНезавершенныеПересчеты = Ложь;
КонецЕсли;
ОпределитьДатуОформленияСкладскихАктов();
УправлениеДекорациямиПоТоварам();
КонецПроцедуры
&НаСервере
Процедура УправлениеДекорациямиПоТоварам()
ЗаголовокДекорации = Неопределено;
Если Не ЗначениеЗаполнено(Объект.Склад) И Не ЗначениеЗаполнено(ИнвентаризационныйПериод) Тогда
ЗаголовокДекорации = НСтр("ru = 'Заполните поля ""Склад"" и ""Период инвентаризационной описи"" для определения товаров, по которым необходимо оформить складские акты.'");
ИначеЕсли ЗначениеЗаполнено(Объект.Склад) И Не ЗначениеЗаполнено(ИнвентаризационныйПериод) Тогда
ЗаголовокДекорации = НСтр("ru = 'Заполните поле ""Период инвентаризационной описи"" для определения товаров, по которым необходимо оформить складские акты.'");
ИначеЕсли Не ЗначениеЗаполнено(Объект.Склад) И ЗначениеЗаполнено(ИнвентаризационныйПериод) Тогда
ЗаголовокДекорации = НСтр("ru = 'Заполните поле ""Склад"" для определения товаров, по которым необходимо оформить складские акты.'");
ИначеЕсли КоличествоТоваровКОформлению = 0 Тогда
ЗаголовокДекорации = НСтр("ru='Не требуется оформление складских актов.'");
ИначеЕсли КоличествоТоваровКОформлениюСУчетомОтбора = 0 Тогда
МассивСтрок = Новый Массив;
МассивСтрок.Добавить(НСтр("ru='По выбранному складу есть'") + " ");
МассивСтрок.Добавить(Новый ФорматированнаяСтрока(НСтр("ru='товары'"),,,,"отчет"));
МассивСтрок.Добавить(НСтр("ru=', по которым необходимо оформить складские акты, но нет товаров удовлетворяющих установленному фильтру. Измените фильтр:'"));
ЗаголовокДекорации = Новый ФорматированнаяСтрока(МассивСтрок);
Иначе
МассивСтрок = Новый Массив;
МассивСтрок.Добавить(НСтр("ru='Есть'") + " ");
МассивСтрок.Добавить(Новый ФорматированнаяСтрока(НСтр("ru='товары'"),,,,"отчет"));
МассивСтрок.Добавить(НСтр("ru=', по которым необходимо оформить складские акты. Для ограничения списка обрабатываемой номенклатуры воспользуйтесь фильтрами:'"));
ЗаголовокДекорации = Новый ФорматированнаяСтрока(МассивСтрок);
КонецЕсли;
Элементы.ДекорацияИнформированиеОКоличествеТоваров.Заголовок = ЗаголовокДекорации;
КонецПроцедуры
&НаСервере
Процедура ТоварыНеРаспределенныеОбновитьФильтр()
Если ОтобратьПоТипуОперации.Количество() = 0 Тогда
Элементы.ТоварыНеРаспределенные.ОтборСтрок = Новый ФиксированнаяСтруктура("НеРаспределено", Истина);
Иначе
Элементы.ТоварыНеРаспределенные.ОтборСтрок = Новый ФиксированнаяСтруктура("НеРаспределено, ПризнакДляОтбора",
Истина, Истина);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура РедактированиеСтрокиТоварыРаспределенные(Знач ИдентификаторСтрокиТоварыРаспределенные, Знач НовоеЗначениеКоличество)
СтрокаТоварыРаспределенные = Объект.ТоварыРаспределенные.НайтиПоИдентификатору(ИдентификаторСтрокиТоварыРаспределенные);
СтрокаТовары = Объект.Товары.НайтиПоИдентификатору(СтрокаТоварыРаспределенные.КлючСвязи);
СтрокаТовары.КоличествоРаспределено = СтрокаТовары.КоличествоРаспределено -
(СтрокаТоварыРаспределенные.КоличествоРаспределено - НовоеЗначениеКоличество);
СтрокаТовары.КоличествоНеРаспределено = СтрокаТовары.КоличествоНеРаспределено +
(СтрокаТоварыРаспределенные.КоличествоРаспределено - НовоеЗначениеКоличество);
СтрокаТовары.Распределено = Не СтрокаТовары.КоличествоРаспределено = 0;
СтрокаТовары.НеРаспределено = Не СтрокаТовары.КоличествоНеРаспределено = 0;
Если НовоеЗначениеКоличество = 0 Тогда
Объект.ТоварыРаспределенные.Удалить(СтрокаТоварыРаспределенные);
Иначе
СтрокаТоварыРаспределенные.КоличествоРаспределено = НовоеЗначениеКоличество;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УстановитьОтображениеЗаголовкаИЭлементовУправления()
ТекущаяСтраница = Элементы.ОсновнаяПанель.ТекущаяСтраница;
ЗаголовкиСтраниц = Новый Соответствие;
ЗаголовкиСтраниц.Вставить(Элементы.СтраницаНастройки, НСтр("ru = 'Настройка.'"));
Если ПолучитьФункциональнуюОпцию("ИспользоватьКачествоТоваров") Тогда
ЗаголовкиСтраниц.Вставить(Элементы.СтраницаПересортицаПорча, НСтр("ru = 'Зачет по пересортице и порче.'"));
Иначе
ЗаголовкиСтраниц.Вставить(Элементы.СтраницаПересортицаПорча, НСтр("ru = 'Зачет по пересортице.'"));
КонецЕсли;
ЗаголовкиСтраниц.Вставить(Элементы.СтраницаРаспределениеПоОрганизациям, НСтр("ru = 'Распределение по организациям.'"));
ЗаголовкиСтраниц.Вставить(Элементы.СтраницаОформлениеДокументов, НСтр("ru = 'Проведение актов.'"));
Элементы.ДекорацияЗаголовокСтраницы.Заголовок = ЗаголовкиСтраниц[ТекущаяСтраница];
Элементы.КнопкиСлева.ТекущаяСтраница = ?(ТекущаяСтраница = Элементы.СтраницаНастройки,
Элементы.ГруппаКнопокСлеваНет,
Элементы.ГруппаКнопкиСлеваЕсть);
Если ТекущаяСтраница = Элементы.СтраницаОформлениеДокументов Тогда
Элементы.КнопкиСправа.ТекущаяСтраница = Элементы.ГруппаКнопкиСправаНаПоследнейСтранице;
Элементы.КнопкаГотово.КнопкаПоУмолчанию = Истина;
Иначе
Элементы.КнопкиСправа.ТекущаяСтраница = Элементы.ГруппаКнопкиСправаНаПервойСтранице;
Элементы.КнопкаДалее.КнопкаПоУмолчанию = Истина;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОперациюРаспределитьНаОрганизациюСервер(СтрокаТаблицы, Организация, СтрокаРаспределение = Неопределено)
ИдентификаторСтроки = СтрокаТаблицы.ПолучитьИдентификатор();
Отбор = Новый Структура("КлючСвязи, Организация", ИдентификаторСтроки, Организация);
МассивСтрок = Объект.ТоварыРаспределенные.НайтиСтроки(Отбор);
Если МассивСтрок.Количество() = 0 Тогда
Строка = Объект.ТоварыРаспределенные.Добавить();
ЗаполнитьЗначенияСвойств(Строка, СтрокаТаблицы, , "КоличествоРаспределено");
ЗаполнитьЗначенияСвойств(Строка, Отбор);
Иначе
Строка = МассивСтрок[0];
КонецЕсли;
Если СтрокаРаспределение = Неопределено Тогда
КоличествоКРаспределению = Мин(СтрокаТаблицы.Количество, СтрокаТаблицы.КоличествоНеРаспределено);
Строка.КоличествоРаспределено = Строка.КоличествоРаспределено + КоличествоКРаспределению;
СтрокаТаблицы.КоличествоРаспределено = СтрокаТаблицы.КоличествоРаспределено + КоличествоКРаспределению;
СтрокаТаблицы.КоличествоНеРаспределено = СтрокаТаблицы.КоличествоНеРаспределено - КоличествоКРаспределению;
СтрокаТаблицы.Распределено = Не СтрокаТаблицы.КоличествоРаспределено = 0;
СтрокаТаблицы.НеРаспределено = Не СтрокаТаблицы.КоличествоНеРаспределено = 0;
Иначе
Строка.КоличествоРаспределено = Строка.КоличествоРаспределено + СтрокаРаспределение.КоличествоРаспределено;
СтрокаТаблицы.Распределено = Не СтрокаТаблицы.КоличествоРаспределено = 0;
СтрокаТаблицы.НеРаспределено = Не СтрокаТаблицы.КоличествоНеРаспределено = 0;
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ДанныеКРаспределению()
МассивРаспределяемыхСтрок = Новый Массив;
Для Каждого Идентификатор Из Элементы.ТоварыНеРаспределенные.ВыделенныеСтроки Цикл
МассивРаспределяемыхСтрок.Добавить(Объект.Товары.НайтиПоИдентификатору(Идентификатор));
КонецЦикла;
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
ТаблицаРаспределяемыхСтрок = Объект.Товары.Выгрузить(МассивРаспределяемыхСтрок);
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("Товары", ТаблицаРаспределяемыхСтрок);
Запрос.УстановитьПараметр("Склад", Объект.Склад);
Запрос.Текст =
"ВЫБРАТЬ
| Товары.НоменклатураСписываемая КАК Номенклатура,
| Товары.ХарактеристикаСписываемая КАК Характеристика,
| Товары.НазначениеСписываемое КАК Назначение,
| Товары.СерияСписываемая КАК Серия,
| &Склад КАК Склад
|ПОМЕСТИТЬ ТоварыСписываемые
|ИЗ
| &Товары КАК Товары
|ГДЕ
| Товары.КоличествоНеРаспределено > 0
| И НЕ Товары.НоменклатураСписываемая = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
|;
|
|
|ВЫБРАТЬ
| Товары.НоменклатураПриходуемая КАК Номенклатура,
| Товары.ХарактеристикаПриходуемая КАК Характеристика,
| Товары.НазначениеПриходуемое КАК Назначение,
| Товары.СерияПриходуемая КАК Серия,
| &Склад КАК Склад
|ПОМЕСТИТЬ ТоварыПриходуемые
|ИЗ
| &Товары КАК Товары
|ГДЕ
| Товары.КоличествоНеРаспределено > 0
| И НЕ Товары.НоменклатураПриходуемая = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
|;
|
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| Товары.Номенклатура КАК Номенклатура,
| Товары.Характеристика КАК Характеристика,
| Товары.Назначение КАК Назначение,
| Товары.Серия КАК Серия,
| Товары.Склад КАК Склад,
| ЗНАЧЕНИЕ(Справочник.НомераГТД.ПустаяСсылка) КАК НомерГТД,
| Аналитика.КлючАналитики КАК АналитикаУчетаНоменклатуры
|ПОМЕСТИТЬ ТаблицаТоваров
|ИЗ
| (ВЫБРАТЬ
| ТоварыСписываемые.Номенклатура КАК Номенклатура,
| ТоварыСписываемые.Характеристика КАК Характеристика,
| ТоварыСписываемые.Назначение КАК Назначение,
| ТоварыСписываемые.Серия КАК Серия,
| ТоварыСписываемые.Склад КАК Склад
| ИЗ
| ТоварыСписываемые КАК ТоварыСписываемые
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ТоварыПриходуемые.Номенклатура КАК Номенклатура,
| ТоварыПриходуемые.Характеристика КАК Характеристика,
| ТоварыПриходуемые.Назначение КАК Назначение,
| ТоварыПриходуемые.Серия КАК Серия,
| ТоварыПриходуемые.Склад КАК Склад
| ИЗ
| ТоварыПриходуемые КАК ТоварыПриходуемые) КАК Товары
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаНоменклатуры КАК Аналитика
| ПО Товары.Номенклатура = Аналитика.Номенклатура
| И Товары.Характеристика = Аналитика.Характеристика
| И Товары.Серия = Аналитика.Серия
| И Товары.Склад = Аналитика.МестоХранения
| И Товары.Назначение = Аналитика.Назначение
| И Аналитика.СтатьяКалькуляции = ЗНАЧЕНИЕ(Справочник.СтатьиКалькуляции.ПустаяСсылка)
|
|ИНДЕКСИРОВАТЬ ПО
| АналитикаУчетаНоменклатуры";
РезультатЗапроса = Запрос.Выполнить();
ДатаОстатков = ?(ДатаОформленияСкладскихАктов = Дата(1, 1, 1),
ТекущаяДатаСеанса(),
ДатаОформленияСкладскихАктов);
СписокОрганизаций = Объект.ВыбранныеОрганизации.Выгрузить().ВыгрузитьКолонку("Организация");
ДокументОбъект = Новый Структура();
ДокументОбъект.Вставить("Ссылка", Неопределено);
ДокументОбъект.Вставить("Дата", ДатаОстатков);
ДокументОбъект.Вставить("Организация", СписокОрганизаций);
ДокументОбъект.Вставить("Склад", Объект.Склад);
ДокументОбъект.Вставить("Проведен", Ложь);
ДокументОбъект.Вставить("ДополнительныеСвойства", Новый Структура());
ПараметрыЗаполненияВидовЗапасов = ЗапасыСервер.ПараметрыЗаполненияВидовЗапасов();
ПараметрыЗаполненияВидовЗапасов.ИмяПоляОрганизация = "Организация";
ПараметрыЗаполненияВидовЗапасов.ПодбиратьВидыЗапасовПоИнтеркампани = Истина;
Отборы = ПараметрыЗаполненияВидовЗапасов.ОтборыВидовЗапасов;
Отборы.Организация = ДокументОбъект[ПараметрыЗаполненияВидовЗапасов.ИмяПоляОрганизация];
ЗапасыСервер.ПодготовитьДанныеДляОтчета(ДокументОбъект, МенеджерВременныхТаблиц, ПараметрыЗаполненияВидовЗапасов);
ЗапасыСервер.СформироватьВТТаблицаОстатков("ТоварыОрганизаций", ДокументОбъект, МенеджерВременныхТаблиц,
ПараметрыЗаполненияВидовЗапасов, Ложь);
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.Текст =
"ВЫБРАТЬ
| ТаблицаОстатков.Организация КАК Организация,
| ТаблицаОстатков.Номенклатура КАК Номенклатура,
| ТаблицаОстатков.Характеристика КАК Характеристика,
| ТаблицаОстатков.Назначение КАК Назначение,
| ТаблицаОстатков.Серия КАК Серия,
| СУММА(ТаблицаОстатков.КоличествоОстаток) КАК КоличествоОстаток,
| СУММА(ТаблицаОстатков.КоличествоОстаток) КАК КоличествоОстатокСУчетомРаспределений
|ИЗ
| ТаблицаОстатков КАК ТаблицаОстатков
|ГДЕ
| ТаблицаОстатков.Организация В(&Организации)
|
|СГРУППИРОВАТЬ ПО
| ТаблицаОстатков.Организация,
| ТаблицаОстатков.Номенклатура,
| ТаблицаОстатков.Характеристика,
| ТаблицаОстатков.Назначение,
| ТаблицаОстатков.Серия";
Запрос.УстановитьПараметр("Организации", СписокОрганизаций);
ТаблицаОстатков = Запрос.Выполнить().Выгрузить();
Для Каждого Строка Из Объект.ТоварыРаспределенные Цикл
Отбор = Новый Структура;
Отбор.Вставить("Организация", Строка.Организация);
Если Строка.ОперацияТекст = "Порча"
Или Строка.ОперацияТекст = "Пересортица"
Или Строка.ОперацияТекст = "Оприходование" Тогда
Отбор.Вставить("Номенклатура", Строка.НоменклатураПриходуемая);
Отбор.Вставить("Характеристика", Строка.ХарактеристикаПриходуемая);
Отбор.Вставить("Назначение", Строка.НазначениеПриходуемое);
Отбор.Вставить("Серия", Строка.СерияПриходуемая);
МассивСтрок = ТаблицаОстатков.НайтиСтроки(Отбор);
Если МассивСтрок.Количество() > 0 Тогда
МассивСтрок[0].КоличествоОстатокСУчетомРаспределений =
МассивСтрок[0].КоличествоОстатокСУчетомРаспределений - Строка.КоличествоРаспределено;
КонецЕсли;
КонецЕсли;
Если Строка.ОперацияТекст = "Порча"
Или Строка.ОперацияТекст = "Пересортица"
Или Строка.ОперацияТекст = "Списание" Тогда
Отбор.Вставить("Номенклатура", Строка.НоменклатураСписываемая);
Отбор.Вставить("Характеристика", Строка.ХарактеристикаСписываемая);
Отбор.Вставить("Назначение", Строка.НазначениеСписываемое);
Отбор.Вставить("Серия", Строка.СерияСписываемая);
МассивСтрок = ТаблицаОстатков.НайтиСтроки(Отбор);
Если МассивСтрок.Количество() > 0 Тогда
МассивСтрок[0].КоличествоОстатокСУчетомРаспределений =
МассивСтрок[0].КоличествоОстатокСУчетомРаспределений - Строка.КоличествоРаспределено;
КонецЕсли;
КонецЕсли;
КонецЦикла;
ТипЧисло = Новый ОписаниеТипов("Число", , , Новый КвалификаторыЧисла(15, 3));
ТипСтрока = Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(15));
ТипНоменклатура = Новый ОписаниеТипов("СправочникСсылка.Номенклатура");
ТипХарактеристикиНоменклатуры = Новый ОписаниеТипов("СправочникСсылка.ХарактеристикиНоменклатуры");
ТипНазначения = Новый ОписаниеТипов("СправочникСсылка.Назначения");
ТипСерииНоменклатуры = Новый ОписаниеТипов("СправочникСсылка.СерииНоменклатуры");
ТипОрганизации = Новый ОписаниеТипов("СправочникСсылка.Организации");
ТаблицаРаспределений = Новый ТаблицаЗначений;
ТаблицаРаспределений.Колонки.Добавить("ОперацияТекст", ТипСтрока);
ТаблицаРаспределений.Колонки.Добавить("НоменклатураСписываемая", ТипНоменклатура);
ТаблицаРаспределений.Колонки.Добавить("НоменклатураПриходуемая", ТипНоменклатура);
ТаблицаРаспределений.Колонки.Добавить("ХарактеристикаСписываемая", ТипХарактеристикиНоменклатуры);
ТаблицаРаспределений.Колонки.Добавить("ХарактеристикаПриходуемая", ТипХарактеристикиНоменклатуры);
ТаблицаРаспределений.Колонки.Добавить("НазначениеСписываемое", ТипНазначения);
ТаблицаРаспределений.Колонки.Добавить("НазначениеПриходуемое", ТипНазначения);
ТаблицаРаспределений.Колонки.Добавить("СерияСписываемая", ТипСерииНоменклатуры);
ТаблицаРаспределений.Колонки.Добавить("СерияПриходуемая", ТипСерииНоменклатуры);
ТаблицаРаспределений.Колонки.Добавить("Организация", ТипОрганизации);
ТаблицаРаспределений.Колонки.Добавить("КоличествоРаспределено", ТипЧисло);
Отбор = Новый Структура("Номенклатура, Характеристика, Назначение, Серия");
Для Каждого РаспределяемаяСтрока Из МассивРаспределяемыхСтрок Цикл
Если РаспределяемаяСтрока.ОперацияТекст = "Оприходование" Тогда
Отбор.Номенклатура = РаспределяемаяСтрока.НоменклатураПриходуемая;
Отбор.Характеристика = РаспределяемаяСтрока.ХарактеристикаПриходуемая;
Отбор.Назначение = РаспределяемаяСтрока.НазначениеПриходуемое;
Отбор.Серия = РаспределяемаяСтрока.СерияПриходуемая;
Остатки = ТаблицаОстатков.НайтиСтроки(Отбор);
Если Остатки.Количество() = 0
И СписокОрганизаций.Количество() > 0 Тогда
Если РаспределяемаяСтрока.КоличествоНеРаспределено > 0 Тогда
СтрокаРаспределение = ТаблицаРаспределений.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаРаспределение, РаспределяемаяСтрока, , "КоличествоРаспределено");
СтрокаРаспределение.Организация = СписокОрганизаций[0];
СтрокаРаспределение.КоличествоРаспределено = РаспределяемаяСтрока.КоличествоНеРаспределено;
РаспределяемаяСтрока.КоличествоНеРаспределено = 0;
РаспределяемаяСтрока.КоличествоРаспределено = СтрокаРаспределение.КоличествоРаспределено;
СтрокаОстаток = ТаблицаОстатков.Добавить();
СтрокаОстаток.Организация = СтрокаРаспределение.Организация;
СтрокаОстаток.Номенклатура = РаспределяемаяСтрока.НоменклатураПриходуемая;
СтрокаОстаток.Характеристика = РаспределяемаяСтрока.ХарактеристикаПриходуемая;
СтрокаОстаток.Назначение = РаспределяемаяСтрока.НазначениеПриходуемое;
СтрокаОстаток.Серия = РаспределяемаяСтрока.СерияПриходуемая;
СтрокаОстаток.КоличествоОстатокСУчетомРаспределений = СтрокаРаспределение.КоличествоРаспределено;
Продолжить;
КонецЕсли;
КонецЕсли;
Для Каждого СтрокаОстаток Из Остатки Цикл
Если РаспределяемаяСтрока.КоличествоНеРаспределено > 0 Тогда
СтрокаРаспределение = ТаблицаРаспределений.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаРаспределение, РаспределяемаяСтрока, , "КоличествоРаспределено");
СтрокаРаспределение.Организация = СтрокаОстаток.Организация;
ОсталосьРаспределить = Мин(СтрокаОстаток.КоличествоОстатокСУчетомРаспределений,
РаспределяемаяСтрока.КоличествоНеРаспределено);
СтрокаРаспределение.КоличествоРаспределено = ОсталосьРаспределить;
СтрокаОстаток.КоличествоОстатокСУчетомРаспределений = СтрокаОстаток.КоличествоОстатокСУчетомРаспределений +
СтрокаРаспределение.КоличествоРаспределено;
РаспределяемаяСтрока.КоличествоНеРаспределено = РаспределяемаяСтрока.КоличествоНеРаспределено -
СтрокаРаспределение.КоличествоРаспределено;
РаспределяемаяСтрока.КоличествоРаспределено = РаспределяемаяСтрока.КоличествоРаспределено +
СтрокаРаспределение.КоличествоРаспределено;
Если РаспределяемаяСтрока.КоличествоНеРаспределено <= 0 Тогда
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Иначе
Отбор.Номенклатура = РаспределяемаяСтрока.НоменклатураСписываемая;
Отбор.Характеристика = РаспределяемаяСтрока.ХарактеристикаСписываемая;
Отбор.Назначение = РаспределяемаяСтрока.НазначениеСписываемое;
Отбор.Серия = РаспределяемаяСтрока.СерияСписываемая;
Остатки = ТаблицаОстатков.НайтиСтроки(Отбор);
Для Каждого СтрокаОстаток Из Остатки Цикл
Если СтрокаОстаток.КоличествоОстатокСУчетомРаспределений > 0 Тогда
СтрокаРаспределение = ТаблицаРаспределений.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаРаспределение, РаспределяемаяСтрока, , "КоличествоРаспределено");
СтрокаРаспределение.Организация = СтрокаОстаток.Организация;
СтрокаРаспределение.КоличествоРаспределено =
?(СтрокаОстаток.КоличествоОстатокСУчетомРаспределений > РаспределяемаяСтрока.КоличествоНеРаспределено,
РаспределяемаяСтрока.КоличествоНеРаспределено, СтрокаОстаток.КоличествоОстатокСУчетомРаспределений);
СтрокаОстаток.КоличествоОстатокСУчетомРаспределений = СтрокаОстаток.КоличествоОстатокСУчетомРаспределений -
СтрокаРаспределение.КоличествоРаспределено;
РаспределяемаяСтрока.КоличествоНеРаспределено = РаспределяемаяСтрока.КоличествоНеРаспределено -
СтрокаРаспределение.КоличествоРаспределено;
РаспределяемаяСтрока.КоличествоРаспределено = РаспределяемаяСтрока.КоличествоРаспределено +
СтрокаРаспределение.КоличествоРаспределено;
Если РаспределяемаяСтрока.КоличествоНеРаспределено <= 0 Тогда
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
Возврат ТаблицаРаспределений;
КонецФункции
&НаСервере
Процедура ОформитьСкладскиеАктыСервер()
СохранитьНастройкиСервер();
СкладскиеАкты.Очистить();
МассивВидовОпераций = Новый Массив;
МассивВидовОпераций.Добавить("Оприходование");
МассивВидовОпераций.Добавить("Порча");
МассивВидовОпераций.Добавить("Пересортица");
МассивВидовОпераций.Добавить("Списание");
ДатаДокумента = ?(ДатаОформленияСкладскихАктов = Дата(1, 1, 1),
ТекущаяДатаСеанса(),
ДатаОформленияСкладскихАктов);
Для Каждого ВидОперации Из МассивВидовОпераций Цикл
ОтборОпераций = Новый Структура("ОперацияТекст", ВидОперации);
МассивОпераций = Объект.ТоварыРаспределенные.НайтиСтроки(ОтборОпераций);
Операции = Объект.ТоварыРаспределенные.Выгрузить(МассивОпераций);
ОрганизацииОпераций = Операции.ВыгрузитьКолонку("Организация");
Организации = ОбщегоНазначенияКлиентСервер.СвернутьМассив(ОрганизацииОпераций);
Для Каждого Организация Из Организации Цикл
Отбор = Новый Структура("Организация, ОперацияТекст", Организация, ВидОперации);
Если ВидОперации = "Оприходование" Тогда
ДокументСсылка = СоздатьОприходованиеИзлишковТоваровСервер(Организация, ДатаДокумента, Операции.НайтиСтроки(Отбор));
СкладскиеАкты.Добавить(ДокументСсылка);
ИначеЕсли ВидОперации = "Порча" Тогда
ДокументСсылка = СоздатьПорчаТоваровСервер(Организация, ДатаДокумента, Операции.НайтиСтроки(Отбор));
СкладскиеАкты.Добавить(ДокументСсылка);
ИначеЕсли ВидОперации = "Пересортица" Тогда
ДокументСсылка = СоздатьПересортицаТоваровСервер(Организация, ДатаДокумента, Операции.НайтиСтроки(Отбор));
СкладскиеАкты.Добавить(ДокументСсылка);
ИначеЕсли ВидОперации = "Списание" Тогда
ДокументСсылка = СоздатьСписаниеНедостачТоваровСервер(Организация, ДатаДокумента, Операции.НайтиСтроки(Отбор));
СкладскиеАкты.Добавить(ДокументСсылка);
КонецЕсли;
КонецЦикла;
КонецЦикла;
ИнвентаризационныеОписи.Очистить();
ТаблицаОрганизаций = Объект.ТоварыРаспределенные.Выгрузить(,"Организация");
ТаблицаОрганизаций.Свернуть("Организация");
Для Каждого Организация Из ТаблицаОрганизаций.ВыгрузитьКолонку("Организация") Цикл
ДокументОбъект = Документы.ИнвентаризационнаяОпись.СоздатьДокумент();
ДокументОбъект.Дата = ДатаОформленияСкладскихАктов;
ДокументОбъект.Организация = Организация;
ДокументОбъект.Склад = Объект.Склад;
ДокументОбъект.ИсточникИнформацииОЦенахДляПечати = Объект.ИсточникИнформацииОЦенахДляПечати;
ДокументОбъект.ВидЦены = Объект.ВидЦены;
ДокументОбъект.ДатаНачала = ИнвентаризационныйПериод.ДатаНачала;
ДокументОбъект.ДатаОкончания = ИнвентаризационныйПериод.ДатаОкончания;
ДокументОбъект.Записать();
Если ДокументОбъект.ПроверитьЗаполнение() Тогда
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный);
КонецЕсли;
ИнвентаризационныеОписи.Добавить(ДокументОбъект.Ссылка);
КонецЦикла;
СкладскиеАктыМассив = СкладскиеАкты.ВыгрузитьЗначения();
Для Каждого ИнвентаризационнаяОпись Из ИнвентаризационныеОписи.ВыгрузитьЗначения() Цикл
СкладскиеАктыМассив.Добавить(ИнвентаризационнаяОпись);
КонецЦикла;
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ДокументыПоОснованию,
"Ссылка",
СкладскиеАктыМассив,
ВидСравненияКомпоновкиДанных.ВСписке,
,
Истина);
КонецПроцедуры
&НаСервере
Функция СоздатьСписаниеНедостачТоваровСервер(Знач Организация, Знач ДатаДокумента, Знач СтрокиРаспределения)
ДокументОбъект = Документы.СписаниеНедостачТоваров.СоздатьДокумент();
ДанныеЗаполнения = СтруктураДанныхЗаполнения(Организация, ДатаДокумента);
ДокументОбъект.Заполнить(ДанныеЗаполнения);
Для Каждого Распределение Из СтрокиРаспределения Цикл
НоваяСтрока = ДокументОбъект.Товары.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Распределение);
НоваяСтрока.Номенклатура = Распределение.НоменклатураСписываемая;
НоваяСтрока.Характеристика = Распределение.ХарактеристикаСписываемая;
НоваяСтрока.Назначение = Распределение.НазначениеСписываемое;
НоваяСтрока.Серия = Распределение.СерияСписываемая;
НоваяСтрока.Количество = Распределение.КоличествоРаспределено;
КонецЦикла;
ПараметрыУказанияСерий = Новый ФиксированнаяСтруктура(
НоменклатураСервер.ПараметрыУказанияСерий(ДокументОбъект,
Документы.СписаниеНедостачТоваров));
НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(ДокументОбъект, ПараметрыУказанияСерий);
Если ЗначениеЗаполнено(ДокументОбъект.ВидЦены) И ДокументОбъект.Товары.Количество() > 0 Тогда
КолонкиПоЗначению = Новый Структура("Упаковка", Справочники.УпаковкиЕдиницыИзмерения.ПустаяСсылка());
ПараметрыЗаполнения = Новый Структура;
ПараметрыЗаполнения.Вставить("Дата", ДокументОбъект.Дата);
ПараметрыЗаполнения.Вставить("Валюта", Константы.ВалютаУправленческогоУчета.Получить());
ПараметрыЗаполнения.Вставить("ВидЦены", ДокументОбъект.ВидЦены);
ПараметрыЗаполнения.Вставить("КолонкиПоЗначению", КолонкиПоЗначению);
ПараметрыЗаполнения.Вставить("Организация", Организация);
ЦеныПредприятияЗаполнениеСервер.ЗаполнитьЦены(
ДокументОбъект.Товары, ,
ПараметрыЗаполнения,
Новый Структура()
);
КонецЕсли;
ЗаписатьСкладскойАктСервер(ДокументОбъект);
Для Каждого Распределение Из СтрокиРаспределения Цикл
Распределение.Документ = ДокументОбъект.Ссылка;
КонецЦикла;
Возврат ДокументОбъект.Ссылка;
КонецФункции
&НаСервере
Функция СоздатьПересортицаТоваровСервер(Знач Организация, Знач ДатаДокумента, Знач СтрокиРаспределения)
ДокументОбъект = Документы.ПересортицаТоваров.СоздатьДокумент();
ДанныеЗаполнения = СтруктураДанныхЗаполнения(Организация, ДатаДокумента);
ДокументОбъект.Заполнить(ДанныеЗаполнения);
Для Каждого Распределение Из СтрокиРаспределения Цикл
НоваяСтрока = ДокументОбъект.Товары.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Распределение);
НоваяСтрока.Номенклатура = Распределение.НоменклатураСписываемая;
НоваяСтрока.Характеристика = Распределение.ХарактеристикаСписываемая;
НоваяСтрока.Назначение = Распределение.НазначениеСписываемое;
НоваяСтрока.Серия = Распределение.СерияСписываемая;
НоваяСтрока.НоменклатураОприходование = Распределение.НоменклатураПриходуемая;
НоваяСтрока.ХарактеристикаОприходование = Распределение.ХарактеристикаПриходуемая;
НоваяСтрока.НазначениеОприходование = Распределение.НазначениеПриходуемое;
НоваяСтрока.СерияОприходование = Распределение.СерияПриходуемая;
НоваяСтрока.Количество = Распределение.КоличествоРаспределено;
КонецЦикла;
ПараметрыУказанияСерий = Новый ФиксированнаяСтруктура(
НоменклатураСервер.ПараметрыУказанияСерий(ДокументОбъект,
Документы.ПересортицаТоваров));
НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(ДокументОбъект, ПараметрыУказанияСерий);
Если ЗначениеЗаполнено(ДокументОбъект.ВидЦены) И ДокументОбъект.Товары.Количество() > 0 Тогда
КолонкиПоЗначению = Новый Структура("Упаковка", Справочники.УпаковкиЕдиницыИзмерения.ПустаяСсылка());
ДругиеИменаКолонок = Новый Структура("НоменклатураОприходование, ХарактеристикаОприходование", "Номенклатура", "Характеристика");
ПараметрыЗаполнения = Новый Структура;
ПараметрыЗаполнения.Вставить("Дата", ДокументОбъект.Дата);
ПараметрыЗаполнения.Вставить("Валюта", Константы.ВалютаУправленческогоУчета.Получить());
ПараметрыЗаполнения.Вставить("ВидЦены", ДокументОбъект.ВидЦены);
ПараметрыЗаполнения.Вставить("Организация", Организация);
ПараметрыЗаполнения.Вставить("КолонкиПоЗначению", КолонкиПоЗначению);
ПараметрыЗаполнения.Вставить("ДругиеИменаКолонок", ДругиеИменаКолонок);
ЦеныПредприятияЗаполнениеСервер.ЗаполнитьЦены(
ДокументОбъект.Товары,
,
ПараметрыЗаполнения);
КонецЕсли;
ЗаписатьСкладскойАктСервер(ДокументОбъект);
Для Каждого Распределение Из СтрокиРаспределения Цикл
Распределение.Документ = ДокументОбъект.Ссылка;
КонецЦикла;
Возврат ДокументОбъект.Ссылка;
КонецФункции
&НаСервере
Функция СоздатьПорчаТоваровСервер(Знач Организация, Знач ДатаДокумента, Знач СтрокиРаспределения)
ДокументОбъект = Документы.ПорчаТоваров.СоздатьДокумент();
ДанныеЗаполнения = СтруктураДанныхЗаполнения(Организация, ДатаДокумента);
ДокументОбъект.Заполнить(ДанныеЗаполнения);
Для Каждого Распределение Из СтрокиРаспределения Цикл
НоваяСтрока = ДокументОбъект.Товары.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Распределение);
НоваяСтрока.Номенклатура = Распределение.НоменклатураСписываемая;
НоваяСтрока.Характеристика = Распределение.ХарактеристикаСписываемая;
НоваяСтрока.Назначение = Распределение.НазначениеСписываемое;
НоваяСтрока.НоменклатураОприходование = Распределение.НоменклатураПриходуемая;
НоваяСтрока.ХарактеристикаОприходование = Распределение.ХарактеристикаПриходуемая;
НоваяСтрока.ПодНазначение = ЗначениеЗаполнено(Распределение.НазначениеПриходуемое);
НоваяСтрока.Серия = Распределение.СерияСписываемая;
НоваяСтрока.Количество = Распределение.КоличествоРаспределено;
КонецЦикла;
ПараметрыУказанияСерий = Новый ФиксированнаяСтруктура(
НоменклатураСервер.ПараметрыУказанияСерий(ДокументОбъект,
Документы.ПорчаТоваров));
НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(ДокументОбъект, ПараметрыУказанияСерий);
Если ЗначениеЗаполнено(ДокументОбъект.ВидЦены) И ДокументОбъект.Товары.Количество() > 0 Тогда
КолонкиПоЗначению = Новый Структура("Упаковка", Справочники.УпаковкиЕдиницыИзмерения.ПустаяСсылка());
ДругиеИменаКолонок = Новый Структура("НоменклатураОприходование, ХарактеристикаОприходование", "Номенклатура", "Характеристика");
ПараметрыЗаполнения = Новый Структура;
ПараметрыЗаполнения.Вставить("Дата", ДокументОбъект.Дата);
ПараметрыЗаполнения.Вставить("Валюта", Константы.ВалютаУправленческогоУчета.Получить());
ПараметрыЗаполнения.Вставить("ВидЦены", ДокументОбъект.ВидЦены);
ПараметрыЗаполнения.Вставить("Организация", Организация);
ПараметрыЗаполнения.Вставить("КолонкиПоЗначению", КолонкиПоЗначению);
ПараметрыЗаполнения.Вставить("ДругиеИменаКолонок", ДругиеИменаКолонок);
ЦеныПредприятияЗаполнениеСервер.ЗаполнитьЦены(
ДокументОбъект.Товары,
,
ПараметрыЗаполнения);
КонецЕсли;
ЗаписатьСкладскойАктСервер(ДокументОбъект);
Для Каждого Распределение Из СтрокиРаспределения Цикл
Распределение.Документ = ДокументОбъект.Ссылка;
КонецЦикла;
Возврат ДокументОбъект.Ссылка;
КонецФункции
&НаСервере
Функция СоздатьОприходованиеИзлишковТоваровСервер(Знач Организация, Знач ДатаДокумента, Знач СтрокиРаспределения)
ДокументОбъект = Документы.ОприходованиеИзлишковТоваров.СоздатьДокумент();
ДанныеЗаполнения = СтруктураДанныхЗаполнения(Организация, ДатаДокумента);
ДокументОбъект.Заполнить(ДанныеЗаполнения);
Для Каждого Распределение Из СтрокиРаспределения Цикл
НоваяСтрока = ДокументОбъект.Товары.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Распределение);
НоваяСтрока.Номенклатура = Распределение.НоменклатураПриходуемая;
НоваяСтрока.Характеристика = Распределение.ХарактеристикаПриходуемая;
НоваяСтрока.Назначение = Распределение.НазначениеПриходуемое;
НоваяСтрока.Серия = Распределение.СерияПриходуемая;
НоваяСтрока.Количество = Распределение.КоличествоРаспределено;
НоваяСтрока.Сумма = НоваяСтрока.Количество * НоваяСтрока.Цена;
КонецЦикла;
ПараметрыУказанияСерий = Новый ФиксированнаяСтруктура(
НоменклатураСервер.ПараметрыУказанияСерий(ДокументОбъект,
Документы.ОприходованиеИзлишковТоваров));
НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(ДокументОбъект, ПараметрыУказанияСерий);
Если ЗначениеЗаполнено(ДокументОбъект.ВидЦены) И ДокументОбъект.Товары.Количество() > 0 Тогда
КолонкиПоЗначению = Новый Структура("Упаковка", Справочники.УпаковкиЕдиницыИзмерения.ПустаяСсылка());
ПараметрыЗаполнения = Новый Структура;
ПараметрыЗаполнения.Вставить("Дата", ДокументОбъект.Дата);
ПараметрыЗаполнения.Вставить("Валюта", Константы.ВалютаУправленческогоУчета.Получить());
ПараметрыЗаполнения.Вставить("ВидЦены", ДокументОбъект.ВидЦены);
ПараметрыЗаполнения.Вставить("Организация", Организация);
ПараметрыЗаполнения.Вставить("КолонкиПоЗначению", КолонкиПоЗначению);
Действия = Новый Структура("ПересчитатьСумму", "Количество");
ЦеныПредприятияЗаполнениеСервер.ЗаполнитьЦены(ДокументОбъект.Товары,, ПараметрыЗаполнения, Действия);
КонецЕсли;
ЗаписатьСкладскойАктСервер(ДокументОбъект);
Для Каждого Распределение Из СтрокиРаспределения Цикл
Распределение.Документ = ДокументОбъект.Ссылка;
КонецЦикла;
Возврат ДокументОбъект.Ссылка;
КонецФункции
&НаСервере
Процедура ЗаписатьСкладскойАктСервер(СкладскойАкт)
СкладскойАкт.Записать(РежимЗаписиДокумента.Запись);
Если СкладскойАкт.ПроверитьЗаполнение() Тогда
Попытка
СкладскойАкт.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный);
Исключение
ПредставлениеДокумента = Строка(СкладскойАкт.Ссылка);
КодОсновногоЯзыка = ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка();
ТекстСообщения = НСтр("ru = 'Не удалось провести документ ""%Документ%"".'");
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Документ%", ПредставлениеДокумента);
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, СкладскойАкт.Ссылка);
ЗаписьЖурналаРегистрации(НСтр("ru = 'Оформление складских актов'", КодОсновногоЯзыка),
УровеньЖурналаРегистрации.Ошибка, , ,
ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УдалитьСкладскиеАктыИнвентаризационныеОписиСервер()
УстановитьПривилегированныйРежим(Истина);
Для Каждого Документ Из СкладскиеАкты Цикл
ДокументОбъект = Документ.Значение.ПолучитьОбъект();
ДокументОбъект.УстановитьПометкуУдаления(Истина);
КонецЦикла;
Для Каждого Документ Из ИнвентаризационныеОписи Цикл
ДокументОбъект = Документ.Значение.ПолучитьОбъект();
ДокументОбъект.УстановитьПометкуУдаления(Истина);
КонецЦикла;
УстановитьПривилегированныйРежим(Ложь);
КонецПроцедуры
&НаСервере
Процедура ПодготовитьДляРаботыТаблицыТоваровСервер()
ТаблицаНоменклатуры = Обработки.ПомощникОформленияСкладскихАктов.ТоварыКОформлениюСкладскихАктов(Объект.Склад, ОтборНоменклатуры, ИнвентаризационныйПериод.ДатаНачала, ИнвентаризационныйПериод.ДатаОкончания);
ТаблицаНоменклатуры.Колонки.Добавить("ПризнакДляОтбора", Новый ОписаниеТипов("Булево"));
Для Каждого Строка Из ТаблицаНоменклатуры Цикл
Строка.ПризнакДляОтбора = Не ОтобратьПоТипуОперации.НайтиПоЗначению(Строка.ОперацияТекст) = Неопределено;
КонецЦикла;
Если ЗначениеЗаполнено(Объект.ВидЦены) Тогда
ТаблицаНоменклатуры.Колонки.Добавить("ЦенаОприходования", ОбщегоНазначенияУТ.ОписаниеТипаДенежногоПоля());
ТаблицаНоменклатуры.Колонки.Добавить("ЦенаСписания", ОбщегоНазначенияУТ.ОписаниеТипаДенежногоПоля());
ТекстЗапроса =
"ВЫБРАТЬ
| ТаблицаТоваров.НоменклатураСписываемая,
| ТаблицаТоваров.ХарактеристикаСписываемая,
| ТаблицаТоваров.НазначениеСписываемое,
| ТаблицаТоваров.НоменклатураПриходуемая,
| ТаблицаТоваров.ХарактеристикаПриходуемая,
| ТаблицаТоваров.НазначениеПриходуемое
|ПОМЕСТИТЬ ТаблицаТоваров
|ИЗ
| &ТаблицаТоваров КАК ТаблицаТоваров
|;
|
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ТаблицаТоваров.Номенклатура,
| ТаблицаТоваров.Характеристика,
| ТаблицаТоваров.Назначение
|ПОМЕСТИТЬ Товары
|ИЗ
| (ВЫБРАТЬ
| ТаблицаТоваров.НоменклатураСписываемая КАК Номенклатура,
| ТаблицаТоваров.ХарактеристикаСписываемая КАК Характеристика,
| ТаблицаТоваров.НазначениеСписываемое КАК Назначение
| ИЗ
| ТаблицаТоваров КАК ТаблицаТоваров
| ГДЕ
| НЕ ТаблицаТоваров.НоменклатураСписываемая = &ПустаяНоменклатура
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ТаблицаТоваров.НоменклатураПриходуемая,
| ТаблицаТоваров.ХарактеристикаПриходуемая,
| ТаблицаТоваров.НазначениеПриходуемое
| ИЗ
| ТаблицаТоваров КАК ТаблицаТоваров
| ГДЕ
| НЕ ТаблицаТоваров.НоменклатураПриходуемая = &ПустаяНоменклатура) КАК ТаблицаТоваров
|;
|
|
|ВЫБРАТЬ
| ЦеныНоменклатурыСрезПоследних.Номенклатура,
| ЦеныНоменклатурыСрезПоследних.Характеристика,
| ВЫБОР
| КОГДА НЕ &ТекстЗапросаКоэффициентУпаковки ЕСТЬ NULL
| И &ТекстЗапросаКоэффициентУпаковки <> 0
| ТОГДА ЦеныНоменклатурыСрезПоследних.Цена / &ТекстЗапросаКоэффициентУпаковки
| ИНАЧЕ ЦеныНоменклатурыСрезПоследних.Цена
| КОНЕЦ КАК Цена
|ИЗ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
| &ДатаОформленияСкладскихАктов,
| ВидЦены = &ВидЦены
| И (Номенклатура, Характеристика) В
| (ВЫБРАТЬ
| Товары.Номенклатура,
| Товары.Характеристика
| ИЗ
| Товары КАК Товары)) КАК ЦеныНоменклатурыСрезПоследних";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ТекстЗапросаКоэффициентУпаковки",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"ЦеныНоменклатурыСрезПоследних.Упаковка",
"ЦеныНоменклатурыСрезПоследних.Номенклатура"));
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ВидЦены", Объект.ВидЦены);
Запрос.УстановитьПараметр("ТаблицаТоваров", ТаблицаНоменклатуры);
Запрос.УстановитьПараметр("ПустаяНоменклатура", Справочники.Номенклатура.ПустаяСсылка());
Запрос.УстановитьПараметр("ДатаОформленияСкладскихАктов", ДатаОформленияСкладскихАктов);
Запрос.Текст = ТекстЗапроса;
ТаблицаЦен = Запрос.Выполнить().Выгрузить();
Для Каждого СтрокаТаблицыЦен Из ТаблицаЦен Цикл
Если СтрокаТаблицыЦен.Цена = 0 Тогда
Продолжить;
КонецЕсли;
МассивТоваров = ТаблицаНоменклатуры.НайтиСтроки(Новый Структура("НоменклатураПриходуемая,ХарактеристикаПриходуемая",
СтрокаТаблицыЦен.Номенклатура, СтрокаТаблицыЦен.Характеристика));
Для Каждого Строка Из МассивТоваров Цикл
Строка.ЦенаОприходования = СтрокаТаблицыЦен.Цена;
КонецЦикла;
МассивТоваров = ТаблицаНоменклатуры.НайтиСтроки(Новый Структура("НоменклатураСписываемая,ХарактеристикаСписываемая",
СтрокаТаблицыЦен.Номенклатура, СтрокаТаблицыЦен.Характеристика));
Для Каждого Строка Из МассивТоваров Цикл
Строка.ЦенаСписания = СтрокаТаблицыЦен.Цена;
КонецЦикла;
КонецЦикла;
КонецЕсли;
Объект.Товары.Загрузить(ТаблицаНоменклатуры);
Объект.ТоварыРаспределенные.Очистить();
ПараметрыСерийСклада = СкладыСервер.ИспользованиеСерийНаСкладе(Объект.Склад, Ложь);
Элементы.ТоварыКСписаниюСерияСписываемая.Видимость = ПараметрыСерийСклада.ИспользоватьСерииНоменклатуры;
Элементы.ТоварыКОприходованиюСерияПриходуемая.Видимость = ПараметрыСерийСклада.ИспользоватьСерииНоменклатуры;
Элементы.ТоварыКПересортицеКПорчеСерияСписываемая.Видимость = ПараметрыСерийСклада.ИспользоватьСерииНоменклатуры;
Элементы.ТоварыКПересортицеКПорчеСерияПриходуемая.Видимость = ПараметрыСерийСклада.ИспользоватьСерииНоменклатуры;
Элементы.ТоварыНеРаспределенныеСерияСписываемая.Видимость = ПараметрыСерийСклада.ИспользоватьСерииНоменклатуры;
Элементы.ТоварыНеРаспределенныеСерияПриходуемая.Видимость = ПараметрыСерийСклада.ИспользоватьСерииНоменклатуры;
Элементы.ТоварыРаспределенныеСерияСписываемая.Видимость = ПараметрыСерийСклада.ИспользоватьСерииНоменклатуры;
Элементы.ТоварыРаспределенныеСерияПриходуемая.Видимость = ПараметрыСерийСклада.ИспользоватьСерииНоменклатуры;
СформироватьСписокСовпадающейНоменклатурыСервер();
ЗагрузитьНастройкиСервер();
УстановитьОтображениеЗаголовкаИЭлементовУправления();
КонецПроцедуры
&НаСервере
Процедура СкладПриИзмененииСервер()
Если ЗначениеЗаполнено(Объект.Склад) Тогда
КоличествоТоваровКОформлению = ПолучитьКоличествоТоваровКОформлениюСервер(Истина);
КоличествоТоваровКОформлениюСУчетомОтбора = ПолучитьКоличествоТоваровКОформлениюСервер(Ложь);
ФлагПоСкладуЕстьНезавершенныеПересчеты = ЕстьНеоформленныеПересчетыПоСкладуСервер(Объект.Склад);
Иначе
ФлагПоСкладуЕстьНезавершенныеПересчеты = Ложь;
КонецЕсли;
Объект.ИсточникИнформацииОЦенахДляПечати = Справочники.Склады.ИсточникИнформацииОЦенахДляПечати(Объект.Склад);
ИсточникИнформацииОЦенахДляПечатиПриИзмененииНаСервере();
УстановитьОтображениеПоСкладу();
КонецПроцедуры
&НаСервере
Процедура ИсточникИнформацииОЦенахДляПечатиПриИзмененииНаСервере()
ИсточникИнформацииОЦенахДляПечати = Объект.ИсточникИнформацииОЦенахДляПечати;
УстановитьЗначениеВидЦеныСервер(ИсточникИнформацииОЦенахДляПечати);
УстановитьДоступностиВидЦеныСервер(ИсточникИнформацииОЦенахДляПечати);
КонецПроцедуры
&НаСервере
Процедура СоздатьНовуюСтрокуПоЗачетуСервер(СтрокаТоварыСписываемые, СтрокаТоварыПриходуемые, Знач Операция, Знач Количество)
Отбор = Новый Структура("ОперацияТекст,НоменклатураСписываемая,ХарактеристикаСписываемая,НазначениеСписываемое,СерияСписываемая,СтавкаНДС,
|ЦенаСписания,НоменклатураПриходуемая,ХарактеристикаПриходуемая,НазначениеПриходуемое,СерияПриходуемая,ЦенаОприходования");
ЗаполнитьЗначенияСвойств(Отбор, СтрокаТоварыСписываемые,
"НоменклатураСписываемая,ХарактеристикаСписываемая,НазначениеСписываемое,СерияСписываемая,СтавкаНДС,ЦенаСписания");
ЗаполнитьЗначенияСвойств(Отбор, СтрокаТоварыПриходуемые,
"НоменклатураПриходуемая,ХарактеристикаПриходуемая,НазначениеПриходуемое,СерияПриходуемая,ЦенаОприходования");
Отбор.ОперацияТекст = Операция;
МассивСтрок = Объект.Товары.НайтиСтроки(Отбор);
Если МассивСтрок.Количество() = 0 Тогда
Строка = Объект.Товары.Добавить();
Иначе
Строка = МассивСтрок[0];
КонецЕсли;
ЗаполнитьЗначенияСвойств(Строка, Отбор);
Строка.ОперацияТекст = Операция;
Строка.ОперацияПорча = Строка.ОперацияТекст = "Порча";
Строка.ОперацияПересортица = Не Строка.ОперацияПорча;
Строка.ОперацияПорчаПересортица = Истина;
Строка.Количество = Строка.Количество + Количество;
Строка.КоличествоНеРаспределено = Строка.КоличествоНеРаспределено + Количество;
Строка.НеРаспределено = Не Строка.КоличествоНеРаспределено = 0;
Строка.Распределено = Не Строка.КоличествоРаспределено = 0;
Строка.ПризнакДляОтбора = Не ОтобратьПоТипуОперации.НайтиПоЗначению(Строка.ОперацияТекст) = Неопределено;
Если СтрокаТоварыПриходуемые.КоличествоНеРаспределено < Количество Тогда
МассивСтрокДляУдаления = Объект.ТоварыРаспределенные.НайтиСтроки(
Новый Структура("КлючСвязи", СтрокаТоварыПриходуемые.ПолучитьИдентификатор()));
Для Каждого СтрокаДляУдаления Из МассивСтрокДляУдаления Цикл
Объект.ТоварыРаспределенные.Удалить(СтрокаДляУдаления);
КонецЦикла;
СтрокаТоварыПриходуемые.КоличествоНеРаспределено = СтрокаТоварыПриходуемые.КоличествоНеРаспределено
+ СтрокаТоварыПриходуемые.КоличествоРаспределено;
СтрокаТоварыПриходуемые.КоличествоРаспределено = 0;
КонецЕсли;
СтрокаТоварыПриходуемые.Количество = СтрокаТоварыПриходуемые.Количество - Количество;
СтрокаТоварыПриходуемые.КоличествоНеРаспределено = СтрокаТоварыПриходуемые.КоличествоНеРаспределено - Количество;
СтрокаТоварыПриходуемые.НеРаспределено = Не СтрокаТоварыПриходуемые.КоличествоНеРаспределено = 0;
СтрокаТоварыПриходуемые.Распределено = Не СтрокаТоварыПриходуемые.КоличествоРаспределено = 0;
Если СтрокаТоварыСписываемые.КоличествоНеРаспределено < Количество Тогда
МассивСтрокДляУдаления = Объект.ТоварыРаспределенные.НайтиСтроки(
Новый Структура("КлючСвязи", СтрокаТоварыСписываемые.ПолучитьИдентификатор()));
Для Каждого СтрокаДляУдаления Из МассивСтрокДляУдаления Цикл
Объект.ТоварыРаспределенные.Удалить(СтрокаДляУдаления);
КонецЦикла;
СтрокаТоварыСписываемые.КоличествоНеРаспределено = СтрокаТоварыСписываемые.КоличествоНеРаспределено
+ СтрокаТоварыСписываемые.КоличествоРаспределено;
СтрокаТоварыСписываемые.КоличествоРаспределено = 0;
КонецЕсли;
СтрокаТоварыСписываемые.Количество = СтрокаТоварыСписываемые.Количество - Количество;
СтрокаТоварыСписываемые.КоличествоНеРаспределено = СтрокаТоварыСписываемые.КоличествоНеРаспределено - Количество;
СтрокаТоварыСписываемые.НеРаспределено = Не СтрокаТоварыСписываемые.КоличествоНеРаспределено = 0;
СтрокаТоварыСписываемые.Распределено = Не СтрокаТоварыСписываемые.КоличествоРаспределено = 0;
КонецПроцедуры
&НаСервере
Функция ПолучитьВариантыЗачетаПоПорчеСервер()
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ТаблицаТовары", Объект.Товары.Выгрузить());
Запрос.Текст =
"ВЫБРАТЬ
| ТаблицаТовары.НоменклатураСписываемая,
| ТаблицаТовары.ХарактеристикаСписываемая,
| ТаблицаТовары.НазначениеСписываемое,
| ТаблицаТовары.СерияСписываемая
|ПОМЕСТИТЬ ТаблицаКСписанию
|ИЗ
| &ТаблицаТовары КАК ТаблицаТовары
|ГДЕ
| ТаблицаТовары.ОперацияТекст = ""Списание""
|;
|
|
|ВЫБРАТЬ
| ТаблицаТовары.НоменклатураПриходуемая,
| ТаблицаТовары.ХарактеристикаПриходуемая,
| ТаблицаТовары.НазначениеПриходуемое,
| ТаблицаТовары.СерияПриходуемая,
| ТаблицаТовары.КоличествоНеРаспределено КАК Количество
|ПОМЕСТИТЬ ТаблицаКОприходованию
|ИЗ
| &ТаблицаТовары КАК ТаблицаТовары
|ГДЕ
| ТаблицаТовары.ОперацияТекст = ""Оприходование""
|;
|
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ТаблицаКСписанию.НоменклатураСписываемая,
| ТаблицаКСписанию.ХарактеристикаСписываемая,
| ТаблицаКСписанию.НазначениеСписываемое,
| ТаблицаКСписанию.СерияСписываемая,
| ТаблицаКОприходованию.НоменклатураПриходуемая,
| ТаблицаКОприходованию.ХарактеристикаПриходуемая,
| ТаблицаКОприходованию.НазначениеПриходуемое,
| ТаблицаКОприходованию.СерияПриходуемая
|ИЗ
| РегистрСведений.ТоварыДругогоКачества КАК ТоварыДругогоКачества
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТаблицаКСписанию КАК ТаблицаКСписанию
| ПО (ТаблицаКСписанию.НоменклатураСписываемая = ТоварыДругогоКачества.Номенклатура)
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТаблицаКОприходованию КАК ТаблицаКОприходованию
| ПО (ТаблицаКОприходованию.НоменклатураПриходуемая = ТоварыДругогоКачества.НоменклатураБрак)
|ГДЕ
| ЕСТЬNULL(ВЫРАЗИТЬ(ТаблицаКСписанию.СерияСписываемая КАК Справочник.СерииНоменклатуры).Наименование, """") = ЕСТЬNULL(ВЫРАЗИТЬ(ТаблицаКОприходованию.СерияПриходуемая КАК Справочник.СерииНоменклатуры).Наименование, """")
| И ЕСТЬNULL(ВЫРАЗИТЬ(ТаблицаКСписанию.ХарактеристикаСписываемая КАК Справочник.ХарактеристикиНоменклатуры).Наименование, """") = ЕСТЬNULL(ВЫРАЗИТЬ(ТаблицаКОприходованию.ХарактеристикаПриходуемая КАК Справочник.ХарактеристикиНоменклатуры).Наименование, """")
| И (ЕСТЬNULL(ВЫРАЗИТЬ(ТаблицаКСписанию.НазначениеСписываемое КАК Справочник.Назначения).Наименование, """") = ЕСТЬNULL(ВЫРАЗИТЬ(ТаблицаКОприходованию.НазначениеПриходуемое КАК Справочник.Назначения).Наименование, """")
| ИЛИ (ВЫРАЗИТЬ(ТаблицаКОприходованию.НазначениеПриходуемое КАК Справочник.Назначения)) = ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка))
|
|УПОРЯДОЧИТЬ ПО
| ТаблицаКСписанию.НоменклатураСписываемая,
| ТаблицаКСписанию.ХарактеристикаСписываемая,
| ТаблицаКСписанию.СерияСписываемая,
| ТаблицаКОприходованию.НазначениеПриходуемое УБЫВ";
Возврат Запрос.Выполнить().Выгрузить();
КонецФункции
&НаСервере
Функция ПолучитьВариантыЗачетаПоПересортицеСервер()
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ТаблицаТовары", Объект.Товары.Выгрузить());
Запрос.Текст =
"ВЫБРАТЬ
| ТаблицаТовары.НоменклатураСписываемая,
| ТаблицаТовары.ХарактеристикаСписываемая,
| ТаблицаТовары.НазначениеСписываемое,
| ТаблицаТовары.СерияСписываемая
|ПОМЕСТИТЬ ТаблицаКСписанию
|ИЗ
| &ТаблицаТовары КАК ТаблицаТовары
|ГДЕ
| ТаблицаТовары.ОперацияТекст = ""Списание""
|;
|
|
|ВЫБРАТЬ
| ТаблицаТовары.НоменклатураПриходуемая,
| ТаблицаТовары.ХарактеристикаПриходуемая,
| ТаблицаТовары.НазначениеПриходуемое,
| ТаблицаТовары.СерияПриходуемая
|ПОМЕСТИТЬ ТаблицаКОприходованию
|ИЗ
| &ТаблицаТовары КАК ТаблицаТовары
|ГДЕ
| ТаблицаТовары.ОперацияТекст = ""Оприходование""
|;
|
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ТаблицаКСписанию.НоменклатураСписываемая,
| ТаблицаКСписанию.ХарактеристикаСписываемая,
| ТаблицаКСписанию.НазначениеСписываемое,
| ТаблицаКСписанию.СерияСписываемая,
| ТаблицаКОприходованию.НоменклатураПриходуемая,
| ТаблицаКОприходованию.ХарактеристикаПриходуемая,
| ТаблицаКОприходованию.НазначениеПриходуемое,
| ТаблицаКОприходованию.СерияПриходуемая
|ИЗ
| ТаблицаКСписанию КАК ТаблицаКСписанию
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТаблицаКОприходованию КАК ТаблицаКОприходованию
| ПО ТаблицаКСписанию.НоменклатураСписываемая = ТаблицаКОприходованию.НоменклатураПриходуемая
|
|УПОРЯДОЧИТЬ ПО
| ТаблицаКСписанию.НоменклатураСписываемая,
| ТаблицаКСписанию.ХарактеристикаСписываемая,
| ТаблицаКСписанию.НазначениеСписываемое,
| ТаблицаКСписанию.СерияСписываемая,
| ТаблицаКОприходованию.НоменклатураПриходуемая,
| ТаблицаКОприходованию.ХарактеристикаПриходуемая,
| ТаблицаКОприходованию.НазначениеПриходуемое,
| ТаблицаКОприходованию.СерияПриходуемая";
Возврат Запрос.Выполнить().Выгрузить();
КонецФункции
&НаСервере
Процедура УстановитьОтборСтрокПоНоменклатуреСервер()
Если ЗначениеЗаполнено(ОтборСтрокНоменклатуры) Тогда
Элементы.ТоварыКОприходованию.ОтборСтрок =
Новый ФиксированнаяСтруктура("ОперацияОприходование,НоменклатураПриходуемая,", Истина, ОтборСтрокНоменклатуры);
Элементы.ТоварыКСписанию.ОтборСтрок =
Новый ФиксированнаяСтруктура("ОперацияСписание,НоменклатураСписываемая,", Истина, ОтборСтрокНоменклатуры);
Иначе
Элементы.ТоварыКСписанию.ОтборСтрок =
Новый ФиксированнаяСтруктура("ОперацияСписание", Истина);
Элементы.ТоварыКОприходованию.ОтборСтрок =
Новый ФиксированнаяСтруктура("ОперацияОприходование", Истина);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьЗначенияПоУмолчаниюСервер()
Объект.Склад = ЗначениеНастроекПовтИсп.ПолучитьСкладПоУмолчанию(Объект.Склад);
КонецПроцедуры
&НаСервере
Функция ПерейтиНазад(ДождатьсяОтветаНаВопрос)
ЕстьСписания = Объект.Товары.НайтиСтроки(Новый Структура("ОперацияСписание", Истина)).Количество() > 0;
ЕстьОприходования = Объект.Товары.НайтиСтроки(Новый Структура("ОперацияОприходование", Истина)).Количество() > 0;
ЕстьПорча = Объект.Товары.НайтиСтроки(Новый Структура("ОперацияПорча", Истина)).Количество() > 0;
ЕстьПересортица = Объект.Товары.НайтиСтроки(Новый Структура("ОперацияПересортица", Истина)).Количество() > 0;
НужноОткрыватьЗачеты = (ЕстьСписания И ЕстьОприходования)
Или ЕстьПорча
Или ЕстьПересортица;
ТекущаяСтраница = Элементы.ОсновнаяПанель.ТекущаяСтраница;
Если ТекущаяСтраница = Элементы.СтраницаОформлениеДокументов Тогда
Если СкладскиеАкты.Количество() > 0
И ДождатьсяОтветаНаВопрос Тогда
Возврат Ложь;
Иначе
УдалитьСкладскиеАктыИнвентаризационныеОписиСервер();
Если ПолучитьФункциональнуюОпцию("ИспользоватьНесколькоОрганизаций") Тогда
Элементы.ОсновнаяПанель.ТекущаяСтраница = Элементы.СтраницаРаспределениеПоОрганизациям;
ИначеЕсли НужноОткрыватьЗачеты Тогда
Элементы.ОсновнаяПанель.ТекущаяСтраница = Элементы.СтраницаПересортицаПорча;
Иначе
Элементы.ОсновнаяПанель.ТекущаяСтраница = Элементы.СтраницаНастройки;
КонецЕсли;
КонецЕсли;
ИначеЕсли ТекущаяСтраница = Элементы.СтраницаРаспределениеПоОрганизациям Тогда
Если НужноОткрыватьЗачеты Тогда
Элементы.ОсновнаяПанель.ТекущаяСтраница = Элементы.СтраницаПересортицаПорча;
Иначе
Если ДождатьсяОтветаНаВопрос Тогда
Возврат Ложь;
Иначе
Элементы.ОсновнаяПанель.ТекущаяСтраница = Элементы.СтраницаНастройки;
КонецЕсли;
КонецЕсли;
ИначеЕсли ТекущаяСтраница = Элементы.СтраницаПересортицаПорча Тогда
Если (ЕстьПорча
Или ЕстьПересортица)
И ДождатьсяОтветаНаВопрос Тогда
Возврат Ложь;
Иначе
Элементы.ОсновнаяПанель.ТекущаяСтраница = Элементы.СтраницаНастройки;
КонецЕсли;
КонецЕсли;
Если Элементы.ОсновнаяПанель.ТекущаяСтраница = Элементы.СтраницаНастройки Тогда
УстановитьОтображениеПоСкладу();
КонецЕсли;
УстановитьОтображениеЗаголовкаИЭлементовУправления();
Возврат Истина;
КонецФункции
&НаСервереБезКонтекста
Функция ЕстьНеоформленныеПересчетыПоСкладуСервер(Знач Склад)
Возврат Документы.ПересчетТоваров.НеоформленныеПересчетыПоСкладу(Склад).Количество() > 0;
КонецФункции
&НаСервереБезКонтекста
Функция ПолучитьПроведенныеИНепроведенныеСкладскиеАктыСервер(Знач СписокАктов, ВозвращаемыйМассивНепроведенныхАктов, ВозвращаемыйМассивПроведенныхАктов)
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("СписокАктов",СписокАктов);
Запрос.Текст =
"ВЫБРАТЬ
| ОприходованиеИзлишковТоваров.Ссылка
|ИЗ
| Документ.ОприходованиеИзлишковТоваров КАК ОприходованиеИзлишковТоваров
|ГДЕ
| НЕ ОприходованиеИзлишковТоваров.Проведен
| И ОприходованиеИзлишковТоваров.Ссылка В(&СписокАктов)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ПересортицаТоваров.Ссылка
|ИЗ
| Документ.ПересортицаТоваров КАК ПересортицаТоваров
|ГДЕ
| НЕ ПересортицаТоваров.Проведен
| И ПересортицаТоваров.Ссылка В(&СписокАктов)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ПорчаТоваров.Ссылка
|ИЗ
| Документ.ПорчаТоваров КАК ПорчаТоваров
|ГДЕ
| НЕ ПорчаТоваров.Проведен
| И ПорчаТоваров.Ссылка В(&СписокАктов)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| СписаниеНедостачТоваров.Ссылка
|ИЗ
| Документ.СписаниеНедостачТоваров КАК СписаниеНедостачТоваров
|ГДЕ
| НЕ СписаниеНедостачТоваров.Проведен
| И СписаниеНедостачТоваров.Ссылка В(&СписокАктов)
|;
|
|
|ВЫБРАТЬ
| ОприходованиеИзлишковТоваров.Ссылка
|ИЗ
| Документ.ОприходованиеИзлишковТоваров КАК ОприходованиеИзлишковТоваров
|ГДЕ
| ОприходованиеИзлишковТоваров.Проведен
| И ОприходованиеИзлишковТоваров.Ссылка В(&СписокАктов)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ПересортицаТоваров.Ссылка
|ИЗ
| Документ.ПересортицаТоваров КАК ПересортицаТоваров
|ГДЕ
| ПересортицаТоваров.Проведен
| И ПересортицаТоваров.Ссылка В(&СписокАктов)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ПорчаТоваров.Ссылка
|ИЗ
| Документ.ПорчаТоваров КАК ПорчаТоваров
|ГДЕ
| ПорчаТоваров.Проведен
| И ПорчаТоваров.Ссылка В(&СписокАктов)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| СписаниеНедостачТоваров.Ссылка
|ИЗ
| Документ.СписаниеНедостачТоваров КАК СписаниеНедостачТоваров
|ГДЕ
| СписаниеНедостачТоваров.Проведен
| И СписаниеНедостачТоваров.Ссылка В(&СписокАктов)";
Результат = Запрос.ВыполнитьПакет();
ВозвращаемыйМассивНепроведенныхАктов = Результат.Получить(0).Выгрузить().ВыгрузитьКолонку("Ссылка");
ВозвращаемыйМассивПроведенныхАктов = Результат.Получить(1).Выгрузить().ВыгрузитьКолонку("Ссылка");
КонецФункции
&НаСервере
Процедура УстановитьОтображениеПоСкладу()
Если ЗначениеЗаполнено(Объект.Склад) Тогда
Элементы.ГруппаВыборСклада.ТекущаяСтраница = Элементы.ГруппаВыборСкладаВыбран;
Если ФлагПоСкладуЕстьНезавершенныеПересчеты Тогда
ТекстЗаголовка = НСтр("ru='Есть <a href=""Отчет"">пересчеты товаров</a>, по которым еще не завершено внесение результатов (они не проведены в статусе ""Выполнено"").'");
Элементы.ДекорацияИнформированиеОНеоформленныхПересчетах.Заголовок = СтроковыеФункции.ФорматированнаяСтрока(ТекстЗаголовка);
Иначе
Элементы.ДекорацияИнформированиеОНеоформленныхПересчетах.Заголовок = НСтр("ru = 'По выбранному складу все пересчеты товаров выполнены.'");
КонецЕсли;
Если Не (ПолучитьФункциональнуюОпцию("ИспользоватьХарактеристикиНоменклатуры")
Или ПолучитьФункциональнуюОпцию("УчитыватьСебестоимостьПоСериямСклад", Новый Структура("Склад", Объект.Склад))) Тогда
Элементы.ГруппаОтборСтрок.Видимость = Ложь;
Иначе
Элементы.ГруппаОтборСтрок.Видимость = Истина;
КонецЕсли;
Иначе
Элементы.ГруппаВыборСклада.ТекущаяСтраница = Элементы.ГруппаВыборСкладаНеВыбран;
КонецЕсли;
УправлениеДекорациямиПоТоварам();
УстановитьОтображениеЗаголовкаИЭлементовУправления();
КонецПроцедуры
&НаСервере
Процедура СформироватьСписокСовпадающейНоменклатурыСервер()
Если Не Элементы.ГруппаВыборСклада.Видимость Тогда
Возврат;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Товары", Объект.Товары.Выгрузить());
Запрос.Текст =
"ВЫБРАТЬ
| Товары.НоменклатураСписываемая КАК Номенклатура
|ПОМЕСТИТЬ ТаблицаКСписанию
|ИЗ
| &Товары КАК Товары
|ГДЕ
| Товары.ОперацияТекст = ""Списание""
|;
|
|
|ВЫБРАТЬ
| Товары.НоменклатураПриходуемая КАК Номенклатура
|ПОМЕСТИТЬ ТаблицаКОприходованию
|ИЗ
| &Товары КАК Товары
|ГДЕ
| Товары.ОперацияТекст = ""Оприходование""
|;
|
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ТаблицаКОприходованию.Номенклатура КАК Номенклатура,
| ВЫРАЗИТЬ(ТаблицаКОприходованию.Номенклатура КАК Справочник.Номенклатура).Наименование КАК Наименование
|ИЗ
| ТаблицаКОприходованию КАК ТаблицаКОприходованию
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТаблицаКСписанию КАК ТаблицаКСписанию
| ПО ТаблицаКОприходованию.Номенклатура = ТаблицаКСписанию.Номенклатура
|
|УПОРЯДОЧИТЬ ПО
| Наименование";
Выборка = Запрос.Выполнить().Выбрать();
Элементы.ОтборСтрокНоменклатуры.СписокВыбора.Очистить();
Если Выборка.Количество() = 0 Тогда
Элементы.СтраницыПояснениеОтборСтрок.ТекущаяСтраница = Элементы.СтраницаПояснениеНетСтрокаДляОтбора;
Элементы.ОтборСтрокНоменклатуры.Доступность = Ложь;
Если ЗначениеЗаполнено(ОтборСтрокНоменклатуры) Тогда
ОтборСтрокНоменклатуры = Справочники.Номенклатура.ПустаяСсылка();
УстановитьОтборСтрокПоНоменклатуреСервер();
КонецЕсли;
Иначе
Элементы.СтраницыПояснениеОтборСтрок.ТекущаяСтраница = Элементы.СтраницаПояснениеЕстьСтрокиДляОтбора;
Элементы.ОтборСтрокНоменклатуры.Доступность = Истина;
Пока Выборка.Следующий() Цикл
Элементы.ОтборСтрокНоменклатуры.СписокВыбора.Добавить(Выборка.Номенклатура, Выборка.Наименование);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура СохранитьНастройкиСервер()
Перем Настройки;
Настройки = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("Обработки.ПомощникОформленияСкладскихАктов", "");
ВыбранныеВладельцыПоСкладам = Неопределено;
Если ТипЗнч(Настройки) = Тип("Соответствие") Тогда
ВыбранныеВладельцыПоСкладам = Настройки.Получить("ВыбранныеОрганизацииПоСкладам");
КонецЕсли;
Если ТипЗнч(ВыбранныеВладельцыПоСкладам) = Тип("ТаблицаЗначений") Тогда
ОтборСтрок = Новый Структура("Склад", Объект.Склад);
МассивСтрок = ВыбранныеВладельцыПоСкладам.НайтиСтроки(ОтборСтрок);
Для Каждого Строка Из МассивСтрок Цикл
ВыбранныеВладельцыПоСкладам.Удалить(Строка);
КонецЦикла;
Иначе
ВыбранныеВладельцыПоСкладам = Новый ТаблицаЗначений();
ВыбранныеВладельцыПоСкладам.Колонки.Добавить("Склад", Новый ОписаниеТипов("СправочникСсылка.Склады"));
ВыбранныеВладельцыПоСкладам.Колонки.Добавить("Организация", Новый ОписаниеТипов("СправочникСсылка.Организации"));
ВыбранныеВладельцыПоСкладам.Колонки.Добавить("Приоритет", ОбщегоНазначенияУТ.ПолучитьОписаниеТиповЧисла(15, 0));
КонецЕсли;
Для Каждого ВыбраннаяОрганизация Из Объект.ВыбранныеОрганизации Цикл
Строка = ВыбранныеВладельцыПоСкладам.Добавить();
ЗаполнитьЗначенияСвойств(Строка, ВыбраннаяОрганизация);
Строка.Склад = Объект.Склад;
Строка.Приоритет = ВыбраннаяОрганизация.НомерСтроки;
КонецЦикла;
Настройки = Новый Соответствие;
Настройки.Вставить("ВыбранныеОрганизацииПоСкладам", ВыбранныеВладельцыПоСкладам);
ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("Обработки.ПомощникОформленияСкладскихАктов", "", Настройки);
КонецПроцедуры
&НаСервере
Процедура ЗагрузитьНастройкиСервер()
Настройки = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("Обработки.ПомощникОформленияСкладскихАктов", "");
Если ТипЗнч(Настройки) = Тип("Соответствие") Тогда
ВыбранныеОрганизацииПоСкладам = Настройки.Получить("ВыбранныеОрганизацииПоСкладам");
Если ТипЗнч(ВыбранныеОрганизацииПоСкладам) = Тип("ТаблицаЗначений") Тогда
ОтборСтрок = Новый Структура("Склад", Объект.Склад);
МассивСтрок = ВыбранныеОрганизацииПоСкладам.НайтиСтроки(ОтборСтрок);
Если МассивСтрок.Количество() > 0 Тогда
Таблица = ВыбранныеОрганизацииПоСкладам.Скопировать(МассивСтрок);
Таблица.Сортировать("Приоритет");
Объект.ВыбранныеОрганизации.Очистить();
Для Каждого СтрокаТаблицы Из Таблица Цикл
НоваяСтрока = Объект.ВыбранныеОрганизации.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТаблицы);
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПолучитьКоличествоТоваровКОформлениюСервер(Знач БезОтбораНоменклатуры)
Возврат Обработки.ПомощникОформленияСкладскихАктов.ТоварыКОформлениюСкладскихАктов(Объект.Склад,
?(БезОтбораНоменклатуры, Неопределено, ОтборНоменклатуры), ИнвентаризационныйПериод.ДатаНачала, ИнвентаризационныйПериод.ДатаОкончания).Количество();
КонецФункции
&НаСервере
Процедура УстановитьУсловноеОформление()
УсловноеОформление.Элементы.Очистить();
#Область УсловноеОформлениеХарактеристики
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыКСписаниюХарактеристикаСписываемая.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.ХарактеристикаСписываемая");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка();
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветТекстаОтмененнойСтрокиДокумента);
Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<характеристики не используются>'"));
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыКОприходованиюХарактеристикаПриходуемая.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.ХарактеристикаПриходуемая");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка();
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветТекстаОтмененнойСтрокиДокумента);
Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<характеристики не используются>'"));
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыКПересортицеКПорчеХарактеристикаСписываемая.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.ХарактеристикаСписываемая");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка();
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветТекстаОтмененнойСтрокиДокумента);
Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<характеристики не используются>'"));
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыКПересортицеКПорчеХарактеристикаПриходуемая.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.ХарактеристикаПриходуемая");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка();
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветТекстаОтмененнойСтрокиДокумента);
Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<характеристики не используются>'"));
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
#КонецОбласти
#Область УсловноеОформлениеСерии
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыКСписаниюСерияСписываемая.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.СерияСписываемая");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Справочники.СерииНоменклатуры.ПустаяСсылка();
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветТекстаОтмененнойСтрокиДокумента);
Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<серия не указывается>'"));
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыКОприходованиюСерияПриходуемая.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.СерияПриходуемая");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Справочники.СерииНоменклатуры.ПустаяСсылка();
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветТекстаОтмененнойСтрокиДокумента);
Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<серия не указывается>'"));
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыКПересортицеКПорчеСерияСписываемая.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.СерияСписываемая");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Справочники.СерииНоменклатуры.ПустаяСсылка();
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветТекстаОтмененнойСтрокиДокумента);
Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<серия не указывается>'"));
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыКПересортицеКПорчеСерияПриходуемая.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.СерияПриходуемая");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Справочники.СерииНоменклатуры.ПустаяСсылка();
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветТекстаОтмененнойСтрокиДокумента);
Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<серия не указывается>'"));
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
#КонецОбласти
Обработки.ПомощникОформленияСкладскихАктов.УстановитьУсловноеОформлениеОперацияТекст(ЭтаФорма,
"ТоварыКПересортицеКПорчеОперацияТекст");
Обработки.ПомощникОформленияСкладскихАктов.УстановитьУсловноеОформлениеОперацияТекст(ЭтаФорма,
"ТоварыНеРаспределенныеОперацияТекст");
Обработки.ПомощникОформленияСкладскихАктов.УстановитьУсловноеОформлениеОперацияТекст(ЭтаФорма,
"ТоварыРаспределенныеОперацияТекст",
"Объект.ТоварыРаспределенные.ОперацияТекст");
КонецПроцедуры
&НаСервере
Процедура УстановитьДоступностиВидЦеныСервер(Знач ИсточникИнформацииОЦенахДляПечати)
Если ИсточникИнформацииОЦенахДляПечати = Перечисления.ИсточникиИнформацииОЦенахДляПечати.ПоВидуЦен Тогда
Элементы.ВидЦены.Доступность = Истина;
ИначеЕсли ИсточникИнформацииОЦенахДляПечати = Перечисления.ИсточникиИнформацииОЦенахДляПечати.ПоСебестоимости Тогда
Элементы.ВидЦены.Доступность = Ложь;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УстановитьЗначениеВидЦеныСервер(Знач ИсточникИнформацииОЦенахДляПечати)
Если ИсточникИнформацииОЦенахДляПечати = Перечисления.ИсточникиИнформацииОЦенахДляПечати.ПоВидуЦен Тогда
Объект.ВидЦены = Справочники.Склады.УчетныйВидЦены(Объект.Склад);
ИначеЕсли ИсточникИнформацииОЦенахДляПечати = Перечисления.ИсточникиИнформацииОЦенахДляПечати.ПоСебестоимости Тогда
Объект.ВидЦены = Неопределено;
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПоместитьНастройкиОтборНоменклатурыВоВременноеХранилищеСервер(Знач ОтборНоменклатуры)
ОтборНоменклатурыНастройка = ОтборНоменклатуры.ПолучитьНастройки();
Возврат ПоместитьВоВременноеХранилище(ОтборНоменклатурыНастройка);
КонецФункции
&НаСервере
Функция ПодготовитьТаблицуТоваровДляОтчетаСервер()
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ТаблицаТоваров", Объект.Товары.Выгрузить());
ТипыОпераций = ОтобратьПоТипуОперации.ВыгрузитьЗначения();
Запрос.УстановитьПараметр("ТипыОпераций", ТипыОпераций);
Запрос.УстановитьПараметр("ТипыОперацийВыбраны", ЗначениеЗаполнено(ТипыОпераций));
Запрос.Текст =
"ВЫБРАТЬ
| ТаблицаТоваров.НоменклатураСписываемая,
| ТаблицаТоваров.ХарактеристикаСписываемая,
| ТаблицаТоваров.НазначениеСписываемое,
| ТаблицаТоваров.СерияСписываемая,
| ТаблицаТоваров.НоменклатураПриходуемая,
| ТаблицаТоваров.ХарактеристикаПриходуемая,
| ТаблицаТоваров.НазначениеПриходуемое,
| ТаблицаТоваров.СерияПриходуемая,
| ТаблицаТоваров.КоличествоНеРаспределено
|ПОМЕСТИТЬ ТаблицаТоваров
|ИЗ
| &ТаблицаТоваров КАК ТаблицаТоваров
|ГДЕ
| ТаблицаТоваров.КоличествоНеРаспределено <> 0
| И (НЕ &ТипыОперацийВыбраны
| ИЛИ ТаблицаТоваров.ОперацияТекст В (&ТипыОпераций))
|;
|
|
|ВЫБРАТЬ
| ТаблицаТоваров.НоменклатураСписываемая КАК Номенклатура,
| ТаблицаТоваров.ХарактеристикаСписываемая КАК Характеристика,
| ТаблицаТоваров.НазначениеСписываемое КАК Назначение,
| ТаблицаТоваров.СерияСписываемая КАК Серия,
| ТаблицаТоваров.КоличествоНеРаспределено КАК Количество,
| 0 КАК КоличествоКОприходованию,
| ТаблицаТоваров.КоличествоНеРаспределено КАК КоличествоКСписанию
|ИЗ
| ТаблицаТоваров КАК ТаблицаТоваров
|ГДЕ
| ТаблицаТоваров.НоменклатураСписываемая <> ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ТаблицаТоваров.НоменклатураПриходуемая,
| ТаблицаТоваров.ХарактеристикаПриходуемая,
| ТаблицаТоваров.НазначениеПриходуемое,
| ТаблицаТоваров.СерияПриходуемая,
| ТаблицаТоваров.КоличествоНеРаспределено,
| ТаблицаТоваров.КоличествоНеРаспределено,
| 0
|ИЗ
| ТаблицаТоваров КАК ТаблицаТоваров
|ГДЕ
| ТаблицаТоваров.НоменклатураПриходуемая <> ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)";
Таблица = Запрос.Выполнить().Выгрузить();
Возврат ЗначениеВСтрокуВнутр(Таблица);
КонецФункции
&НаСервере
Функция ЗачестьПоПересортицеАвтоСервер()
Результат = 0;
ТаблицаВариантов = ПолучитьВариантыЗачетаПоПересортицеСервер();
ЗачестьТоварыПоОперации(ТаблицаВариантов, "Пересортица", Результат);
Если Результат > 0 Тогда
СформироватьСписокСовпадающейНоменклатурыСервер();
КонецЕсли;
СортироватьТаблицуПоОперацииНоменклатуреХарактеристике(Объект.Товары);
Возврат Результат;
КонецФункции
&НаСервере
Функция ЗачестьПоПорчеАвтоСервер()
Результат = 0;
ТаблицаВариантов = ПолучитьВариантыЗачетаПоПорчеСервер();
ЗачестьТоварыПоОперации(ТаблицаВариантов, "Порча", Результат);
СортироватьТаблицуПоОперацииНоменклатуреХарактеристике(Объект.Товары);
Возврат Результат;
КонецФункции
&НаСервере
Процедура ЗачестьТоварыПоОперации(ТаблицаВариантов, Операция, Результат)
ТаблицаТоваров = ТаблицаВариантов.Скопировать(, "НоменклатураСписываемая, ХарактеристикаСписываемая, НазначениеСписываемое, СерияСписываемая");
ТаблицаТоваров.Свернуть("НоменклатураСписываемая, ХарактеристикаСписываемая, НазначениеСписываемое, СерияСписываемая");
Для Каждого Товар Из ТаблицаТоваров Цикл
Отбор = Новый Структура;
Отбор.Вставить("НоменклатураСписываемая", Товар.НоменклатураСписываемая);
Отбор.Вставить("ХарактеристикаСписываемая", Товар.ХарактеристикаСписываемая);
Отбор.Вставить("НазначениеСписываемое", Товар.НазначениеСписываемое);
Отбор.Вставить("СерияСписываемая", Товар.СерияСписываемая);
МассивСтрокВариантов = ТаблицаВариантов.НайтиСтроки(Отбор);
Отбор.Вставить("ОперацияТекст", "Списание");
МассивСтрокТоварыСписываемые = Объект.Товары.НайтиСтроки(Отбор);
Если МассивСтрокТоварыСписываемые.Количество() = 0 Тогда
Продолжить;
КонецЕсли;
СтрокаТоварыСписываемые = МассивСтрокТоварыСписываемые[0];
Для Каждого Вариант Из МассивСтрокВариантов Цикл
Отбор = Новый Структура;
Отбор.Вставить("ОперацияТекст", "Оприходование");
Отбор.Вставить("НоменклатураПриходуемая", Вариант.НоменклатураПриходуемая);
Отбор.Вставить("ХарактеристикаПриходуемая", Вариант.ХарактеристикаПриходуемая);
Отбор.Вставить("НазначениеПриходуемое", Вариант.НазначениеПриходуемое);
Отбор.Вставить("СерияПриходуемая", Вариант.СерияПриходуемая);
МассивСтрокТоварыПриходуемые = Объект.Товары.НайтиСтроки(Отбор);
Если МассивСтрокТоварыПриходуемые.Количество() = 0 Тогда
Продолжить;
КонецЕсли;
СтрокаТоварыПриходуемые = МассивСтрокТоварыПриходуемые[0];
Количество = Мин(СтрокаТоварыСписываемые.КоличествоНеРаспределено, СтрокаТоварыПриходуемые.КоличествоНеРаспределено);
СоздатьНовуюСтрокуПоЗачетуСервер(СтрокаТоварыСписываемые, СтрокаТоварыПриходуемые, Операция, Количество);
Результат = Результат + 1;
Если СтрокаТоварыПриходуемые.Количество = 0 Тогда
Объект.Товары.Удалить(СтрокаТоварыПриходуемые);
КонецЕсли;
Если СтрокаТоварыСписываемые.Количество = 0 Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Если СтрокаТоварыСписываемые.Количество = 0 Тогда
Объект.Товары.Удалить(СтрокаТоварыСписываемые);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура РаспределитьНаОрганизациюЗавершениеСервер(Знач Результат,Знач ИдентификаторыВыделенныхСтрок)
Организация = Результат;
Для Каждого ИдентификаторВыделеннойСтроки Из ИдентификаторыВыделенныхСтрок Цикл
Строка = Объект.Товары.НайтиПоИдентификатору(ИдентификаторВыделеннойСтроки);
ОперациюРаспределитьНаОрганизациюСервер(Строка, Организация);
КонецЦикла;
ТоварыНеРаспределенныеОбновитьФильтр();
СортироватьТаблицуРаспределенныхТоваров(Объект.ТоварыРаспределенные);
КонецПроцедуры
&НаСервере
Функция РаспределитьПоОрганизациямЗавершениеСервер(Знач Результат, Знач ДополнительныеПараметры)
СозданоСтрок = 0;
Если Объект.Товары.Количество() = 0
Или Объект.Товары.Итог("КоличествоНеРаспределено") = 0 Тогда
Возврат СозданоСтрок;
КонецЕсли;
Объект.ВыбранныеОрганизации.Очистить();
Для Каждого Организация Из Результат Цикл
Строка = Объект.ВыбранныеОрганизации.Добавить();
Строка.Организация = Организация;
КонецЦикла;
ТаблицаРаспределений = ДанныеКРаспределению();
Для Каждого СтрокаРаспределение Из ТаблицаРаспределений Цикл
Отбор = Новый Структура("ОперацияТекст, НоменклатураСписываемая, НоменклатураПриходуемая, ХарактеристикаСписываемая,
|ХарактеристикаПриходуемая, НазначениеСписываемое, НазначениеПриходуемое, СерияСписываемая, СерияПриходуемая");
ЗаполнитьЗначенияСвойств(Отбор, СтрокаРаспределение);
МассивСтрок = Объект.Товары.НайтиСтроки(Отбор);
ОперациюРаспределитьНаОрганизациюСервер(МассивСтрок[0], СтрокаРаспределение.Организация, СтрокаРаспределение);
СозданоСтрок = СозданоСтрок + 1;
КонецЦикла;
ТоварыНеРаспределенныеОбновитьФильтр();
СортироватьТаблицуРаспределенныхТоваров(Объект.ТоварыРаспределенные);
Возврат СозданоСтрок;
КонецФункции
&НаСервере
Процедура ЗачестьПоПересортицеПоПорчеЗавершениеСервер(Знач Параметры, Знач ВведенноеЧисло)
СтрокаТоварыСписываемые = Объект.Товары.НайтиПоИдентификатору(Параметры.ТекущиеДанныеСписания);
СтрокаТоварыПриходуемые = Объект.Товары.НайтиПоИдентификатору(Параметры.ТекущиеДанныеОприходования);
ЭтоПорча =
РегистрыСведений.ТоварыДругогоКачества.ПроверитьНаличиеГрадации(
СтрокаТоварыСписываемые.НоменклатураСписываемая,
СтрокаТоварыПриходуемые.НоменклатураПриходуемая)
И Строка(СтрокаТоварыСписываемые.ХарактеристикаСписываемая) = Строка(СтрокаТоварыПриходуемые.ХарактеристикаПриходуемая)
И Строка(СтрокаТоварыСписываемые.СерияСписываемая) = Строка(СтрокаТоварыПриходуемые.СерияПриходуемая);
ОперацияТекст = ?(ЭтоПорча, "Порча", "Пересортица");
СоздатьНовуюСтрокуПоЗачетуСервер(СтрокаТоварыСписываемые, СтрокаТоварыПриходуемые, ОперацияТекст, ВведенноеЧисло);
ОтборСписания = Новый Структура("ОперацияСписание", Истина);
ОтборПриходования = Новый Структура("ОперацияОприходование", Истина);
СписываемыеТовары = Объект.Товары.НайтиСтроки(ОтборСписания);
ПриходуемыеТовары = Объект.Товары.НайтиСтроки(ОтборПриходования);
ИндексСписываемогоТовара = СписываемыеТовары.Найти(СтрокаТоварыСписываемые);
ИндексПриходуемогоТовара = ПриходуемыеТовары.Найти(СтрокаТоварыПриходуемые);
Если СтрокаТоварыПриходуемые.Количество = 0 Тогда
Объект.Товары.Удалить(СтрокаТоварыПриходуемые);
Если (ПриходуемыеТовары.Количество() - 1) > ИндексПриходуемогоТовара Тогда
ТекущаяСтрокаПриходования = ПриходуемыеТовары.Получить(ИндексПриходуемогоТовара + 1);
ИдентификаторСтрокиПриходования = ТекущаяСтрокаПриходования.ПолучитьИдентификатор();
ИначеЕсли (ПриходуемыеТовары.Количество() - 1) > 0 Тогда
ТекущаяСтрокаПриходования = ПриходуемыеТовары.Получить(ИндексПриходуемогоТовара - 1);
ИдентификаторСтрокиПриходования = ТекущаяСтрокаПриходования.ПолучитьИдентификатор();
КонецЕсли;
Элементы.ТоварыКОприходованию.ТекущаяСтрока = ИдентификаторСтрокиПриходования;
КонецЕсли;
Если СтрокаТоварыСписываемые.Количество = 0 Тогда
Объект.Товары.Удалить(СтрокаТоварыСписываемые);
Если (СписываемыеТовары.Количество() - 1) > ИндексСписываемогоТовара Тогда
ТекущаяСтрокаСписания = СписываемыеТовары.Получить(ИндексСписываемогоТовара + 1);
ИдентификаторСтрокиСписания = ТекущаяСтрокаСписания.ПолучитьИдентификатор();
ИначеЕсли (СписываемыеТовары.Количество() - 1) > 0 Тогда
ТекущаяСтрокаСписания = СписываемыеТовары.Получить(ИндексСписываемогоТовара - 1);
ИдентификаторСтрокиСписания = ТекущаяСтрокаСписания.ПолучитьИдентификатор();
КонецЕсли;
Элементы.ТоварыКСписанию.ТекущаяСтрока = ИдентификаторСтрокиСписания;
КонецЕсли;
СформироватьСписокСовпадающейНоменклатурыСервер();
СортироватьТаблицуПоОперацииНоменклатуреХарактеристике(Объект.Товары);
КонецПроцедуры
&НаСервере
Процедура ПереходНаШагЗачет()
ПодготовитьДляРаботыТаблицыТоваровСервер();
Если Объект.Товары.НайтиСтроки(Новый Структура("ОперацияСписание", Истина)) = 0
Или Объект.Товары.НайтиСтроки(Новый Структура("ОперацияСписание", Истина)) = 0 Тогда
ПереходНаШагРаспределениеПоОрганизациям()
Иначе
Элементы.ОсновнаяПанель.ТекущаяСтраница = Элементы.СтраницаПересортицаПорча;
УстановитьОтображениеЗаголовкаИЭлементовУправления();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПереходНаШагРаспределениеПоОрганизациям()
Если ЗначениеЗаполнено(ЕдинственнаяОрганизация) Тогда
МассивСтрок = Новый Массив;
Для Каждого Строка Из Объект.Товары Цикл
МассивСтрок.Добавить(Строка.ПолучитьИдентификатор());
КонецЦикла;
РаспределитьНаОрганизациюЗавершениеСервер(ЕдинственнаяОрганизация, МассивСтрок);
ПереходНаШагОформлениеАктов();
Иначе
Элементы.ОсновнаяПанель.ТекущаяСтраница = Элементы.СтраницаРаспределениеПоОрганизациям;
УстановитьОтображениеЗаголовкаИЭлементовУправления();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПереходНаШагОформлениеАктов()
ОформитьСкладскиеАктыСервер();
Элементы.ОсновнаяПанель.ТекущаяСтраница = Элементы.СтраницаОформлениеДокументов;
УстановитьОтображениеЗаголовкаИЭлементовУправления();
КонецПроцедуры
&НаСервере
Процедура ТоварыКПересортицеКПорчеПередУдалениемСервер(Знач ИдентификаторыВыделенныхСтрок)
Для Каждого ИдентификаторСтроки Из ИдентификаторыВыделенныхСтрок Цикл
СтрокаПорчиПересортицы = Объект.Товары.НайтиПоИдентификатору(ИдентификаторСтроки);
Отбор = Новый Структура;
Отбор.Вставить("ОперацияТекст", "Списание");
Отбор.Вставить("ОперацияСписание", Истина);
Отбор.Вставить("НоменклатураСписываемая", СтрокаПорчиПересортицы.НоменклатураСписываемая);
Отбор.Вставить("ХарактеристикаСписываемая", СтрокаПорчиПересортицы.ХарактеристикаСписываемая);
Отбор.Вставить("НазначениеСписываемое", СтрокаПорчиПересортицы.НазначениеСписываемое);
Отбор.Вставить("СерияСписываемая", СтрокаПорчиПересортицы.СерияСписываемая);
Отбор.Вставить("ЦенаСписания", СтрокаПорчиПересортицы.ЦенаСписания);
Отбор.Вставить("СтавкаНДС", СтрокаПорчиПересортицы.СтавкаНДС);
МассивСтрок = Объект.Товары.НайтиСтроки(Отбор);
Если МассивСтрок.Количество() = 0 Тогда
Строка = Объект.Товары.Добавить();
ЗаполнитьЗначенияСвойств(Строка, Отбор);
Иначе
Строка = МассивСтрок[0];
КонецЕсли;
Строка.Количество = Строка.Количество + СтрокаПорчиПересортицы.Количество;
Строка.КоличествоНеРаспределено = Строка.КоличествоНеРаспределено + СтрокаПорчиПересортицы.Количество;
Строка.НеРаспределено = Не Строка.КоличествоНеРаспределено = 0;
Строка.Распределено = Не Строка.КоличествоРаспределено = 0;
Строка.ПризнакДляОтбора = Не ОтобратьПоТипуОперации.НайтиПоЗначению(Строка.ОперацияТекст) = Неопределено;
Отбор = Новый Структура;
Отбор.Вставить("ОперацияТекст", "Оприходование");
Отбор.Вставить("ОперацияОприходование", Истина);
Отбор.Вставить("НоменклатураПриходуемая", СтрокаПорчиПересортицы.НоменклатураПриходуемая);
Отбор.Вставить("ХарактеристикаПриходуемая", СтрокаПорчиПересортицы.ХарактеристикаПриходуемая);
Отбор.Вставить("НазначениеПриходуемое", СтрокаПорчиПересортицы.НазначениеПриходуемое);
Отбор.Вставить("СерияПриходуемая", СтрокаПорчиПересортицы.СерияПриходуемая);
Отбор.Вставить("ЦенаОприходования", СтрокаПорчиПересортицы.ЦенаОприходования);
Отбор.Вставить("СтавкаНДС", СтрокаПорчиПересортицы.СтавкаНДС);
МассивСтрок = Объект.Товары.НайтиСтроки(Отбор);
Если МассивСтрок.Количество() = 0 Тогда
Строка = Объект.Товары.Добавить();
ЗаполнитьЗначенияСвойств(Строка, Отбор);
Иначе
Строка = МассивСтрок[0];
КонецЕсли;
Строка.Количество = Строка.Количество + СтрокаПорчиПересортицы.Количество;
Строка.КоличествоНеРаспределено = Строка.КоличествоНеРаспределено + СтрокаПорчиПересортицы.Количество;
Строка.НеРаспределено = Не Строка.КоличествоНеРаспределено = 0;
Строка.Распределено = Не Строка.КоличествоРаспределено = 0;
Строка.ПризнакДляОтбора = Не ОтобратьПоТипуОперации.НайтиПоЗначению(Строка.ОперацияТекст) = Неопределено;
МассивСтрок = Объект.ТоварыРаспределенные.НайтиСтроки(
Новый Структура("КлючСвязи", СтрокаПорчиПересортицы.ПолучитьИдентификатор()));
Для Каждого Строка Из МассивСтрок Цикл
Объект.ТоварыРаспределенные.Удалить(Строка);
КонецЦикла;
Объект.Товары.Удалить(СтрокаПорчиПересортицы);
КонецЦикла;
СформироватьСписокСовпадающейНоменклатурыСервер();
СортироватьТаблицуПоОперацииНоменклатуреХарактеристике(Объект.Товары);
КонецПроцедуры
&НаСервере
Процедура ОпределитьДатуОформленияСкладскихАктов()
ТекущаяДата = ТекущаяДатаСеанса();
Если (ТекущаяДата < ИнвентаризационныйПериод.ДатаНачала
Или ТекущаяДата > ИнвентаризационныйПериод.ДатаОкончания) Тогда
ДатаОформленияСкладскихАктов = ИнвентаризационныйПериод.ДатаОкончания;
Иначе
ДатаОформленияСкладскихАктов = ТекущаяДата;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПерейтиКНовымОтборамСервер()
СкладПриИзмененииСервер();
Элементы.ОсновнаяПанель.ТекущаяСтраница = Элементы.СтраницаНастройки;
УстановитьОтображениеЗаголовкаИЭлементовУправления();
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура СортироватьТаблицуПоОперацииНоменклатуреХарактеристике(Таблица)
Таблица.Сортировать("ОперацияТекст Возр, НоменклатураСписываемая Возр, ХарактеристикаСписываемая Возр, НоменклатураПриходуемая Возр, ХарактеристикаПриходуемая Возр");
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура СортироватьТаблицуРаспределенныхТоваров(Таблица)
Таблица.Сортировать("ОперацияТекст, Организация, НоменклатураСписываемая, ХарактеристикаСписываемая,
|НоменклатураПриходуемая, ХарактеристикаПриходуемая");
КонецПроцедуры
&НаСервере
Функция СтруктураДанныхЗаполнения(Организация, ДатаДокумента)
ДанныеЗаполнения = Новый Структура;
ДанныеЗаполнения.Вставить("Дата", ДатаДокумента);
ДанныеЗаполнения.Вставить("Организация", Организация);
ДанныеЗаполнения.Вставить("Склад", Объект.Склад);
ДанныеЗаполнения.Вставить("ИсточникИнформацииОЦенахДляПечати", Объект.ИсточникИнформацииОЦенахДляПечати);
ДанныеЗаполнения.Вставить("ВидЦены", Объект.ВидЦены);
ДанныеЗаполнения.Вставить("Ответственный", Пользователи.ТекущийПользователь());
ДанныеЗаполнения.Вставить("НеЗаполнятьТаблинуюЧастьТовары");
Возврат ДанныеЗаполнения;
КонецФункции
&НаКлиенте
Процедура СобытиеВыборТЧСписываемыхПриходуемыхТоваров(Поле, Элемент)
Если СтрНайти(ВРег(Поле.Имя), "ПРИХОД") > 0 Тогда
ПоказатьЗначение(,Элемент.ТекущиеДанные.НоменклатураПриходуемая);
ИначеЕсли СтрНайти(ВРег(Поле.Имя), "СПИС") > 0 Тогда
ПоказатьЗначение(,Элемент.ТекущиеДанные.НоменклатураСписываемая);
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Функция СсылкаНаДокументПоКлючуЗаписи(КлючЗаписи)
Возврат КлючЗаписи.Ссылка;
КонецФункции
&НаСервере
Процедура УстановитьЗаголовокДекорацииОтбораНоменклатуры()
Перем МассивСтрок, ПредставлениеОтбора;
МассивСтрок = Новый Массив;
МассивСтрок.Добавить(НСтр("ru='Отбор номенклатуры:'") + " ");
ПредставлениеОтбора = Строка(ОтборНоменклатуры.Настройки.Отбор);
Если ЗначениеЗаполнено(ПредставлениеОтбора) Тогда
МассивСтрок.Добавить(ПредставлениеОтбора + ". ");
Иначе
МассивСтрок.Добавить(НСтр("ru='<не установлен>.'") + " ");
КонецЕсли;
МассивСтрок.Добавить(Новый ФорматированнаяСтрока(НСтр("ru='Установить отбор'"),,,,"Фильтр"));
Элементы.ДекорацияОтборНоменклатуры.Заголовок = Новый ФорматированнаяСтрока(МассивСтрок);
КонецПроцедуры
&НаСервере
Процедура НастроитьФормуЛокализация()
Элементы.ДекорацияИнвентаризационныйПериод.Заголовок = НСтр("ru = 'Этот период будет подставлен в документ ""Инвентаризационная опись"", из которого осуществляется печать форм ИНВ-3 и ИНВ-19. Список товаров при печати будет взят из пересчетов товаров, оформленных за этот период, а данные о количестве будут рассчитаны по остаткам организаций на конец периода и данным складских актов.'");
Возврат;
КонецПроцедуры
#КонецОбласти