#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ПрограммныйИнтерфейс
#Область Проведение
Процедура ЗарегистрироватьУчетныеМеханизмы(МеханизмыДокумента) Экспорт
МеханизмыДокумента.Добавить("РеестрДокументов");
МеханизмыДокумента.Добавить("ТМЦВЭксплуатации");
СписаниеИзЭксплуатацииЛокализация.ЗарегистрироватьУчетныеМеханизмы(МеханизмыДокумента);
КонецПроцедуры
Функция ДанныеДокументаДляПроведения(Документ, Регистры, ДопПараметры = Неопределено) Экспорт
Если ДопПараметры = Неопределено Тогда
ДопПараметры = ПроведениеДокументов.ДопПараметрыИнициализироватьДанныеДокументаДляПроведения();
КонецЕсли;
Если ТипЗнч(Документ) = Тип("ДокументОбъект.СписаниеИзЭксплуатации") Тогда
ДокументСсылка = Документ.Ссылка;
Иначе
ДокументСсылка = Документ;
КонецЕсли;
Запрос = Новый Запрос;
ТекстыЗапроса = Новый СписокЗначений;
Если Не ДопПараметры.ПолучитьТекстыЗапроса Тогда
ЗаполнитьПараметрыИнициализации(Запрос, ДокументСсылка);
ТекстЗапросаТаблицаТМЦВЭксплуатации(ТекстыЗапроса, Регистры);
ТекстЗапросаТаблицаРеестрДокументов(ТекстыЗапроса, Регистры);
СписаниеИзЭксплуатацииЛокализация.ДополнитьТекстыЗапросовПроведения(Запрос, ТекстыЗапроса, Регистры);
КонецЕсли;
ТаблицыДвижений = ПроведениеДокументов.ИнициализироватьДанныеДокументаДляПроведения(Запрос, ТекстыЗапроса, ДопПараметры);
Возврат ТаблицыДвижений;
КонецФункции
#КонецОбласти
#Область Команды
Процедура ДобавитьКомандыСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры) Экспорт
КонецПроцедуры
Функция ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании) Экспорт
Если ПравоДоступа("Добавление", Метаданные.Документы.СписаниеИзЭксплуатации) Тогда
КомандаСоздатьНаОсновании = КомандыСозданияНаОсновании.Добавить();
КомандаСоздатьНаОсновании.Менеджер = Метаданные.Документы.СписаниеИзЭксплуатации.ПолноеИмя();
КомандаСоздатьНаОсновании.Представление = ОбщегоНазначенияУТ.ПредставлениеОбъекта(Метаданные.Документы.СписаниеИзЭксплуатации);
КомандаСоздатьНаОсновании.РежимЗаписи = "Проводить";
КомандаСоздатьНаОсновании.ФункциональныеОпции = "ИспользоватьВнутреннееПотребление";
Возврат КомандаСоздатьНаОсновании;
КонецЕсли;
Возврат Неопределено;
КонецФункции
Процедура ДобавитьКомандыОтчетов(КомандыОтчетов, Параметры) Экспорт
КонецПроцедуры
#КонецОбласти
#Область Серии
Функция ИменаРеквизитовДляЗаполненияПараметровУказанияСерий() Экспорт
ИменаРеквизитов = "Дата";
Возврат ИменаРеквизитов;
КонецФункции
Функция ПараметрыУказанияСерий(Объект) Экспорт
ПараметрыУказанияСерий = НоменклатураКлиентСервер.ПараметрыУказанияСерий();
ПараметрыУказанияСерий.ПолноеИмяОбъекта = "Документ.СписаниеИзЭксплуатации";
ПараметрыУказанияСерий.ИспользоватьСерииНоменклатуры = ТМЦВЭксплуатацииПовтИсп.ВозможенУчетСерийВЭксплуатации();
ПараметрыУказанияСерий.УчитыватьСебестоимостьПоСериям = ПараметрыУказанияСерий.ИспользоватьСерииНоменклатуры;
ПараметрыУказанияСерий.СкладскиеОперации.Добавить(Перечисления.СкладскиеОперации.ВыбытиеТМЦИзЭксплуатации);
ПараметрыУказанияСерий.РегистрироватьСерии = Ложь;
ПараметрыУказанияСерий.ЭтоНакладная = Истина;
ПараметрыУказанияСерий.Дата = Объект.Дата;
ПараметрыУказанияСерий.ИмяПоляСклад = Неопределено;
ПараметрыУказанияСерий.ИмяТЧСерии = "Товары";
ПараметрыУказанияСерий.ИменаПолейСтатусУказанияСерий.Добавить("СтатусУказанияСерий");
Возврат ПараметрыУказанияСерий;
КонецФункции
Функция ТекстЗапросаЗаполненияСтатусовУказанияСерий(ПараметрыУказанияСерий) Экспорт
ТекстЗапроса =
"ВЫБРАТЬ
| Товары.Номенклатура КАК Номенклатура,
| Товары.Характеристика КАК Характеристика,
| Товары.Серия КАК Серия,
| Товары.Количество КАК Количество,
| Товары.СтатусУказанияСерий КАК СтатусУказанияСерий,
| Товары.НомерСтроки КАК НомерСтроки
|ПОМЕСТИТЬ Товары
|ИЗ
| &Товары КАК Товары
|;
|
|
|ВЫБРАТЬ
| Товары.Номенклатура,
| Товары.Характеристика,
| Товары.Серия,
| ВЫРАЗИТЬ(Товары.Номенклатура КАК Справочник.Номенклатура).ВидНоменклатуры КАК ВидНоменклатуры,
| СУММА(Товары.Количество) КАК Количество
|ПОМЕСТИТЬ ТоварыДляЗапроса
|ИЗ
| Товары КАК Товары
|
|СГРУППИРОВАТЬ ПО
| Товары.Номенклатура,
| Товары.Характеристика,
| Товары.Серия,
| ВЫРАЗИТЬ(Товары.Номенклатура КАК Справочник.Номенклатура).ВидНоменклатуры
|;
|
|
|ВЫБРАТЬ
| Товары.НомерСтроки КАК НомерСтроки,
| Товары.СтатусУказанияСерий КАК СтарыйСтатусУказанияСерий,
|
| ВЫБОР
| КОГДА ТоварыДляЗапроса.ВидНоменклатуры.ПолитикаУчетаСерий ЕСТЬ NULL
| ТОГДА 0
| КОГДА ТоварыДляЗапроса.ВидНоменклатуры.ПолитикаУчетаСерий.УчитыватьСерииТМЦВЭксплуатации
| ТОГДА
| ВЫБОР
| КОГДА Товары.Серия <> ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
| ТОГДА 20
| ИНАЧЕ 19
| КОНЕЦ
| ИНАЧЕ 0
| КОНЕЦ КАК СтатусУказанияСерий
|
|ПОМЕСТИТЬ Статусы
|
|ИЗ
| Товары КАК Товары
|
| ЛЕВОЕ СОЕДИНЕНИЕ ТоварыДляЗапроса КАК ТоварыДляЗапроса
| ПО Товары.Номенклатура = ТоварыДляЗапроса.Номенклатура
| И Товары.Характеристика = ТоварыДляЗапроса.Характеристика
| И Товары.Серия = ТоварыДляЗапроса.Серия
|;
|
|
|ВЫБРАТЬ
| Статусы.НомерСтроки КАК НомерСтроки,
| Статусы.СтатусУказанияСерий КАК СтатусУказанияСерий
|ИЗ
| Статусы КАК Статусы
|ГДЕ
| Статусы.СтатусУказанияСерий <> Статусы.СтарыйСтатусУказанияСерий
|
|УПОРЯДОЧИТЬ ПО
| НомерСтроки";
Возврат ТекстЗапроса;
КонецФункции
#КонецОбласти
#Область ДляВызоваИзДругихПодсистем
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт
Ограничение.Текст =
"РазрешитьЧтениеИзменение
|ГДЕ
| ЗначениеРазрешено(Организация)
| И ЗначениеРазрешено(Подразделение)";
КонецПроцедуры
#КонецОбласти
Процедура ПриОпределенииНастроекВерсионированияОбъектов(Настройки) Экспорт
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
#Область Проведение
Функция ДополнительныеИсточникиДанныхДляДвижений(ИмяРегистра) Экспорт
ИсточникиДанных = Новый Соответствие;
Возврат ИсточникиДанных;
КонецФункции
Функция АдаптированныйТекстЗапросаДвиженийПоРегистру(ИмяРегистра) Экспорт
ТекстыЗапроса = Новый СписокЗначений;
ПолноеИмяДокумента = "Документ.СписаниеИзЭксплуатации";
ЗначенияПараметров = ЗначенияПараметровПроведения();
ПереопределениеРасчетаПараметров = Новый Структура;
ПереопределениеРасчетаПараметров.Вставить("НомерНаПечать", """""");
ВЗапросеЕстьИсточник = Истина;
Если ИмяРегистра = "РеестрДокументов" Тогда
ТекстЗапроса = ТекстЗапросаТаблицаРеестрДокументов(ТекстыЗапроса, ИмяРегистра);
СинонимТаблицыДокумента = "ДанныеДокумента";
Иначе
ТекстИсключения = НСтр("ru = 'В документе %ПолноеИмяДокумента% не реализована адаптация текста запроса формирования движений по регистру %ИмяРегистра%.'");
ТекстИсключения = СтрЗаменить(ТекстИсключения, "%ПолноеИмяДокумента%", ПолноеИмяДокумента);
ТекстИсключения = СтрЗаменить(ТекстИсключения, "%ИмяРегистра%", ИмяРегистра);
ВызватьИсключение ТекстИсключения;
КонецЕсли;
Если ИмяРегистра = "РеестрДокументов" Тогда
ТекстЗапроса = ОбновлениеИнформационнойБазыУТ.АдаптироватьЗапросПроведенияПоНезависимомуРегистру(
ТекстЗапроса,
ПолноеИмяДокумента,
СинонимТаблицыДокумента,
ВЗапросеЕстьИсточник,
ПереопределениеРасчетаПараметров);
Иначе
ТекстЗапроса = ОбновлениеИнформационнойБазыУТ.АдаптироватьЗапросМеханизмаПроведения(
ТекстЗапроса,
ПолноеИмяДокумента,
СинонимТаблицыДокумента,
ПереопределениеРасчетаПараметров);
КонецЕсли;
Результат = ОбновлениеИнформационнойБазыУТ.РезультатАдаптацииЗапроса();
Результат.ЗначенияПараметров = ЗначенияПараметров;
Результат.ТекстЗапроса = ТекстЗапроса;
Возврат Результат;
КонецФункции
Процедура ЗаполнитьПараметрыИнициализации(Запрос, ДокументСсылка)
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
Запрос.Текст =
"ВЫБРАТЬ
| ДанныеШапки.Дата КАК Период,
| ДанныеШапки.Номер КАК Номер,
| ДанныеШапки.Организация КАК Организация,
| ДанныеШапки.Подразделение КАК Подразделение
|ИЗ
| Документ.СписаниеИзЭксплуатации КАК ДанныеШапки
|ГДЕ
| ДанныеШапки.Ссылка = &Ссылка";
Реквизиты = Запрос.Выполнить().Выбрать();
Реквизиты.Следующий();
Запрос.УстановитьПараметр("Период", Реквизиты.Период);
Запрос.УстановитьПараметр("Организация", Реквизиты.Организация);
Запрос.УстановитьПараметр("Подразделение", Реквизиты.Подразделение);
ЗначенияПараметровПроведения = ЗначенияПараметровПроведения(Реквизиты);
Для каждого КлючИЗначение Из ЗначенияПараметровПроведения Цикл
Запрос.УстановитьПараметр(КлючИЗначение.Ключ, КлючИЗначение.Значение);
КонецЦикла;
КонецПроцедуры
Функция ЗначенияПараметровПроведения(Реквизиты = Неопределено)
ЗначенияПараметровПроведения = Новый Структура;
ЗначенияПараметровПроведения.Вставить("ИдентификаторМетаданных", ОбщегоНазначения.ИдентификаторОбъектаМетаданных("Документ.СписаниеИзЭксплуатации"));
ЗначенияПараметровПроведения.Вставить("НазваниеДокумента", НСтр("ru='Списание из эксплуатации'"));
ЗначенияПараметровПроведения.Вставить("ХозяйственнаяОперация", Перечисления.ХозяйственныеОперации.СписаниеИзЭксплуатации);
ЗначенияПараметровПроведения.Вставить("НастройкаХозяйственнойОперации", Справочники.НастройкиХозяйственныхОпераций.СписаниеИзЭксплуатации);
Если Реквизиты <> Неопределено Тогда
ЗначенияПараметровПроведения.Вставить("НомерНаПечать", ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(Реквизиты.Номер));
КонецЕсли;
Возврат ЗначенияПараметровПроведения;
КонецФункции
Процедура ТекстЗапросаТаблицаТМЦВЭксплуатации(ТекстыЗапроса, Регистры)
ИмяРегистра = "ТМЦВЭксплуатации";
Если Не ПроведениеДокументов.ТребуетсяТаблицаДляДвижений(ИмяРегистра, Регистры) Тогда
Возврат;
КонецЕсли;
Текст =
"ВЫБРАТЬ
| &Период КАК Период,
| ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход) КАК ВидДвижения,
|
| &Организация КАК Организация,
| &Подразделение КАК Подразделение,
| ТабличнаяЧасть.ФизическоеЛицо КАК ФизическоеЛицо,
| ТабличнаяЧасть.Номенклатура КАК Номенклатура,
| ТабличнаяЧасть.Характеристика КАК Характеристика,
| ТабличнаяЧасть.Серия КАК Серия,
| ТабличнаяЧасть.НомерГТД КАК НомерГТД,
| ТабличнаяЧасть.Партия КАК Партия,
| ТабличнаяЧасть.НаправлениеДеятельности КАК НаправлениеДеятельности,
| ТабличнаяЧасть.ИнвентарныйНомер КАК ИнвентарныйНомер,
| ТабличнаяЧасть.Количество КАК Количество,
| ТабличнаяЧасть.КоличествоПоРНПТ КАК КоличествоПоРНПТ,
|
| &ХозяйственнаяОперация КАК ХозяйственнаяОперация,
| &НастройкаХозяйственнойОперации КАК НастройкаХозяйственнойОперации,
| ТабличнаяЧасть.ИдентификаторСтроки КАК ИдентификаторФинЗаписи
|ИЗ
| Документ.СписаниеИзЭксплуатации.Товары КАК ТабличнаяЧасть
|ГДЕ
| ТабличнаяЧасть.Ссылка = &Ссылка";
ТекстыЗапроса.Добавить(Текст, ИмяРегистра);
КонецПроцедуры
Функция ТекстЗапросаТаблицаРеестрДокументов(ТекстыЗапроса, Регистры)
ИмяРегистра = "РеестрДокументов";
Если НЕ ПроведениеДокументов.ТребуетсяТаблицаДляДвижений(ИмяРегистра, Регистры) Тогда
Возврат "";
КонецЕсли;
ТекстЗапроса =
"ВЫБРАТЬ
| ДанныеДокумента.Ссылка КАК Ссылка,
| ДанныеДокумента.Дата КАК ДатаДокументаИБ,
| ДанныеДокумента.Номер КАК НомерДокументаИБ,
| &ИдентификаторМетаданных КАК ТипСсылки,
| ДанныеДокумента.Организация КАК Организация,
| &ХозяйственнаяОперация КАК ХозяйственнаяОперация,
| НЕОПРЕДЕЛЕНО КАК НаправлениеДеятельности,
| ДанныеДокумента.Подразделение КАК Подразделение,
| ДанныеДокумента.Ответственный КАК Ответственный,
| ДанныеДокумента.Комментарий КАК Комментарий,
| ДанныеДокумента.Проведен КАК Проведен,
| ДанныеДокумента.ПометкаУдаления КАК ПометкаУдаления,
| ЛОЖЬ КАК ДополнительнаяЗапись,
| ДанныеДокумента.Дата КАК ДатаПервичногоДокумента,
| &НомерНаПечать КАК НомерПервичногоДокумента,
| ЛОЖЬ КАК СторноИсправление,
| НЕОПРЕДЕЛЕНО КАК СторнируемыйДокумент,
| НЕОПРЕДЕЛЕНО КАК ИсправляемыйДокумент,
| ДанныеДокумента.Дата КАК ДатаОтраженияВУчете,
| НЕОПРЕДЕЛЕНО КАК Приоритет
|ИЗ
| Документ.СписаниеИзЭксплуатации КАК ДанныеДокумента
|ГДЕ
| ДанныеДокумента.Ссылка = &Ссылка";
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
Возврат ТекстЗапроса;
КонецФункции
#КонецОбласти
#Область ПроведениеПоРеглУчету
Функция ТекстОтраженияВРеглУчете() Экспорт
Возврат СписаниеИзЭксплуатацииЛокализация.ТекстОтраженияВРеглУчете();
КонецФункции
Функция ТекстЗапросаВТОтраженияВРеглУчете() Экспорт
Возврат "";
КонецФункции
#КонецОбласти
#Область Печать
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
СписаниеИзЭксплуатацииЛокализация.ДобавитьКомандыПечати(КомандыПечати);
КонецПроцедуры
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
СписаниеИзЭксплуатацииЛокализация.Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
КонецПроцедуры
#КонецОбласти
#Область Прочее
Функция ПараметрыВыбораСтатейИАналитик() Экспорт
ПараметрыВыбора = ДоходыИРасходыСервер.ПараметрыВыбораСтатьиИАналитики();
ПараметрыВыбора.ПутьКДанным = "Объект.Товары";
ПараметрыВыбора.Статья = "СтатьяРасходов";
ПараметрыВыбора.ДоступностьПоОперации = Неопределено;
ПараметрыВыбора.ВыборСтатьиРасходов = Истина;
ПараметрыВыбора.АналитикаРасходов = "АналитикаРасходов";
ПараметрыВыбора.ЭлементыФормы.Статья.Добавить("ТоварыСтатьяРасходов");
ПараметрыВыбора.ЭлементыФормы.АналитикаРасходов.Добавить("ТоварыАналитикаРасходов");
Возврат ПараметрыВыбора;
КонецФункции
Процедура ЗадатьОписаниеЗаполняемыхРеквизитовПоСтатистике(ОписаниеРеквизитов) Экспорт
ЗаполнениеОбъектовПоСтатистике.ДобавитьОписаниеЗаполняемыхРеквизитов(ОписаниеРеквизитов, "Подразделение");
КонецПроцедуры
Функция ЗаполнитьНаОснованииИнвентаризации(Объект, МассивНомеровСтрок = Неопределено) Экспорт
Если Не ЗначениеЗаполнено(Объект.ДокументОснование) Тогда
Возврат Истина;
КонецЕсли;
ДанныеЗаполнения = Документы.ИнвентаризацияТМЦВЭксплуатации.ДанныеЗаполненияНаОснованииИнвентаризации(
Объект.ДокументОснование,
Объект.Дата,
Перечисления.ДействияНаОснованииИнвентаризации.Списание,
МассивНомеровСтрок);
Выборка = ДанныеЗаполнения.Реквизиты.Выбрать();
Выборка.Следующий();
ЗаполнитьЗначенияСвойств(Объект, Выборка);
Если ДанныеЗаполнения.ТабличнаяЧасть.Пустой() Тогда
Возврат Ложь;
КонецЕсли;
КэшированныеЗначения = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначения();
ПараметрыВыбораПартии = ТМЦВЭксплуатацииКлиентСервер.ПараметрыПодбораТМЦВЭксплуатации();
ПараметрыВыбораПартии.Дата = Объект.Дата;
ПараметрыВыбораПартии.Организация = Объект.Организация;
ПараметрыВыбораПартии.Подразделение = Объект.Подразделение;
ПараметрыВыбораПартии.ТекущийРегистратор = Объект.Ссылка;
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ЗаполнитьПартиюТМЦВЭксплуатации", ПараметрыВыбораПартии);
ОбрабатываемыеСтроки = Новый Массив();
Выборка = ДанныеЗаполнения.ТабличнаяЧасть.Выбрать();
Пока Выборка.Следующий() Цикл
НоваяСтрока = Объект.Товары.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Выборка);
НоваяСтрока.Количество = Выборка.КоличествоПоДаннымУчета - Выборка.КоличествоФактическое;
ОбрабатываемыеСтроки.Добавить(НоваяСтрока);
КонецЦикла;
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокиТЧ(
ОбрабатываемыеСтроки,
СтруктураДействий,
Объект.Товары,
КэшированныеЗначения);
ПараметрыУказанияСерий = НоменклатураСервер.ПараметрыУказанияСерий(Объект, Документы.СписаниеИзЭксплуатации);
НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(Объект, ПараметрыУказанияСерий);
Возврат Истина;
КонецФункции
#КонецОбласти
#КонецОбласти
#КонецЕсли