#Область ОписаниеПеременных
&НаКлиенте
Перем КэшированныеЗначения;
&НаКлиенте
Перем ТекущиеДанныеИдентификатор;
&НаКлиенте
Перем ПроверкаКонтрагентовПараметрыОбработчикаОжидания Экспорт;
&НаКлиенте
Перем ФормаДлительнойОперации Экспорт;
#КонецОбласти
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Не ЗначениеЗаполнено(Объект.Ссылка)
И ПолучитьФункциональнуюОпцию("ОтображатьПроизводствоНаСтороне2_4") Тогда
ОбщегоНазначения.СообщитьПользователю(
НСтр("ru = 'Документы производства на стороне версии 2.4 доступны только для просмотра. Создание новых документов запрещено.'"),,,,
Отказ);
Возврат;
КонецЕсли;
УстановитьУсловноеОформление();
Если Параметры.Свойство("АвтоТест") Тогда
Возврат;
КонецЕсли;
ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Объект, ЭтотОбъект);
ИсправлениеДокументов.ПриСозданииНаСервере(ЭтаФорма, Элементы.СтрокаИсправление);
ВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтотОбъект);
Справочники.Назначения.ФормаДокументаПриСозданииНаСервере(ЭтаФорма);
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("Объект", Объект);
ДополнительныеПараметры.Вставить("ИмяЭлементаДляРазмещения", "ГруппаДополнительныеРеквизиты");
ДополнительныеПараметры.Вставить("ОтложеннаяИнициализация", Истина);
УправлениеСвойствами.ПриСозданииНаСервере(ЭтаФорма, ДополнительныеПараметры);
ИспользоватьПартнеровКакКонтрагентов = ПолучитьФункциональнуюОпцию("ИспользоватьПартнеровКакКонтрагентов");
УстановитьПривилегированныйРежим(Истина);
ОбосабливатьПоНазначениюПродукции = ЗначениеЗаполнено(Объект.ЗаказПереработчику)
И ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.ЗаказПереработчику, "ОбосабливатьПоНазначениюПродукции");
УстановитьПривилегированныйРежим(Ложь);
Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда
ПриЧтенииСозданииНаСервере();
КонецЕсли;
Если НЕ ПолучитьФункциональнуюОпцию("УправлениеПредприятием")
ИЛИ (НЕ ПолучитьФункциональнуюОпцию("ИспользоватьУправлениеПроизводством")
И НЕ Объект.ГруппировкаЗатрат = Перечисления.ГруппировкиЗатратВЗаказеПереработчику.ПоЗаказамНаПроизводство) Тогда
ЭлементСписка = Элементы.ГруппировкаЗатрат.СписокВыбора.НайтиПоЗначению(Перечисления.ГруппировкиЗатратВЗаказеПереработчику.ПоЗаказамНаПроизводство);
Если ЭлементСписка <> Неопределено Тогда
Элементы.ГруппировкаЗатрат.СписокВыбора.Удалить(ЭлементСписка);
КонецЕсли;
КонецЕсли;
Если НЕ ПолучитьФункциональнуюОпцию("УправлениеПредприятием")
ИЛИ (НЕ ПолучитьФункциональнуюОпцию("ИспользоватьУправлениеПроизводством2_2")
И НЕ Объект.ГруппировкаЗатрат = Перечисления.ГруппировкиЗатратВЗаказеПереработчику.ПоЭтапамПроизводства) Тогда
ЭлементСписка = Элементы.ГруппировкаЗатрат.СписокВыбора.НайтиПоЗначению(Перечисления.ГруппировкиЗатратВЗаказеПереработчику.ПоЭтапамПроизводства);
Если ЭлементСписка <> Неопределено Тогда
Элементы.ГруппировкаЗатрат.СписокВыбора.Удалить(ЭлементСписка);
КонецЕсли;
КонецЕсли;
Если КлиентскоеПриложение.ТекущийВариантИнтерфейса() = ВариантИнтерфейсаКлиентскогоПриложения.Версия8_2 Тогда
Элементы.ГруппаИтогоПродукция.ЦветФона = Новый Цвет();
КонецЕсли;
Если Не ЗначениеЗаполнено(Объект.ЗаказПереработчику) Тогда
Элементы.УслугиПоПереработке.СписокВыбора.Очистить();
УслугиУказываютсяВЗаказеОтчете = Перечисления.ВариантыОформленияУслугДокументовПереработки.УказываютсяВЗаказеОтчете;
ПредставлениеУслугиУказываютсяВЗаказеОтчете = НСтр("ru = 'Указываются в отчете'");
Элементы.УслугиПоПереработке.СписокВыбора.Добавить(УслугиУказываютсяВЗаказеОтчете, ПредставлениеУслугиУказываютсяВЗаказеОтчете);
УслугиОформляютсяОтдельно = Перечисления.ВариантыОформленияУслугДокументовПереработки.ОформляютсяОтдельно;
Элементы.УслугиПоПереработке.СписокВыбора.Добавить(УслугиОформляютсяОтдельно);
КонецЕсли;
УстановитьДоступностьКомандБуфераОбмена(ЭтаФорма, РаботаСТабличнымиЧастями.ЕстьСтрокиВБуфереОбмена());
Элементы.ВозвратныеОтходыВидЦены.БыстрыйВыбор = Не ПолучитьФункциональнуюОпцию("ИспользоватьНесколькоВидовЦен");
ПараметрыВыбораСтатейИАналитик = Документы.ОтчетПереработчика.ПараметрыВыбораСтатейИАналитик();
ДоходыИРасходыСервер.ПриСозданииНаСервере(ЭтотОбъект, ПараметрыВыбораСтатейИАналитик);
ПараметрыНастройки = Документы.ОтчетПереработчика.ПараметрыНастройкиСчетовУчета();
НастройкаСчетовУчетаСервер.ПриСозданииНаСервере(ЭтаФорма, ПараметрыНастройки);
ВзаиморасчетыСервер.ФормаПриСозданииНаСервере(ЭтаФорма);
ПроверкаКонтрагентов.ПриСозданииНаСервереДокумент(ЭтотОбъект, Параметры);
ПроверкаКонтрагентовВызовСервераПереопределяемыйУТ.ФормаДокументаПриСозданииНаСервере(ЭтотОбъект);
ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
ИнтеграцияС1СДокументооборотБазоваяФункциональность.ПриСозданииНаСервере(ЭтотОбъект);
СобытияФорм.ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка);
ПараметрыГиперссылки = РаботаСФайлами.ГиперссылкаФайлов();
ПараметрыГиперссылки.Размещение = "КоманднаяПанель";
РаботаСФайлами.ПриСозданииНаСервере(ЭтотОбъект, ПараметрыГиперссылки);
УчетОригиналовПервичныхДокументов.ПриСозданииНаСервере_ФормаДокумента(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаНавигационнойСсылки(НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
СобытияФормКлиент.ОбработкаНавигационнойСсылки(ЭтотОбъект, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка);
КонецПроцедуры
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
УправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
ДатыЗапретаИзменения.ОбъектПриЧтенииНаСервере(ЭтаФорма, ТекущийОбъект);
ИсправлениеДокументов.ПриЧтенииНаСервере(ЭтаФорма, Элементы.СтрокаИсправление);
ПриЧтенииСозданииНаСервере();
УправлениеСвойствами.ПриЧтенииНаСервере(ЭтаФорма, ТекущийОбъект);
СобытияФорм.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
ПараметрыВыбораСтатейИАналитик = Документы.ОтчетПереработчика.ПараметрыВыбораСтатейИАналитик();
ДоходыИРасходыСервер.ПриЧтенииНаСервере(ЭтотОбъект, ПараметрыВыбораСтатейИАналитик);
ПараметрыНастройки = Документы.ОтчетПереработчика.ПараметрыНастройкиСчетовУчета();
НастройкаСчетовУчетаСервер.ПриЧтенииНаСервере(ЭтаФорма, ПараметрыНастройки);
ВзаиморасчетыСервер.ФормаПриЧтенииНаСервере(ЭтаФорма);
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецПроцедуры
&НаСервере
Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
ПроверитьЗаполнениеГруппыЗатрат(Отказ);
УправлениеСвойствами.ОбработкаПроверкиЗаполнения(ЭтаФорма, Отказ, ПроверяемыеРеквизиты);
КонецПроцедуры
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
НастройкаСчетовУчетаСервер.ПередЗаписьюНаСервере(ЭтаФорма, ТекущийОбъект);
УправлениеСвойствами.ПередЗаписьюНаСервере(ЭтаФорма, ТекущийОбъект);
ПроверкаКонтрагентов.ПередЗаписьюНаСервереДокумент(ЭтотОбъект, ТекущийОбъект);
ВзаиморасчетыСервер.ПередЗаписьюНаСервере(ЭтаФорма, ТекущийОбъект);
МодификацияКонфигурацииПереопределяемый.ПередЗаписьюНаСервере(ЭтаФорма, Отказ, ТекущийОбъект, ПараметрыЗаписи);
ИнтеграцияС1СДокументооборотБазоваяФункциональность.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
КонецПроцедуры
&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
УправлениеДоступом.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
УстановитьДоступностьЭлементовПоСтатусуСервер();
ЗаполнитьСлужебныеРеквизиты();
ЗаполнитьНормативыМатериаловНаСервере();
ДоходыИРасходыСервер.ПослеЗаписиНаСервере(ЭтотОбъект);
НастройкаСчетовУчетаСервер.ПослеЗаписиНаСервере(ЭтаФорма);
ВзаиморасчетыСервер.ФормаПослеЗаписиНаСервере(ЭтаФорма, ТекущийОбъект.ДополнительныеСвойства);
ПроверкаКонтрагентов.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект);
ОбеспечениеВДокументахСервер.ПроверитьЗапуститьФоновоеЗаданиеРаспределенияЗапасов();
МодификацияКонфигурацииПереопределяемый.ПослеЗаписиНаСервере(ЭтаФорма, ТекущийОбъект, ПараметрыЗаписи);
СобытияФорм.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если УправлениеСвойствамиКлиент.ОбрабатыватьОповещения(ЭтаФорма, ИмяСобытия, Параметр) Тогда
ОбновитьЭлементыДополнительныхРеквизитов();
УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);
КонецЕсли;
Если ВзаиморасчетыКлиент.НуженВызовОбработкиОповещения(ЭтаФорма, ИмяСобытия, Параметр) Тогда
ИзмененаОплатаСервер(ИмяСобытия, Параметр);
КонецЕсли;
Если ИмяСобытия = "ИзмененРеквизитЗависящийОтСтатуса"
И Параметр.УникальныйИдентификатор = УникальныйИдентификатор Тогда
Если Объект.Согласован Тогда
Объект.Согласован = Ложь;
КонецЕсли;
ПодключитьОбработчикОжидания("Подключаемый_ПриИзмененииРеквизитаЗависящегоОтСтатуса", 0.1, Истина);
КонецЕсли;
Если ИмяСобытия = "КопированиеСтрокВБуферОбмена" Тогда
УстановитьДоступностьКомандБуфераОбмена(ЭтаФорма, Истина);
КонецЕсли;
ПроверкаКонтрагентовКлиент.ОбработкаОповещения(ЭтотОбъект, ИмяСобытия, Параметр, Источник);
ИсправлениеДокументовКлиент.ОбработкаОповещения(ЭтаФорма, ИмяСобытия, Параметр, Источник);
СобытияФормКлиент.ОбработкаОповещения(ЭтотОбъект, ИмяСобытия, Параметр, Источник);
РаботаСФайламиКлиент.ОбработкаОповещения(ЭтотОбъект, ИмяСобытия);
УчетОригиналовПервичныхДокументовКлиент.ОбработчикОповещенияФормаДокумента(ИмяСобытия,ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
ПараметрыЗаписи.Вставить("КлючиДокументаОповещение", РаботаСЖурналамиДокументовКлиент.ПолучитьПараметрыКлючаПоДокументу(
Объект.Ссылка, Объект.Дата, Объект.ХозяйственнаяОперация));
Оповестить("Запись_ОтчетПереработчика", ПараметрыЗаписи, Объект.Ссылка);
ВзаиморасчетыКлиент.ФормаПослеЗаписи(ЭтаФорма);
МодификацияКонфигурацииКлиентПереопределяемый.ПослеЗаписи(ЭтаФорма, ПараметрыЗаписи);
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент");
МодульПодключаемыеКомандыКлиент.ПослеЗаписи(ЭтотОбъект, Объект, ПараметрыЗаписи);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
Если УчетНДСУПКлиент.ЗаконченоРедактированиеСчетаФактурыПолученного(ВыбранноеЗначение, ИсточникВыбора) Тогда
ОбновитьТекстСчетаФактуры();
ИначеЕсли ИсточникВыбора <> Неопределено
И ТипЗнч(ИсточникВыбора) = Тип("ФормаКлиентскогоПриложения")
И ИсточникВыбора.ИмяФормы = "ОбщаяФорма.ВводДолиСтоимости" Тогда
ТекущиеДанные = ТекущийЭлемент.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
Модифицированность = Истина;
ОбработкаВводаДолиСтоимости(ТекущийЭлемент, ТекущиеДанные, ВыбранноеЗначение);
КонецЕсли;
Если Окно <> Неопределено Тогда
Окно.Активизировать();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);
ПроверкаКонтрагентовКлиент.ПриОткрытииДокумент(ЭтотОбъект);
ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
РаботаСФайламиКлиент.ПриОткрытии(ЭтотОбъект, Отказ);
КонецПроцедуры
&НаСервере
Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
ПроверкаКонтрагентов.ПриЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект);
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
ПередЗаписьюНаКлиентеСервер();
СобытияФормКлиент.ПередЗаписью(ЭтотОбъект, Отказ, ПараметрыЗаписи);
КонецПроцедуры
&НаСервере
Процедура ПередЗаписьюНаКлиентеСервер()
ВзаиморасчетыВызовСервера.ФормаПередЗаписьюНаКлиентеСервер(ЭтаФорма);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура ТекстСчетаФактурыПолученныеОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка)
ПараметрыРегистрации = УчетНДСУПКлиентСервер.ПараметрыРегистрацииСчетовФактурПолученных();
ПараметрыРегистрации.Ссылка = Объект.Ссылка;
ПараметрыРегистрации.Дата = Объект.Дата;
ПараметрыРегистрации.Организация = Объект.Организация;
ПараметрыРегистрации.Контрагент = Объект.Контрагент;
ПараметрыРегистрации.НалогообложениеНДС =
ПредопределенноеЗначение("Перечисление.ТипыНалогообложенияНДС.ПродажаОблагаетсяНДС");
ПараметрыРегистрации.ПриобретениеТоваровРаботУслуг = Истина;
УчетНДСУПКлиент.ОбработкаНавигационнойСсылкиСчетаФактурыПолученные(
ЭтаФорма,
НавигационнаяСсылка,
СтандартнаяОбработка,
ПараметрыРегистрации);
КонецПроцедуры
&НаКлиенте
Процедура ГруппаСтраницыПриСменеСтраницы(Элемент, ТекущаяСтраница)
Если ТекущаяСтраница.Имя = "ГруппаДополнительно"
И Не ЭтотОбъект.ПараметрыСвойств.ВыполненаОтложеннаяИнициализация Тогда
СвойстваВыполнитьОтложеннуюИнициализацию();
УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДатаПриИзменении(Элемент)
ПриИзмененииДатыСервер();
ПроверкаКонтрагентовКлиент.ЗапуститьПроверкуКонтрагентовВДокументе(ЭтотОбъект, Объект.Дата);
КонецПроцедуры
&НаКлиенте
Процедура СтрокаИсправлениеОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
ИсправлениеДокументовКлиент.СтрокаИсправлениеОбработкаНавигационныйСсылки(
ЭтотОбъект, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка);
КонецПроцедуры
#Область ЗакладкаОсновное
&НаКлиенте
Процедура НакладнаяПоЗаказуПриИзменении(Элемент)
Если Объект.ПоЗаказам Тогда
ПодборПоЗаказамПереработчикам();
Иначе
НакладнаяПоЗаказуПриИзмененииНаСервере();
КонецЕсли;
НастроитьЭлементСтраницыУслуги(
Элементы.СтраницыУслуги,
Объект.ГруппировкаЗатрат,
Объект.ПоЗаказам,
ПартионныйУчетВерсии22,
Объект.Услуги.Количество() > 1);
ОпределитьКоличествоВыходныхИзделий(ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура УслугиПоПереработкеПриИзменении(Элемент)
ПриИзмененииУслугиПоПереработкеСервер();
КонецПроцедуры
&НаКлиенте
Процедура ГруппировкаЗатратПриИзменении(Элемент)
ОценкаПроизводительностиКлиент.ЗамерВремени(
"Документ.ОтчетПереработчика.Форма.ФормаДокумента.ГруппировкаЗатратПриИзменении");
Если ГруппировкаЗатратДоИзменения = Объект.ГруппировкаЗатрат Тогда
Возврат;
КонецЕсли;
ГруппировкаЗатратПриИзмененииНаСервере();
НастроитьЭлементСтраницыУслуги(
Элементы.СтраницыУслуги,
Объект.ГруппировкаЗатрат,
Объект.ПоЗаказам,
ПартионныйУчетВерсии22,
Объект.Услуги.Количество() > 1);
КонецПроцедуры
&НаКлиенте
Процедура ПартнерПриИзменении(Элемент)
Если Не ЗначениеЗаполнено(Объект.Партнер) Тогда
Возврат;
КонецЕсли;
ПриИзмененииПартнераСервер();
ПроверкаКонтрагентовКлиент.ЗапуститьПроверкуКонтрагентовВДокументе(ЭтотОбъект, Элемент);
КонецПроцедуры
&НаКлиенте
Процедура КонтрагентПриИзменении(Элемент)
ПриИзмененииКонтрагентаСервер();
ПроверкаКонтрагентовКлиент.ЗапуститьПроверкуКонтрагентовВДокументе(ЭтотОбъект, Элемент);
КонецПроцедуры
&НаКлиенте
Процедура ОрганизацияПриИзменении(Элемент)
ПриИзмененииОрганизацииСервер();
КонецПроцедуры
&НаКлиенте
Процедура ДоговорПриИзменении(Элемент)
ПриИзмененииДоговораСервер();
КонецПроцедуры
&НаКлиенте
Процедура НомерВходящегоДокументаОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, СтандартнаяОбработка)
ПроверитьНаличиеОтчетовПоДаннымПереработчика(Текст);
КонецПроцедуры
&НаКлиенте
Процедура НадписьЭтапыОплатыНажатие(Элемент, СтандартнаяОбработка)
ВзаиморасчетыКлиент.НадписьЭтапыОплатыНажатие(ЭтаФорма, Элемент, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура РасчетыНажатие(Элемент, СтандартнаяОбработка)
ВзаиморасчетыКлиент.РасчетыНажатие(ЭтаФорма, Элемент, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура НадписьВалютыНажатие(Элемент, СтандартнаяОбработка)
Оповещение = Новый ОписаниеОповещения("НадписьВалютыНажатиеЗавершение", ЭтотОбъект);
ВзаиморасчетыКлиент.ВалютыИКурсДокументаНажатие(ЭтаФорма, Элемент, СтандартнаяОбработка, Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура СпособРаспределенияЗатратНаВыходныеИзделияПриИзменении(Элемент)
СпособРаспределенияЗатратНаВыходныеИзделияПриИзмененииНаСервере();
КонецПроцедуры
#КонецОбласти
#Область ЗакладкаУслугиПоПереработке
&НаКлиенте
Процедура НоменклатураПриИзменении(Элемент)
ТекущаяСтрока = Новый Структура("Номенклатура, Характеристика, ХарактеристикиИспользуются, СтавкаНДС, Сумма, СуммаНДС, СуммаСНДС");
ЗаполнитьЗначенияСвойств(ТекущаяСтрока, Объект);
ТекущаяСтрока.ХарактеристикиИспользуются = ХарактеристикиИспользуются;
СтруктураПересчетаСуммы = ПараметрыПересчетаСуммыНДСВТЧ(ЭтаФорма);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПроверитьХарактеристикуПоВладельцу", Объект.Характеристика);
СтруктураДействий.Вставить("ЗаполнитьСтавкуНДС", ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыЗаполненияСтавкиНДС(Объект));
СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ОчиститьСуммуВзаиморасчетов");
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
Объект.СтавкаНДС = ТекущаяСтрока.СтавкаНДС;
Объект.СуммаНДС = ТекущаяСтрока.СуммаНДС;
Объект.СуммаСНДС = ТекущаяСтрока.СуммаСНДС;
ХарактеристикиИспользуются = ТекущаяСтрока.ХарактеристикиИспользуются;
Элементы.Характеристика.Доступность = ХарактеристикиИспользуются;
Объект.ПроверятьУказаниеРаботы = Истина;
КонецПроцедуры
&НаКлиенте
Процедура СуммаПриИзменении(Элемент)
ПриИзмененииСуммыСервер();
КонецПроцедуры
&НаКлиенте
Процедура СтавкаНДСПриИзменении(Элемент)
ПриИзмененииСуммыСервер();
НастроитьЭлементыСуммыНДСПриИзмененииСтавкиНДСУслуг(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура СуммаНДСПриИзменении(Элемент)
ТекущаяСтрока = Объект;
СтруктураПересчетаСуммы = ПараметрыПересчетаСуммыНДСВТЧ(ЭтаФорма);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ОчиститьСуммуВзаиморасчетов");
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
Если Объект.Услуги.Количество() = 1 Тогда
ЗаполнитьЗначенияСвойств(Объект.Услуги[0], ТекущаяСтрока);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ЗакладкаДополнительно
&НаКлиенте
Процедура НаправлениеДеятельностиПриИзменении(Элемент)
НаправлениеДеятельностиПриИзмененииСервер();
КонецПроцедуры
&НаКлиенте
Процедура МенеджерПриИзменении(Элемент)
ЗаполнитьПодчиненныеСвойстваПоСтатистике("Менеджер");
КонецПроцедуры
&НаКлиенте
Процедура ЗакупкаПодДеятельностьОчистка(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
КонецПроцедуры
#КонецОбласти
&НаКлиенте
Процедура Подключаемый_ДекорацияСостояниеОригиналаНажатие()
УчетОригиналовПервичныхДокументовКлиент.ОткрытьМенюВыбораСостояния(ЭтотОбъект,Элементы.ДекорацияСостояниеОригинала);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыПродукция
&НаКлиенте
Процедура ПродукцияВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
ТекущиеДанные = Элементы.Продукция.ТекущиеДанные;
Если Поле = Элементы.ПродукцияДокументПоступления И ЗначениеЗаполнено(ТекущиеДанные.ДокументПоступления) Тогда
СтандартнаяОбработка = Ложь;
ПоказатьЗначение(, ТекущиеДанные.ДокументПоступления);
ИначеЕсли (Поле = Элементы.ПродукцияДоляСтоимости
Или Поле = Элементы.ПродукцияДоляСтоимостиПроцент
Или Поле = Элементы.ПродукцияЕстьОшибкиЗаполненияДолиСтоимости)
И Объект.ГруппировкаЗатрат = ПредопределенноеЗначение("Перечисление.ГруппировкиЗатратВЗаказеПереработчику.ПоЭтапамПроизводства") Тогда
СтандартнаяОбработка = Ложь;
ОткрытьФормуВводаДолиСтоимости(ТекущиеДанные);
ИначеЕсли (Поле = Элементы.ПродукцияДоляСтоимости
Или Поле = Элементы.ПродукцияДоляСтоимостиПроцент
Или Поле = Элементы.ПродукцияЕстьОшибкиЗаполненияДолиСтоимости)
И Объект.СпособРаспределенияЗатратНаВыходныеИзделия <> ПредопределенноеЗначение("Перечисление.СпособыРаспределенияЗатратНаВыходныеИзделия.ПоДолямСтоимости") Тогда
СтандартнаяОбработка = Ложь;
ОткрытьФормуВводаДолиСтоимости(ТекущиеДанные);
ИначеЕсли Поле = Элементы.ПродукцияПредставлениеОтраженияОперации
И ЗначениеЗаполнено(ТекущиеДанные.СтатьяРасходов) Тогда
НастройкаСчетовУчетаКлиент.ПриНажатии(ЭтаФорма, Поле, СтандартнаяОбработка);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПродукцияПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр)
Если Объект.ПоЗаказам
И Объект.ГруппировкаЗатрат = ПредопределенноеЗначение("Перечисление.ГруппировкиЗатратВЗаказеПереработчику.ПоПродукции") Тогда
Отказ = Истина;
ПодборТоваровИзЗаказа();
ИначеЕсли Не Объект.ПоЗаказам И Не ПартионныйУчетВерсии22 Тогда
Отказ = Истина;
ПодобратьИзПоступлений("Продукция");
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПродукцияПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
Если Не Объект.ПоЗаказам
И Копирование Тогда
Элемент.ТекущиеДанные.КодСтроки = 0;
КонецЕсли;
ТекущиеДанные = Элементы.Продукция.ТекущиеДанные;
ДоходыИРасходыКлиентСервер.ПриДобавленииСтрокиВТаблицу(ЭтотОбъект, ТекущиеДанные, "Объект.Продукция");
Если НоваяСтрока И Копирование Тогда
НастройкаСчетовУчетаКлиент.ПриКопированииСтроки(ЭтотОбъект, Элемент);
КонецЕсли;
РаботаСТабличнымиЧастямиКлиент.КэшироватьТекущуюСтроку(Элементы.Продукция, ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ПродукцияПослеУдаления(Элемент)
ЗаполнитьУслугиПоПродукции();
РассчитатьПроцентРаспределенияЗатратНаВыходныеИзделия();
ПриИзмененииСуммыУслуг(ЭтаФорма);
НастроитьЭлементыСуммыНДСПриИзмененииСтавкиНДСУслуг(ЭтаФорма);
КоличествоУслуг = Объект.Услуги.Количество();
ОпределитьКоличествоВыходныхИзделий(ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура ПродукцияПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ)
Если НоваяСтрока
И ОтменаРедактирования Тогда
Возврат;
КонецЕсли;
ТекущиеДанные = Элементы.Продукция.ТекущиеДанные;
КэшСтроки = РаботаСТабличнымиЧастямиКлиентСервер.КэшСтроки(Элементы.Продукция, ЭтотОбъект);
Если Не ОтменаРедактирования Тогда
ЗаполнитьНомерГруппыЗатратВСтрокеПродукцииПередОкончаниемРедактирования(ТекущиеДанные, КэшСтроки, НоваяСтрока);
ЗаполнитьУслугиПоПродукции();
КонецЕсли;
Если ПроизводствоКлиент.НеобходимоРассчитатьПроцентРаспределенияЗатратНаВыходныеИзделия(
Элемент, ПараметрыРаспределенияЗатрат, КэшСтроки, НоваяСтрока) Тогда
ТекущиеДанные = Элементы.Продукция.ТекущиеДанные;
Если ЗначениеЗаполнено(ПараметрыРаспределенияЗатрат.ПолеГруппировкиЗатрат) Тогда
Группировки = Новый Массив;
Группировки.Добавить(КэшСтроки[ПараметрыРаспределенияЗатрат.ПолеГруппировкиЗатрат]);
Группировки.Добавить(ТекущиеДанные[ПараметрыРаспределенияЗатрат.ПолеГруппировкиЗатрат]);
КонецЕсли;
РассчитатьПроцентРаспределенияЗатратНаВыходныеИзделия(Группировки);
КонецЕсли;
ПриИзмененииСуммыУслуг(ЭтаФорма);
НастроитьЭлементыСуммыНДСПриИзмененииСтавкиНДСУслуг(ЭтаФорма);
КоличествоУслуг = Объект.Услуги.Количество();
ОпределитьКоличествоВыходныхИзделий(ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура ПродукцияНоменклатураПриИзменении(Элемент)
ТекущаяСтрока = Элементы.Продукция.ТекущиеДанные;
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПроверитьХарактеристикуПоВладельцу", ТекущаяСтрока.Характеристика);
СтруктураДействий.Вставить("ПроверитьЗаполнитьУпаковкуПоВладельцу", ТекущаяСтрока.Упаковка);
СтруктураДействий.Вставить("ПересчитатьКоличествоЕдиниц", ПроизводствоКлиентСервер.ПараметрыПересчетаКоличестваЕдиниц());
СтруктураДействий.Вставить("ЗаполнитьПризнакАртикул", Новый Структура("Номенклатура", "Артикул"));
СтруктураДействий.Вставить("ЗаполнитьПризнакТипНоменклатуры", Новый Структура("Номенклатура", "ТипНоменклатуры"));
СтруктураДействий.Вставить("ПроверитьЗаполнитьДолюСтоимости", ПараметрыРаспределенияЗатрат);
Если НЕ (Объект.ПоЗаказам ИЛИ Объект.ГруппировкаЗатрат = ПредопределенноеЗначение("Перечисление.ГруппировкиЗатратВЗаказеПереработчику.БезГруппировки")) Тогда
СтруктураЗаполненияСпецификации = УправлениеДаннымиОбИзделияхКлиентСервер.ПараметрыДействияПроверитьЗаполнитьСпецификацию(
Объект, ТекущаяСтрока, ПараметрыВыбораСпецификаций);
СтруктураДействий.Вставить("ПроверитьЗаполнитьСпецификацию", СтруктураЗаполненияСпецификации);
КонецЕсли;
СтруктураДействий.Вставить("НоменклатураПриИзмененииПереопределяемый", Новый Структура("ИмяФормы, ИмяТабличнойЧасти",
ЭтаФорма.ИмяФормы, "Продукция"));
ДоходыИРасходыКлиентСервер.ВставитьДействиеОчиститьСтатьюИАналитикуРасходов(
СтруктураДействий,
ЭтотОбъект,
"Объект.Продукция");
ДоходыИРасходыКлиентСервер.ВставитьДействиеЗаполнитьСтатьюАналитикуРасходовНоменклатуры(
СтруктураДействий,
ЭтотОбъект,
ПредопределенноеЗначение("Перечисление.ХозяйственныеОперации.СписаниеТоваровПоТребованию"),
Объект.Организация,
ТекущаяСтрока.Получатель,
"Объект.Продукция");
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
ЗаполнитьНормативыМатериаловНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура ПродукцияХарактеристикаПриИзменении(Элемент)
ТекущаяСтрока = Элементы.Продукция.ТекущиеДанные;
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ХарактеристикаПриИзмененииПереопределяемый", Новый Структура("ИмяФормы, ИмяТабличнойЧасти",
ЭтаФорма.ИмяФормы, "Продукция"));
СтруктураДействий.Вставить("ПроверитьЗаполнитьДолюСтоимости", ПараметрыРаспределенияЗатрат);
Если НЕ (Объект.ПоЗаказам ИЛИ Объект.ГруппировкаЗатрат = ПредопределенноеЗначение("Перечисление.ГруппировкиЗатратВЗаказеПереработчику.БезГруппировки")) Тогда
СтруктураЗаполненияСпецификации = УправлениеДаннымиОбИзделияхКлиентСервер.ПараметрыДействияПроверитьЗаполнитьСпецификацию(
Объект, ТекущаяСтрока, ПараметрыВыбораСпецификаций);
СтруктураДействий.Вставить("ПроверитьЗаполнитьСпецификацию", СтруктураЗаполненияСпецификации);
КонецЕсли;
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
ЗаполнитьНормативыМатериаловНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура ПродукцияУпаковкаПриИзменении(Элемент)
ТекущаяСтрока = Элементы.Продукция.ТекущиеДанные;
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьКоличествоЕдиниц", ПроизводствоКлиентСервер.ПараметрыПересчетаКоличестваЕдиниц());
СтруктураДействий.Вставить("ПересчитатьДолюСтоимости", ПараметрыРаспределенияЗатрат);
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
ЗаполнитьНормативыМатериаловНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура ПродукцияКоличествоУпаковокПриИзменении(Элемент)
ТекущаяСтрока = Элементы.Продукция.ТекущиеДанные;
СтруктураДействий = Новый Структура;
ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок("Продукция", СтруктураДействий);
СтруктураДействий.Вставить("ПересчитатьДолюСтоимости", ПараметрыРаспределенияЗатрат);
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
ЗаполнитьНормативыМатериаловНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура ПродукцияСпецификацияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ТекущиеДанные = Элементы.Продукция.ТекущиеДанные;
Если Объект.ПоЗаказам И ТекущиеДанные.КодСтроки = 0 Тогда
СтандартнаяОбработка = Ложь;
ВыбратьГруппуЗатрат("Продукция");
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПродукцияГруппаЗатратНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ВыбратьГруппуЗатрат("Продукция");
КонецПроцедуры
&НаКлиенте
Процедура ПродукцияГруппаЗатратОткрытие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ТекущиеДанные = Элементы.Продукция.ТекущиеДанные;
ОткрытьРаспоряжениеГруппы(ТекущиеДанные);
КонецПроцедуры
&НаКлиенте
Процедура ПродукцияГруппаЗатратОчистка(Элемент, СтандартнаяОбработка)
ТекущиеДанные = Элементы.Продукция.ТекущиеДанные;
ТекущиеДанные.НомерГруппыЗатрат = 0;
КонецПроцедуры
&НаКлиенте
Процедура ПродукцияПриИзменении(Элемент)
ОпределитьКоличествоВыходныхИзделий(ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура ПродукцияСписатьНаРасходыПриИзменении(Элемент)
ПриИзмененииСписатьНаРасходы("Продукция");
КонецПроцедуры
&НаКлиенте
Процедура ПродукцияСтатьяРасходовНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ДоходыИРасходыКлиент.НачалоВыбораСтатьи(ЭтотОбъект, Элемент, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура ПродукцияСтатьяРасходовПриИзменении(Элемент)
ДоходыИРасходыКлиентСервер.СтатьяПриИзменении(ЭтотОбъект, Элемент);
КонецПроцедуры
&НаКлиенте
Процедура ПродукцияАналитикаРасходовНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ДоходыИРасходыКлиент.НачалоВыбораАналитикиРасходов(ЭтотОбъект, Элемент, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура ПродукцияАналитикаРасходовАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
ДоходыИРасходыКлиент.АвтоПодборАналитикиРасходов(ЭтотОбъект, Элемент, Текст, ДанныеВыбора, Параметры, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура ПродукцияАналитикаРасходовОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка)
ДоходыИРасходыКлиент.ОкончаниеВводаТекстаАналитикиРасходов(ЭтотОбъект, Элемент, Текст, ДанныеВыбора, Параметры, СтандартнаяОбработка);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыВозвратныеОтходы
&НаКлиенте
Процедура ВозвратныеОтходыПриИзменении(Элемент)
ОпределитьКоличествоВыходныхИзделий(ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура ВозвратныеОтходыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
ТекущиеДанные = Элементы.ВозвратныеОтходы.ТекущиеДанные;
Если Поле = Элементы.ВозвратныеОтходыДокументПоступления И ЗначениеЗаполнено(ТекущиеДанные.ДокументПоступления) Тогда
СтандартнаяОбработка = Ложь;
ПоказатьЗначение(, ТекущиеДанные.ДокументПоступления);
ИначеЕсли Поле = Элементы.ВозвратныеОтходыЦена Тогда
Если ЗначениеЗаполнено(ТекущиеДанные.ВидЦены) И Не Объект.Согласован Тогда
ОчиститьСообщения();
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
НСтр("ru='Для редактирования цены очистите вид цены'"),
Объект.Ссылка,
ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("Объект.ВозвратныеОтходы", ТекущиеДанные.НомерСтроки, "ВидЦены"));
КонецЕсли;
ИначеЕсли Поле = Элементы.ВозвратныеОтходыПредставлениеОтраженияОперации
И ЗначениеЗаполнено(ТекущиеДанные.СтатьяРасходов) Тогда
НастройкаСчетовУчетаКлиент.ПриНажатии(ЭтаФорма, Поле, СтандартнаяОбработка);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВозвратныеОтходыПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр)
Если Не Объект.ПоЗаказам И Не ПартионныйУчетВерсии22 Тогда
Отказ = Истина;
ПодобратьИзПоступлений("ВозвратныеОтходы");
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВозвратныеОтходыПослеУдаления(Элемент)
ЗаполнитьУслугиПоПродукции();
ПриИзмененииСуммыУслуг(ЭтаФорма);
НастроитьЭлементыСуммыНДСПриИзмененииСтавкиНДСУслуг(ЭтаФорма);
КоличествоУслуг = Объект.Услуги.Количество();
ОпределитьКоличествоВыходныхИзделий(ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура ВозвратныеОтходыПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
ТекущиеДанные = Элементы.ВозвратныеОтходы.ТекущиеДанные;
ДоходыИРасходыКлиентСервер.ПриДобавленииСтрокиВТаблицу(ЭтотОбъект, ТекущиеДанные, "Объект.ВозвратныеОтходы");
КонецПроцедуры
&НаКлиенте
Процедура ВозвратныеОтходыПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ)
Если НоваяСтрока
И ОтменаРедактирования Тогда
Возврат;
КонецЕсли;
ПриИзмененииСуммыУслуг(ЭтаФорма);
НастроитьЭлементыСуммыНДСПриИзмененииСтавкиНДСУслуг(ЭтаФорма);
КоличествоУслуг = Объект.Услуги.Количество();
ОпределитьКоличествоВыходныхИзделий(ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура ВозвратныеОтходыНоменклатураПриИзменении(Элемент)
ТекущаяСтрока = Элементы.ВозвратныеОтходы.ТекущиеДанные;
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПроверитьХарактеристикуПоВладельцу", ТекущаяСтрока.Характеристика);
СтруктураДействий.Вставить("ПроверитьЗаполнитьУпаковкуПоВладельцу", ТекущаяСтрока.Упаковка);
СтруктураДействий.Вставить("ПересчитатьКоличествоЕдиниц", ПроизводствоКлиентСервер.ПараметрыПересчетаКоличестваЕдиниц());
СтруктураДействий.Вставить("ЗаполнитьПризнакАртикул", Новый Структура("Номенклатура", "Артикул"));
СтруктураДействий.Вставить("ЗаполнитьПризнакТипНоменклатуры", Новый Структура("Номенклатура", "ТипНоменклатуры"));
СтруктураДействий.Вставить(
"НоменклатураПриИзмененииПереопределяемый",
Новый Структура("ИмяФормы, ИмяТабличнойЧасти", ЭтаФорма.ИмяФормы, "ВозвратныеОтходы"));
ДоходыИРасходыКлиентСервер.ВставитьДействиеОчиститьСтатьюИАналитикуРасходов(
СтруктураДействий,
ЭтотОбъект,
"Объект.ВозвратныеОтходы");
ДоходыИРасходыКлиентСервер.ВставитьДействиеЗаполнитьСтатьюАналитикуРасходовНоменклатуры(
СтруктураДействий,
ЭтотОбъект,
ПредопределенноеЗначение("Перечисление.ХозяйственныеОперации.СписаниеТоваровПоТребованию"),
Объект.Организация,
ТекущаяСтрока.Получатель,
"Объект.ВозвратныеОтходы");
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
КонецПроцедуры
&НаКлиенте
Процедура ВозвратныеОтходыХарактеристикаПриИзменении(Элемент)
ТекущаяСтрока = Элементы.ВозвратныеОтходы.ТекущиеДанные;
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить(
"ХарактеристикаПриИзмененииПереопределяемый",
Новый Структура("ИмяФормы, ИмяТабличнойЧасти", ЭтаФорма.ИмяФормы, "ВозвратныеОтходы"));
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
КонецПроцедуры
&НаКлиенте
Процедура ВозвратныеОтходыУпаковкаПриИзменении(Элемент)
ТекущаяСтрока = Элементы.ВозвратныеОтходы.ТекущиеДанные;
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьКоличествоЕдиниц", ПроизводствоКлиентСервер.ПараметрыПересчетаКоличестваЕдиниц());
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
КонецПроцедуры
&НаКлиенте
Процедура ВозвратныеОтходыКоличествоУпаковокПриИзменении(Элемент)
ТекущаяСтрока = Элементы.ВозвратныеОтходы.ТекущиеДанные;
СтруктураДействий = Новый Структура;
ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок("ВозвратныеОтходы", СтруктураДействий);
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
КонецПроцедуры
&НаКлиенте
Процедура ВозвратныеОтходыЦенаПриИзменении(Элемент)
ТекущиеДанные = Элементы.ВозвратныеОтходы.ТекущиеДанные;
СтруктураДействий = Новый Структура("ПересчитатьСумму");
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущиеДанные, СтруктураДействий, КэшированныеЗначения);
КонецПроцедуры
&НаКлиенте
Процедура ВозвратныеОтходыСуммаПриИзменении(Элемент)
ТекущиеДанные = Элементы.ВозвратныеОтходы.ТекущиеДанные;
СтруктураДействий = Новый Структура("ПересчитатьЦенуПоСумме", "КоличествоУпаковок");
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущиеДанные, СтруктураДействий, КэшированныеЗначения);
КонецПроцедуры
&НаКлиенте
Процедура ВозвратныеОтходыГруппаЗатратНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ВыбратьГруппуЗатрат("ВозвратныеОтходы");
КонецПроцедуры
&НаКлиенте
Процедура ВозвратныеОтходыГруппаЗатратОткрытие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ТекущиеДанные = Элементы.ВозвратныеОтходы.ТекущиеДанные;
ОткрытьРаспоряжениеГруппы(ТекущиеДанные);
КонецПроцедуры
&НаКлиенте
Процедура ВозвратныеОтходыГруппаЗатратОчистка(Элемент, СтандартнаяОбработка)
ТекущиеДанные = Элементы.ВозвратныеОтходы.ТекущиеДанные;
ТекущиеДанные.НомерГруппыЗатрат = 0;
КонецПроцедуры
&НаКлиенте
Процедура ВозвратныеОтходыДокументПоступленияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ВыбратьГруппуЗатрат("ВозвратныеОтходы");
КонецПроцедуры
&НаКлиенте
Процедура ВозвратныеОтходыВидЦеныПриИзменении(Элемент)
ТекущаяСтрока = Элементы.ВозвратныеОтходы.ТекущиеДанные;
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьСумму");
СтруктураДействий.Вставить(
"ЗаполнитьЦенуПродажи",
ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыЗаполненияЦеныВСтрокеТЧ(Объект));
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
КонецПроцедуры
&НаКлиенте
Процедура ВозвратныеОтходы_Заполнить_ПодобратьИзПоступлений(Команда)
ПодобратьИзПоступлений("ВозвратныеОтходы");
КонецПроцедуры
&НаКлиенте
Процедура ВозвратныеОтходы_Заполнить_ЗаполнитьГруппуЗатрат(Команда)
ВыбратьГруппуЗатрат("ВозвратныеОтходы");
КонецПроцедуры
&НаКлиенте
Процедура ВозвратныеОтходы_СкопироватьСтроки(Команда)
СкопироватьСтрокиТЧ("ВозвратныеОтходы");
КонецПроцедуры
&НаКлиенте
Процедура ВозвратныеОтходыСписатьНаРасходыПриИзменении(Элемент)
ПриИзмененииСписатьНаРасходы("ВозвратныеОтходы");
КонецПроцедуры
&НаКлиенте
Процедура ВозвратныеОтходыСтатьяРасходовНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ДоходыИРасходыКлиент.НачалоВыбораСтатьи(ЭтотОбъект, Элемент, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура ВозвратныеОтходыСтатьяРасходовПриИзменении(Элемент)
ДоходыИРасходыКлиентСервер.СтатьяПриИзменении(ЭтотОбъект, Элемент);
КонецПроцедуры
&НаКлиенте
Процедура ВозвратныеОтходыАналитикаРасходовНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ДоходыИРасходыКлиент.НачалоВыбораАналитикиРасходов(ЭтотОбъект, Элемент, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура ВозвратныеОтходыАналитикаРасходовАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
ДоходыИРасходыКлиент.АвтоПодборАналитикиРасходов(ЭтотОбъект, Элемент, Текст, ДанныеВыбора, Параметры, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура ВозвратныеОтходыАналитикаРасходовОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка)
ДоходыИРасходыКлиент.ОкончаниеВводаТекстаАналитикиРасходов(ЭтотОбъект, Элемент, Текст, ДанныеВыбора, Параметры, СтандартнаяОбработка);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыМатериалы
&НаКлиенте
Процедура МатериалыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
ТекущиеДанные = Элементы.Материалы.ТекущиеДанные;
Если Поле = Элементы.МатериалыДокументПоступления И ЗначениеЗаполнено(ТекущиеДанные.ДокументПоступления) Тогда
СтандартнаяОбработка = Ложь;
ПоказатьЗначение(, ТекущиеДанные.ДокументПоступления);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура МатериалыПослеУдаления(Элемент)
ЗаполнитьНормативыМатериаловНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура МатериалыПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ)
Если НоваяСтрока
И ОтменаРедактирования Тогда
Возврат;
КонецЕсли;
Если НоваяСтрока Тогда
ЗаполнитьНормативыМатериаловНаСервере();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура МатериалыНоменклатураПриИзменении(Элемент)
ТекущаяСтрока = Элементы.Материалы.ТекущиеДанные;
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПроверитьХарактеристикуПоВладельцу", ТекущаяСтрока.Характеристика);
СтруктураДействий.Вставить("ПроверитьЗаполнитьУпаковкуПоВладельцу", ТекущаяСтрока.Упаковка);
СтруктураДействий.Вставить("ПересчитатьКоличествоЕдиниц", ПроизводствоКлиентСервер.ПараметрыПересчетаКоличестваЕдиниц());
СтруктураДействий.Вставить("ЗаполнитьПризнакАртикул", Новый Структура("Номенклатура", "Артикул"));
СтруктураДействий.Вставить("ЗаполнитьПризнакТипНоменклатуры", Новый Структура("Номенклатура", "ТипНоменклатуры"));
НаправленияДеятельностиКлиентСервер.СтруктураДействийВставитьПриДобавленииСтроки(ЭтаФорма, СтруктураДействий);
СтруктураДействий.Вставить("НоменклатураПриИзмененииПереопределяемый", Новый Структура("ИмяФормы, ИмяТабличнойЧасти",
ЭтаФорма.ИмяФормы, "Продукция"));
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
ЗаполнитьНормативыМатериаловНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура МатериалыХарактеристикаПриИзменении(Элемент)
ТекущаяСтрока = Элементы.Материалы.ТекущиеДанные;
СтруктураДействий = Новый Структура;
НаправленияДеятельностиКлиентСервер.СтруктураДействийВставитьПриДобавленииСтроки(ЭтаФорма, СтруктураДействий);
СтруктураДействий.Вставить("ХарактеристикаПриИзмененииПереопределяемый", Новый Структура("ИмяФормы, ИмяТабличнойЧасти",
ЭтаФорма.ИмяФормы, "Продукция"));
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
ЗаполнитьНормативыМатериаловНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура МатериалыУпаковкаПриИзменении(Элемент)
ТекущаяСтрока = Элементы.Материалы.ТекущиеДанные;
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьКоличествоЕдиниц", ПроизводствоКлиентСервер.ПараметрыПересчетаКоличестваЕдиниц());
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
ЗаполнитьНормативыМатериаловНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура МатериалыКоличествоУпаковокПриИзменении(Элемент)
ТекущаяСтрока = Элементы.Материалы.ТекущиеДанные;
СтруктураДействий = Новый Структура;
ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок("Материалы", СтруктураДействий);
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
МатериалыКоличествоУпаковокПриИзмененииНаСервере(КэшированныеЗначения);
КонецПроцедуры
&НаКлиенте
Процедура МатериалыГруппаЗатратНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ВыбратьГруппуЗатрат("Материалы");
КонецПроцедуры
&НаКлиенте
Процедура МатериалыГруппаЗатратОткрытие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ТекущиеДанные = Элементы.Материалы.ТекущиеДанные;
ОткрытьРаспоряжениеГруппы(ТекущиеДанные);
КонецПроцедуры
&НаКлиенте
Процедура МатериалыГруппаЗатратОчистка(Элемент, СтандартнаяОбработка)
ТекущиеДанные = Элементы.Материалы.ТекущиеДанные;
ТекущиеДанные.НомерГруппыЗатрат = 0;
КонецПроцедуры
&НаКлиенте
Процедура МатериалыДокументПоступленияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ВыбратьГруппуЗатрат("Материалы");
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыУслуги
&НаКлиенте
Процедура УслугиПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр)
Отказ = Истина;
КонецПроцедуры
&НаКлиенте
Процедура УслугиПередУдалением(Элемент, Отказ)
Отказ = Истина;
Модифицированность = Истина;
УдалитьВыбранныеУслуги();
КонецПроцедуры
&НаКлиенте
Процедура УслугиВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
ТекущиеДанные = Элементы.Услуги.ТекущиеДанные;
Если Поле = Элементы.УслугиДокументПоступления И ЗначениеЗаполнено(ТекущиеДанные.ДокументПоступления) Тогда
СтандартнаяОбработка = Ложь;
ПоказатьЗначение(, ТекущиеДанные.ДокументПоступления);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УслугиНоменклатураПриИзменении(Элемент)
ТекущаяСтрока = Элементы.Услуги.ТекущиеДанные;
СтруктураПересчетаСуммы = ПараметрыПересчетаСуммыНДСВТЧ(ЭтаФорма);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПроверитьХарактеристикуПоВладельцу", ТекущаяСтрока.Характеристика);
СтруктураДействий.Вставить("ЗаполнитьСтавкуНДС", ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыЗаполненияСтавкиНДС(Объект));
СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ОчиститьСуммуВзаиморасчетов");
СтруктураДействий.Вставить("НоменклатураПриИзмененииПереопределяемый", Новый Структура("ИмяФормы, ИмяТабличнойЧасти",
ЭтаФорма.ИмяФормы, "Услуги"));
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
ПриИзмененииСуммыУслуг(ЭтаФорма);
НастроитьЭлементыСуммыНДСПриИзмененииСтавкиНДСУслуг(ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура УслугиСуммаПриИзменении(Элемент)
ТекущаяСтрока = Элементы.Услуги.ТекущиеДанные;
СтруктураПересчетаСуммы = ПараметрыПересчетаСуммыНДСВТЧ(ЭтаФорма);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ОчиститьСуммуВзаиморасчетов");
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
ПриИзмененииСуммыУслуг(ЭтаФорма);
НастроитьЭлементыСуммыНДСПриИзмененииСтавкиНДСУслуг(ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура УслугиСтавкаНДСПриИзменении(Элемент)
ТекущаяСтрока = Элементы.Услуги.ТекущиеДанные;
СтруктураПересчетаСуммы = ПараметрыПересчетаСуммыНДСВТЧ(ЭтаФорма);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ОчиститьСуммуВзаиморасчетов");
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
ПриИзмененииСуммыУслуг(ЭтаФорма);
НастроитьЭлементыСуммыНДСПриИзмененииСтавкиНДСУслуг(ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура УслугиСуммаНДСПриИзменении(Элемент)
ТекущаяСтрока = Элементы.Услуги.ТекущиеДанные;
СтруктураПересчетаСуммы = ПараметрыПересчетаСуммыНДСВТЧ(ЭтаФорма);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ОчиститьСуммуВзаиморасчетов");
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
ПриИзмененииСуммыУслуг(ЭтаФорма);
НастроитьЭлементыСуммыНДСПриИзмененииСтавкиНДСУслуг(ЭтаФорма);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура Подключаемый_КомандаПанелиПрисоединенныхФайлов(Команда)
РаботаСФайламиКлиент.КомандаУправленияПрисоединеннымиФайлами(ЭтотОбъект, Команда);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПолеПредпросмотраПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)
РаботаСФайламиКлиент.ПолеПредпросмотраПроверкаПеретаскивания(ЭтотОбъект, Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПолеПредпросмотраПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)
РаботаСФайламиКлиент.ПолеПредпросмотраПеретаскивание(ЭтотОбъект, Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПолеПредпросмотраНажатие(Элемент, СтандартнаяОбработка)
РаботаСФайламиКлиент.ПолеПредпросмотраНажатие(ЭтотОбъект, Элемент, СтандартнаяОбработка);
КонецПроцедуры
#Область Продукция
&НаКлиенте
Процедура ПродукцияПодобратьИзЗаказа(Команда)
ПодборТоваровИзЗаказа();
КонецПроцедуры
&НаКлиенте
Процедура ПродукцияКопированиеСкопироватьСтроки(Команда)
СкопироватьСтрокиТЧ("Продукция");
КонецПроцедуры
&НаКлиенте
Процедура Продукция_Заполнить_Перезаполнить(Команда)
Если ВозможноЗаполнитьМатериалыОтходы() Тогда
ЗаполнитьМатериалыОтходы();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Продукция_Заполнить_ПодобратьИзПоступлений(Команда)
ПодобратьИзПоступлений("Продукция");
КонецПроцедуры
&НаКлиенте
Процедура Продукция_ПеренестиВВозвратныеОтходы(Команда)
Если Элементы.Продукция.ВыделенныеСтроки.Количество() > 0 Тогда
Продукция_ПеренестиВВозвратныеОтходыНаСервере();
ПриИзмененииСуммыУслуг(ЭтаФорма);
НастроитьЭлементыСуммыНДСПриИзмененииСтавкиНДСУслуг(ЭтаФорма);
КоличествоУслуг = Объект.Услуги.Количество();
ОпределитьКоличествоВыходныхИзделий(ЭтаФорма);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Продукция_ВставитьСтроки(Команда)
ПолучитьСтрокиИзБуфераОбмена("Продукция");
ПриИзмененииСуммыУслуг(ЭтаФорма);
НастроитьЭлементыСуммыНДСПриИзмененииСтавкиНДСУслуг(ЭтаФорма);
КоличествоУслуг = Объект.Услуги.Количество();
ОпределитьКоличествоВыходныхИзделий(ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура Продукция_Заполнить_ЗаполнитьПолучателя(Команда)
ОценкаПроизводительностиКлиент.ЗамерВремени(
"Документ.ОтчетПереработчика.Форма.ФормаДокумента.Команда.Продукция_Заполнить_ЗаполнитьПолучателя");
ПараметрыТЧ = Новый Структура;
ПараметрыТЧ.Вставить("ИмяТЧФорма" , "Продукция");
ПараметрыТЧ.Вставить("ИмяТЧОбъект" , "Продукция");
ПараметрыТЧ.Вставить("ПредставлениеТЧ" , НСтр("ru = 'Продукция'"));
ТипыНоменклатуры = Новый Массив;
ТипыНоменклатуры.Добавить(ПредопределенноеЗначение("Перечисление.ТипыНоменклатуры.Работа"));
ОписаниеОповещения = Новый ОписаниеОповещения("ЗаполнитьПолучателяЗавершение",
ЭтотОбъект, Новый Структура("ПараметрыТЧ", ПараметрыТЧ));
ПроизводствоКлиент.ОткрытьФормуВыбораПолучателя(ЭтаФорма, Объект, ПараметрыТЧ, ТипыНоменклатуры, ОписаниеОповещения);
КонецПроцедуры
#КонецОбласти
#Область ВозвратныеОтходы
&НаКлиенте
Процедура ВозвратныеОтходы_ВставитьСтроки(Команда)
ПолучитьСтрокиИзБуфераОбмена("ВозвратныеОтходы");
ОпределитьКоличествоВыходныхИзделий(ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура ВозвратныеОтходы_Заполнить_ЗаполнитьПолучателя(Команда)
ОценкаПроизводительностиКлиент.ЗамерВремени(
"Документ.ОтчетПереработчика.Форма.ФормаДокумента.Команда.ВозвратныеОтходы_Заполнить_ЗаполнитьПолучателя");
ПараметрыТЧ = Новый Структура;
ПараметрыТЧ.Вставить("ИмяТЧФорма" , "ВозвратныеОтходы");
ПараметрыТЧ.Вставить("ИмяТЧОбъект" , "ВозвратныеОтходы");
ПараметрыТЧ.Вставить("ПредставлениеТЧ" , НСтр("ru = 'Возвратные отходы'"));
ТипыНоменклатуры = Новый Массив;
ТипыНоменклатуры.Добавить(ПредопределенноеЗначение("Перечисление.ТипыНоменклатуры.Работа"));
ОписаниеОповещения = Новый ОписаниеОповещения("ЗаполнитьПолучателяЗавершение",
ЭтотОбъект, Новый Структура("ПараметрыТЧ", ПараметрыТЧ));
ПроизводствоКлиент.ОткрытьФормуВыбораПолучателя(ЭтаФорма, Объект, ПараметрыТЧ, ТипыНоменклатуры, ОписаниеОповещения);
КонецПроцедуры
#КонецОбласти
#Область Материалы
&НаКлиенте
Процедура МатериалыКопированиеСкопироватьСтроки(Команда)
СкопироватьСтрокиТЧ("Материалы");
КонецПроцедуры
&НаКлиенте
Процедура Материалы_Заполнить_ЗаполнитьГруппуЗатрат(Команда)
ВыбратьГруппуЗатрат("Материалы");
КонецПроцедуры
&НаКлиенте
Процедура Материалы_ВставитьСтроки(Команда)
ПолучитьСтрокиИзБуфераОбмена("Материалы");
КонецПроцедуры
#КонецОбласти
#Область Услуги
&НаКлиенте
Процедура Услуги_ВыбратьИЗаполнитьУслугу(Команда)
Если Элементы.Услуги.ВыделенныеСтроки.Количество() = 0 Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Для заполнения услуги необходимо выбрать строки.'"));
Возврат;
КонецЕсли;
ОписаниеОповещения = Новый ОписаниеОповещения("Услуги_ВыбратьИЗаполнитьУслугуЗавершение", ЭтотОбъект);
ПараметрыОтбора = Новый Структура("ТипНоменклатуры", ПредопределенноеЗначение("Перечисление.ТипыНоменклатуры.Работа"));
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Отбор", ПараметрыОтбора);
ПараметрыФормы.Вставить("МножественныйВыбор", Ложь);
ОткрытьФорму("Справочник.Номенклатура.ФормаВыбора", ПараметрыФормы,,,,, ОписаниеОповещения);
КонецПроцедуры
&НаКлиенте
Процедура Услуги_УдалитьУслугу(Команда)
УдалитьВыбранныеУслуги();
КонецПроцедуры
#КонецОбласти
#Область ПодключаемыеКоманды
&НаКлиенте
Процедура Подключаемый_СвойстваВыполнитьКоманду(ЭлементИлиКоманда, НавигационнаяСсылка = Неопределено, СтандартнаяОбработка = Неопределено)
УправлениеСвойствамиКлиент.ВыполнитьКоманду(ЭтотОбъект, ЭлементИлиКоманда, СтандартнаяОбработка);
КонецПроцедуры
&НаСервере
Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения)
ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Объект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт
ВыполнитьКомандуНаСервере(ПараметрыВыполнения);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
ПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Объект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуИнтеграции(Команда)
ИнтеграцияС1СДокументооборотБазоваяФункциональностьКлиент.ВыполнитьПодключаемуюКомандуИнтеграции(Команда, ЭтотОбъект, Объект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВыполнитьПереопределяемуюКоманду(Команда)
СобытияФормКлиент.ВыполнитьПереопределяемуюКоманду(ЭтаФорма, Команда);
КонецПроцедуры
#КонецОбласти
&НаКлиенте
Процедура ПровестиИЗакрыть(Команда)
ОбщегоНазначенияУТКлиент.ПровестиИЗакрыть(ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура ЗаписатьДокумент(Команда)
ОбщегоНазначенияУТКлиент.Записать(ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура ПровестиДокумент(Команда)
ОбщегоНазначенияУТКлиент.Провести(ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура ЗачетОплаты(Команда)
ПоместитьРасшифровкуПлатежаВоВременноеХранилище();
ВзаиморасчетыКлиент.ЗачетОплаты(ЭтаФорма, Элементы.ЗачетОплатыФорма);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
#Область ПриИзмененииРеквизитов
&НаСервере
Процедура ПриИзмененииОрганизацииСервер()
ВалютаРегламентированногоУчета = ЗначениеНастроекПовтИсп.ВалютаРегламентированногоУчетаОрганизации(Объект.Организация);
УстановитьВидимостьДоговора();
Если ЗначениеЗаполнено(Объект.Организация) Тогда
ЗаполнитьДоговорПоУмолчанию();
АктуализироватьСтавкуНДСВТЧУслугиСервер();
Если ИспользоватьНаправленияДеятельности Тогда
НаправленияДеятельностиСервер.ЗаполнитьНаправлениеПоУмолчанию(Объект.НаправлениеДеятельности, , Объект.Договор);
КонецЕсли;
НаправленияДеятельностиСервер.ПриИзмененииНаправленияДеятельности(ЭтотОбъект);
ОбновитьТекстСчетаФактуры();
КонецЕсли;
АктуализироватьЗакупкуПодДеятельность();
ДенежныеСредстваСервер.ПроверитьЗаполнитьБанковскийСчетОрганизацииПоВладельцу(Объект.Организация, Объект.БанковскийСчетОрганизации, , Объект.НаправлениеДеятельности);
ЗаполнитьПодчиненныеСвойстваПоСтатистике("Организация");
ОтветственныеЛицаСервер.ПриИзмененииСвязанныхРеквизитовДокумента(Объект);
УстановитьВидимостьДоговора();
ВзаиморасчетыСервер.ФормаПриИзмененииРеквизитов(ЭтаФорма, "Организация");
КонецПроцедуры
&НаСервере
Процедура ПриИзмененииДоговораСервер()
ЗакупкиВызовСервера.ЗаполнитьБанковскиеСчетаПоДоговору(
Объект.Договор,
Объект.БанковскийСчетОрганизации,
Объект.БанковскийСчетКонтрагента);
Если Объект.ВалютаВзаиморасчетов.Пустая() И Не Объект.Договор.Пустая() Тогда
Объект.ВалютаВзаиморасчетов =
ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Договор, "ВалютаВзаиморасчетов");
КонецЕсли;
ОтветственныеЛицаСервер.ЗаполнитьМенеджера(Объект);
ЗаполнитьПодчиненныеСвойстваПоСтатистике("Договор");
Если ИспользоватьНаправленияДеятельности Тогда
НаправленияДеятельностиСервер.ЗаполнитьНаправлениеПоУмолчанию(Объект.НаправлениеДеятельности, , Объект.Договор);
КонецЕсли;
АктуализироватьЗакупкуПодДеятельность();
НаправленияДеятельностиСервер.ПриИзмененииНаправленияДеятельности(ЭтотОбъект);
ВзаиморасчетыСервер.ФормаПриИзмененииРеквизитов(ЭтаФорма, "Договор");
УстановитьСвойстваЭлементовПоПорядкуРасчетов();
КонецПроцедуры
&НаСервере
Процедура ПриИзмененииКонтрагентаСервер()
УстановитьВидимостьДоговора();
Если ЗначениеЗаполнено(Объект.Контрагент) Тогда
ЗаполнитьДоговорПоУмолчанию();
КонецЕсли;
ЗаполнитьПодчиненныеСвойстваПоСтатистике("Контрагент");
Если ИспользоватьНаправленияДеятельности Тогда
НаправленияДеятельностиСервер.ЗаполнитьНаправлениеПоУмолчанию(Объект.НаправлениеДеятельности, , Объект.Договор);
КонецЕсли;
НаправленияДеятельностиСервер.ПриИзмененииНаправленияДеятельности(ЭтотОбъект);
ВзаиморасчетыСервер.ФормаПриИзмененииРеквизитов(ЭтаФорма, "Контрагент");
ЗакупкиСервер.ЗаполнитьСписокВыбораНаименованиеВходящегоДокумента(ЭтотОбъект, Объект.Контрагент);
КонецПроцедуры
&НаСервере
Процедура ПриИзмененииПартнераСервер()
ДокументЗакупки = РеквизитФормыВЗначение("Объект");
ДокументЗакупки.ЗаполнитьУсловияЗакупокПоУмолчанию();
ОтветственныеЛицаСервер.ЗаполнитьМенеджера(ДокументЗакупки);
ЗначениеВРеквизитФормы(ДокументЗакупки, "Объект");
ВалютаДокумента = Объект.Валюта;
ЗаполнитьСлужебныеРеквизиты();
НастроитьЭлементыСуммыНДСПриИзмененииСтавкиНДСУслуг(ЭтаФорма);
УстановитьВидимостьДоговора();
ВзаиморасчетыСервер.ФормаПриИзмененииРеквизитов(ЭтаФорма, "Партнер");
ОбновитьТекстСчетаФактуры();
УстановитьВидимостьДоговора();
ЗаполнитьПодчиненныеСвойстваПоСтатистике("Контрагент");
ОтветственныеЛицаСервер.ПриИзмененииСвязанныхРеквизитовДокумента(Объект);
Если ИспользоватьНаправленияДеятельности Тогда
НаправленияДеятельностиСервер.ЗаполнитьНаправлениеПоУмолчанию(Объект.НаправлениеДеятельности, , Объект.Договор);
КонецЕсли;
НаправленияДеятельностиСервер.ПриИзмененииНаправленияДеятельности(ЭтотОбъект);
АктуализироватьЗакупкуПодДеятельность();
КонецПроцедуры
&НаСервере
Процедура ПриИзмененииСуммыСервер()
ТекущаяСтрока = Объект;
СтруктураПересчетаСуммы = ПараметрыПересчетаСуммыНДСВТЧ(ЭтаФорма);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ОчиститьСуммуВзаиморасчетов");
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, Неопределено);
Если Объект.Услуги.Количество() = 1 Тогда
ЗаполнитьЗначенияСвойств(Объект.Услуги[0], ТекущаяСтрока);
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ПриИзмененииСуммыУслуг(Форма)
Форма.Объект.Сумма = Форма.Объект.Услуги.Итог("Сумма");
Форма.Объект.СуммаСНДС = Форма.Объект.Услуги.Итог("СуммаСНДС");
Форма.Объект.СуммаНДС = Форма.Объект.Услуги.Итог("СуммаНДС");
Форма.Объект.СуммаДокумента = Форма.Объект.СуммаСНДС;
Форма.Объект.СуммаВзаиморасчетов = Форма.Объект.Услуги.Итог("СуммаВзаиморасчетов");
КонецПроцедуры
&НаСервере
Процедура ПриИзмененииДатыСервер()
ПартионныйУчетВерсии22 = РасчетСебестоимостиПовтИсп.ПартионныйУчетВерсии22(Объект.Дата);
НастроитьЭлементСтраницыУслуги(
Элементы.СтраницыУслуги,
Объект.ГруппировкаЗатрат,
Объект.ПоЗаказам,
ПартионныйУчетВерсии22,
Объект.Услуги.Количество() > 1);
ОтветственныеЛицаСервер.ПриИзмененииСвязанныхРеквизитовДокумента(Объект);
АктуализироватьЗакупкуПодДеятельность();
ВзаиморасчетыСервер.ФормаПриИзмененииРеквизитов(ЭтаФорма, "Дата");
НастроитьФормуПоФлагуПоЗаказам();
УстановитьВидимостьЭлементовПоВерсииПартионногоУчета();
ЗаполнитьГруппуЗатратУстановитьВидимость();
СпособРаспределенияЗатратНаВыходныеИзделияПриИзмененииНаСервере();
КонецПроцедуры
&НаСервере
Процедура НаправлениеДеятельностиПриИзмененииСервер()
НаправленияДеятельностиСервер.ПриИзмененииНаправленияДеятельности(ЭтотОбъект);
Если Объект.ПорядокРасчетов = Перечисления.ПорядокРасчетов.ПоДоговорамКонтрагентов Тогда
ЗаполнитьДоговорПоУмолчанию();
КонецЕсли;
АктуализироватьЗакупкуПодДеятельность();
КонецПроцедуры
&НаСервере
Процедура АктуализироватьЗакупкуПодДеятельность(Заполнить = Истина)
ПараметрыЗаполнения = Документы.ОтчетПереработчика.ПараметрыЗаполненияВидаДеятельностиНДС(Объект);
Если Заполнить Тогда
УчетНДСУП.ЗаполнитьВидДеятельностиНДС(
Объект.ЗакупкаПодДеятельность,
ПараметрыЗаполнения,
УчетНДСКэшированныеЗначенияПараметров);
КонецЕсли;
УчетНДСУП.ЗаполнитьСписокВыбораВидаДеятельностиНДС(
Элементы.ЗакупкаПодДеятельность,
Объект.ЗакупкаПодДеятельность,
ПараметрыЗаполнения,
УчетНДСКэшированныеЗначенияПараметров);
КонецПроцедуры
&НаСервере
Процедура ПриИзмененииУслугиПоПереработкеСервер()
ИспользоватьУслуги = Объект.УслугиПоПереработке
= ПредопределенноеЗначение("Перечисление.ВариантыОформленияУслугДокументовПереработки.УказываютсяВЗаказеОтчете");
Если Не ИспользоватьУслуги Тогда
Объект.Услуги.Очистить();
Объект.РасшифровкаПлатежа.Очистить();
Объект.Номенклатура = Неопределено;
Объект.Характеристика = Неопределено;
Объект.СтатьяКалькуляции = Неопределено;
Объект.СтавкаНДС = Неопределено;
Объект.ДатаПлатежа = Неопределено;
Объект.БанковскийСчетОрганизации = Неопределено;
Объект.БанковскийСчетКонтрагента = Неопределено;
Объект.ФормаОплаты = Неопределено;
Объект.ОплатаВВалюте = Неопределено;
Объект.ГруппаФинансовогоУчета = Неопределено;
Объект.Сумма = 0;
Объект.СуммаВзаиморасчетов = 0;
Объект.СуммаВзаиморасчетовПоЗаказу = 0;
Объект.СуммаДокумента = 0;
Объект.СуммаНДС = 0;
Объект.СуммаНДСВзаиморасчетов = 0;
Объект.СуммаСНДС = 0;
КонецЕсли;
НастроитьВидимостьУслугПриИзмененииВариантаОформленияУслугиПоПереработке();
УстановитьСвойстваЭлементовПоПорядкуРасчетов();
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура НастроитьЭлементСтраницыУслуги(СтраницыУслуги,
ГруппировкаЗатрат,
ПоЗаказам,
ПартионныйУчетВерсии22,
НесколькоУслуг)
Если ГруппировкаЗатрат = ПредопределенноеЗначение("Перечисление.ГруппировкиЗатратВЗаказеПереработчику.БезГруппировки")
И (ПоЗаказам Или ПартионныйУчетВерсии22)
И Не НесколькоУслуг Тогда
СтраницыУслуги.ТекущаяСтраница = СтраницыУслуги.ПодчиненныеЭлементы.СтраницаОднаУслуга;
Иначе
СтраницыУслуги.ТекущаяСтраница = СтраницыУслуги.ПодчиненныеЭлементы.СтраницаНесколькоУслуг;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриИзмененииСписатьНаРасходы(ИмяТЧ)
ТекущиеДанные = Элементы[ИмяТЧ].ТекущиеДанные;
Если ТекущиеДанные.СписатьНаРасходы
И ТекущиеДанные.ТипНоменклатуры <> ПредопределенноеЗначение("Перечисление.ТипыНоменклатуры.Работа") Тогда
ТекущиеДанные.СписатьНаРасходы = Ложь;
КонецЕсли;
Если ТекущиеДанные.СписатьНаРасходы Тогда
ТекущиеДанные.Назначение = Неопределено;
КонецЕсли;
ДоходыИРасходыКлиентСервер.ПриИзмененииРеквизитаДоступностиСтатьиВСтроке(ЭтотОбъект, ТекущиеДанные, "Объект." + ИмяТЧ);
НастройкаСчетовУчетаКлиентСервер.ПриИзмененииРеквизитаДоступностиСчетаУчетаВСтроке(ЭтаФорма, ТекущиеДанные, "Объект." + ИмяТЧ);
КонецПроцедуры
&НаСервере
Процедура АктуализироватьСтавкуНДСВТЧУслугиСервер()
СтруктураПересчетаСуммы = ПараметрыПересчетаСуммыНДСВТЧ(ЭтаФорма);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ЗаполнитьСтавкуНДС", ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыЗаполненияСтавкиНДС(Объект));
СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ОчиститьСуммуВзаиморасчетов");
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьТЧ(Объект.Услуги, СтруктураДействий, Неопределено);
КонецПроцедуры
#КонецОбласти
#Область Подборы
&НаКлиенте
Процедура ПодборТоваровИзЗаказа()
ОписаниеОповещения = Новый ОписаниеОповещения("ПодборТоваровИзЗаказаЗавершение", ЭтотОбъект);
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Заказ", Объект.ЗаказПереработчику);
ПараметрыФормы.Вставить("ОтчетПереработчика", Объект.Ссылка);
ПараметрыФормы.Вставить("ГруппировкаЗатрат", Объект.ГруппировкаЗатрат);
ПараметрыФормы.Вставить("ИмяПоляГруппаЗатрат", ИмяПоляГруппаЗатрат(Объект));
ПараметрыФормы.Вставить("ОбосабливатьПоНазначениюПродукции", ОбосабливатьПоНазначениюПродукции);
ОткрытьФорму("Документ.ОтчетПереработчика.Форма.ПодборПродукцииИзЗаказа", ПараметрыФормы,,,,, ОписаниеОповещения);
КонецПроцедуры
&НаКлиенте
Процедура ПодборТоваровИзЗаказаЗавершение(РезультатЗакрытия, ДополнительныеПараметры) Экспорт
Если РезультатЗакрытия <> Неопределено Тогда
Модифицированность = Истина;
ПодборТоваровИзЗаказаЗавершениеНаСервере(РезультатЗакрытия);
КонецЕсли;
ПриИзмененииСуммыУслуг(ЭтаФорма);
НастроитьЭлементыСуммыНДСПриИзмененииСтавкиНДСУслуг(ЭтаФорма);
КоличествоУслуг = Объект.Услуги.Количество();
ОпределитьКоличествоВыходныхИзделий(ЭтаФорма);
КонецПроцедуры
&НаСервере
Процедура ПодборТоваровИзЗаказаЗавершениеНаСервере(ДанныеЗаполнения)
СтруктураПоиска = Новый Структура("КодСтроки," + ИмяПоляГруппаЗатрат(Объект));
СтрокиДляОбработки = Новый Массив();
ОбрабатываемыеСтрокиПродукции = Новый Массив;
ОбрабатываемыеСтрокиОтходов = Новый Массив;
Для каждого ДанныеПродукции Из ДанныеЗаполнения Цикл
ЗаполнитьЗначенияСвойств(СтруктураПоиска, ДанныеПродукции);
Если ДанныеПродукции.ТипСтоимости = Перечисления.ТипыСтоимостиВыходныхИзделий.Рассчитывается Тогда
НайденныеСтроки = Объект.Продукция.НайтиСтроки(СтруктураПоиска);
Если НайденныеСтроки.Количество() = 0 Тогда
ТекущаяСтрока = Объект.Продукция.Добавить();
ДоходыИРасходыКлиентСервер.ПриДобавленииСтрокиВТаблицу(ЭтотОбъект, ТекущаяСтрока, "Объект.Продукция");
Иначе
ТекущаяСтрока = НайденныеСтроки[0];
КонецЕсли;
ЗаполнитьЗначенияСвойств(ТекущаяСтрока, ДанныеПродукции);
СтрокиДляОбработки.Добавить(ТекущаяСтрока.ПолучитьИдентификатор());
ОбрабатываемыеСтрокиПродукции.Добавить(ТекущаяСтрока);
Иначе
НайденныеСтроки = Объект.ВозвратныеОтходы.НайтиСтроки(СтруктураПоиска);
Если НайденныеСтроки.Количество() = 0 Тогда
ТекущаяСтрока = Объект.ВозвратныеОтходы.Добавить();
ДоходыИРасходыКлиентСервер.ПриДобавленииСтрокиВТаблицу(ЭтотОбъект, ТекущаяСтрока, "Объект.ВозвратныеОтходы");
Иначе
ТекущаяСтрока = НайденныеСтроки[0];
КонецЕсли;
ЗаполнитьЗначенияСвойств(ТекущаяСтрока, ДанныеПродукции);
ОбрабатываемыеСтрокиОтходов.Добавить(ТекущаяСтрока);
КонецЕсли;
КонецЦикла;
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьКоличествоУпаковок");
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокиТЧ(
ОбрабатываемыеСтрокиПродукции,
СтруктураДействий,
Объект.Продукция);
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокиТЧ(
ОбрабатываемыеСтрокиОтходов,
СтруктураДействий,
Объект.ВозвратныеОтходы);
Если Объект.ГруппировкаЗатрат = ПредопределенноеЗначение("Перечисление.ГруппировкиЗатратВЗаказеПереработчику.ПоЭтапамПроизводства") Тогда
Иначе
ПерезаполнитьПоЗаказуПереработчика(СтрокиДляОбработки);
КонецЕсли;
Объект.Сумма = Объект.Услуги.Итог("Сумма");
Объект.СуммаНДС = Объект.Услуги.Итог("СуммаНДС");
Объект.СуммаСНДС = Объект.Услуги.Итог("СуммаСНДС");
Объект.СуммаДокумента = Объект.СуммаСНДС;
ЗаполнитьСлужебныеРеквизиты();
НастроитьЭлементыСуммыНДСПриИзмененииСтавкиНДСУслуг(ЭтаФорма);
КонецПроцедуры
&НаСервере
Процедура Продукция_ПеренестиВВозвратныеОтходыНаСервере()
МассивГруппировок = Новый Массив;
Для Каждого ИдентификаторСтроки Из Элементы.Продукция.ВыделенныеСтроки Цикл
СтрокаПродукции = Объект.Продукция.НайтиПоИдентификатору(ИдентификаторСтроки);
Если ЗначениеЗаполнено(ПараметрыРаспределенияЗатрат.ПолеГруппировкиЗатрат) Тогда
МассивГруппировок.Добавить(СтрокаПродукции[ПараметрыРаспределенияЗатрат.ПолеГруппировкиЗатрат]);
КонецЕсли;
СтрокаВозвратныхОтходов = Объект.ВозвратныеОтходы.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаВозвратныхОтходов, СтрокаПродукции,, "НомерГруппыЗатрат");
Объект.Продукция.Удалить(Объект.Продукция.Индекс(СтрокаПродукции));
КонецЦикла;
ЗаполнитьУслугиПоПродукции();
РассчитатьПроцентРаспределенияЗатратНаВыходныеИзделия(МассивГруппировок);
КонецПроцедуры
#КонецОбласти
#Область ДоступностьИВидимостьЭлементовНаФорме
&НаСервере
Процедура УстановитьДоступностьЭлементовПоСтатусуСервер()
УстановитьПодписку = Объект.Согласован;
МассивЭлементов = Новый Массив;
МассивЭлементов.Добавить("Дата");
МассивЭлементов.Добавить("БанковскийСчетОрганизации");
МассивЭлементов.Добавить("БанковскийСчетКонтрагента");
МассивЭлементов.Добавить("ПродукцияНоменклатура");
МассивЭлементов.Добавить("ПродукцияХарактеристика");
МассивЭлементов.Добавить("ПродукцияКоличествоУпаковок");
МассивЭлементов.Добавить("ПродукцияУпаковка");
МассивЭлементов.Добавить("МатериалыНоменклатура");
МассивЭлементов.Добавить("МатериалыХарактеристика");
МассивЭлементов.Добавить("МатериалыКоличествоУпаковок");
МассивЭлементов.Добавить("МатериалыУпаковка");
МассивЭлементов.Добавить("МатериалыВидЦены");
МассивЭлементов.Добавить("ПродукцияКонтекстноеМенюДобавить");
МассивЭлементов.Добавить("ПродукцияКонтекстноеМенюСкопировать");
МассивЭлементов.Добавить("ПродукцияКонтекстноеМенюУдалить");
МассивЭлементов.Добавить("ПродукцияДобавить");
МассивЭлементов.Добавить("ПродукцияИзменить");
МассивЭлементов.Добавить("ПродукцияСкопировать");
МассивЭлементов.Добавить("ПродукцияУдалить");
МассивЭлементов.Добавить("ПродукцияЗаполнитьПоСпецификации");
МассивЭлементов.Добавить("ПродукцияОткрытьПодбор");
МассивЭлементов.Добавить("МатериалыКонтекстноеМенюДобавить");
МассивЭлементов.Добавить("МатериалыКонтекстноеМенюСкопировать");
МассивЭлементов.Добавить("МатериалыКонтекстноеМенюУдалить");
МассивЭлементов.Добавить("МатериалыДобавить");
МассивЭлементов.Добавить("МатериалыИзменить");
МассивЭлементов.Добавить("МатериалыСкопировать");
МассивЭлементов.Добавить("МатериалыУдалить");
МассивЭлементов.Добавить("МатериалыЗаполнитьПоСпецификации");
МассивЭлементов.Добавить("МатериалыОткрытьПодбор");
ОбщегоНазначенияУТ.УстановитьПодпискуНаСобытияИзмененияЭлементовФормы(ЭтаФорма, МассивЭлементов, УстановитьПодписку);
КонецПроцедуры
&НаСервере
Процедура УстановитьВидимостьДоговора()
ПараметрыОбъекта = Новый Структура("Партнер, Договор, Контрагент, Организация");
ЗаполнитьЗначенияСвойств(ПараметрыОбъекта, Объект);
ПараметрыОбъекта.Вставить("Соглашение", Справочники.СоглашенияСПоставщиками.ПустаяСсылка());
ЗакупкиСервер.УстановитьДоступностьДоговора(
ПараметрыОбъекта,
Элементы.Договор.Доступность,
Элементы.Договор.Видимость,
Объект.Договор);
КонецПроцедуры
&НаСервере
Процедура УстановитьСвойстваЭлементовПоПорядкуРасчетов()
ТребуетсяДоговор = (Объект.ПорядокРасчетов = Перечисления.ПорядокРасчетов.ПоДоговорамКонтрагентов);
Элементы.Договор.АвтоОтметкаНезаполненного = ТребуетсяДоговор;
Элементы.Договор.ОтметкаНезаполненного = (Не ЗначениеЗаполнено(Объект.Договор) И ТребуетсяДоговор);
КонецПроцедуры
&НаСервере
Процедура УстановитьВидимостьЭлементовПоВерсииПартионногоУчета()
Элементы.ВозвратныеОтходыСтатьяКалькуляции.Видимость = ПартионныйУчетВерсии22;
КонецПроцедуры
#КонецОбласти
#Область КонтрольНесогласованныхИзменений
&НаКлиенте
Процедура КонтрольНеСогласованныхИзмененийОбработатьСобытиеПриИзменении(Элемент)
Если Элемент.Имя = "Дата" Тогда
ДатаПриИзменении(Элемент);
ИначеЕсли Элемент.Имя = "ПродукцияКоличествоУпаковок" Тогда
ПродукцияКоличествоУпаковокПриИзменении(Элемент);
ИначеЕсли Элемент.Имя = "ПродукцияУпаковка" Тогда
ПродукцияУпаковкаПриИзменении(Элемент);
ИначеЕсли Элемент.Имя = "МатериалыКоличествоУпаковок" Тогда
МатериалыКоличествоУпаковокПриИзменении(Элемент);
ИначеЕсли Элемент.Имя = "МатериалыУпаковка" Тогда
МатериалыУпаковкаПриИзменении(Элемент);
ИначеЕсли Элемент.Имя = "ПродукцияНоменклатура" Тогда
ПродукцияНоменклатураПриИзменении(Элемент);
ИначеЕсли Элемент.Имя = "ПродукцияХарактеристика" Тогда
ПродукцияХарактеристикаПриИзменении(Элемент);
ИначеЕсли Элемент.Имя = "МатериалыНоменклатура" Тогда
МатериалыНоменклатураПриИзменении(Элемент);
ИначеЕсли Элемент.Имя = "МатериалыХарактеристика" Тогда
МатериалыХарактеристикаПриИзменении(Элемент);
Иначе
ОбщегоНазначенияУТКлиент.КонтрольНеСогласованныхИзмененийВызватьИсключение(ЭтаФорма, Элемент);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура КонтрольНеСогласованныхИзмененийОбработатьСобытиеКоманды(Команда)
ОбщегоНазначенияУТКлиент.КонтрольНеСогласованныхИзмененийВызватьИсключение(ЭтаФорма, Команда);
КонецПроцедуры
&НаКлиенте
Процедура КонтрольНеСогласованныхИзмененийОбработатьСобытиеНажатие(Элемент)
ОбщегоНазначенияУТКлиент.КонтрольНеСогласованныхИзмененийВызватьИсключение(ЭтаФорма, Элемент);
КонецПроцедуры
&НаКлиенте
Процедура КонтрольНеСогласованныхИзмененийОбработатьСобытиеПередНачаломИзменения(Элемент, Отказ)
ОбщегоНазначенияУТКлиент.КонтрольНеСогласованныхИзмененийВызватьИсключение(ЭтаФорма, Элемент);
КонецПроцедуры
&НаКлиенте
Процедура КонтрольНеСогласованныхИзмененийОбработатьСобытиеПередУдалением(Элемент, Отказ)
ОбщегоНазначенияУТКлиент.КонтрольНеСогласованныхИзмененийВызватьИсключение(ЭтаФорма, Элемент);
КонецПроцедуры
&НаКлиенте
Процедура КонтрольНеСогласованныхИзмененийОбработатьСобытиеПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
ОбщегоНазначенияУТКлиент.КонтрольНеСогласованныхИзмененийВызватьИсключение(ЭтаФорма, Элемент);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПриИзменении_УстановитьДоступностьЭлементовПоСтатусуСервер(Элемент)
Если ОбщегоНазначенияУТКлиент.ПриДействииСЭлементомЗависящимОтСтатуса(ЭтаФорма) Тогда
Возврат;
КонецЕсли;
Если СтруктураДействийКонтрольНеСогласованныхИзменений.ПриИзменении.Свойство(Элемент.Имя) Тогда
КонтрольНеСогласованныхИзмененийОбработатьСобытиеПриИзменении(Элемент);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_Нажатие_УстановитьДоступностьЭлементовПоСтатусуСервер(Элемент)
Если ОбщегоНазначенияУТКлиент.ПриДействииСЭлементомЗависящимОтСтатуса(ЭтаФорма) Тогда
Возврат;
КонецЕсли;
Если СтруктураДействийКонтрольНеСогласованныхИзменений.Нажатие.Свойство(Элемент.Имя) Тогда
КонтрольНеСогласованныхИзмененийОбработатьСобытиеНажатие(Элемент);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_Команда_УстановитьДоступностьЭлементовПоСтатусуСервер(Команда)
Если ОбщегоНазначенияУТКлиент.ПриДействииСЭлементомЗависящимОтСтатуса(ЭтаФорма) Тогда
Возврат;
КонецЕсли;
Если СтруктураДействийКонтрольНеСогласованныхИзменений.Команды.Свойство(Команда.Имя) Тогда
КонтрольНеСогласованныхИзмененийОбработатьСобытиеКоманды(Команда);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПередНачаломИзменения_УстановитьДоступностьЭлементовПоСтатусуСервер(Элемент, Отказ)
Если ОбщегоНазначенияУТКлиент.ПриДействииСЭлементомЗависящимОтСтатуса(ЭтаФорма) Тогда
Возврат;
КонецЕсли;
Если СтруктураДействийКонтрольНеСогласованныхИзменений.ПередНачаломИзменения.Свойство(Элемент.Имя) Тогда
КонтрольНеСогласованныхИзмененийОбработатьСобытиеПередНачаломИзменения(Элемент, Отказ);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПередУдалением_УстановитьДоступностьЭлементовПоСтатусуСервер(Элемент, Отказ)
Если ОбщегоНазначенияУТКлиент.ПриДействииСЭлементомЗависящимОтСтатуса(ЭтаФорма) Тогда
Возврат;
КонецЕсли;
Имя = Элемент.Имя;
Если СтруктураДействийКонтрольНеСогласованныхИзменений.ПередУдалением.Свойство(Имя) Тогда
КонтрольНеСогласованныхИзмененийОбработатьСобытиеПередУдалением(Элемент, Отказ);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПередНачаломДобавления_УстановитьДоступностьЭлементовПоСтатусуСервер(Элемент, Отказ, Копирование, Родитель, Группа)
Если ОбщегоНазначенияУТКлиент.ПриДействииСЭлементомЗависящимОтСтатуса(ЭтаФорма) Тогда
Возврат;
КонецЕсли;
Имя = Элемент.Имя;
Если СтруктураДействийКонтрольНеСогласованныхИзменений.ПередНачаломДобавления.Свойство(Имя) Тогда
КонтрольНеСогласованныхИзмененийОбработатьСобытиеПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПриИзмененииРеквизитаЗависящегоОтСтатуса()
ИзменитьДокументСервер();
ОбщегоНазначенияУТКлиент.ПослеИзмененияРеквизитаЗависящегоОтСтатуса(ЭтаФорма);
КонецПроцедуры
#КонецОбласти
#Область РаботаСБуферомОбмена
&НаКлиенте
Процедура СкопироватьСтрокиТЧ(ИмяТЧ)
Если РаботаСТабличнымиЧастямиКлиент.ВыбранаСтрокаДляВыполненияКоманды(Элементы[ИмяТЧ]) Тогда
СкопироватьСтрокиНаСервере(ИмяТЧ);
РаботаСТабличнымиЧастямиКлиент.ОповеститьПользователяОКопированииСтрок(Элементы[ИмяТЧ].ВыделенныеСтроки.Количество());
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура СкопироватьСтрокиНаСервере(ИмяТЧ)
РаботаСТабличнымиЧастями.СкопироватьСтрокиВБуферОбмена(Объект[ИмяТЧ], Элементы[ИмяТЧ].ВыделенныеСтроки);
КонецПроцедуры
&НаКлиенте
Процедура ПолучитьСтрокиИзБуфераОбмена(ИмяТЧ)
КоличествоСтрокДоВставки = Объект[ИмяТЧ].Количество();
ПолучитьСтрокиИзБуфераОбменаНаСервере(ИмяТЧ);
КоличествоВставленных = Объект[ИмяТЧ].Количество() - КоличествоСтрокДоВставки;
РаботаСТабличнымиЧастямиКлиент.ОповеститьПользователяОВставкеСтрок(КоличествоВставленных);
КонецПроцедуры
&НаСервере
Процедура ПолучитьСтрокиИзБуфераОбменаНаСервере(ИмяТЧ)
Перем СоставСтрок;
Если ИмяТЧ = "Продукция" Тогда
СоставСтрок = "Номенклатура,Характеристика,Упаковка,КоличествоУпаковок";
ИначеЕсли ИмяТЧ = "Материалы" ИЛИ ИмяТЧ = "ВозвратныеОтходы" Тогда
СоставСтрок = "Номенклатура,Характеристика,Упаковка,КоличествоУпаковок,СтатьяКалькуляции";
КонецЕсли;
МассивТиповНоменклатуры = Новый Массив;
МассивТиповНоменклатуры.Добавить(ПредопределенноеЗначение("Перечисление.ТипыНоменклатуры.Товар"));
МассивТиповНоменклатуры.Добавить(ПредопределенноеЗначение("Перечисление.ТипыНоменклатуры.МногооборотнаяТара"));
ПараметрыОтбора = Новый Соответствие;
ПараметрыОтбора.Вставить("Номенклатура.ТипНоменклатуры", МассивТиповНоменклатуры);
СтрокиИзБуфера = РаботаСТабличнымиЧастями.СтрокиИзБуфераОбмена(ПараметрыОтбора, СоставСтрок);
Если Не ЗначениеЗаполнено(СтрокиИзБуфера) Тогда
Возврат;
КонецЕсли;
СтруктураДействий = Новый Структура;
ДобавитьВСтруктуруДействияПоОбновлениюВспомРевизитовСтроки(СтруктураДействий);
ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(ИмяТЧ, СтруктураДействий);
НаправленияДеятельностиКлиентСервер.СтруктураДействийВставитьПриДобавленииСтроки(ЭтотОбъект, СтруктураДействий);
КэшированныеЗначения = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначения();
МассивГруппировок = Новый Массив;
ОбрабатываемыеСтроки = Новый Массив;
ТаблицаОбъекта = Объект[ИмяТЧ];
Для каждого СтрокаИзБуфера Из СтрокиИзБуфера Цикл
ТекущаяСтрока = ТаблицаОбъекта.Добавить();
ЗаполнитьЗначенияСвойств(ТекущаяСтрока, СтрокаИзБуфера);
ОбрабатываемыеСтроки.Добавить(ТекущаяСтрока);
КонецЦикла;
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокиТЧ(
ОбрабатываемыеСтроки,
СтруктураДействий,
ТаблицаОбъекта);
Для каждого СтрокаИзБуфера Из ОбрабатываемыеСтроки Цикл
Если ИмяТЧ = "Материалы" Тогда
РассчитатьОтклонениеОтНорматива(ТекущаяСтрока, КэшированныеЗначения);
КонецЕсли;
Если ИмяТЧ = "Продукция" Тогда
Если Объект.ГруппировкаЗатрат = ПредопределенноеЗначение("Перечисление.ГруппировкиЗатратВЗаказеПереработчику.ПоСпецификациям")
Или Объект.ГруппировкаЗатрат = ПредопределенноеЗначение("Перечисление.ГруппировкиЗатратВЗаказеПереработчику.ПоПродукции") Тогда
ЗаполнитьНомерГруппыЗатратВСтрокеПродукции(ТекущаяСтрока, Объект, ПартионныйУчетВерсии22);
КонецЕсли;
Если ЗначениеЗаполнено(ПараметрыРаспределенияЗатрат.ПолеГруппировкиЗатрат) Тогда
МассивГруппировок.Добавить(ТекущаяСтрока[ПараметрыРаспределенияЗатрат.ПолеГруппировкиЗатрат]);
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если ИмяТЧ = "Продукция" Тогда
ЗаполнитьУслугиПоПродукции();
РассчитатьПроцентРаспределенияЗатратНаВыходныеИзделия(МассивГруппировок);
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьДоступностьКомандБуфераОбмена(Форма, РеквизитыДоступны)
Форма.Элементы.ВозвратныеОтходы_ВставитьСтроки.Доступность = РеквизитыДоступны;
Форма.Элементы.КонтекстноеМенюВозвратныеОтходы_ВставитьСтроки.Доступность = РеквизитыДоступны;
Форма.Элементы.Продукция_ВставитьСтроки.Доступность = РеквизитыДоступны;
Форма.Элементы.КонтекстноеМенюПродукция_ВставитьСтроки.Доступность = РеквизитыДоступны;
Форма.Элементы.Материалы_ВставитьСтроки.Доступность = РеквизитыДоступны;
Форма.Элементы.КонтекстноеМенюМатериалы_ВставитьСтроки.Доступность = РеквизитыДоступны;
КонецПроцедуры
#КонецОбласти
#Область РаботаСКонтрагентами
&НаКлиенте
Процедура Подключаемый_ПоказатьПредложениеИспользоватьПроверкуКонтрагентов()
ПроверкаКонтрагентовКлиент.ПредложитьВключитьПроверкуКонтрагентов(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбработатьРезультатПроверкиКонтрагентов()
ПроверкаКонтрагентовКлиент.ОбработатьРезультатПроверкиКонтрагентовВДокументе(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура ОтобразитьРезультатПроверкиКонтрагента() Экспорт
ПроверкаКонтрагентов.ОтобразитьРезультатПроверкиКонтрагентаВДокументе(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура ПроверитьКонтрагентовФоновоеЗадание(ПараметрыФоновогоЗадания) Экспорт
ПроверкаКонтрагентов.ПроверитьКонтрагентовВДокументеФоновоеЗадание(ЭтотОбъект, ПараметрыФоновогоЗадания);
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьКонтрагентов(Команда)
ПроверкаКонтрагентовКлиент.ПроверитьКонтрагентовВДокументеПоКнопке(ЭтотОбъект);
Возврат;
КонецПроцедуры
#КонецОбласти
#Область ГруппировкаЗатрат
&НаСервере
Процедура ГруппировкаЗатратПриИзмененииНаСервере()
Если НЕ ЗначениеЗаполнено(Объект.ГруппировкаЗатрат) Тогда
Объект.ГруппировкаЗатрат = Перечисления.ГруппировкиЗатратВЗаказеПереработчику.БезГруппировки;
КонецЕсли;
ПерепривязатьМатериалы = ГруппировкаЗатратДоИзменения = Перечисления.ГруппировкиЗатратВЗаказеПереработчику.ПоПродукции
И Объект.ГруппировкаЗатрат = Перечисления.ГруппировкиЗатратВЗаказеПереработчику.ПоСпецификациям;
Если ПерепривязатьМатериалы Тогда
ПродукцияКопия = Объект.Продукция.Выгрузить(, "НомерГруппыЗатрат,ДокументПоступления,Спецификация");
ПродукцияКопия.Свернуть("НомерГруппыЗатрат,ДокументПоступления,Спецификация");
ВсегоСтрок = ПродукцияКопия.Количество();
ПродукцияКопия.Свернуть("НомерГруппыЗатрат,ДокументПоступления");
ПерепривязатьМатериалы = ВсегоСтрок = ПродукцияКопия.Количество();
КонецЕсли;
Если ПерепривязатьМатериалы Тогда
ВыполнитьСменуГруппировкиЗатратСПродукцииНаСпецификации();
Иначе
Для каждого ДанныеСтроки Из Объект.ВозвратныеОтходы Цикл
ДанныеСтроки.НомерГруппыЗатрат = 0;
КонецЦикла;
Для каждого ДанныеСтроки Из Объект.Материалы Цикл
ДанныеСтроки.НомерГруппыЗатрат = 0;
КонецЦикла;
Для каждого ДанныеСтроки Из Объект.Продукция Цикл
ДанныеСтроки.НомерГруппыЗатрат = 0;
КонецЦикла;
Для каждого ДанныеСтроки Из Объект.Продукция Цикл
ЗаполнитьНомерГруппыЗатратВСтрокеПродукции(ДанныеСтроки, Объект, ПартионныйУчетВерсии22);
КонецЦикла;
КонецЕсли;
Если Объект.ГруппировкаЗатрат = Перечисления.ГруппировкиЗатратВЗаказеПереработчику.ПоЭтапамПроизводства Или
Объект.ГруппировкаЗатрат = Перечисления.ГруппировкиЗатратВЗаказеПереработчику.ПоПродукции Тогда
Объект.СпособРаспределенияЗатратНаВыходныеИзделия = Перечисления.СпособыРаспределенияЗатратНаВыходныеИзделия.ПустаяСсылка();
ИначеЕсли Не ЗначениеЗаполнено(Объект.СпособРаспределенияЗатратНаВыходныеИзделия) Тогда
Объект.СпособРаспределенияЗатратНаВыходныеИзделия = Перечисления.СпособыРаспределенияЗатратНаВыходныеИзделия.ПоДолямСтоимости;
КонецЕсли;
СпособРаспределенияЗатратНаВыходныеИзделияПриИзмененииНаСервере();
ЗаполнитьУслугиПоПродукции();
ЗаполнитьПредставлениеГруппыЗатрат();
НастроитьФормуПоСпособуГруппировкиЗатрат();
ЗаполнитьГруппуЗатратУстановитьВидимость();
ГруппировкаЗатратДоИзменения = Объект.ГруппировкаЗатрат;
ПриИзмененииСуммыУслуг(ЭтаФорма);
НастроитьЭлементыСуммыНДСПриИзмененииСтавкиНДСУслуг(ЭтаФорма);
КоличествоУслуг = Объект.Услуги.Количество();
ОпределитьКоличествоВыходныхИзделий(ЭтаФорма);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьПредставлениеГруппыЗатрат()
Если Объект.ГруппировкаЗатрат = Перечисления.ГруппировкиЗатратВЗаказеПереработчику.БезГруппировки Тогда
Возврат;
КонецЕсли;
ИмяПоляГруппаЗатрат = ИмяПоляГруппаЗатрат(Объект);
ПараметрыГруппыЗатрат = Новый Структура("Распоряжение,Спецификация," + ИмяПоляГруппаЗатрат);
Если Объект.ПоЗаказам Тогда
ДанныеЗаказа = ПолучитьИзВременногоХранилища(АдресХранилищаДанныхЗаказа);
ТаблицаПродукция = ДанныеЗаказа.Продукция;
Иначе
ТаблицаПродукция = Объект.Продукция;
КонецЕсли;
Для каждого СтрокаУслуга Из Объект.Услуги Цикл
ЗаполнитьЗначенияСвойств(ПараметрыГруппыЗатрат, СтрокаУслуга);
ПредставлениеГруппы = ПереработкаНаСтороне.ПредставлениеГруппыЗатрат(
ПараметрыГруппыЗатрат,
Объект.ГруппировкаЗатрат,
ТаблицаПродукция,
ИмяПоляГруппаЗатрат);
СтрокаУслуга.ГруппаЗатрат = ПредставлениеГруппы;
СтруктураПоиска = Новый Структура(ИмяПоляГруппаЗатрат, СтрокаУслуга[ИмяПоляГруппаЗатрат]);
СписокСтрок = Объект.Продукция.НайтиСтроки(СтруктураПоиска);
Для каждого ДанныеСтроки Из СписокСтрок Цикл
ДанныеСтроки.ГруппаЗатрат = ПредставлениеГруппы;
КонецЦикла;
СписокСтрок = Объект.ВозвратныеОтходы.НайтиСтроки(СтруктураПоиска);
Для каждого ДанныеСтроки Из СписокСтрок Цикл
ДанныеСтроки.ГруппаЗатрат = ПредставлениеГруппы;
КонецЦикла;
СписокСтрок = Объект.Материалы.НайтиСтроки(СтруктураПоиска);
Для каждого ДанныеСтроки Из СписокСтрок Цикл
ДанныеСтроки.ГруппаЗатрат = ПредставлениеГруппы;
КонецЦикла;
КонецЦикла;
Для каждого ДанныеСтроки Из Объект.Продукция Цикл
Если НЕ ЗначениеЗаполнено(ДанныеСтроки[ИмяПоляГруппаЗатрат]) Тогда
ДанныеСтроки.ГруппаЗатрат = "";
КонецЕсли;
КонецЦикла;
Для каждого ДанныеСтроки Из Объект.Материалы Цикл
Если НЕ ЗначениеЗаполнено(ДанныеСтроки[ИмяПоляГруппаЗатрат]) Тогда
ДанныеСтроки.ГруппаЗатрат = "";
КонецЕсли;
КонецЦикла;
Для каждого ДанныеСтроки Из Объект.Услуги Цикл
Если НЕ ЗначениеЗаполнено(ДанныеСтроки[ИмяПоляГруппаЗатрат]) Тогда
ДанныеСтроки.ГруппаЗатрат = "";
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьУслугиПоПродукции()
Если Объект.ПоЗаказам И Объект.ГруппировкаЗатрат = ПредопределенноеЗначение("Перечисление.ГруппировкиЗатратВЗаказеПереработчику.БезГруппировки") Тогда
Возврат;
КонецЕсли;
ИмяПоляГруппаЗатрат = ИмяПоляГруппаЗатрат(Объект);
Если Не Объект.ПоЗаказам Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ТаблицаПродукция.Спецификация КАК Спецификация,
| ТаблицаПродукция.ДокументПоступления КАК ДокументПоступления,
| ТаблицаПродукция.НомерГруппыЗатрат КАК НомерГруппыЗатрат
|ПОМЕСТИТЬ ВтПродукция
|ИЗ
| &ТаблицаПродукция КАК ТаблицаПродукция
|
|ГДЕ
| НЕ ТаблицаПродукция.Спецификация = ЗНАЧЕНИЕ(Справочник.РесурсныеСпецификации.ПустаяСсылка)
|
|ИНДЕКСИРОВАТЬ ПО
| Спецификация
|;
|
|
|ВЫБРАТЬ
| ВтПродукция.ДокументПоступления КАК ДокументПоступления,
| ВтПродукция.НомерГруппыЗатрат КАК НомерГруппыЗатрат,
| СпрЭтапыПроизводства.УслугиПереработчика.(
| Номенклатура КАК Номенклатура,
| Характеристика КАК Характеристика,
| СтатьяКалькуляции КАК СтатьяКалькуляции) КАК УслугиПереработчика
|ИЗ
| ВтПродукция КАК ВтПродукция
|
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.РесурсныеСпецификации.ВыходныеИзделия КАК ОсновныеИзделия
| ПО ОсновныеИзделия.Ссылка = ВтПродукция.Спецификация
| И ОсновныеИзделия.НомерСтроки = 1
|
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ЭтапыПроизводства КАК СпрЭтапыПроизводства
| ПО СпрЭтапыПроизводства.Ссылка = ОсновныеИзделия.Этап
| И СпрЭтапыПроизводства.ПроизводствоНаСтороне
|";
Запрос.УстановитьПараметр("ТаблицаПродукция", Объект.Продукция.Выгрузить());
УслугиСпецификаций = Запрос.Выполнить().Выгрузить();
УслугиСпецификаций.Индексы.Добавить("ДокументПоступления, НомерГруппыЗатрат");
СписокГруппЗатрат = Новый Массив;
ПараметрыГруппыЗатрат = Новый Структура("Распоряжение,Спецификация,"+ИмяПоляГруппаЗатрат);
Для каждого СтрокаПродукция Из Объект.Продукция Цикл
Если НЕ ЗначениеЗаполнено(СтрокаПродукция.НомерГруппыЗатрат)
И Не ЗначениеЗаполнено(СтрокаПродукция.ДокументПоступления) Тогда
Продолжить;
КонецЕсли;
ЗаполнитьЗначенияСвойств(ПараметрыГруппыЗатрат, СтрокаПродукция);
СписокГруппЗатрат.Добавить(ПараметрыГруппыЗатрат);
СтруктураПоиска = Новый Структура("ДокументПоступления, НомерГруппыЗатрат");
ЗаполнитьЗначенияСвойств(СтруктураПоиска, СтрокаПродукция);
СписокСтрок = Объект.Услуги.НайтиСтроки(СтруктураПоиска);
Если СписокСтрок.Количество() = 0 Тогда
СтрокаУслуга = Объект.Услуги.Добавить();
СтрокаУслуга.НомерГруппыЗатрат = СтрокаПродукция.НомерГруппыЗатрат;
СтрокаУслуга.ДокументПоступления = СтрокаПродукция.ДокументПоступления;
СтрокаУслуга.Спецификация = СтрокаПродукция.Спецификация;
Если ЗначениеЗаполнено(СтрокаУслуга.Спецификация) Тогда
УслугиСпецификацийПоГруппе = УслугиСпецификаций.НайтиСтроки(СтруктураПоиска);
Если УслугиСпецификацийПоГруппе.Количество() = 1 Тогда
УслугиПереработчика = УслугиСпецификацийПоГруппе[0].УслугиПереработчика;
Если Не УслугиПереработчика.Количество() = 0 Тогда
СтрокаУслуга.Номенклатура = УслугиПереработчика[0].Номенклатура;
СтрокаУслуга.Характеристика = УслугиПереработчика[0].Характеристика;
СтрокаУслуга.СтатьяКалькуляции = УслугиПереработчика[0].СтатьяКалькуляции;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
ПредставленияГруппЗатрат = ПредставленияГруппЗатрат(
СписокГруппЗатрат,
Объект.ГруппировкаЗатрат,
Объект.Продукция,
ИмяПоляГруппаЗатрат);
Для каждого СтрокаУслуга Из Объект.Услуги Цикл
ГруппаЗатрат = ПредставленияГруппЗатрат.Получить(СтрокаУслуга[ИмяПоляГруппаЗатрат]);
Если ГруппаЗатрат <> Неопределено Тогда
СтрокаУслуга.ГруппаЗатрат = ГруппаЗатрат;
КонецЕсли;
КонецЦикла;
КонецЕсли;
СтрокиКУдалению = Новый Массив;
Для каждого СтрокаУслуга Из Объект.Услуги Цикл
СтруктураПоиска = Новый Структура(ИмяПоляГруппаЗатрат + ",ДокументПоступления");
ЗаполнитьЗначенияСвойств(СтруктураПоиска, СтрокаУслуга);
ЕстьПродукция =
(Объект.Продукция.НайтиСтроки(СтруктураПоиска).Количество()<>0)
;
Если Не ЕстьПродукция Тогда
СтрокиКУдалению.Добавить(СтрокаУслуга);
КонецЕсли;
КонецЦикла;
СтруктураПоиска = Новый Структура(ИмяПоляГруппаЗатрат + ",ДокументПоступления");
Для каждого СтрокаУслуга Из СтрокиКУдалению Цикл
ЗаполнитьЗначенияСвойств(СтруктураПоиска, СтрокаУслуга);
СписокСтрок = Объект.Материалы.НайтиСтроки(СтруктураПоиска);
Для каждого ДанныеСтроки Из СписокСтрок Цикл
Объект.Материалы.Удалить(ДанныеСтроки);
КонецЦикла;
СписокСтрок = Объект.ВозвратныеОтходы.НайтиСтроки(СтруктураПоиска);
Для каждого ДанныеСтроки Из СписокСтрок Цикл
Объект.ВозвратныеОтходы.Удалить(ДанныеСтроки);
КонецЦикла;
Объект.Услуги.Удалить(СтрокаУслуга);
КонецЦикла;
ЗаполнитьПредставлениеГруппыЗатрат();
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПредставленияГруппЗатрат(Знач СписокГруппЗатрат, Знач ГруппировкаЗатрат, Знач Продукция, Знач ИмяПоляГруппаЗатрат)
Результат = Новый Соответствие;
Для каждого ПараметрыГруппыЗатрат Из СписокГруппЗатрат Цикл
ПредставлениеГруппыЗатрат = ПереработкаНаСтороне.ПредставлениеГруппыЗатрат(
ПараметрыГруппыЗатрат,
ГруппировкаЗатрат,
Продукция,
ИмяПоляГруппаЗатрат);
Результат.Вставить(ПараметрыГруппыЗатрат[ИмяПоляГруппаЗатрат], ПредставлениеГруппыЗатрат);
КонецЦикла;
Возврат Результат;
КонецФункции
&НаКлиенте
Процедура ЗаполнитьНомерГруппыЗатратВСтрокеПродукцииПередОкончаниемРедактирования(СтрокаПродукция, КешТекущейСтроки, НоваяСтрока)
Если Не Объект.ПоЗаказам И Не ПартионныйУчетВерсии22 Тогда
Возврат;
КонецЕсли;
Если (Объект.ГруппировкаЗатрат = ПредопределенноеЗначение("Перечисление.ГруппировкиЗатратВЗаказеПереработчику.ПоСпецификациям")
И КешТекущейСтроки.Спецификация <> СтрокаПродукция.Спецификация)
Или (Объект.ГруппировкаЗатрат = ПредопределенноеЗначение("Перечисление.ГруппировкиЗатратВЗаказеПереработчику.ПоПродукции")
И (КешТекущейСтроки.Номенклатура <> СтрокаПродукция.Номенклатура
Или КешТекущейСтроки.Характеристика <> СтрокаПродукция.Характеристика
Или КешТекущейСтроки.Назначение <> СтрокаПродукция.Назначение)) Тогда
ЗаполнитьНомерГруппыЗатратВСтрокеПродукции(СтрокаПродукция, Объект, ПартионныйУчетВерсии22);
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ЗаполнитьНомерГруппыЗатратВСтрокеПродукции(СтрокаПродукция, Объект, ПартионныйУчетВерсии22)
Если Объект.ГруппировкаЗатрат = ПредопределенноеЗначение("Перечисление.ГруппировкиЗатратВЗаказеПереработчику.ПоПродукции") Тогда
СтруктураПоиска = Новый Структура("Номенклатура, Характеристика, Назначение");
ИначеЕсли Объект.ГруппировкаЗатрат = ПредопределенноеЗначение("Перечисление.ГруппировкиЗатратВЗаказеПереработчику.ПоСпецификациям") Тогда
СтруктураПоиска = Новый Структура("Спецификация");
Иначе
Возврат;
КонецЕсли;
СтрокаПродукция.НомерГруппыЗатрат = Объект.МаксимальныйНомерГруппыЗатрат + 1;
Если Не Объект.ПоЗаказам И Не ПартионныйУчетВерсии22 Тогда
СтруктураПоиска.Вставить("ДокументПоступления");
КонецЕсли;
ЗаполнитьЗначенияСвойств(СтруктураПоиска, СтрокаПродукция);
СписокСтрок = Объект.Продукция.НайтиСтроки(СтруктураПоиска);
Если СписокСтрок.Количество() > 0 И СписокСтрок[0] = СтрокаПродукция Тогда
СписокСтрок.Удалить(0);
КонецЕсли;
Если СписокСтрок.Количество() > 0 И СписокСтрок[0].НомерГруппыЗатрат <> 0 Тогда
СтрокаПродукция.НомерГруппыЗатрат = СписокСтрок[0].НомерГруппыЗатрат;
КонецЕсли;
Если СтрокаПродукция.НомерГруппыЗатрат > Объект.МаксимальныйНомерГруппыЗатрат Тогда
Объект.МаксимальныйНомерГруппыЗатрат = СтрокаПродукция.НомерГруппыЗатрат;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ВыполнитьСменуГруппировкиЗатратСПродукцииНаСпецификации()
Для каждого СтрокаПродукция Из Объект.Продукция Цикл
СтруктураПоиска = Новый Структура("Спецификация,ДокументПоступления",
СтрокаПродукция.Спецификация, СтрокаПродукция.ДокументПоступления);
СписокСтрок = Объект.Продукция.НайтиСтроки(СтруктураПоиска);
Для каждого СтрокаПродукцияСТакойжеСпецификацией Из СписокСтрок Цикл
Если СтрокаПродукцияСТакойжеСпецификацией.НомерГруппыЗатрат = СтрокаПродукция.НомерГруппыЗатрат Тогда
Продолжить;
КонецЕсли;
СтруктураПоиска = Новый Структура("НомерГруппыЗатрат,ДокументПоступления",
СтрокаПродукцияСТакойжеСпецификацией.НомерГруппыЗатрат, СтрокаПродукцияСТакойжеСпецификацией.ДокументПоступления);
СписокСтрок = Объект.Материалы.НайтиСтроки(СтруктураПоиска);
Для каждого СтрокаМатериал Из СписокСтрок Цикл
СтрокаМатериал.НомерГруппыЗатрат = СтрокаПродукция.НомерГруппыЗатрат;
КонецЦикла;
СтрокаПродукцияСТакойжеСпецификацией.НомерГруппыЗатрат = СтрокаПродукция.НомерГруппыЗатрат;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ВыбратьГруппуЗатрат(ИмяТЧ)
Если ИмяТЧ = "Продукция" Тогда
ТекущиеДанные = Элементы.Продукция.ТекущиеДанные;
ИначеЕсли ИмяТЧ = "Материалы" Тогда
ТекущиеДанные = Элементы.Материалы.ТекущиеДанные;
ИначеЕсли ИмяТЧ = "ВозвратныеОтходы" Тогда
ТекущиеДанные = Элементы.ВозвратныеОтходы.ТекущиеДанные;
КонецЕсли;
Если ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
ИмяПоляГруппаЗатрат = ИмяПоляГруппаЗатрат(Объект);
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ПоЗаказам", Объект.ПоЗаказам);
ПараметрыФормы.Вставить("ГруппировкаЗатрат", Объект.ГруппировкаЗатрат);
ПараметрыФормы.Вставить("Услуги", Объект.Услуги);
ПараметрыФормы.Вставить("АдресХранилищаДанныхЗаказа", АдресХранилищаДанныхЗаказа);
ПараметрыФормы.Вставить("НомерГруппыЗатрат", ТекущиеДанные[ИмяПоляГруппаЗатрат]);
ПараметрыФормы.Вставить("ИмяПоляГруппаЗатрат", ИмяПоляГруппаЗатрат);
ПараметрыФормы.Вставить("ПартионныйУчетВерсии22", ПартионныйУчетВерсии22);
ПараметрыФормы.Вставить(
"ЗаголовокГруппы",
ПереработкаНаСторонеКлиентСервер.ЗаголовокПоляГруппыЗатрат(
Объект.ГруппировкаЗатрат,
ОбосабливатьПоНазначениюПродукции));
Если ИмяТЧ = "Продукция" И НЕ Объект.ПоЗаказам Тогда
ПараметрыФормы.Вставить("ОтборПоДокументуПоступления", ТекущиеДанные.ДокументПоступления);
КонецЕсли;
ОписаниеОповещения = Новый ОписаниеОповещения("ВыбратьГруппуЗатратЗавершение", ЭтотОбъект, ИмяТЧ);
ОткрытьФорму("Документ.ОтчетПереработчика.Форма.ВыборГруппыЗатрат", ПараметрыФормы,,,,, ОписаниеОповещения);
КонецПроцедуры
&НаКлиенте
Процедура ВыбратьГруппуЗатратЗавершение(РезультатЗакрытия, ИмяТЧ) Экспорт
ОценкаПроизводительностиКлиент.ЗамерВремени(
"Документ.ОтчетПереработчика.Форма.ФормаДокумента.ВыбратьГруппуЗатратЗавершение");
Если РезультатЗакрытия = Неопределено Тогда
Возврат;
КонецЕсли;
Модифицированность = Истина;
Если ИмяТЧ = "Продукция" Тогда
ВыделенныеСтроки = Элементы.Продукция.ВыделенныеСтроки;
ТабличнаяЧасть = Объект.Продукция;
ИначеЕсли ИмяТЧ = "Материалы" Тогда
ВыделенныеСтроки = Элементы.Материалы.ВыделенныеСтроки;
ТабличнаяЧасть = Объект.Материалы;
ИначеЕсли ИмяТЧ = "ВозвратныеОтходы" Тогда
ВыделенныеСтроки = Элементы.ВозвратныеОтходы.ВыделенныеСтроки;
ТабличнаяЧасть = Объект.ВозвратныеОтходы;
КонецЕсли;
ИмяПоляГруппаЗатрат = ИмяПоляГруппаЗатрат(Объект);
Для каждого ИдентификаторСтроки Из ВыделенныеСтроки Цикл
ТекущиеДанные = ТабличнаяЧасть.НайтиПоИдентификатору(ИдентификаторСтроки);
ТекущиеДанные.НомерГруппыЗатрат = РезультатЗакрытия.НомерГруппыЗатрат;
ТекущиеДанные.ЭтапПроизводства = РезультатЗакрытия.ЭтапПроизводства;
ТекущиеДанные.ГруппаЗатрат = РезультатЗакрытия.ГруппаЗатрат;
ТекущиеДанные.ДокументПоступления = РезультатЗакрытия.ДокументПоступления;
Если ИмяТЧ = "Продукция"
И (Объект.ГруппировкаЗатрат = ПредопределенноеЗначение("Перечисление.ГруппировкиЗатратВЗаказеПереработчику.ПоЭтапамПроизводства")
ИЛИ Объект.ГруппировкаЗатрат = ПредопределенноеЗначение("Перечисление.ГруппировкиЗатратВЗаказеПереработчику.ПоЗаказамНаПроизводство")
ИЛИ Объект.ГруппировкаЗатрат = ПредопределенноеЗначение("Перечисление.ГруппировкиЗатратВЗаказеПереработчику.ПоСпецификациям")) Тогда
ТекущиеДанные.Спецификация = РезультатЗакрытия.Спецификация;
КонецЕсли;
КонецЦикла;
ВыбратьГруппуЗатратЗавершениеНаСервере(РезультатЗакрытия[ИмяПоляГруппаЗатрат], ИмяПоляГруппаЗатрат);
КонецПроцедуры
&НаСервере
Процедура ВыбратьГруппуЗатратЗавершениеНаСервере(НомерГруппыЗатрат, ИмяПоляГруппаЗатрат)
Если Объект.ПоЗаказам Тогда
СтруктураПоиска = Новый Структура(ИмяПоляГруппаЗатрат, НомерГруппыЗатрат);
СписокСтрок = Объект.Услуги.НайтиСтроки(СтруктураПоиска);
Если СписокСтрок.Количество() = 0 Тогда
ДанныеЗаказа = ПолучитьИзВременногоХранилища(АдресХранилищаДанныхЗаказа);
СтруктураПоиска = Новый Структура(ИмяПоляГруппаЗатрат, НомерГруппыЗатрат);
СтрокаУслугаЗаказа = ДанныеЗаказа.Услуги.Найти(НомерГруппыЗатрат, ИмяПоляГруппаЗатрат);
СтрокаУслуа = Объект.Услуги.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаУслуа, СтрокаУслугаЗаказа);
КонецЕсли;
КонецЕсли;
ЗаполнитьУслугиПоПродукции();
ЗаполнитьПредставлениеГруппыЗатрат();
ПриИзмененииСуммыУслуг(ЭтаФорма);
НастроитьЭлементыСуммыНДСПриИзмененииСтавкиНДСУслуг(ЭтаФорма);
КоличествоУслуг = Объект.Услуги.Количество();
ОпределитьКоличествоВыходныхИзделий(ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьРаспоряжениеГруппы(ТекущиеДанные)
ИмяПоляГруппаЗатрат = ИмяПоляГруппаЗатрат(Объект);
Если НЕ ЗначениеЗаполнено(ТекущиеДанные[ИмяПоляГруппаЗатрат]) Тогда
Возврат;
КонецЕсли;
Если Объект.ГруппировкаЗатрат = ПредопределенноеЗначение("Перечисление.ГруппировкиЗатратВЗаказеПереработчику.ПоЭтапамПроизводства")
ИЛИ Объект.ГруппировкаЗатрат = ПредопределенноеЗначение("Перечисление.ГруппировкиЗатратВЗаказеПереработчику.ПоЗаказамНаПроизводство")
Тогда
СтруктураПоиска = Новый Структура(ИмяПоляГруппаЗатрат, ТекущиеДанные[ИмяПоляГруппаЗатрат]);
СписокСтрок = Объект.Услуги.НайтиСтроки(СтруктураПоиска);
Если СписокСтрок.Количество() <> 0 Тогда
ПоказатьЗначение(, СписокСтрок[0].Распоряжение);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция ИмяПоляГруппаЗатрат(Объект)
Возврат ПереработкаНаСторонеКлиентСервер.ИмяПоляГруппаЗатратВОтчетеПереработчика(Объект);
КонецФункции
&НаСервере
Процедура СпособРаспределенияЗатратНаВыходныеИзделияПриИзмененииНаСервере()
ПараметрыРаспределенияЗатратСтруктура = Документы.ОтчетПереработчика.ПараметрыРаспределенияЗатрат(Объект);
ПараметрыРаспределенияЗатрат = Новый ФиксированнаяСтруктура(ПараметрыРаспределенияЗатратСтруктура);
ПроизводствоСервер.РассчитатьДолюСтоимости(Объект, ПараметрыРаспределенияЗатрат);
РассчитатьПроцентРаспределенияЗатратНаВыходныеИзделия();
КонецПроцедуры
&НаСервере
Процедура УдалитьСтрокиПоКлючу(Таблица, ПоляКлюча, ЗначенияКлюча)
ПараметрыОтбора = Новый Структура(ПоляКлюча);
Для Каждого Элемент Из ЗначенияКлюча Цикл
ЗаполнитьЗначенияСвойств(ПараметрыОтбора, Элемент);
НайденныеСтроки = Таблица.НайтиСтроки(ПараметрыОтбора);
Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл
Таблица.Удалить(НайденнаяСтрока);
КонецЦикла;
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#Область Заполнение
&НаКлиенте
Функция ВозможноЗаполнитьМатериалыОтходы()
ТекущиеДанные = Элементы.Продукция.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Необходимо выбрать выбрать продукцию.'"));
Возврат Ложь;
КонецЕсли;
Если Объект.ПоЗаказам Тогда
Возврат Истина;
КонецЕсли;
Отказ = Ложь;
Для каждого ТекущаяСтрока Из Элементы.Продукция.ВыделенныеСтроки Цикл
ТекущиеДанные = Объект.Продукция.НайтиПоИдентификатору(ТекущаяСтрока);
Если Не ЗначениеЗаполнено(ТекущиеДанные.Спецификация) Тогда
ТекстСообщения = СтрШаблон(НСтр("ru = 'Не заполнено поле ""Спецификация"" в строке %1 списка ""Продукция""'"), ТекущиеДанные.НомерСтроки);
ПутьКРеквизиту = ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("Объект.Продукция", ТекущиеДанные.НомерСтроки, "Спецификация");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, Объект.Ссылка, ПутьКРеквизиту,, Отказ);
КонецЕсли;
КонецЦикла;
Возврат Не Отказ;
КонецФункции
&НаКлиенте
Процедура ЗаполнитьМатериалыОтходы()
Если Объект.ПоЗаказам Тогда
ТекстВопроса = НСтр("ru = 'Заполнить возвратные отходы, сырье и материалы по заказу?'");
Иначе
ТекстВопроса = НСтр("ru = 'Заполнить возвратные отходы, сырье и материалы по спецификации?'");
КонецЕсли;
ОписаниеОповещения = Новый ОписаниеОповещения("ПерезаполнитьВозвратныеОтходыСырьеИМатериалыЗавершение", ЭтотОбъект);
ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, РежимДиалогаВопрос.ДаНет);
КонецПроцедуры
&НаКлиенте
Процедура ПерезаполнитьВозвратныеОтходыСырьеИМатериалыЗавершение(РезультатВопроса, ДопПараметры) Экспорт
Если РезультатВопроса = КодВозвратаДиалога.Да Тогда
Модифицированность = Истина;
Если Объект.ПоЗаказам Тогда
СтрокиДляОбработки = Новый Массив();
Для Каждого ВыделеннаяСтрока Из Элементы.Продукция.ВыделенныеСтроки Цикл
СтрокиДляОбработки.Добавить(ВыделеннаяСтрока);
КонецЦикла;
Если Объект.ГруппировкаЗатрат = ПредопределенноеЗначение("Перечисление.ГруппировкиЗатратВЗаказеПереработчику.ПоЭтапамПроизводства") Тогда
Иначе
ПерезаполнитьПоЗаказуПереработчика(СтрокиДляОбработки);
КонецЕсли;
Объект.Сумма = Объект.Услуги.Итог("Сумма");
Объект.СуммаНДС = Объект.Услуги.Итог("СуммаНДС");
Объект.СуммаСНДС = Объект.Услуги.Итог("СуммаСНДС");
Объект.СуммаДокумента = Объект.СуммаСНДС;
Иначе
Если ПартионныйУчетВерсии22 Тогда
ПерезаполнитьПоСпецификации("МатериалыИУслуги,ВозвратныеОтходы");
Иначе
ПерезаполнитьПоСпецификации("МатериалыИУслуги");
КонецЕсли;
КонецЕсли;
ОпределитьКоличествоВыходныхИзделий(ЭтаФорма);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПерезаполнитьПоЗаказуПереработчика(ИдентификаторыСтрок)
ПоляГруппировкиЗатрат = "НомерГруппыЗатрат";
ЗначенияГруппировок = Объект.Продукция.Выгрузить(Новый Массив, ПоляГруппировкиЗатрат);
Для Каждого ИдентификаторСтроки Из ИдентификаторыСтрок Цикл
ЗаполнитьЗначенияСвойств(ЗначенияГруппировок.Добавить(), Объект.Продукция.НайтиПоИдентификатору(ИдентификаторСтроки));
КонецЦикла;
ЗначенияГруппировок.Свернуть(ПоляГруппировкиЗатрат);
ЗначенияГруппировок.Индексы.Добавить(ПоляГруппировкиЗатрат);
ВыбранныеСтрокиПродукции = Объект.Продукция.Выгрузить(Новый Массив, "КодСтроки,Количество");
Для Каждого ТекущаяСтрока Из Объект.Продукция Цикл
ОтборСтрок = Новый Структура(ПоляГруппировкиЗатрат, ТекущаяСтрока.НомерГруппыЗатрат);
Если ЗначенияГруппировок.НайтиСтроки(ОтборСтрок).Количество() > 0 Тогда
ЗаполнитьЗначенияСвойств(ВыбранныеСтрокиПродукции.Добавить(), ТекущаяСтрока);
КонецЕсли;
КонецЦикла;
ТекстТабличныеЧасти = Документы.ЗаказПереработчику.ТабличныеЧастиДляОформленияОтчетаПереработчика();
ТекстТоварыКОформлению =
"ВЫБРАТЬ
| ВыбранныеСтроки.КодСтроки КАК КодСтроки,
| ВыбранныеСтроки.Количество КАК КоличествоОстаток
|ПОМЕСТИТЬ ТоварыКОформлению
|ИЗ
| &ВыбранныеСтрокиПродукции КАК ВыбранныеСтроки
|ИНДЕКСИРОВАТЬ ПО
| КодСтроки";
ТекстНормативы =
"ВЫБРАТЬ
| ГруппировкаЗатрат.НомерГруппыЗатрат КАК НомерГруппыЗатрат,
| МАКСИМУМ(ГруппировкаЗатрат.Коэффициент) КАК Коэффициент
|ПОМЕСТИТЬ Нормативы
|ИЗ(
| ВЫБРАТЬ
| ПродукцияЗаказа.Номенклатура КАК Номенклатура,
| ПродукцияЗаказа.Характеристика КАК Характеристика,
| ПродукцияЗаказа.НомерГруппыЗатрат КАК НомерГруппыЗатрат,
| СУММА(Остатки.КоличествоОстаток) / СУММА(ПродукцияЗаказа.Количество) КАК Коэффициент
| ИЗ
| &ПродукцияЗаказа КАК ПродукцияЗаказа
|
| ЛЕВОЕ СОЕДИНЕНИЕ ТоварыКОформлению КАК Остатки
| ПО ПродукцияЗаказа.КодСтроки = Остатки.КодСтроки
| ГДЕ
| НЕ Остатки.КодСтроки ЕСТЬ NULL
| СГРУППИРОВАТЬ ПО
| ПродукцияЗаказа.НомерГруппыЗатрат,
| ПродукцияЗаказа.Номенклатура,
| ПродукцияЗаказа.Характеристика) КАК ГруппировкаЗатрат
|СГРУППИРОВАТЬ ПО
| ГруппировкаЗатрат.НомерГруппыЗатрат
|ИНДЕКСИРОВАТЬ ПО
| ГруппировкаЗатрат.НомерГруппыЗатрат";
ТекстВозвратныеОтходы =
"ВЫБРАТЬ
| МИНИМУМ(ВозвратныеОтходыЗаказа.НомерСтроки) КАК НомерСтроки,
| ВозвратныеОтходыЗаказа.НомерГруппыЗатрат КАК НомерГруппыЗатрат,
| ВозвратныеОтходыЗаказа.КодСтроки КодСтроки,
| ВозвратныеОтходыЗаказа.Номенклатура КАК Номенклатура,
| ВозвратныеОтходыЗаказа.Характеристика КАК Характеристика,
| ВозвратныеОтходыЗаказа.Назначение КАК Назначение,
| ВозвратныеОтходыЗаказа.Получатель КАК Получатель,
| ВозвратныеОтходыЗаказа.СписатьНаРасходы КАК СписатьНаРасходы,
| ВозвратныеОтходыЗаказа.СтатьяРасходов КАК СтатьяРасходов,
| ВозвратныеОтходыЗаказа.АналитикаРасходов КАК АналитикаРасходов,
| ВозвратныеОтходыЗаказа.АналитикаАктивовПассивов КАК АналитикаАктивовПассивов,
| ВозвратныеОтходыЗаказа.Упаковка КАК Упаковка,
| ВозвратныеОтходыЗаказа.СтатьяКалькуляции КАК СтатьяКалькуляции,
| ВозвратныеОтходыЗаказа.ВидЦены КАК ВидЦены,
| ВозвратныеОтходыЗаказа.Цена КАК Цена,
| СУММА(ВозвратныеОтходыЗаказа.Цена
| * ВозвратныеОтходыЗаказа.Количество * Нормативы.Коэффициент / ЕСТЬNULL(&Коэффициент, 1)) КАК Сумма,
| СУММА(ВозвратныеОтходыЗаказа.Количество * Нормативы.Коэффициент) КАК Количество,
| СУММА(ВозвратныеОтходыЗаказа.Количество * Нормативы.Коэффициент / ЕСТЬNULL(&Коэффициент, 1)) КАК КоличествоУпаковок
|ИЗ
| &ВозвратныеОтходыЗаказа КАК ВозвратныеОтходыЗаказа
|
| ЛЕВОЕ СОЕДИНЕНИЕ Нормативы КАК Нормативы
| ПО Нормативы.НомерГруппыЗатрат = ВозвратныеОтходыЗаказа.НомерГруппыЗатрат
|ГДЕ
| НЕ Нормативы.НомерГруппыЗатрат ЕСТЬ NULL
|СГРУППИРОВАТЬ ПО
| ВозвратныеОтходыЗаказа.НомерГруппыЗатрат,
| ВозвратныеОтходыЗаказа.КодСтроки,
| ВозвратныеОтходыЗаказа.Номенклатура,
| ВозвратныеОтходыЗаказа.Характеристика,
| ВозвратныеОтходыЗаказа.Назначение,
| ВозвратныеОтходыЗаказа.Получатель,
| ВозвратныеОтходыЗаказа.СписатьНаРасходы,
| ВозвратныеОтходыЗаказа.СтатьяРасходов,
| ВозвратныеОтходыЗаказа.АналитикаРасходов,
| ВозвратныеОтходыЗаказа.АналитикаАктивовПассивов,
| ВозвратныеОтходыЗаказа.Упаковка,
| ВозвратныеОтходыЗаказа.СтатьяКалькуляции,
| ВозвратныеОтходыЗаказа.ВидЦены,
| ВозвратныеОтходыЗаказа.Цена
|УПОРЯДОЧИТЬ ПО
| НомерСтроки";
ТекстМатериалы =
"ВЫБРАТЬ
| МИНИМУМ(МатериалыЗаказа.НомерСтроки) КАК НомерСтроки,
| МатериалыЗаказа.НомерГруппыЗатрат КАК НомерГруппыЗатрат,
| МатериалыЗаказа.Номенклатура КАК Номенклатура,
| МатериалыЗаказа.Характеристика КАК Характеристика,
| МатериалыЗаказа.Назначение КАК Назначение,
| МатериалыЗаказа.Упаковка КАК Упаковка,
| МатериалыЗаказа.СтатьяКалькуляции КАК СтатьяКалькуляции,
| СУММА(МатериалыЗаказа.Количество * Нормативы.Коэффициент) КАК Количество,
| СУММА(МатериалыЗаказа.Количество * Нормативы.Коэффициент / ЕСТЬNULL(&Коэффициент, 1)) КАК КоличествоУпаковок
|ИЗ
| &МатериалыЗаказа КАК МатериалыЗаказа
|
| ЛЕВОЕ СОЕДИНЕНИЕ Нормативы КАК Нормативы
| ПО Нормативы.НомерГруппыЗатрат = МатериалыЗаказа.НомерГруппыЗатрат
|ГДЕ
| НЕ Нормативы.НомерГруппыЗатрат ЕСТЬ NULL
|СГРУППИРОВАТЬ ПО
| МатериалыЗаказа.НомерГруппыЗатрат,
| МатериалыЗаказа.Номенклатура,
| МатериалыЗаказа.Характеристика,
| МатериалыЗаказа.Назначение,
| МатериалыЗаказа.Упаковка,
| МатериалыЗаказа.СтатьяКалькуляции
|УПОРЯДОЧИТЬ ПО
| НомерСтроки";
ТекстУслуги =
"ВЫБРАТЬ
| УслугиЗаказа.НомерСтроки КАК НомерСтроки,
| УслугиЗаказа.Номенклатура КАК Номенклатура,
| УслугиЗаказа.Характеристика КАК Характеристика,
| УслугиЗаказа.Спецификация КАК Спецификация,
| УслугиЗаказа.Сумма * Нормативы.Коэффициент КАК Сумма,
| УслугиЗаказа.СтавкаНДС КАК СтавкаНДС,
| УслугиЗаказа.СтатьяКалькуляции КАК СтатьяКалькуляции,
| УслугиЗаказа.НомерГруппыЗатрат КАК НомерГруппыЗатрат,
| 0 КАК СуммаНДС,
| 0 КАК СуммаСНДС,
| 0 КАК СуммаВзаиморасчетов,
| 0 КАК СуммаНДСВзаиморасчетов
|ИЗ
| &УслугиЗаказа КАК УслугиЗаказа
|
| ЛЕВОЕ СОЕДИНЕНИЕ Нормативы КАК Нормативы
| ПО Нормативы.НомерГруппыЗатрат = УслугиЗаказа.НомерГруппыЗатрат
|
|ГДЕ
| НЕ Нормативы.НомерГруппыЗатрат ЕСТЬ NULL
|УПОРЯДОЧИТЬ ПО
| НомерСтроки";
ТекстМатериалы = СтрЗаменить(ТекстМатериалы, "&МатериалыЗаказа", СтрШаблон("(%1)", ТекстТабличныеЧасти.Материалы));
ТекстВозвратныеОтходы = СтрЗаменить(ТекстВозвратныеОтходы, "&ВозвратныеОтходыЗаказа", СтрШаблон("(%1)", ТекстТабличныеЧасти.ВозвратныеОтходы));
ТекстНормативы = СтрЗаменить(ТекстНормативы, "&ПродукцияЗаказа", СтрШаблон("(%1)", ТекстТабличныеЧасти.Продукция));
ТекстУслуги = СтрЗаменить(ТекстУслуги, "&УслугиЗаказа", СтрШаблон("(%1)", ТекстТабличныеЧасти.Услуги));
ТекстКоэффициентУпаковки = Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки("%1.Упаковка", "%1.Номенклатура");
ТекстВозвратныеОтходы = СтрЗаменить(ТекстВозвратныеОтходы, "&Коэффициент", СтрШаблон(ТекстКоэффициентУпаковки, "ВозвратныеОтходыЗаказа"));
ТекстМатериалы = СтрЗаменить(ТекстМатериалы, "&Коэффициент", СтрШаблон(ТекстКоэффициентУпаковки, "МатериалыЗаказа"));
ТекстыЗапроса = Новый Массив(5);
ТекстыЗапроса[0] = ТекстТоварыКОформлению;
ТекстыЗапроса[1] = ТекстНормативы;
ТекстыЗапроса[2] = ТекстВозвратныеОтходы;
ТекстыЗапроса[3] = ТекстМатериалы;
ТекстыЗапроса[4] = ТекстУслуги;
Запрос = Новый Запрос();
Запрос.УстановитьПараметр("Заказ", Объект.ЗаказПереработчику);
Запрос.УстановитьПараметр("ВыбранныеСтрокиПродукции", ВыбранныеСтрокиПродукции);
Запрос.Текст = СтрСоединить(ТекстыЗапроса, ОбщегоНазначения.РазделительПакетаЗапросов());
Если ОбщегоНазначенияУТ.РежимОтладки() Тогда
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
КонецЕсли;
ПакетРезультатовЗапроса = Запрос.ВыполнитьПакет();
ВозвратныеОтходы = ПакетРезультатовЗапроса[2].Выгрузить();
Материалы = ПакетРезультатовЗапроса[3].Выгрузить();
Услуги = ПакетРезультатовЗапроса[4].Выгрузить();
СтруктураПересчетаСуммы = Новый Структура("ЦенаВключаетНДС", Ложь);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ОчиститьСуммуВзаиморасчетов");
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьТЧ(Услуги, СтруктураДействий, Неопределено);
УдалитьСтрокиПоКлючу(Объект.ВозвратныеОтходы, ПоляГруппировкиЗатрат, ЗначенияГруппировок);
УдалитьСтрокиПоКлючу(Объект.Материалы, ПоляГруппировкиЗатрат, ЗначенияГруппировок);
УдалитьСтрокиПоКлючу(Объект.Услуги, ПоляГруппировкиЗатрат, ЗначенияГруппировок);
ОбщегоНазначенияУТ.ДобавитьСтрокиВТаблицу(Объект.ВозвратныеОтходы, ВозвратныеОтходы);
ОбщегоНазначенияУТ.ДобавитьСтрокиВТаблицу(Объект.Материалы, Материалы);
ОбщегоНазначенияУТ.ДобавитьСтрокиВТаблицу(Объект.Услуги, Услуги);
ЗаполнитьСлужебныеРеквизиты();
ЗаполнитьНормативыМатериаловНаСервере();
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьПоПоступлениям(Объект, ТаблицаПродукции)
ТекстТоварыПолученные =
"ВЫБРАТЬ
| ТоварыПолученные.Распоряжение КАК Распоряжение,
| ТоварыПолученные.КодСтроки КАК КодСтроки,
| СУММА(ТоварыПолученные.КоличествоОстаток) КАК КоличествоОстаток
|ПОМЕСТИТЬ ТоварыПолученныеОтПереработчика_Остатки
|ИЗ
| (ВЫБРАТЬ
| ТоварыПолученные.Распоряжение КАК Распоряжение,
| ТоварыПолученные.КодСтроки КАК КодСтроки,
| ТоварыПолученные.КоличествоОстаток КАК КоличествоОстаток
| ИЗ
| РегистрНакопления.ТоварыПолученныеОтПереработчика.Остатки(,
| (Распоряжение,КодСтроки) В(
| ВЫБРАТЬ
| РезультатыПодбора.Распоряжение КАК Распоряжение,
| РезультатыПодбора.КодСтроки КАК КодСтроки
| ИЗ
| ПодборПродукцииИзПоступлений КАК РезультатыПодбора)) КАК ТоварыПолученные
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ДвиженияТекущегоДокумента.Распоряжение КАК ДокументПоступления,
| ДвиженияТекущегоДокумента.КодСтроки КАК КодСтроки,
|
| ВЫБОР КОГДА ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) ТОГДА
| -ДвиженияТекущегоДокумента.Количество
| ИНАЧЕ
| ДвиженияТекущегоДокумента.Количество
| КОНЕЦ КАК КоличествоОстаток
| ИЗ
| РегистрНакопления.ТоварыПолученныеОтПереработчика КАК ДвиженияТекущегоДокумента
|
| ЛЕВОЕ СОЕДИНЕНИЕ ПодборПродукцииИзПоступлений КАК РезультатыПодбора
| ПО РезультатыПодбора.КодСтроки = ДвиженияТекущегоДокумента.КодСтроки
| И РезультатыПодбора.Распоряжение = ДвиженияТекущегоДокумента.Распоряжение
| ГДЕ
| ДвиженияТекущегоДокумента.Регистратор = &Регистратор
| И ДвиженияТекущегоДокумента.Активность
| И НЕ РезультатыПодбора.Распоряжение ЕСТЬ NULL) КАК ТоварыПолученные
|
|СГРУППИРОВАТЬ ПО
| ТоварыПолученные.Распоряжение,
| ТоварыПолученные.КодСтроки
|ИМЕЮЩИЕ
| СУММА(ТоварыПолученные.КоличествоОстаток) > 0
|ИНДЕКСИРОВАТЬ ПО
| Распоряжение, КодСтроки";
ТекстТабличныеЧасти = Документы.ПоступлениеОтПереработчика.ТабличныеЧастиДляОформленияОтчетаПереработчика();
ТекстПодборПродукцииИзПоступлений =
"ВЫБРАТЬ
| РезультатыПодбора.КодСтроки КАК КодСтроки,
| РезультатыПодбора.Распоряжение КАК Распоряжение
|ПОМЕСТИТЬ ПодборПродукцииИзПоступлений
|ИЗ
| &ПодборПродукцииИзПоступлений КАК РезультатыПодбора
|ИНДЕКСИРОВАТЬ ПО
| Распоряжение, КодСтроки";
ТекстПродукция =
"ВЫБРАТЬ
| ТоварыПоступления.НомерСтроки КАК НомерСтроки,
| ТоварыПоступления.Ссылка КАК ДокументПоступления,
| ТоварыПоступления.КодСтроки КАК КодСтроки,
| ТоварыПоступления.Номенклатура КАК Номенклатура,
| ТоварыПоступления.Характеристика КАК Характеристика,
| ТоварыПоступления.Назначение КАК Назначение,
| ТоварыПоступления.Упаковка КАК Упаковка,
| ТоварыПолученные.КоличествоОстаток КАК Количество,
| ТоварыПолученные.КоличествоОстаток / ЕСТЬNULL(&Коэффициент, 1) КАК КоличествоУпаковок,
| 0 КАК ДоляСтоимости,
| 0 КАК ДоляСтоимостиНаЕдиницу
|ИЗ
| &ТоварыПоступления КАК ТоварыПоступления
|
| ЛЕВОЕ СОЕДИНЕНИЕ ТоварыПолученныеОтПереработчика_Остатки КАК ТоварыПолученные
| ПО ТоварыПолученные.Распоряжение = ТоварыПоступления.Ссылка
| И ТоварыПолученные.КодСтроки = ТоварыПоступления.КодСтроки
|ГДЕ
| НЕ ТоварыПолученные.Распоряжение ЕСТЬ NULL
|УПОРЯДОЧИТЬ ПО
| ТоварыПоступления.НомерСтроки";
ТекстВозвратныеОтходы =
"ВЫБРАТЬ
| ВозвратныеОтходыПоступления.НомерСтроки КАК НомерСтроки,
| ВозвратныеОтходыПоступления.Ссылка КАК ДокументПоступления,
| ВозвратныеОтходыПоступления.КодСтроки КАК КодСтроки,
| ВозвратныеОтходыПоступления.Номенклатура КАК Номенклатура,
| ВозвратныеОтходыПоступления.Характеристика КАК Характеристика,
| ВозвратныеОтходыПоступления.Назначение КАК Назначение,
| ВозвратныеОтходыПоступления.Упаковка КАК Упаковка,
| ВозвратныеОтходыПоступления.Цена КАК Цена,
| ВозвратныеОтходыПоступления.Сумма
| * ТоварыПолученные.КоличествоОстаток
| / ВозвратныеОтходыПоступления.Количество КАК Сумма,
| ТоварыПолученные.КоличествоОстаток КАК Количество,
| ТоварыПолученные.КоличествоОстаток / ЕСТЬNULL(&Коэффициент, 1) КАК КоличествоУпаковок
|ИЗ
| &ВозвратныеОтходыПоступления КАК ВозвратныеОтходыПоступления
|
| ЛЕВОЕ СОЕДИНЕНИЕ ТоварыПолученныеОтПереработчика_Остатки КАК ТоварыПолученные
| ПО ТоварыПолученные.Распоряжение = ВозвратныеОтходыПоступления.Ссылка
| И ТоварыПолученные.КодСтроки = ВозвратныеОтходыПоступления.КодСтроки
|ГДЕ
| НЕ ТоварыПолученные.Распоряжение ЕСТЬ NULL
|УПОРЯДОЧИТЬ ПО
| ВозвратныеОтходыПоступления.НомерСтроки";
ТекстПродукция = СтрЗаменить(ТекстПродукция, "&ТоварыПоступления", СтрШаблон("(%1)", ТекстТабличныеЧасти.Товары));
ТекстВозвратныеОтходы = СтрЗаменить(ТекстВозвратныеОтходы, "&ВозвратныеОтходыПоступления", СтрШаблон("(%1)", ТекстТабличныеЧасти.ВозвратныеОтходы));
ТекстКоэффициентУпаковки = Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки("%1.Упаковка", "%1.Номенклатура");
ТекстПродукция = СтрЗаменить(ТекстПродукция, "&Коэффициент", СтрШаблон(ТекстКоэффициентУпаковки, "ТоварыПоступления"));
ТекстВозвратныеОтходы = СтрЗаменить(ТекстВозвратныеОтходы, "&Коэффициент", СтрШаблон(ТекстКоэффициентУпаковки, "ВозвратныеОтходыПоступления"));
ТекстыЗапроса = Новый Массив(4);
ТекстыЗапроса[0] = ТекстПодборПродукцииИзПоступлений;
ТекстыЗапроса[1] = ТекстТоварыПолученные;
ТекстыЗапроса[2] = ТекстПродукция;
ТекстыЗапроса[3] = ТекстВозвратныеОтходы;
Запрос = Новый Запрос;
Запрос.Текст = СтрСоединить(ТекстыЗапроса, ОбщегоНазначения.РазделительПакетаЗапросов());
Запрос.УстановитьПараметр("Регистратор", Объект.Ссылка);
Запрос.УстановитьПараметр("ПодборПродукцииИзПоступлений", ТаблицаПродукции);
Запрос.УстановитьПараметр("Поступления", ТаблицаПродукции.ВыгрузитьКолонку("Распоряжение"));
Запрос.Текст = СтрСоединить(ТекстыЗапроса, ОбщегоНазначения.РазделительПакетаЗапросов());
Если ОбщегоНазначенияУТ.РежимОтладки() Тогда
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
КонецЕсли;
ПакетРезультатовЗапроса = Запрос.ВыполнитьПакет();
Продукция = ПакетРезультатовЗапроса[2].Выгрузить();
ВозвратныеОтходы = ПакетРезультатовЗапроса[3].Выгрузить();
Продукция.Колонки.Добавить("Спецификация");
Продукция.Колонки.Добавить("НомерГруппыЗатрат");
Продукция.Колонки.Добавить("СтатьяРасходов");
Продукция.Колонки.Добавить("ТипСтатьи");
ЗаполнитьСпецификациюВКоллекции(Продукция);
Для Каждого СтрокаПродукция Из Продукция Цикл
СтрокаПродукция.НомерГруппыЗатрат = ПереработкаНаСторонеКлиентСервер.НомерГруппыЗатратВОтчетеПереработчика(
Объект,
СтрокаПродукция);
ДоходыИРасходыКлиентСервер.ПриДобавленииСтрокиВТаблицу(ЭтотОбъект, СтрокаПродукция, "Объект.Продукция");
КонецЦикла;
ВозвратныеОтходы.Колонки.Добавить("СтатьяРасходов");
ВозвратныеОтходы.Колонки.Добавить("ТипСтатьи");
Для Каждого СтрокаВозвратныеОтходы Из ВозвратныеОтходы Цикл
ДоходыИРасходыКлиентСервер.ПриДобавленииСтрокиВТаблицу(ЭтотОбъект, СтрокаВозвратныеОтходы, "Объект.ВозвратныеОтходы");
КонецЦикла;
СписокНоменклатуры = Справочники.РесурсныеСпецификации.СписокНоменклатуры();
СписокНоменклатуры.Колонки.Добавить("ДокументПоступления");
СписокНоменклатуры.Колонки.Добавить("НомерГруппыЗатрат");
ПоляГруппировки = "ДокументПоступления,НомерГруппыЗатрат";
ПоляДляПолученияДанныхСпецификации = "Номенклатура,Характеристика,Спецификация,Количество," + ПоляГруппировки;
КэшированныеЗначения = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначения();
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПроверитьЗаполнитьДолюСтоимости", ПараметрыРаспределенияЗатрат);
ОбрабатываемыеСтроки = Новый Массив();
Для Каждого ТекущиеДанные Из Продукция Цикл
Если ЗначениеЗаполнено(ТекущиеДанные.Спецификация) Тогда
НоваяСтрока = СписокНоменклатуры.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, ТекущиеДанные, ПоляДляПолученияДанныхСпецификации);
КонецЕсли;
ОбрабатываемыеСтроки.Добавить(ТекущиеДанные);
КонецЦикла;
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокиТЧ(
ОбрабатываемыеСтроки,
СтруктураДействий,
Продукция,
КэшированныеЗначения);
ТаблицаДляПоиска = Продукция.Скопировать(, ПоляГруппировки);
Для Каждого ТекущиеДанные Из Продукция Цикл
Если ЗначениеЗаполнено(ТекущиеДанные.Спецификация) Тогда
ЗаполнитьЗначенияСвойств(ТаблицаДляПоиска.Добавить(), ТекущиеДанные);
КонецЕсли;
КонецЦикла;
ТаблицаДляПоиска.Свернуть(ПоляГруппировки);
ТаблицаДляПоиска.Индексы.Добавить(ПоляГруппировки);
ПродукцияКопия = Объект.Продукция.Выгрузить(, "КодСтроки," + ПоляДляПолученияДанныхСпецификации);
УдалитьСтрокиПоКлючу(ПродукцияКопия, "КодСтроки,ДокументПоступления", Продукция);
Для Каждого ТекущиеДанные Из ПродукцияКопия Цикл
ОтборСтрок = Новый Структура(ПоляГруппировки, ТекущиеДанные.ДокументПоступления, ТекущиеДанные.НомерГруппыЗатрат);
Если ЗначениеЗаполнено(ТекущиеДанные.Спецификация) И ТаблицаДляПоиска.НайтиСтроки(ОтборСтрок).Количество() > 0 Тогда
НоваяСтрока = СписокНоменклатуры.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, ТекущиеДанные, ПоляДляПолученияДанныхСпецификации);
КонецЕсли;
КонецЦикла;
ДанныеСпецификацииПоСпискуПродукции = ДанныеСпецификацииПоСпискуПродукции(СписокНоменклатуры, "Этапы,МатериалыИУслуги");
ЗаполняемыеПоля = "Номенклатура,Характеристика,Упаковка,СтатьяКалькуляции,КоличествоУпаковок,Количество";
Материалы = ДанныеСпецификацийВТаблицу(ДанныеСпецификацииПоСпискуПродукции, "МатериалыИУслуги", ЗаполняемыеПоля, Неопределено);
Услуги = Продукция.Скопировать(,ПоляГруппировки);
Услуги.Свернуть(ПоляГруппировки);
УдалитьСтрокиПоКлючу(Услуги, ПоляГруппировки, Объект.Услуги);
Услуги.Колонки.Добавить("Номенклатура");
Услуги.Колонки.Добавить("Характеристика");
Услуги.Колонки.Добавить("СтатьяКалькуляции");
Продукция.Индексы.Добавить(ПоляГруппировки);
ОтборЭтапов = Новый Структура("ПроизводствоНаСтороне", Истина);
Этапы = ДанныеСпецификацийВТаблицу(ДанныеСпецификацииПоСпискуПродукции,
"Этапы", "УслугиПереработчика", ОтборЭтапов);
Если Этапы.Количество() > 0 Тогда
Этапы.Свернуть("УслугиПереработчика," + ПоляГруппировки);
Этапы.Индексы.Добавить(ПоляГруппировки);
Для Каждого ТекущаяУслуга Из Услуги Цикл
ОтборСтрок = Новый Структура(ПоляГруппировки, ТекущаяУслуга.ДокументПоступления, ТекущаяУслуга.НомерГруппыЗатрат);
СторкиЭтапа = Этапы.НайтиСтроки(ОтборСтрок);
Если СторкиЭтапа.Количество() = 1 Тогда
УслугиПереработчика = СторкиЭтапа[0].УслугиПереработчика;
Если Не УслугиПереработчика.Количество() = 0 Тогда
ТекущаяУслуга.Номенклатура = УслугиПереработчика[0].Номенклатура;
ТекущаяУслуга.Характеристика = УслугиПереработчика[0].Характеристика;
ТекущаяУслуга.СтатьяКалькуляции = УслугиПереработчика[0].СтатьяКалькуляции;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
УдалитьСтрокиПоКлючу(Объект.Продукция, "КодСтроки,ДокументПоступления", Продукция);
УдалитьСтрокиПоКлючу(Объект.ВозвратныеОтходы, "КодСтроки,ДокументПоступления", ВозвратныеОтходы);
УдалитьСтрокиПоКлючу(Объект.Материалы, ПоляГруппировки, ДанныеСпецификацииПоСпискуПродукции);
ОбщегоНазначенияУТ.ДобавитьСтрокиВТаблицу(Объект.Продукция, Продукция);
ОбщегоНазначенияУТ.ДобавитьСтрокиВТаблицу(Объект.ВозвратныеОтходы, ВозвратныеОтходы);
ОбщегоНазначенияУТ.ДобавитьСтрокиВТаблицу(Объект.Материалы, Материалы);
ОбщегоНазначенияУТ.ДобавитьСтрокиВТаблицу(Объект.Услуги, Услуги);
КонецПроцедуры
&НаСервере
Процедура ПерезаполнитьПоСпецификации(ИменаТабличныхЧастей)
ПоляГруппировкиЗатрат = "ДокументПоступления,НомерГруппыЗатрат";
ЗначенияГруппировок = Объект.Продукция.Выгрузить(Новый Массив, ПоляГруппировкиЗатрат);
Для Каждого ВыделеннаяСтрока Из Элементы.Продукция.ВыделенныеСтроки Цикл
СтрокаПродукции = Объект.Продукция.НайтиПоИдентификатору(ВыделеннаяСтрока);
Если ЗначениеЗаполнено(СтрокаПродукции.Спецификация) Тогда
ЗаполнитьЗначенияСвойств(ЗначенияГруппировок.Добавить(), СтрокаПродукции);
КонецЕсли;
КонецЦикла;
ЗначенияГруппировок.Свернуть(ПоляГруппировкиЗатрат);
СписокНоменклатуры = Справочники.РесурсныеСпецификации.СписокНоменклатуры();
СписокНоменклатуры.Колонки.Добавить("ДокументПоступления");
СписокНоменклатуры.Колонки.Добавить("НомерГруппыЗатрат");
Для Каждого Идентификатор Из Элементы.Продукция.ВыделенныеСтроки Цикл
ТекущиеДанные = Объект.Продукция.НайтиПоИдентификатору(Идентификатор);
Если ЗначениеЗаполнено(ТекущиеДанные.Спецификация) Тогда
НоваяСтрока = СписокНоменклатуры.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, ТекущиеДанные);
НоваяСтрока.НачалоПроизводства = Объект.Дата;
НоваяСтрока.НаправлениеДеятельности = Объект.НаправлениеДеятельности;
КонецЕсли;
КонецЦикла;
Если СтрНайти(ИменаТабличныхЧастей, "МатериалыИУслуги") > 0 Тогда
УдалитьСтрокиПоКлючу(Объект.Материалы, ПоляГруппировкиЗатрат, ЗначенияГруппировок);
ЗаполняемыеПоля = "Номенклатура,Характеристика,Упаковка,СтатьяКалькуляции,КоличествоУпаковок,Количество";
Материалы = Объект.Материалы.Выгрузить(Новый Массив, ПоляГруппировкиЗатрат + "," + ЗаполняемыеПоля);
КонецЕсли;
Если СтрНайти(ИменаТабличныхЧастей, "ВозвратныеОтходы") > 0 Тогда
УдалитьСтрокиПоКлючу(Объект.ВозвратныеОтходы, ПоляГруппировкиЗатрат, ЗначенияГруппировок);
ЗаполняемыеПоля = "Номенклатура,Характеристика,Упаковка,СтатьяКалькуляции,КоличествоУпаковок,Количество";
ВозвратныеОтходы = Объект.ВозвратныеОтходы.Выгрузить(Новый Массив, ПоляГруппировкиЗатрат + "," + ЗаполняемыеПоля);
КонецЕсли;
ДанныеСпецификацииПоСпискуПродукции = ДанныеСпецификацииПоСпискуПродукции(СписокНоменклатуры, "ВозвратныеОтходы,МатериалыИУслуги");
Для Каждого Элемент Из ДанныеСпецификацииПоСпискуПродукции Цикл
Справочники.РесурсныеСпецификации.ИсключитьПроизводимыеНаЭтапеПолуфабрикаты(
Элемент.МатериалыИУслуги,
Элемент.ВозвратныеОтходы);
Если СтрНайти(ИменаТабличныхЧастей, "МатериалыИУслуги") > 0 Тогда
Для Каждого СтрокаМатериала Из Элемент.МатериалыИУслуги Цикл
НоваяСтрока = Материалы.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаМатериала);
ЗаполнитьЗначенияСвойств(НоваяСтрока, Элемент, ПоляГруппировкиЗатрат);
КонецЦикла;
КонецЕсли;
Если СтрНайти(ИменаТабличныхЧастей, "ВозвратныеОтходы") > 0 Тогда
Для Каждого СтрокаВозвратныхОтходов Из Элемент.ВозвратныеОтходы Цикл
НоваяСтрока = ВозвратныеОтходы.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаВозвратныхОтходов);
ЗаполнитьЗначенияСвойств(НоваяСтрока, Элемент, ПоляГруппировкиЗатрат);
КонецЦикла;
КонецЕсли;
КонецЦикла;
Если СтрНайти(ИменаТабличныхЧастей, "МатериалыИУслуги") > 0 Тогда
ОбщегоНазначенияУТ.ДобавитьСтрокиВТаблицу(Объект.Материалы, Материалы);
КонецЕсли;
Если СтрНайти(ИменаТабличныхЧастей, "ВозвратныеОтходы") > 0 Тогда
ОбщегоНазначенияУТ.ДобавитьСтрокиВТаблицу(Объект.ВозвратныеОтходы, ВозвратныеОтходы);
КонецЕсли;
ЗаполнитьСлужебныеРеквизиты();
ЗаполнитьНормативыМатериаловНаСервере();
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьСпецификациюВКоллекции(Продукция, РежимПроверитьЗаполнить = Ложь)
ПараметрыВыбораСпецификаций = Документы.ОтчетПереработчика.ПараметрыВыбораСпецификаций(Объект);
ДанныеОбИзделиях = Новый Массив;
Для Каждого ТекущиеДанные Из Продукция Цикл
ДанныеОбИзделии = УправлениеДаннымиОбИзделияхКлиентСервер.СобратьДанныеОбИзделииДляВыбораСпецификации(
Объект, ТекущиеДанные, ПараметрыВыбораСпецификаций);
Если РежимПроверитьЗаполнить Тогда
ДанныеОбИзделии.Вставить("ТекущаяСпецификация", ТекущиеДанные.Спецификация);
КонецЕсли;
ДанныеОбИзделиях.Добавить(ДанныеОбИзделии);
КонецЦикла;
УправлениеДаннымиОбИзделиях.ЗаполнитьСпецификациюВСтроках(Продукция, ДанныеОбИзделиях, ПараметрыВыбораСпецификаций);
КонецПроцедуры
&НаСервере
Функция ДанныеСпецификацииПоСпискуПродукции(СписокНоменклатуры, ИменаТабличныхЧастей)
ПоляГруппировкиЗатрат = "ДокументПоступления,НомерГруппыЗатрат";
ПараметрыВыборки = Справочники.РесурсныеСпецификации.ПараметрыВыборкиДанных(
ИменаТабличныхЧастей,
Неопределено,
ОбеспечениеПроизводства.ВариантЗаполненияОбеспеченияПоВерсииПроизводства());
ПараметрыВыборки.ПолучитьСведенияАвтовыбора = Ложь;
ПараметрыВыборки.ПолучитьПредставления = Ложь;
ПараметрыВыборки.ДоступныРаботы = Ложь;
ДанныеСпецификаций = Справочники.РесурсныеСпецификации.ДанныеСпецификацииПоСпискуНоменклатуры(
СписокНоменклатуры,
ПараметрыВыборки,
Истина,
ПоляГруппировкиЗатрат);
Возврат ДанныеСпецификаций;
КонецФункции
&НаСервере
Функция ДанныеСпецификацийВТаблицу(ДанныеСпецификаций, ИмяТаблицы, Колонки, Отбор)
ТаблицыДанных = Новый ТаблицаЗначений();
Для Каждого Элемент Из ДанныеСпецификаций Цикл
ТаблицаДляДобавления = Элемент[ИмяТаблицы].Скопировать(Отбор, Колонки);
ТаблицаДляДобавления.Колонки.Добавить("ДокументПоступления");
ТаблицаДляДобавления.ЗаполнитьЗначения(Элемент.ДокументПоступления, "ДокументПоступления");
ТаблицаДляДобавления.Колонки.Добавить("НомерГруппыЗатрат");
ТаблицаДляДобавления.ЗаполнитьЗначения(Элемент.НомерГруппыЗатрат, "НомерГруппыЗатрат");
Если ТаблицыДанных.Количество() = 0 Тогда
ТаблицыДанных = ТаблицаДляДобавления;
Иначе
ОбщегоНазначенияУТ.ДобавитьСтрокиВТаблицу(ТаблицыДанных, ТаблицаДляДобавления);
КонецЕсли;
КонецЦикла;
Возврат ТаблицыДанных;
КонецФункции
&НаКлиенте
Процедура ЗаполнитьПолучателяЗавершение(ВыбранноеЗначение, ДополнительныеПараметры) Экспорт
Если Не ЗначениеЗаполнено(ВыбранноеЗначение) Тогда
Возврат;
КонецЕсли;
ПараметрыТЧ = ДополнительныеПараметры.ПараметрыТЧ;
ВыделенныеСтроки = Элементы[ПараметрыТЧ.ИмяТЧФорма].ВыделенныеСтроки;
ЗаполнитьПолучателяНаСервере(ПараметрыТЧ, ВыделенныеСтроки, ВыбранноеЗначение);
ОповеститьОбОкончанииЗаполненияПолучателей();
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьПолучателяНаСервере(ПараметрыТЧ, ВыделенныеСтроки, Получатель)
ИмяТЧОбъект = ПараметрыТЧ.ИмяТЧОбъект;
Для каждого ИдентификаторСтроки Из ВыделенныеСтроки Цикл
ДанныеСтроки = Объект[ИмяТЧОбъект].НайтиПоИдентификатору(ИдентификаторСтроки);
ДанныеСтроки.Получатель = Получатель;
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#Область СтандартныеПодсистемы
&НаСервере
Процедура СвойстваВыполнитьОтложеннуюИнициализацию()
УправлениеСвойствами.ЗаполнитьДополнительныеРеквизитыВФорме(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьЗависимостиДополнительныхРеквизитов()
УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПриИзмененииДополнительногоРеквизита(Элемент)
УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры
#КонецОбласти
#Область Прочее
&НаСервере
Процедура ПриЧтенииСозданииНаСервере()
НаправленияДеятельностиСервер.ПриЧтенииСозданииНаСервере(ЭтотОбъект);
ПартионныйУчетВерсии22 = РасчетСебестоимостиПовтИсп.ПартионныйУчетВерсии22(
?(ЗначениеЗаполнено(Объект.Дата), Объект.Дата, ТекущаяДатаСеанса()));
ВалютаДокумента = Объект.Валюта;
ВалютаРегламентированногоУчета = ЗначениеНастроекПовтИсп.ВалютаРегламентированногоУчетаОрганизации(Объект.Организация);
ГруппировкаЗатратДоИзменения = Объект.ГруппировкаЗатрат;
ПараметрыРаспределенияЗатрат = Новый ФиксированнаяСтруктура(Документы.ОтчетПереработчика.ПараметрыРаспределенияЗатрат(Объект));
ХарактеристикиИспользуются = Справочники.Номенклатура.ХарактеристикиИспользуются(Объект.Номенклатура);
Элементы.Характеристика.Видимость = ПолучитьФункциональнуюОпцию("ИспользоватьНесколькоВидовНоменклатуры");
Элементы.Характеристика.Доступность = ХарактеристикиИспользуются;
ИспользоватьНаправленияДеятельности = ПолучитьФункциональнуюОпцию("ИспользоватьУчетЗатратПоНаправлениямДеятельности");
УстановитьДоступностьЭлементовПоСтатусуСервер();
УстановитьДоступностьЦенВозвратныхОтходов();
УстановитьВидимостьЭлементовПоВерсииПартионногоУчета();
ДанныеЗаказа = ПоместитьДанныеЗаказаВХранилище();
ЗаполнитьСлужебныеРеквизиты();
ЗаполнитьНормативыМатериаловНаСервере(ДанныеЗаказа);
УстановитьСвойстваЭлементовПоПорядкуРасчетов();
ОбновитьТекстСчетаФактуры();
УстановитьВидимостьДоговора();
НастроитьВидимостьУслугПриИзмененииВариантаОформленияУслугиПоПереработке();
РаботаСТабличнымиЧастями.ИнициализироватьКэшСтрок(Элементы.Продукция);
НастроитьФормуПоФлагуПоЗаказам();
НастроитьФормуПоСпособуГруппировкиЗатрат();
ЗаполнитьГруппуЗатратУстановитьВидимость();
АктуализироватьЗакупкуПодДеятельность(Ложь);
ПараметрыВыбораСпецификаций = УправлениеДаннымиОбИзделиях.ПараметрыВыбораСпецификаций(Объект, Документы.ОтчетПереработчика);
УправлениеДаннымиОбИзделияхКлиентСервер.УстановитьПараметрыВыбораСпецификаций(Элементы.ПродукцияСпецификация, ПараметрыВыбораСпецификаций);
Элементы.СуммаВзаиморасчетов.Видимость = Объект.Валюта <> Объект.ВалютаВзаиморасчетов;
НастроитьЭлементСтраницыУслуги(
Элементы.СтраницыУслуги,
Объект.ГруппировкаЗатрат,
Объект.ПоЗаказам,
ПартионныйУчетВерсии22,
Объект.Услуги.Количество() > 1);
НастроитьЭлементыСуммыНДСПриИзмененииСтавкиНДСУслуг(ЭтаФорма);
КоличествоУслуг = Объект.Услуги.Количество();
ОпределитьКоличествоВыходныхИзделий(ЭтаФорма);
ЗакупкиСервер.ЗаполнитьСписокВыбораНаименованиеВходящегоДокумента(ЭтотОбъект, Объект.Контрагент);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура НастроитьЭлементыСуммыНДСПриИзмененииСтавкиНДСУслуг(Форма)
БезНДС = ПредопределенноеЗначение("Справочник.СтавкиНДС.БезНДС");
ЕстьНДС = Ложь;
Если (Форма.Объект.ПоЗаказам Или Форма.ПартионныйУчетВерсии22)
И Форма.Объект.ГруппировкаЗатрат = ПредопределенноеЗначение("Перечисление.ГруппировкиЗатратВЗаказеПереработчику.БезГруппировки") Тогда
ЕстьНДС = Форма.Объект.СтавкаНДС <> БезНДС;
Иначе
Для каждого СтрокаУслуга Из Форма.Объект.Услуги Цикл
Если СтрокаУслуга.СтавкаНДС <> БезНДС Тогда
ЕстьНДС = Истина;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если ЕстьНДС Тогда
Форма.Элементы.ГруппаСтраницыНДСПродукция.ТекущаяСтраница = Форма.Элементы.СтраницаСНДСПродукция;
Форма.Элементы.ГруппаСтраницыВсегоПродукция.ТекущаяСтраница = Форма.Элементы.СтраницаВсегоСНДСПродукция;
Иначе
Форма.Элементы.ГруппаСтраницыНДСПродукция.ТекущаяСтраница = Форма.Элементы.СтраницаБезНДСПродукция;
Форма.Элементы.ГруппаСтраницыВсегоПродукция.ТекущаяСтраница = Форма.Элементы.СтраницаВсегоБезНДСПродукция;
КонецЕсли;
ТолькоПросмотрСуммаНДС = СуммаНДСТолькоПросмотр(Форма.Объект.СтавкаНДС);
Форма.Элементы.СуммаНДС.ТолькоПросмотр = ТолькоПросмотрСуммаНДС;
Форма.Элементы.СуммаНДС.ОтметкаНезаполненного = Не ТолькоПросмотрСуммаНДС;
Форма.Элементы.СуммаНДС.АвтоОтметкаНезаполненного = Не ТолькоПросмотрСуммаНДС;
КонецПроцедуры
&НаСервере
Процедура ПодборПоЗаказамПереработчикамЗавершениеНаСервере(ЗаказСсылка)
Объект.Продукция.Очистить();
Объект.Материалы.Очистить();
Объект.Услуги.Очистить();
ВзаиморасчетыСервер.ПриИзмененииПараметровМеханизма(ЭтаФорма);
ВзаиморасчетыСервер.ФормаПриИзмененииРеквизитов(ЭтаФорма, "НакладнаяПоЗаказу");
ДокументОбъект = РеквизитФормыВЗначение("Объект");
ДокументОбъект.ЗаполнитьНаОснованииЗаказаПереработчику(ЗаказСсылка);
ЗначениеВРеквизитФормы(ДокументОбъект, "Объект");
ПараметрыРаспределенияЗатрат = Новый ФиксированнаяСтруктура(Документы.ОтчетПереработчика.ПараметрыРаспределенияЗатрат(Объект));
ОбосабливатьПоНазначениюПродукции = ЗначениеЗаполнено(Объект.ЗаказПереработчику)
И ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.ЗаказПереработчику, "ОбосабливатьПоНазначениюПродукции");
ПоместитьДанныеЗаказаВХранилище();
ЗаполнитьСлужебныеРеквизиты();
НастроитьВидимостьУслугПриИзмененииВариантаОформленияУслугиПоПереработке();
ПриИзмененииСуммыУслуг(ЭтаФорма);
НастроитьЭлементыСуммыНДСПриИзмененииСтавкиНДСУслуг(ЭтаФорма);
КоличествоУслуг = Объект.Услуги.Количество();
ОпределитьКоличествоВыходныхИзделий(ЭтаФорма);
НастроитьФормуПоСпособуГруппировкиЗатрат();
НастроитьФормуПоФлагуПоЗаказам();
КонецПроцедуры
&НаКлиенте
Процедура ПодобратьИзПоступленийЗавершение(РезультатЗакрытия, ДополнительныеПараметры) Экспорт
Если ТипЗнч(РезультатЗакрытия) = Тип("Структура") Тогда
Модифицированность = Истина;
ПодобратьИзПоступленийЗавершениеНаСервере(РезультатЗакрытия);
КонецЕсли;
ПриИзмененииСуммыУслуг(ЭтаФорма);
НастроитьЭлементыСуммыНДСПриИзмененииСтавкиНДСУслуг(ЭтаФорма);
КоличествоУслуг = Объект.Услуги.Количество();
ОпределитьКоличествоВыходныхИзделий(ЭтаФорма);
КонецПроцедуры
&НаСервере
Процедура ПодобратьИзПоступленийЗавершениеНаСервере(ДанныеЗаполнения)
ОрганизацияИзменена = Объект.Организация <> ДанныеЗаполнения.РеквизитыШапки.Организация;
ПартнерИзменен = Объект.Партнер <> ДанныеЗаполнения.РеквизитыШапки.Партнер;
НаправлениеДеятельностиИзменено = Объект.НаправлениеДеятельности <> ДанныеЗаполнения.РеквизитыШапки.НаправлениеДеятельности;
ЗаполнитьЗначенияСвойств(Объект, ДанныеЗаполнения.РеквизитыШапки);
Если ОрганизацияИзменена Тогда
ПриИзмененииОрганизацииСервер();
КонецЕсли;
Если ПартнерИзменен Тогда
ПриИзмененииПартнераСервер();
КонецЕсли;
Если НаправлениеДеятельностиИзменено Тогда
НаправлениеДеятельностиПриИзмененииСервер();
КонецЕсли;
ЗаполнитьПоПоступлениям(Объект, ПолучитьИзВременногоХранилища(ДанныеЗаполнения.АдресТаблицыПродукции));
ЗаполнитьСлужебныеРеквизиты();
КонецПроцедуры
&НаКлиенте
Процедура Услуги_ВыбратьИЗаполнитьУслугуЗавершение(РезультатЗакрытия, ДополнительныеПараметры) Экспорт
Если РезультатЗакрытия = Неопределено Тогда
Возврат;
КонецЕсли;
Услуги_ВыбратьИЗаполнитьУслугуЗавершениеНаСервере(РезультатЗакрытия, КэшированныеЗначения);
КонецПроцедуры
&НаСервере
Процедура Услуги_ВыбратьИЗаполнитьУслугуЗавершениеНаСервере(РезультатЗакрытия, КэшированныеЗначения)
Если РезультатЗакрытия = Неопределено Тогда
Возврат;
КонецЕсли;
СтруктураПересчетаСуммы = ПараметрыПересчетаСуммыНДСВТЧ(ЭтотОбъект);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПроверитьХарактеристикуПоВладельцу");
СтруктураДействий.Вставить("ЗаполнитьСтавкуНДС",
ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыЗаполненияСтавкиНДС(Объект));
СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ОчиститьСуммуВзаиморасчетов");
СтруктураДействий.Вставить("НоменклатураПриИзмененииПереопределяемый",
Новый Структура("ИмяФормы, ИмяТабличнойЧасти", ИмяФормы, "Услуги"));
ОбрабатываемыеСтроки = Новый Массив;
Для каждого ИдентификаторСтроки Из Элементы.Услуги.ВыделенныеСтроки Цикл
ДанныеСтроки = Объект.Услуги.НайтиПоИдентификатору(ИдентификаторСтроки);
ДанныеСтроки.Номенклатура = РезультатЗакрытия;
ОбрабатываемыеСтроки.Добавить(ДанныеСтроки);
КонецЦикла;
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокиТЧ(
ОбрабатываемыеСтроки,
СтруктураДействий,
Объект.Услуги,
КэшированныеЗначения);
ПриИзмененииСуммыУслуг(ЭтотОбъект);
НастроитьЭлементыСуммыНДСПриИзмененииСтавкиНДСУслуг(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьНормативыМатериаловПоЗаказу(ДанныеЗаказа)
Если Объект.ЗаказПереработчику.Пустая() Тогда
Возврат;
КонецЕсли;
ИмяПоляГруппаЗатрат = ИмяПоляГруппаЗатрат(Объект);
Для каждого СтрокаМатериалОтчета Из Объект.Материалы Цикл
СтрокаМатериалОтчета.КоличествоУпаковокНорматив = 0;
СтрокаМатериалОтчета.КоличествоНорматив = 0;
СтрокаМатериалОтчета.КоличествоОтклонение = 0;
СтрокаМатериалОтчета.КоличествоУпаковокОтклонение = 0;
КонецЦикла;
Если ДанныеЗаказа = Неопределено Тогда
ДанныеЗаказа = ПолучитьИзВременногоХранилища(АдресХранилищаДанныхЗаказа);
КонецЕсли;
МатериалыЗаказа = ДанныеЗаказа.Материалы.Скопировать();
Для каждого СтрокаУслуга Из Объект.Услуги Цикл
СтруктураПоиска = Новый Структура(ИмяПоляГруппаЗатрат, СтрокаУслуга[ИмяПоляГруппаЗатрат]);
ФактическаяПродукция = Объект.Продукция.Выгрузить(СтруктураПоиска, "Номенклатура,Характеристика,Количество");
ФактическаяПродукция.Свернуть("Номенклатура,Характеристика", "Количество");
СтруктураПоиска = Новый Структура(ИмяПоляГруппаЗатрат, СтрокаУслуга[ИмяПоляГруппаЗатрат]);
НормативнаяПродукция = ДанныеЗаказа.Продукция.Скопировать(СтруктураПоиска);
НормативнаяПродукция.Свернуть("Номенклатура,Характеристика", "Количество");
КоэффициентНормативов = Документы.ЗаказПереработчику.КоэффициентНормативов(ФактическаяПродукция, НормативнаяПродукция);
СтруктураПоиска = Новый Структура(ИмяПоляГруппаЗатрат, СтрокаУслуга[ИмяПоляГруппаЗатрат]);
СписокМатериаловГруппы = Объект.Материалы.НайтиСтроки(СтруктураПоиска);
ОбрабатываемыеСтроки = Новый Массив;
Для каждого СтрокаМатериал Из СписокМатериаловГруппы Цикл
СтрокаМатериал.КоличествоНорматив = 0;
СтруктураПоиска = Новый Структура("Номенклатура,Характеристика,"+ИмяПоляГруппаЗатрат);
ЗаполнитьЗначенияСвойств(СтруктураПоиска, СтрокаМатериал);
СписокСтрок = МатериалыЗаказа.НайтиСтроки(СтруктураПоиска);
Если СписокСтрок.Количество() <> 0 Тогда
СтрокаМатериалЗаказа = СписокСтрок[0];
СтрокаМатериал.КоличествоНорматив = СтрокаМатериалЗаказа.Количество * КоэффициентНормативов;
Если ЗначениеЗаполнено(СтрокаМатериал.Упаковка) Тогда
ОбрабатываемыеСтроки.Добавить(СтрокаМатериал);
Иначе
СтрокаМатериал.КоличествоУпаковокНорматив = СтрокаМатериал.КоличествоНорматив;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КэшированныеЗначения = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначения();
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьКоличествоУпаковокСуффикс", "Норматив");
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокиТЧ(
ОбрабатываемыеСтроки,
СтруктураДействий,
Объект.Материалы,
КэшированныеЗначения);
Для каждого СтрокаМатериалОтчета Из СписокМатериаловГруппы Цикл
РассчитатьОтклонениеОтНорматива(СтрокаМатериалОтчета, КэшированныеЗначения);
КонецЦикла;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьНормативыМатериаловПоСпецификациям()
Если Объект.ГруппировкаЗатрат <> Перечисления.ГруппировкиЗатратВЗаказеПереработчику.ПоПродукции
И Объект.ГруппировкаЗатрат <> Перечисления.ГруппировкиЗатратВЗаказеПереработчику.ПоСпецификациям Тогда
Возврат;
КонецЕсли;
ИмяПоляГруппаЗатрат = ИмяПоляГруппаЗатрат(Объект);
Для каждого СтрокаМатериалОтчета Из Объект.Материалы Цикл
СтрокаМатериалОтчета.КоличествоУпаковокНорматив = 0;
СтрокаМатериалОтчета.КоличествоНорматив = 0;
СтрокаМатериалОтчета.КоличествоОтклонение = 0;
СтрокаМатериалОтчета.КоличествоУпаковокОтклонение = 0;
КонецЦикла;
СписокНоменклатуры = Справочники.РесурсныеСпецификации.СписокНоменклатуры();
СписокНоменклатуры.Колонки.Добавить("НомерГруппыЗатрат");
Для каждого ТекущиеДанные Из Объект.Продукция Цикл
Если НЕ ЗначениеЗаполнено(ТекущиеДанные.Спецификация) ИЛИ ТекущиеДанные.Количество = 0 Тогда
Продолжить;
КонецЕсли;
НоваяСтрока = СписокНоменклатуры.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, ТекущиеДанные);
НоваяСтрока.НомерГруппыЗатрат = ТекущиеДанные[ИмяПоляГруппаЗатрат];
НоваяСтрока.НачалоПроизводства = Объект.Дата;
НоваяСтрока.НаправлениеДеятельности = Объект.НаправлениеДеятельности;
КонецЦикла;
ПараметрыВыборки = Справочники.РесурсныеСпецификации.ПараметрыВыборкиДанных();
ПараметрыВыборки.ПолучитьСведенияАвтовыбора = Ложь;
ПараметрыВыборки.ПолучитьПредставления = Ложь;
ПараметрыВыборки.ОкруглятьКоличествоШтучныхТоваров = Ложь;
ДанныеСпецификаций = Справочники.РесурсныеСпецификации.ДанныеСпецификацииПоСпискуНоменклатуры(
СписокНоменклатуры,
ПараметрыВыборки,
Истина,
"НомерГруппыЗатрат");
Для Каждого ТекСтрока Из ДанныеСпецификаций Цикл
Если ТекСтрока = Неопределено Тогда
Продолжить;
КонецЕсли;
ТекСтрока.МатериалыИУслуги.Свернуть("Номенклатура, Характеристика", "Количество");
СтруктураПоиска = Новый Структура(ИмяПоляГруппаЗатрат, ТекСтрока.НомерГруппыЗатрат);
МатериалыОтчета = Объект.Материалы.НайтиСтроки(СтруктураПоиска);
ОбрабатываемыеСтроки = Новый Массив;
Для каждого СтрокаМатериалОтчета Из МатериалыОтчета Цикл
СтрокаМатериалОтчета.КоличествоУпаковокНорматив = 0;
СтрокаМатериалОтчета.КоличествоНорматив = 0;
СтруктураПоиска = Новый Структура("Номенклатура,Характеристика");
ЗаполнитьЗначенияСвойств(СтруктураПоиска, СтрокаМатериалОтчета);
СписокСтрок = ТекСтрока.МатериалыИУслуги.НайтиСтроки(СтруктураПоиска);
Если СписокСтрок.Количество() <> 0 Тогда
СтрокаМатериалСпецификации = СписокСтрок[0];
СтрокаМатериалОтчета.КоличествоНорматив = СтрокаМатериалСпецификации.Количество;
Если ЗначениеЗаполнено(СтрокаМатериалОтчета.Упаковка) Тогда
ОбрабатываемыеСтроки.Добавить(СтрокаМатериалОтчета);
Иначе
СтрокаМатериалОтчета.КоличествоУпаковокНорматив = СтрокаМатериалОтчета.КоличествоНорматив;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КэшированныеЗначения = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначения();
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьКоличествоУпаковокСуффикс", "Норматив");
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокиТЧ(
ОбрабатываемыеСтроки,
СтруктураДействий,
Объект.Материалы,
КэшированныеЗначения);
Для каждого СтрокаМатериалОтчета Из МатериалыОтчета Цикл
РассчитатьОтклонениеОтНорматива(СтрокаМатериалОтчета, КэшированныеЗначения);
КонецЦикла;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура РассчитатьОтклонениеОтНорматива(ДанныеСтроки, КэшированныеЗначения)
КоличествоФакт = 0;
ИмяПоляГруппаЗатрат = ИмяПоляГруппаЗатрат(Объект);
СтруктураПоиска = Новый Структура("Номенклатура,Характеристика," + ИмяПоляГруппаЗатрат);
ЗаполнитьЗначенияСвойств(СтруктураПоиска, ДанныеСтроки);
МатериалыОтчета = Объект.Материалы.НайтиСтроки(СтруктураПоиска);
Для каждого СтрокаМатериалОтчета Из МатериалыОтчета Цикл
КоличествоФакт = КоличествоФакт + СтрокаМатериалОтчета.Количество;
КонецЦикла;
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьКоличествоУпаковокСуффикс", "Отклонение");
ОбрабатываемыеСтроки = Новый Массив();
Для каждого СтрокаМатериалОтчета Из МатериалыОтчета Цикл
СтрокаМатериалОтчета.КоличествоОтклонение = КоличествоФакт - ДанныеСтроки.КоличествоНорматив;
Если ЗначениеЗаполнено(СтрокаМатериалОтчета.Упаковка) Тогда
ОбрабатываемыеСтроки.Добавить(СтрокаМатериалОтчета);
Иначе
СтрокаМатериалОтчета.КоличествоУпаковокОтклонение = СтрокаМатериалОтчета.КоличествоОтклонение;
КонецЕсли;
КонецЦикла;
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокиТЧ(
ОбрабатываемыеСтроки,
СтруктураДействий,
Объект.Материалы,
КэшированныеЗначения);
КонецПроцедуры
&НаСервере
Процедура МатериалыКоличествоУпаковокПриИзмененииНаСервере(КэшированныеЗначения)
ИмяПоляГруппаЗатрат = ИмяПоляГруппаЗатрат(Объект);
ТекущаяСтрока = Элементы.Материалы.ТекущаяСтрока;
ТекущиеДанные = Объект.Материалы.НайтиПоИдентификатору(ТекущаяСтрока);
СтруктураПоиска = Новый Структура(ИмяПоляГруппаЗатрат, ТекущиеДанные[ИмяПоляГруппаЗатрат]);
МатериалыОтчета = Объект.Материалы.НайтиСтроки(СтруктураПоиска);
Для каждого СтрокаМатериалОтчета Из МатериалыОтчета Цикл
РассчитатьОтклонениеОтНорматива(СтрокаМатериалОтчета, КэшированныеЗначения);
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура УдалитьУслугуНаСервере()
УслугиКУдалению = Новый Массив;
ИмяПоляГруппаЗатрат = ИмяПоляГруппаЗатрат(Объект);
СтруктураПоиска = Новый Структура(ИмяПоляГруппаЗатрат + ",ДокументПоступления");
Для каждого ИдентификаторСтроки Из Элементы.Услуги.ВыделенныеСтроки Цикл
СтрокаУслуга = Объект.Услуги.НайтиПоИдентификатору(ИдентификаторСтроки);
УслугиКУдалению.Добавить(СтрокаУслуга);
ЗаполнитьЗначенияСвойств(СтруктураПоиска, СтрокаУслуга);
СписокСтрок = Объект.Продукция.НайтиСтроки(СтруктураПоиска);
Для каждого СтрокаТаблицы Из СписокСтрок Цикл
Объект.Продукция.Удалить(СтрокаТаблицы);
КонецЦикла;
СписокСтрок = Объект.Материалы.НайтиСтроки(СтруктураПоиска);
Для каждого СтрокаТаблицы Из СписокСтрок Цикл
Объект.Материалы.Удалить(СтрокаТаблицы);
КонецЦикла;
СписокСтрок = Объект.ВозвратныеОтходы.НайтиСтроки(СтруктураПоиска);
Для каждого СтрокаТаблицы Из СписокСтрок Цикл
Объект.ВозвратныеОтходы.Удалить(СтрокаТаблицы);
КонецЦикла;
КонецЦикла;
Для каждого СтрокаУслуга Из УслугиКУдалению Цикл
Объект.Услуги.Удалить(СтрокаУслуга);
КонецЦикла;
РассчитатьПроцентРаспределенияЗатратНаВыходныеИзделия();
КонецПроцедуры
&НаСервере
Процедура НастроитьВидимостьУслугПриИзмененииВариантаОформленияУслугиПоПереработке()
ИспользоватьУслуги = Объект.УслугиПоПереработке
= ПредопределенноеЗначение("Перечисление.ВариантыОформленияУслугДокументовПереработки.УказываютсяВЗаказеОтчете");
Элементы.ГруппаОплата.Видимость = ИспользоватьУслуги;
Элементы.ГруппаВалюты.Видимость = ИспользоватьУслуги;
Элементы.ГруппаИтогоПродукция.Видимость = ИспользоватьУслуги;
Элементы.СтраницаУслуги.Видимость = ИспользоватьУслуги;
Элементы.БанковскийСчетОрганизации.Видимость = ИспользоватьУслуги;
Элементы.БанковскийСчетКонтрагента.Видимость = ИспользоватьУслуги;
Элементы.ГруппаФинансовогоУчета.Видимость = ИспользоватьУслуги;
Элементы.ГруппаСчетФактура.Видимость = ИспользоватьУслуги;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьПодчиненныеСвойстваПоСтатистике(ИмяРеквизитаРодителя)
ЗаполнениеОбъектовПоСтатистике.ЗаполнитьПодчиненныеРеквизитыОбъекта(Объект, ИмяРеквизитаРодителя);
КонецПроцедуры
&НаСервере
Процедура УстановитьУсловноеОформление()
УсловноеОформление.Элементы.Очистить();
#Область СтандартноеОформление
ЦеныПредприятияЗаполнениеСервер.УстановитьУсловноеОформлениеВидовЦен(
ЭтаФорма,
"ВозвратныеОтходыВидЦены",
"Объект.ВозвратныеОтходы.ВидЦены");
ПараметрыУсловногоОформления = НоменклатураСервер.НовыеПараметрыУсловногоОформленияЕдиницИзмерения();
ПараметрыУсловногоОформления.ИмяПоляЕдиницаИзмерения = "ПродукцияНоменклатураЕдиницаИзмерения";
ПараметрыУсловногоОформления.ПутьКПолюУпаковка = "Объект.Продукция.Упаковка";
НоменклатураСервер.УстановитьУсловноеОформлениеЕдиницИзмерения(ЭтаФорма, ПараметрыУсловногоОформления);
ПараметрыУсловногоОформления = НоменклатураСервер.НовыеПараметрыУсловногоОформленияЕдиницИзмерения();
ПараметрыУсловногоОформления.ИмяПоляЕдиницаИзмерения = "ВозвратныеОтходыНоменклатураЕдиницаИзмерения";
ПараметрыУсловногоОформления.ПутьКПолюУпаковка = "Объект.ВозвратныеОтходы.Упаковка";
НоменклатураСервер.УстановитьУсловноеОформлениеЕдиницИзмерения(ЭтаФорма, ПараметрыУсловногоОформления);
ПараметрыУсловногоОформления = НоменклатураСервер.НовыеПараметрыУсловногоОформленияЕдиницИзмерения();
ПараметрыУсловногоОформления.ИмяПоляЕдиницаИзмерения = "МатериалыНоменклатураЕдиницаИзмерения";
ПараметрыУсловногоОформления.ПутьКПолюУпаковка = "Объект.Материалы.Упаковка";
НоменклатураСервер.УстановитьУсловноеОформлениеЕдиницИзмерения(ЭтаФорма, ПараметрыУсловногоОформления);
НоменклатураСервер.УстановитьУсловноеОформлениеХарактеристикНоменклатуры(
ЭтаФорма,
"ПродукцияХарактеристика",
"Объект.Продукция.ХарактеристикиИспользуются");
НоменклатураСервер.УстановитьУсловноеОформлениеХарактеристикНоменклатуры(
ЭтаФорма,
"ВозвратныеОтходыХарактеристика",
"Объект.ВозвратныеОтходы.ХарактеристикиИспользуются");
НоменклатураСервер.УстановитьУсловноеОформлениеХарактеристикНоменклатуры(
ЭтаФорма,
"МатериалыХарактеристика",
"Объект.Материалы.ХарактеристикиИспользуются");
НоменклатураСервер.УстановитьУсловноеОформлениеХарактеристикНоменклатуры(
ЭтаФорма,
"УслугиХарактеристика",
"Объект.Услуги.ХарактеристикиИспользуются");
НоменклатураСервер.УстановитьУсловноеОформлениеХарактеристикНоменклатуры(
ЭтаФорма,
"Характеристика",
"ХарактеристикиИспользуются");
#КонецОбласти
#Область УслугиСуммаНДС_ТолькоПросмотр
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.УслугиСуммаНДС.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Услуги.СтавкаНДС");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
ПравоеЗначение = УчетНДСУПСлужебныйКлиентСерверПовтИсп.СписокНезначащихСтавок();
ПравоеЗначение.Добавить(Справочники.СтавкиНДС.ПустаяСсылка());
ОтборЭлемента.ПравоеЗначение = ПравоеЗначение;
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
#КонецОбласти
#Область ЦветГиперссылки
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ПродукцияДокументПоступления.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ВозвратныеОтходыДокументПоступления.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.МатериалыДокументПоступления.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.УслугиДокументПоступления.Имя);
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ГиперссылкаЦвет);
#КонецОбласти
#Область Продукция
УстановитьУсловноеОформлениеСписаниеНаРасходы("Продукция");
УстановитьУсловноеОформлениеПолучатель("Объект", "Продукция");
#КонецОбласти
#Область ВозвратныеОтходы
УстановитьУсловноеОформлениеСписаниеНаРасходы("ВозвратныеОтходы");
УстановитьУсловноеОформлениеПолучатель("Объект", "ВозвратныеОтходы");
#КонецОбласти
#Область Прочее
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Номенклатура.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.УслугиНоменклатура.Имя);
ГруппаОтбора = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;
ОтборЭлемента = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ПроверятьУказаниеРаботы");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
ОтборЭлемента = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Номенклатура");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.НаправлениеДеятельности.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.НаправлениеДеятельности");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);
#КонецОбласти
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ПродукцияНазначение.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ВозвратныеОтходыНазначение.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.УчетСырьяПоНазначениям");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.МатериалыНазначение.Имя);
ГруппаОтбора = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;
ОтборЭлемента = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ПоЗаказам");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
ОтборЭлемента = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.УчетСырьяПоНазначениям");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.МатериалыСтатьяКалькуляции.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СтатьяКалькуляции.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.УслугиСтатьяКалькуляции.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПартионныйУчетВерсии22");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);
#Область ВыходныеИзделияДоляСтоимости
ПроизводствоСервер.УстановитьУсловноеОформлениеПоляДоляСтоимостиПроцент(ЭтаФорма, "Объект", "Продукция");
ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ПродукцияДоляСтоимости.Имя);
ПолеЭлемента = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ПродукцияДоляСтоимостиПроцент.Имя);
ПолеЭлемента = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ПродукцияЕстьОшибкиЗаполненияДолиСтоимости.Имя);
ОтборЭлемента = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ГруппировкаЗатрат");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
СписокЗначений = Новый СписокЗначений;
СписокЗначений.Добавить(Перечисления.ГруппировкиЗатратВЗаказеПереработчику.ПоПродукции);
ОтборЭлемента.ПравоеЗначение = СписокЗначений;
ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
#КонецОбласти
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция ПараметрыПересчетаСуммыНДСВТЧ(Форма)
СтруктураПересчетаСуммы = Новый Структура("ЦенаВключаетНДС", Ложь);
Возврат СтруктураПересчетаСуммы;
КонецФункции
&НаСервере
Процедура ЗаполнитьСлужебныеРеквизиты()
СтруктураДействий = Новый Структура;
ДобавитьВСтруктуруДействияПоОбновлениюВспомРевизитовСтроки(СтруктураДействий);
НоменклатураСервер.ЗаполнитьСлужебныеРеквизитыПоНоменклатуреВКоллекции(Объект.Продукция, СтруктураДействий);
НоменклатураСервер.ЗаполнитьСлужебныеРеквизитыПоНоменклатуреВКоллекции(Объект.ВозвратныеОтходы, СтруктураДействий);
НоменклатураСервер.ЗаполнитьСлужебныеРеквизитыПоНоменклатуреВКоллекции(Объект.Материалы, СтруктураДействий);
СтруктураДействий = Новый Структура;
ДобавитьВСтруктуруДействияПоОбновлениюВспомРевизитовСтроки(СтруктураДействий, Истина);
НоменклатураСервер.ЗаполнитьСлужебныеРеквизитыПоНоменклатуреВКоллекции(Объект.Услуги, СтруктураДействий);
ЗаполнитьСлужебныеРеквизитыПоЗаказу();
ЗаполнитьПредставлениеГруппыЗатрат();
РассчитатьПроцентРаспределенияЗатратНаВыходныеИзделия();
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьСлужебныеРеквизитыПоЗаказу()
Если НЕ Объект.ПоЗаказам Тогда
Возврат;
КонецЕсли;
ИмяПоляГруппаЗатрат = ИмяПоляГруппаЗатрат(Объект);
СписокСвойств = "Распоряжение,Спецификация,Этап";
ДанныеЗаказа = ПолучитьИзВременногоХранилища(АдресХранилищаДанныхЗаказа);
Для каждого СтрокаУслуга Из Объект.Услуги Цикл
СтруктураПоиска = Новый Структура(ИмяПоляГруппаЗатрат, СтрокаУслуга[ИмяПоляГруппаЗатрат]);
СписокСтрок = ДанныеЗаказа.Услуги.НайтиСтроки(СтруктураПоиска);
Если СписокСтрок.Количество() <> 0 Тогда
ЗаполнитьЗначенияСвойств(СтрокаУслуга, СписокСтрок[0], СписокСвойств);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция ПоместитьДанныеЗаказаВХранилище()
Если Объект.ЗаказПереработчику.Пустая() Тогда
Возврат Неопределено;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ЗаказУслуги.Спецификация КАК Спецификация,
| ЗаказУслуги.Этап КАК Этап,
| ЗаказУслуги.Распоряжение КАК Распоряжение,
| ЗаказУслуги.Распоряжение КАК ЭтапПроизводства,
| ЗаказУслуги.НомерГруппыЗатрат КАК НомерГруппыЗатрат
|ИЗ
| Документ.ЗаказПереработчику.Услуги КАК ЗаказУслуги
|ГДЕ
| ЗаказУслуги.Ссылка = &Заказ
|;
|
|
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ЗаказПродукция.Номенклатура КАК Номенклатура,
| ЗаказПродукция.Характеристика КАК Характеристика,
| ЗаказПродукция.Назначение КАК Назначение,
| ЗаказПродукция.Спецификация КАК Спецификация,
| ЗаказПродукция.НомерГруппыЗатрат КАК НомерГруппыЗатрат,
| НЕОПРЕДЕЛЕНО КАК ЭтапПроизводства,
| СУММА(ЗаказПродукция.Количество) КАК Количество
|ИЗ
| Документ.ЗаказПереработчику.Продукция КАК ЗаказПродукция
|ГДЕ
| ЗаказПродукция.Ссылка = &Заказ
|
|СГРУППИРОВАТЬ ПО
| ЗаказПродукция.Номенклатура,
| ЗаказПродукция.Характеристика,
| ЗаказПродукция.Назначение,
| ЗаказПродукция.Спецификация,
| ЗаказПродукция.НомерГруппыЗатрат
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ЗаказВозвратныеОтходы.Номенклатура КАК Номенклатура,
| ЗаказВозвратныеОтходы.Характеристика КАК Характеристика,
| ЗаказВозвратныеОтходы.Назначение КАК Назначение,
| ЗаказУслуги.Спецификация КАК Спецификация,
| ЗаказВозвратныеОтходы.НомерГруппыЗатрат КАК НомерГруппыЗатрат,
| НЕОПРЕДЕЛЕНО КАК ЭтапПроизводства,
| СУММА(ЗаказВозвратныеОтходы.Количество) КАК Количество
|ИЗ
| Документ.ЗаказПереработчику.Услуги КАК ЗаказУслуги
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЗаказПереработчику.ВозвратныеОтходы КАК ЗаказВозвратныеОтходы
| ПО ЗаказУслуги.Ссылка = ЗаказВозвратныеОтходы.Ссылка
| И ЗаказУслуги.НомерГруппыЗатрат = ЗаказВозвратныеОтходы.НомерГруппыЗатрат
|ГДЕ
| ЗаказУслуги.Ссылка = &Заказ
|
|СГРУППИРОВАТЬ ПО
| ЗаказВозвратныеОтходы.Номенклатура,
| ЗаказВозвратныеОтходы.Характеристика,
| ЗаказВозвратныеОтходы.Назначение,
| ЗаказУслуги.Спецификация,
| ЗаказВозвратныеОтходы.НомерГруппыЗатрат
|
|;
|
|
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ЗаказПереработчикуМатериалы.Номенклатура КАК Номенклатура,
| ЗаказПереработчикуМатериалы.Характеристика КАК Характеристика,
| ЗаказПереработчикуМатериалы.НомерГруппыЗатрат КАК НомерГруппыЗатрат,
| НЕОПРЕДЕЛЕНО КАК ЭтапПроизводства,
| СУММА(ЗаказПереработчикуМатериалы.Количество) КАК Количество
|ИЗ
| Документ.ЗаказПереработчику.Материалы КАК ЗаказПереработчикуМатериалы
|ГДЕ
| ЗаказПереработчикуМатериалы.Ссылка = &Заказ
|
|СГРУППИРОВАТЬ ПО
| ЗаказПереработчикуМатериалы.Номенклатура,
| ЗаказПереработчикуМатериалы.Характеристика,
| ЗаказПереработчикуМатериалы.НомерГруппыЗатрат
|
|";
Запрос.УстановитьПараметр("Заказ", Объект.ЗаказПереработчику);
УстановитьПривилегированныйРежим(Истина);
Результат = Запрос.ВыполнитьПакет();
УстановитьПривилегированныйРежим(Ложь);
ТаблицаУслуги = Результат[0].Выгрузить();
ТаблицаПродукция = Результат[1].Выгрузить();
ТаблицаМатериалы = Результат[2].Выгрузить();
ИмяПоляГруппаЗатрат = ИмяПоляГруппаЗатрат(Объект);
ТаблицаУслуги.Колонки.Добавить("ГруппаЗатрат", Новый ОписаниеТипов("Строка"));
ПараметрыГруппыЗатрат = Новый Структура("Распоряжение,Спецификация," + ИмяПоляГруппаЗатрат);
Для каждого СтрокаУслуга Из ТаблицаУслуги Цикл
ЗаполнитьЗначенияСвойств(ПараметрыГруппыЗатрат, СтрокаУслуга);
СтрокаУслуга.ГруппаЗатрат = ПереработкаНаСтороне.ПредставлениеГруппыЗатрат(
ПараметрыГруппыЗатрат,
Объект.ГруппировкаЗатрат,
ТаблицаПродукция,
ИмяПоляГруппаЗатрат);
КонецЦикла;
ДанныеЗаказа = Новый Структура;
ДанныеЗаказа.Вставить("Услуги", ТаблицаУслуги);
ДанныеЗаказа.Вставить("Продукция", ТаблицаПродукция);
ДанныеЗаказа.Вставить("Материалы", ТаблицаМатериалы);
АдресХранилищаДанныхЗаказа = ПоместитьВоВременноеХранилище(ДанныеЗаказа, УникальныйИдентификатор);
Возврат ДанныеЗаказа;
КонецФункции
&НаСервере
Процедура ЗаполнитьДоговорПоУмолчанию()
ПараметрыОбъекта = Новый Структура("Партнер, Договор, Контрагент, Организация");
ЗаполнитьЗначенияСвойств(ПараметрыОбъекта, Объект);
ПараметрыОбъекта.Вставить("Соглашение", Справочники.СоглашенияСПоставщиками.ПустаяСсылка());
Если Объект.ПорядокРасчетов = Перечисления.ПорядокРасчетов.ПоДоговорамКонтрагентов
И ИспользоватьНаправленияДеятельности Тогда
ДопПараметры = ЗакупкиСервер.ДополнительныеПараметрыОтбораДоговоров();
ДопПараметры.ВалютаВзаиморасчетов = Объект.ВалютаВзаиморасчетов;
ДопПараметры.НаправлениеДеятельности = Объект.НаправлениеДеятельности;
Договор = ЗакупкиСервер.ПолучитьДоговорПоУмолчанию(ПараметрыОбъекта,
Объект.ХозяйственнаяОперация,
ДопПараметры);
Иначе
ДопПараметры = ЗакупкиСервер.ДополнительныеПараметрыОтбораДоговоров();
ДопПараметры.ВалютаВзаиморасчетов = Объект.ВалютаВзаиморасчетов;
Договор = ЗакупкиСервер.ПолучитьДоговорПоУмолчанию(ПараметрыОбъекта,
Объект.ХозяйственнаяОперация,
ДопПараметры);
КонецЕсли;
Если Договор <> Объект.Договор Тогда
Объект.Договор = Договор;
ЗакупкиВызовСервера.ЗаполнитьБанковскиеСчетаПоДоговору(
Объект.Договор,
Объект.БанковскийСчетОрганизации,
Объект.БанковскийСчетКонтрагента);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьНаличиеОтчетовПоДаннымПереработчика(НомерПоДаннымПартнера)
СписокОтчетов = ОтчетыПоДаннымПереработчика(Объект.Ссылка, Объект.Контрагент, НомерПоДаннымПартнера);
Если СписокОтчетов.Количество() > 0 Тогда
СписокКнопок = Новый СписокЗначений;
Если СписокОтчетов.Количество() = 1 Тогда
ТекстВопроса = НСтр("ru='В информационной базе уже существует отчет с таким же номером по данным переработчика. Продолжить?'");
СписокКнопок.Добавить("ОткрытьСписокОтчетов", НСтр("ru = 'Открыть отчет'"));
Иначе
ТекстВопроса = НСтр("ru='В информационной базе уже существуют отчеты с таким же номером по данным переработчика. Продолжить?'");
СписокКнопок.Добавить("ОткрытьСписокОтчетов", НСтр("ru = 'Открыть список отчетов'"));
КонецЕсли;
СписокКнопок.Добавить("Продолжить", НСтр("ru = 'Продолжить'"));
ПоказатьВопрос(
Новый ОписаниеОповещения(
"ПроверитьНаличиеОтчетовПоДаннымПереработчикаЗавершение",
ЭтотОбъект,
Новый Структура("СписокОтчетов", СписокОтчетов)),
ТекстВопроса,
СписокКнопок);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьНаличиеОтчетовПоДаннымПереработчикаЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
СписокОтчетов = ДополнительныеПараметры.СписокОтчетов;
ОтветНаВопрос = РезультатВопроса;
Если ОтветНаВопрос = "ОткрытьСписокОтчетов" Тогда
Если СписокОтчетов.Количество() > 1 Тогда
ОткрытьФорму(
"ОбщаяФорма.ПросмотрСпискаДокументов",
Новый Структура("СписокДокументов, Заголовок",
СписокОтчетов,
НСтр("ru='Отчеты переработчиков (%КоличествоДокументов%)'")));
Иначе
ПараметрыФормы = Новый Структура("Ключ", СписокОтчетов.Получить(0).Значение);
ОткрытьФорму("Документ.ОтчетПереработчика.ФормаОбъекта", ПараметрыФормы);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ОтчетыПоДаннымПереработчика(ТекущийОтчет, Контрагент, НомерВходящегоДокумента)
РеквизитыДокумента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ТекущийОтчет, "Дата");
ДатаВходящегоДокумента = ?(ЗначениеЗаполнено(РеквизитыДокумента), РеквизитыДокумента, ТекущаяДатаСеанса());
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Ссылка КАК Ссылка
|ИЗ
| Документ.ОтчетПереработчика
|ГДЕ
| Ссылка <> &ТекущийЗаказ
| И Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
| И НомерПоДаннымПартнера = &НомерПоДаннымПартнера
| И Контрагент = &Контрагент
| И НЕ ПометкаУдаления";
Запрос.УстановитьПараметр("ДатаНачала", ДобавитьМесяц(ДатаВходящегоДокумента, -3));
Запрос.УстановитьПараметр("ДатаОкончания", ДобавитьМесяц(ДатаВходящегоДокумента, 3));
Запрос.УстановитьПараметр("Контрагент", Контрагент);
Запрос.УстановитьПараметр("ТекущийЗаказ", ТекущийОтчет);
Запрос.УстановитьПараметр("НомерПоДаннымПартнера", НомерВходящегоДокумента);
СписокЗаказов = Новый СписокЗначений;
СписокЗаказов.ЗагрузитьЗначения(Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"));
Возврат СписокЗаказов;
КонецФункции
&НаСервере
Процедура ОбновитьТекстСчетаФактуры()
ПараметрыРегистрации = Документы.ОтчетПереработчика.ПараметрыРегистрацииСчетовФактурПолученных(Объект);
СчетаФактурыПолученныеНаОсновании = УчетНДСУП.СчетаФактурыПолученныеНаОсновании(ПараметрыРегистрации);
ТекстСчетаФактурыПолученные = СчетаФактурыПолученныеНаОсновании.Представление;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ДобавитьВСтруктуруДействияПоОбновлениюВспомРевизитовСтроки(СтруктураДействий, ЭтоУслуги = Ложь)
СтруктураХарактеристики = Новый Структура("Номенклатура", "ХарактеристикиИспользуются");
СтруктураДействий.Вставить("ЗаполнитьПризнакХарактеристикиИспользуются", СтруктураХарактеристики);
Если НЕ ЭтоУслуги Тогда
СтруктураТипНоменклатуры = Новый Структура("Номенклатура", "ТипНоменклатуры");
СтруктураАртикул = Новый Структура("Номенклатура", "Артикул");
СтруктураДействий.Вставить("ЗаполнитьПризнакТипНоменклатуры", СтруктураТипНоменклатуры);
СтруктураДействий.Вставить("ЗаполнитьПризнакАртикул", СтруктураАртикул);
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(ИмяТабличнойЧасти, СтруктураДействий)
Если ИмяТабличнойЧасти = "ВозвратныеОтходы" Тогда
СтруктураДействий = Новый Структура("ПересчитатьСумму");
КонецЕсли;
СтруктураДействий.Вставить("ПересчитатьКоличествоЕдиниц", ПроизводствоКлиентСервер.ПараметрыПересчетаКоличестваЕдиниц());
КонецПроцедуры
&НаСервере
Процедура ОбновитьЭлементыДополнительныхРеквизитов()
УправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтаФорма);
КонецПроцедуры
&НаСервере
Процедура ИзменитьДокументСервер()
УстановитьДоступностьЭлементовПоСтатусуСервер();
КонецПроцедуры
&НаСервере
Процедура ИзмененаОплатаСервер(ИмяСобытия, Параметр)
ВзаиморасчетыСервер.ОбработкаОповещения(ЭтаФорма, ИмяСобытия, Параметр);
КонецПроцедуры
&НаСервере
Процедура НастроитьФормуПоСпособуГруппировкиЗатрат()
#Область Заголовки
ЗаголовокГруппы = ПереработкаНаСторонеКлиентСервер.ЗаголовокПоляГруппыЗатрат(
Объект.ГруппировкаЗатрат, ОбосабливатьПоНазначениюПродукции);
Если Объект.ГруппировкаЗатрат = Перечисления.ГруппировкиЗатратВЗаказеПереработчику.ПоПродукции Тогда
ПодсказкаГруппыПродукция = НСтр("ru = 'Продукция к которой относится продукция'");
ПодсказкаГруппыОтходы = НСтр("ru = 'Продукция к которой относится возвратный отход'");
ПодсказкаГруппыМатериалы = НСтр("ru = 'Продукция к которой относится материал'");
ПодсказкаГруппыУслуги = НСтр("ru = 'Продукция к которой относится услуга'");
ЗаголовокКомандыЗаполнитьГруппуЗатрат = НСтр("ru = 'Продукцию'");
ИначеЕсли Объект.ГруппировкаЗатрат = Перечисления.ГруппировкиЗатратВЗаказеПереработчику.ПоСпецификациям Тогда
ПодсказкаГруппыПродукция = НСтр("ru = 'Спецификация к которой относится продукция'");
ПодсказкаГруппыОтходы = НСтр("ru = 'Спецификация к которой относится возвратный отход'");
ПодсказкаГруппыМатериалы = НСтр("ru = 'Спецификация к которой относится материал'");
ПодсказкаГруппыУслуги = НСтр("ru = 'Спецификация к которой относится услуга'");
ЗаголовокКомандыЗаполнитьГруппуЗатрат = НСтр("ru = 'Спецификацию'");
ИначеЕсли Объект.ГруппировкаЗатрат = Перечисления.ГруппировкиЗатратВЗаказеПереработчику.ПоЗаказамНаПроизводство Тогда
ПодсказкаГруппыПродукция = НСтр("ru = 'Заказ (этап, спецификация) к которому относится продукция'");
ПодсказкаГруппыОтходы = НСтр("ru = 'Заказ (этап, спецификация) к которому относится возвратный отход'");
ПодсказкаГруппыМатериалы = НСтр("ru = 'Заказ (этап, спецификация) к которому относится материал'");
ПодсказкаГруппыУслуги = НСтр("ru = 'Заказ (этап, спецификация) к которому относится услуга'");
ЗаголовокКомандыЗаполнитьГруппуЗатрат = НСтр("ru = 'Заказ (этап, спецификация)'");
ИначеЕсли Объект.ГруппировкаЗатрат = Перечисления.ГруппировкиЗатратВЗаказеПереработчику.ПоЭтапамПроизводства Тогда
ПодсказкаГруппыПродукция = НСтр("ru = 'Этап к которому относится продукция'");
ПодсказкаГруппыОтходы = НСтр("ru = 'Этап к которому относится возвратный отход'");
ПодсказкаГруппыМатериалы = НСтр("ru = 'Этап к которому относится материал'");
ПодсказкаГруппыУслуги = НСтр("ru = 'Этап к которому относится услуга'");
ЗаголовокКомандыЗаполнитьГруппуЗатрат = НСтр("ru = 'Этап производства'");
ИначеЕсли Объект.ГруппировкаЗатрат = Перечисления.ГруппировкиЗатратВЗаказеПереработчику.БезГруппировки
И НЕ Объект.ПоЗаказам Тогда
ЗаголовокКомандыЗаполнитьГруппуЗатрат = НСтр("ru = 'Документ поступления'");
КонецЕсли;
Элементы.МатериалыЗаполнитьГруппуЗатрат.Заголовок = ЗаголовокКомандыЗаполнитьГруппуЗатрат;
Элементы.ВозвратныеОтходыЗаполнитьГруппуЗатрат.Заголовок = ЗаголовокКомандыЗаполнитьГруппуЗатрат;
Если Объект.ГруппировкаЗатрат <> Перечисления.ГруппировкиЗатратВЗаказеПереработчику.БезГруппировки Тогда
Элементы.ПродукцияГруппаЗатрат.Заголовок = ЗаголовокГруппы;
Элементы.ВозвратныеОтходыГруппаЗатрат.Заголовок = ЗаголовокГруппы;
Элементы.МатериалыГруппаЗатрат.Заголовок = ЗаголовокГруппы;
Элементы.УслугиГруппаЗатрат.Заголовок = ЗаголовокГруппы;
Элементы.ПродукцияГруппаЗатрат.Подсказка = ПодсказкаГруппыПродукция;
Элементы.ВозвратныеОтходыГруппаЗатрат.Подсказка = ПодсказкаГруппыОтходы;
Элементы.МатериалыГруппаЗатрат.Подсказка = ПодсказкаГруппыМатериалы;
Элементы.УслугиГруппаЗатрат.Подсказка = ПодсказкаГруппыУслуги;
КонецЕсли;
#КонецОбласти
#Область Видимость
Элементы.ПродукцияСпецификация.Видимость = (
Объект.ГруппировкаЗатрат = Перечисления.ГруппировкиЗатратВЗаказеПереработчику.ПоСпецификациям
ИЛИ Объект.ГруппировкаЗатрат = Перечисления.ГруппировкиЗатратВЗаказеПереработчику.ПоПродукции);
Элементы.ПродукцияГруппаЗатрат.Видимость = (
Объект.ПоЗаказам
И (Объект.ГруппировкаЗатрат = Перечисления.ГруппировкиЗатратВЗаказеПереработчику.ПоПродукции
ИЛИ Объект.ГруппировкаЗатрат = Перечисления.ГруппировкиЗатратВЗаказеПереработчику.ПоЗаказамНаПроизводство
ИЛИ Объект.ГруппировкаЗатрат = Перечисления.ГруппировкиЗатратВЗаказеПереработчику.ПоЭтапамПроизводства));
Элементы.МатериалыНорматив.Видимость = (
Объект.ГруппировкаЗатрат = Перечисления.ГруппировкиЗатратВЗаказеПереработчику.ПоПродукции
ИЛИ Объект.ГруппировкаЗатрат = Перечисления.ГруппировкиЗатратВЗаказеПереработчику.ПоСпецификациям
ИЛИ Объект.ГруппировкаЗатрат = Перечисления.ГруппировкиЗатратВЗаказеПереработчику.ПоЗаказамНаПроизводство
ИЛИ Объект.ГруппировкаЗатрат = Перечисления.ГруппировкиЗатратВЗаказеПереработчику.ПоЭтапамПроизводства);
Элементы.МатериалыОтклонение.Видимость = (
Объект.ГруппировкаЗатрат = Перечисления.ГруппировкиЗатратВЗаказеПереработчику.ПоПродукции
ИЛИ Объект.ГруппировкаЗатрат = Перечисления.ГруппировкиЗатратВЗаказеПереработчику.ПоСпецификациям
ИЛИ Объект.ГруппировкаЗатрат = Перечисления.ГруппировкиЗатратВЗаказеПереработчику.ПоЗаказамНаПроизводство
ИЛИ Объект.ГруппировкаЗатрат = Перечисления.ГруппировкиЗатратВЗаказеПереработчику.ПоЭтапамПроизводства);
Элементы.ВозвратныеОтходыГруппаЗатрат.Видимость = (Объект.ГруппировкаЗатрат <> Перечисления.ГруппировкиЗатратВЗаказеПереработчику.БезГруппировки);
Элементы.МатериалыГруппаЗатрат.Видимость = (Объект.ГруппировкаЗатрат <> Перечисления.ГруппировкиЗатратВЗаказеПереработчику.БезГруппировки);
Элементы.УслугиГруппаЗатрат.Видимость = (Объект.ГруппировкаЗатрат <> Перечисления.ГруппировкиЗатратВЗаказеПереработчику.БезГруппировки);
Элементы.ПродукцияПерезаполнить.Видимость = Объект.ПоЗаказам ИЛИ Объект.ГруппировкаЗатрат <> Перечисления.ГруппировкиЗатратВЗаказеПереработчику.БезГруппировки;
Элементы.СпособРаспределенияЗатратНаВыходныеИзделия.Видимость =
Объект.ГруппировкаЗатрат = Перечисления.ГруппировкиЗатратВЗаказеПереработчику.БезГруппировки
Или Объект.ГруппировкаЗатрат = Перечисления.ГруппировкиЗатратВЗаказеПереработчику.ПоЗаказамНаПроизводство
Или Объект.ГруппировкаЗатрат = Перечисления.ГруппировкиЗатратВЗаказеПереработчику.ПоСпецификациям;
#КонецОбласти
#Область Прочее
ЕстьКнопкаОткрытия = (
Объект.ГруппировкаЗатрат = Перечисления.ГруппировкиЗатратВЗаказеПереработчику.ПоЗаказамНаПроизводство
ИЛИ
Объект.ГруппировкаЗатрат = Перечисления.ГруппировкиЗатратВЗаказеПереработчику.ПоЭтапамПроизводства);
Элементы.ПродукцияГруппаЗатрат.КнопкаОткрытия = ЕстьКнопкаОткрытия;
Элементы.ВозвратныеОтходыГруппаЗатрат.КнопкаОткрытия = ЕстьКнопкаОткрытия;
Элементы.МатериалыГруппаЗатрат.КнопкаОткрытия = ЕстьКнопкаОткрытия;
Элементы.УслугиГруппаЗатрат.ГиперссылкаЯчейки = ЕстьКнопкаОткрытия;
Если (Объект.ПоЗаказам Или ПартионныйУчетВерсии22)
И Объект.ГруппировкаЗатрат = Перечисления.ГруппировкиЗатратВЗаказеПереработчику.БезГруппировки Тогда
Элементы.СтраницыУслуги.ТекущаяСтраница = Элементы.СтраницаОднаУслуга;
Иначе
Элементы.СтраницыУслуги.ТекущаяСтраница = Элементы.СтраницаНесколькоУслуг;
КонецЕсли;
ТолькоПросмотрДокументаПоступления = Объект.ГруппировкаЗатрат = Перечисления.ГруппировкиЗатратВЗаказеПереработчику.ПоПродукции
ИЛИ Объект.ГруппировкаЗатрат = Перечисления.ГруппировкиЗатратВЗаказеПереработчику.ПоСпецификациям
ИЛИ Объект.ГруппировкаЗатрат = Перечисления.ГруппировкиЗатратВЗаказеПереработчику.ПоЗаказамНаПроизводство
ИЛИ Объект.ГруппировкаЗатрат = Перечисления.ГруппировкиЗатратВЗаказеПереработчику.ПоЭтапамПроизводства;
Элементы.МатериалыДокументПоступления.ТолькоПросмотр = ТолькоПросмотрДокументаПоступления;
Элементы.ПродукцияДокументПоступления.ТолькоПросмотр = ТолькоПросмотрДокументаПоступления;
Элементы.ВозвратныеОтходыДокументПоступления.ТолькоПросмотр =ТолькоПросмотрДокументаПоступления;
ЗапретитьВыборРабот =
Не ПолучитьФункциональнуюОпцию("ИспользоватьУправлениеПроизводством2_2")
Или
Объект.ГруппировкаЗатрат = Перечисления.ГруппировкиЗатратВЗаказеПереработчику.ПоЗаказамНаПроизводство
Или
Не ПолучитьФункциональнуюОпцию("ИспользоватьПроизводство");
МассивТиповВыбора = ?(ЗапретитьВыборРабот,
НоменклатураКлиентСервер.ОтборПоТоваруМногооборотнойТаре(Ложь),
НоменклатураКлиентСервер.ОтборПоТоваруМногооборотнойТареРаботе(Ложь));
МассивПараметровВыбора = Новый Массив;
МассивПараметровВыбора.Добавить(Новый ПараметрВыбора("Отбор.ТипНоменклатуры", Новый ФиксированныйМассив(МассивТиповВыбора)));
Элементы.ПродукцияНоменклатура.ПараметрыВыбора = Новый ФиксированныйМассив(МассивПараметровВыбора);
Элементы.ВозвратныеОтходыНоменклатура.ПараметрыВыбора = Новый ФиксированныйМассив(МассивПараметровВыбора);
Элементы.ПродукцияЗаполнитьПолучателя.Видимость = Не ЗапретитьВыборРабот;
Элементы.ВозвратныеОтходыЗаполнитьПолучателя.Видимость = Не ЗапретитьВыборРабот;
Элементы.ПродукцияПредставлениеОтраженияОперации.Видимость = Не ЗапретитьВыборРабот;
Элементы.ВозвратныеОтходыПредставлениеОтраженияОперации.Видимость = Не ЗапретитьВыборРабот;
#КонецОбласти
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьГруппуЗатратУстановитьВидимость()
СкрытьЭлемент = Объект.ГруппировкаЗатрат = Перечисления.ГруппировкиЗатратВЗаказеПереработчику.БезГруппировки
И (Объект.ПоЗаказам Или Не Объект.ПоЗаказам И ПартионныйУчетВерсии22);
Элементы.МатериалыЗаполнитьГруппуЗатрат.Видимость = Не СкрытьЭлемент;
Элементы.ВозвратныеОтходыЗаполнитьГруппуЗатрат.Видимость = Не СкрытьЭлемент;
КонецПроцедуры
&НаСервере
Процедура НастроитьФормуПоФлагуПоЗаказам()
Элементы.ГруппировкаЗатрат.Доступность = НЕ Объект.ПоЗаказам;
Элементы.ПродукцияПодобратьИзЗаказа.Видимость = Объект.ПоЗаказам;
Элементы.ПродукцияПодобратьИзПоступлений.Видимость = НЕ Объект.ПоЗаказам И Не ПартионныйУчетВерсии22;
Элементы.ВозвратныеОтходыПодобратьИзПоступлений.Видимость = НЕ Объект.ПоЗаказам И Не ПартионныйУчетВерсии22;
Элементы.ПродукцияДокументПоступления.Видимость = НЕ Объект.ПоЗаказам И Не ПартионныйУчетВерсии22;
Элементы.ВозвратныеОтходыДокументПоступления.Видимость = НЕ Объект.ПоЗаказам И Не ПартионныйУчетВерсии22;
Элементы.МатериалыДокументПоступления.Видимость = НЕ Объект.ПоЗаказам И Не ПартионныйУчетВерсии22;
Элементы.УслугиДокументПоступления.Видимость = НЕ Объект.ПоЗаказам И Не ПартионныйУчетВерсии22;
Элементы.ПродукцияСпецификация.Видимость = НЕ Объект.ПоЗаказам;
Элементы.ПродукцияЗаполнитьПолучателя.Видимость = НЕ Объект.ПоЗаказам;
Элементы.ВозвратныеОтходыЗаполнитьПолучателя.Видимость = НЕ Объект.ПоЗаказам;
Элементы.НаправлениеДеятельности.ТолькоПросмотр = Объект.ПоЗаказам;
КонецПроцедуры
&НаКлиенте
Процедура ПодборПоЗаказамПереработчикам()
ПараметрыОтбора = Новый Структура;
Если ЗначениеЗаполнено(Объект.Организация) Тогда
ПараметрыОтбора.Вставить("Организация", Объект.Организация);
КонецЕсли;
Если ЗначениеЗаполнено(Объект.Партнер) Тогда
ПараметрыОтбора.Вставить("Партнер", Объект.Партнер);
КонецЕсли;
Если ЗначениеЗаполнено(Объект.НаправлениеДеятельности) Тогда
ПараметрыОтбора.Вставить("НаправлениеДеятельности", Объект.НаправлениеДеятельности);
КонецЕсли;
ОписаниеОповещения = Новый ОписаниеОповещения("ПодборПоЗаказамПереработчикамЗавершение", ЭтотОбъект);
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Отбор", ПараметрыОтбора);
ПараметрыФормы.Вставить("МножественныйВыбор", Ложь);
ПараметрыФормы.Вставить("Регистратор", Объект.Ссылка);
ОткрытьФорму(
"Документ.ЗаказПереработчику.Форма.ВыборЗаказаВОтчетПереработчика",
ПараметрыФормы,,,,,
ОписаниеОповещения);
КонецПроцедуры
&НаКлиенте
Процедура ПодборПоЗаказамПереработчикамЗавершение(РезультатЗакрытия, ДополнительныеПараметры) Экспорт
Если ТипЗнч(РезультатЗакрытия) = Тип("ДокументСсылка.ЗаказПереработчику") Тогда
ПодборПоЗаказамПереработчикамЗавершениеНаСервере(РезультатЗакрытия);
Иначе
Объект.ПоЗаказам = Ложь;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПодобратьИзПоступлений(ИмяТабличнойЧасти)
ТабличнаяЧасть = Объект[ИмяТабличнойЧасти];
МассивКодовСтрок = Новый Массив;
Для Каждого СтрокаТЧ Из ТабличнаяЧасть Цикл
Если СтрокаТЧ.КодСтроки <> 0 И ЗначениеЗаполнено(СтрокаТЧ.ДокументПоступления) Тогда
МассивКодовСтрок.Добавить(Новый Структура("КодСтроки,Распоряжение", СтрокаТЧ.КодСтроки, СтрокаТЧ.ДокументПоступления));
КонецЕсли;
КонецЦикла;
ТипСтоимости = ПредопределенноеЗначение("Перечисление.ТипыСтоимостиВыходныхИзделий.Фиксированная");
Если ИмяТабличнойЧасти="Продукция" Тогда
ТипСтоимости = ПредопределенноеЗначение("Перечисление.ТипыСтоимостиВыходныхИзделий.Рассчитывается");
КонецЕсли;
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Ссылка", Объект.Ссылка);
ПараметрыФормы.Вставить("Организация", Объект.Организация);
ПараметрыФормы.Вставить("Подразделение", Объект.Подразделение);
ПараметрыФормы.Вставить("Партнер", Объект.Партнер);
ПараметрыФормы.Вставить("НаправлениеДеятельности", Объект.НаправлениеДеятельности);
ПараметрыФормы.Вставить("МассивКодовСтрок", МассивКодовСтрок);
ПараметрыФормы.Вставить("ТипСтоимости", ТипСтоимости);
ОписаниеОповещения = Новый ОписаниеОповещения("ПодобратьИзПоступленийЗавершение", ЭтотОбъект);
ОткрытьФорму("Документ.ОтчетПереработчика.Форма.ПодборПродукцииИзПоступлений", ПараметрыФормы,,,,, ОписаниеОповещения);
КонецПроцедуры
&НаСервере
Процедура НакладнаяПоЗаказуПриИзмененииНаСервере()
Если НЕ Объект.ПоЗаказам Тогда
Объект.ЗаказПереработчику = Неопределено;
Объект.ГруппировкаЗатрат = Перечисления.ГруппировкиЗатратВЗаказеПереработчику.БезГруппировки;
Объект.СпособРаспределенияЗатратНаВыходныеИзделия = Перечисления.СпособыРаспределенияЗатратНаВыходныеИзделия.ПоДолямСтоимости;
ОбосабливатьПоНазначениюПродукции = Ложь;
КонецЕсли;
Объект.Продукция.Очистить();
Объект.Материалы.Очистить();
Объект.Услуги.Очистить();
ВзаиморасчетыСервер.ПриИзмененииПараметровМеханизма(ЭтаФорма);
ВзаиморасчетыСервер.ФормаПриИзмененииРеквизитов(ЭтаФорма, "НакладнаяПоЗаказу");
ГруппировкаЗатратПриИзмененииНаСервере();
УстановитьСвойстваЭлементовПоПорядкуРасчетов();
НастроитьФормуПоФлагуПоЗаказам();
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьНормативыМатериаловНаСервере(Знач ДанныеЗаказа = Неопределено)
Если Объект.ПоЗаказам Тогда
ЗаполнитьНормативыМатериаловПоЗаказу(ДанныеЗаказа);
Иначе
ЗаполнитьНормативыМатериаловПоСпецификациям();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПроверитьЗаполнениеГруппыЗатрат(Отказ)
Если Объект.ГруппировкаЗатрат = Перечисления.ГруппировкиЗатратВЗаказеПереработчику.БезГруппировки Тогда
Возврат;
КонецЕсли;
ИмяПоляГруппаЗатрат = ИмяПоляГруппаЗатрат(Объект);
ШаблонСообщения = НСтр("ru = 'Не заполнена колонка ""%1"" в строке %2 списка ""%3""'");
ЗаголовокПоля = ПереработкаНаСторонеКлиентСервер.ЗаголовокПоляГруппыЗатрат(
Объект.ГруппировкаЗатрат, ОбосабливатьПоНазначениюПродукции);
Для каждого ДанныеСтроки Из Объект.Продукция Цикл
Если НЕ ЗначениеЗаполнено(ДанныеСтроки[ИмяПоляГруппаЗатрат]) Тогда
ТекстСообщения = СтрШаблон(ШаблонСообщения, ЗаголовокПоля, ДанныеСтроки.НомерСтроки, НСтр("ru = 'Продукция'"));
ПутьКТЧ = ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("Объект.Продукция", ДанныеСтроки.НомерСтроки, "ГруппаЗатрат");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, Объект.Ссылка, ПутьКТЧ,, Отказ);
КонецЕсли;
КонецЦикла;
Для каждого ДанныеСтроки Из Объект.Материалы Цикл
Если НЕ ЗначениеЗаполнено(ДанныеСтроки[ИмяПоляГруппаЗатрат]) Тогда
ТекстСообщения = СтрШаблон(ШаблонСообщения, ЗаголовокПоля, ДанныеСтроки.НомерСтроки, НСтр("ru = 'Сырье и материалы'"));
ПутьКТЧ = ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("Объект.Материалы", ДанныеСтроки.НомерСтроки, "ГруппаЗатрат");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, Объект.Ссылка, ПутьКТЧ,, Отказ);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура УдалитьВыбранныеУслуги()
Если Элементы.Услуги.ВыделенныеСтроки.Количество() = 0 Тогда
Возврат;
КонецЕсли;
Если Элементы.Услуги.ВыделенныеСтроки.Количество() = 1 Тогда
ТекстВопроса = НСтр("ru = 'Будет удалена услуга и соответствующие ей продукция и материалы.
|Продолжить?'");
Иначе
ТекстВопроса = НСтр("ru = 'Будут удалены выбранные услуги и соответствующие им продукция и материалы.
|Продолжить?'");
КонецЕсли;
ОписаниеОповещения = Новый ОписаниеОповещения("УдалитьУслугуЗавершение", ЭтотОбъект);
ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, РежимДиалогаВопрос.ДаНет);
КонецПроцедуры
&НаКлиенте
Процедура УдалитьУслугуЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
Если РезультатВопроса <> КодВозвратаДиалога.Да Тогда
Возврат;
КонецЕсли;
УдалитьУслугуНаСервере();
ПриИзмененииСуммыУслуг(ЭтаФорма);
НастроитьЭлементыСуммыНДСПриИзмененииСтавкиНДСУслуг(ЭтаФорма);
КоличествоУслуг = Объект.Услуги.Количество();
ОпределитьКоличествоВыходныхИзделий(ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура НадписьВалютыНажатиеЗавершение(РезультатЗакрытия, ДополнительныеПараметры) Экспорт
Если РезультатЗакрытия = Неопределено Тогда
Возврат;
КонецЕсли;
Если ТипЗнч(РезультатЗакрытия) = Тип("Структура") Тогда
ИзмененныеРеквизиты = РезультатЗакрытия.СтарыеЗначенияИзмененныхРеквизитов;
Если ИзмененныеРеквизиты.Количество() > 0 Тогда
НадписьВалютыНажатиеЗавершениеСервер(РезультатЗакрытия);
Если РезультатЗакрытия.НеобходимПересчетСуммДокумента Тогда
ЦенообразованиеКлиент.ОповеститьОбОкончанииПересчетаСуммВВалюту(ВалютаДокумента, Объект.Валюта);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура НадписьВалютыНажатиеЗавершениеСервер(РезультатЗакрытия)
ИзмененныеРеквизиты = РезультатЗакрытия.СтарыеЗначенияИзмененныхРеквизитов;
Если ИзмененныеРеквизиты.Свойство("Валюта") Тогда
Если РезультатЗакрытия.НеобходимПересчетСуммДокумента Тогда
ВалютаПриИзмененииСервер(Объект.Валюта);
КонецЕсли;
ВалютаДокумента = Объект.Валюта;
КонецЕсли;
ПриИзмененииСуммыУслуг(ЭтаФорма);
ВзаиморасчетыСервер.ФормаПриИзмененииРеквизитов(ЭтаФорма, ИзмененныеРеквизиты, Истина);
КонецПроцедуры
&НаСервере
Процедура ВалютаПриИзмененииСервер(НоваяВалюта)
СтараяВалюта = ВалютаДокумента;
ДатаДокумента = ?(ЗначениеЗаполнено(Объект.Дата), Объект.Дата,ТекущаяДатаСеанса());
СтруктурыКурсов = ВзаиморасчетыСервер.КурсыВалютДляПересчета(ЭтаФорма, СтараяВалюта, НоваяВалюта, ВалютаРегламентированногоУчета, ДатаДокумента);
СтруктураКурсовСтаройВалюты = СтруктурыКурсов.СтруктураКурсовСтаройВалюты;
СтруктураКурсовНовойВалюты = СтруктурыКурсов.СтруктураКурсовНовойВалюты;
ЦенаВключаетНДС = ПараметрыПересчетаСуммыНДСВТЧ(ЭтаФорма).ЦенаВключаетНДС;
СуммаКРаспределению = РаботаСКурсамиВалютУТ.ПересчитатьПоКурсу(
Объект.Услуги.Итог("СуммаСНДС"),
СтруктураКурсовСтаройВалюты,
СтруктураКурсовНовойВалюты);
МассивСумм = Новый Массив;
Для н = 0 По Объект.Услуги.Количество()-1 Цикл
ТекСтрока = Объект.Услуги[н];
МассивСумм.Добавить(
РаботаСКурсамиВалютУТ.ПересчитатьПоКурсу(
ТекСтрока.СуммаСНДС,
СтруктураКурсовСтаройВалюты,
СтруктураКурсовНовойВалюты));
КонецЦикла;
МассивСумм = ОбщегоНазначения.РаспределитьСуммуПропорциональноКоэффициентам(СуммаКРаспределению, МассивСумм);
Если МассивСумм <> Неопределено Тогда
Для н = 0 По Объект.Услуги.Количество()-1 Цикл
ТекСтрока = Объект.Услуги[н];
ТекСтрока.СуммаСНДС = МассивСумм[н];
СтавкаНДСЧислом = УчетНДСУПКлиентСервер.ЗначениеСтавкиНДС(ТекСтрока.СтавкаНДС);
Если ЗначениеЗаполнено(ТекСтрока.СуммаСНДС) Тогда
ТекСтрока.СуммаНДС = Окр(ТекСтрока.СуммаСНДС * (СтавкаНДСЧислом/(100+СтавкаНДСЧислом)), 2);
ТекСтрока.Сумма = ТекСтрока.СуммаСНДС - ?(ЦенаВключаетНДС, 0, ТекСтрока.СуммаНДС);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УстановитьДоступностьЦенВозвратныхОтходов()
ДоступноУказаниеЦенВозвратныхОтходов = Документы.ОтчетПереработчика.ДоступноУказаниеЦенВозвратныхОтходов(Объект);
Элементы.ВозвратныеОтходыЦена.Видимость = ДоступноУказаниеЦенВозвратныхОтходов;
Элементы.ВозвратныеОтходыСумма.Видимость = ДоступноУказаниеЦенВозвратныхОтходов;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ОпределитьКоличествоВыходныхИзделий(Форма)
Форма.КоличествоВыходныхИзделий = Форма.Объект.Продукция.Количество() + Форма.Объект.ВозвратныеОтходы.Количество();
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьФормуВводаДолиСтоимости(ТекущиеДанные)
НетОшибок = ПроизводствоКлиент.ПроверитьЗаполнениеПередВводомДолиСтоимости(ТекущиеДанные, ПараметрыРаспределенияЗатрат);
Если НетОшибок Тогда
ПараметрыФормы = ПараметрыФормыВводаДолиСтоимости(ТекущиеДанные.ПолучитьИдентификатор());
ОткрытьФорму("ОбщаяФорма.ВводДолиСтоимости",
ПараметрыФормы,
ЭтаФорма);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаВводаДолиСтоимости(Элемент, ТекущиеДанные, ВыбранноеЗначение)
Если ТекущиеДанные.ДоляСтоимости <> ВыбранноеЗначение.ДоляСтоимости Тогда
ПроизводствоКлиентСервер.ЗаполнитьДолюСтоимостиВСтроке(
ТекущиеДанные,
ВыбранноеЗначение);
Группировки = Новый Массив;
Если ЗначениеЗаполнено(ПараметрыРаспределенияЗатрат.ПолеГруппировкиЗатрат) Тогда
Группировки.Добавить(ТекущиеДанные[ПараметрыРаспределенияЗатрат.ПолеГруппировкиЗатрат]);
КонецЕсли;
РассчитатьПроцентРаспределенияЗатратНаВыходныеИзделия(Группировки);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура РассчитатьПроцентРаспределенияЗатратНаВыходныеИзделия(Группировки = Неопределено)
Если Группировки = Неопределено Или Группировки.Количество() = 0 Тогда
ПроизводствоСервер.РассчитатьПроцентРаспределенияЗатратНаВыходныеИзделия(Объект, ПараметрыРаспределенияЗатрат);
Иначе
ПроизводствоСервер.РассчитатьПроцентРаспределенияЗатратНаВыходныеИзделия(Объект, ПараметрыРаспределенияЗатрат, Группировки);
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПараметрыФормыВводаДолиСтоимости(ТекущиеДанныеИдентификатор)
ПараметрыФормы = ПроизводствоСервер.ПараметрыФормыВводаДолейСтоимости(Объект, ПараметрыРаспределенияЗатрат, ТекущиеДанныеИдентификатор);
Возврат ПараметрыФормы;
КонецФункции
&НаСервере
Процедура УстановитьУсловноеОформлениеСписаниеНаРасходы(ИмяТаблицы)
Элемент = УсловноеОформление.Элементы.Добавить();
Если ИмяТаблицы = "Продукция" Тогда
ИмяПоляСписатьНаРасходы = "ПродукцияСписатьНаРасходы";
ИмяПоляСтатьяРасходов = "ПродукцияСтатьяРасходов";
ИмяПоляАналитикаРасходов = "ПродукцияАналитикаРасходов";
ИмяПоляНазначение = "ПродукцияНазначение";
ИначеЕсли ИмяТаблицы = "ВозвратныеОтходы" Тогда
ИмяПоляСписатьНаРасходы = "ВозвратныеОтходыСписатьНаРасходы";
ИмяПоляСтатьяРасходов = "ВозвратныеОтходыСтатьяРасходов";
ИмяПоляАналитикаРасходов = "ВозвратныеОтходыАналитикаРасходов";
ИмяПоляНазначение = "ВозвратныеОтходыНазначение";
КонецЕсли;
ПолеСписатьНаРасходы = Элементы[ИмяПоляСписатьНаРасходы];
ПолеСтатьяРасходов = Элементы[ИмяПоляСтатьяРасходов];
ПолеАналитикаРасходов = Элементы[ИмяПоляАналитикаРасходов];
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ПолеСписатьНаРасходы.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ПолеСтатьяРасходов.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ПолеАналитикаРасходов.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект." + ИмяТаблицы + ".ТипНоменклатуры");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно;
ОтборЭлемента.ПравоеЗначение = Перечисления.ТипыНоменклатуры.Работа;
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр" , Истина);
Элемент.Оформление.УстановитьЗначениеПараметра("Текст" , НСтр("ru = '<для работ>'"));
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста" , ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеНазначение = Элементы[ИмяПоляНазначение];
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ПолеНазначение.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект." + ИмяТаблицы + ".СписатьНаРасходы");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста" , ЦветаСтиля.НезаполненноеПолеТаблицы);
Элемент.Оформление.УстановитьЗначениеПараметра("Текст" , НСтр("ru = '<не используется при списании на расходы>'"));
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр" , Истина);
КонецПроцедуры
&НаСервере
Процедура УстановитьУсловноеОформлениеПолучатель(ИмяОбъекта, ИмяТЧ)
Если ИмяТЧ = "Продукция" Тогда
ИмяПоляПолучатель = "ПродукцияПолучатель";
ИначеЕсли ИмяТЧ = "ВозвратныеОтходы" Тогда
ИмяПоляПолучатель = "ВозвратныеОтходыПолучатель";
КонецЕсли;
ПолеПолучатель = Элементы[ИмяПоляПолучатель];
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ПолеПолучатель.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ИмяОбъекта + "." + ИмяТЧ + ".СписатьНаРасходы");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ИмяОбъекта + "." + ИмяТЧ + ".ТипНоменклатуры");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Перечисления.ТипыНоменклатуры.Работа;
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ИмяОбъекта + "." + ИмяТЧ + ".Получатель");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("Текст" , Новый ПолеКомпоновкиДанных("Объект.Подразделение"));
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста" , ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ПолеПолучатель.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ИмяОбъекта + "." + ИмяТЧ + ".СписатьНаРасходы");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ИмяОбъекта + "." + ИмяТЧ + ".ТипНоменклатуры");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Перечисления.ТипыНоменклатуры.Работа;
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ИмяОбъекта + "." + ИмяТЧ + ".Получатель");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Истина);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ПолеПолучатель.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект." + ИмяТЧ + ".ТипНоменклатуры");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно;
ОтборЭлемента.ПравоеЗначение = Перечисления.ТипыНоменклатуры.Работа;
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр" , Истина);
Элемент.Оформление.УстановитьЗначениеПараметра("Текст" , НСтр("ru = '<для работ>'"));
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста" , ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет);
КонецПроцедуры
&НаКлиенте
Процедура ОповеститьОбОкончанииЗаполненияПолучателей()
ПоказатьОповещениеПользователя(
НСтр("ru = 'Получатель заполнен'"),
,
НСтр("ru='Для выделенных строк получатель установлен'"),
БиблиотекаКартинок.Информация32);
КонецПроцедуры
&НаСервереБезКонтекста
Функция СуммаНДСТолькоПросмотр(СтавкаНДС)
Возврат УчетНДСУП.НезначащаяСтавка(СтавкаНДС);
КонецФункции
#КонецОбласти
&НаСервере
Процедура ПоместитьРасшифровкуПлатежаВоВременноеХранилище()
ВзаиморасчетыСервер.ПоместитьРасшифровкуПлатежаВоВременноеХранилище(ЭтаФорма);
КонецПроцедуры
#КонецОбласти