#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ПрограммныйИнтерфейс
Функция ВременныеТаблицыДанныхДокумента() Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| &Дата КАК Дата,
| &Организация КАК Организация,
| &ОрганизацияПолучатель КАК ОрганизацияПолучатель,
| &Подразделение КАК Подразделение,
| ЗНАЧЕНИЕ(Справочник.Партнеры.ПустаяСсылка) КАК Партнер,
| ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка) КАК Контрагент,
| ЗНАЧЕНИЕ(Справочник.СоглашенияСПоставщиками.ПустаяСсылка) КАК Соглашение,
| ЗНАЧЕНИЕ(Справочник.ДоговорыКонтрагентов.ПустаяСсылка) КАК Договор,
| ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка) КАК Валюта,
| НЕОПРЕДЕЛЕНО КАК НалогообложениеНДС,
| &ХозяйственнаяОперация КАК ХозяйственнаяОперация,
| ЗНАЧЕНИЕ(Перечисление.ТипыЗапасов.Работа) КАК ТипЗапасов
|ПОМЕСТИТЬ ТаблицаДанныхДокумента
|;
|
|
|ВЫБРАТЬ
| ТаблицаТоваров.НомерСтроки КАК НомерСтроки,
| ТаблицаТоваров.Номенклатура КАК Номенклатура,
| ТаблицаТоваров.Характеристика КАК Характеристика,
| ТаблицаТоваров.Назначение КАК Назначение,
| 0 КАК СтатусУказанияСерий,
| ТаблицаТоваров.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ТаблицаТоваров.ГруппаПродукции КАК ГруппаПродукции,
| ТаблицаТоваров.Подразделение КАК ПодразделениеПолучатель,
| ТаблицаТоваров.Количество КАК Количество,
| &ТекстПоляТаблицаТоваровКоличествоПоРНПТ_ КАК КоличествоПоРНПТ,
| 0 КАК СуммаСНДС,
| 0 КАК СуммаНДС,
| 0 КАК СуммаВознаграждения,
| 0 КАК СуммаНДСВознаграждения,
| &ТекстПоляТаблицаТоваровНомерГТД_ КАК НомерГТД
|ПОМЕСТИТЬ ВтТаблицаТоваров
|ИЗ
| &ТаблицаТоваров КАК ТаблицаТоваров
|;
|
|
|ВЫБРАТЬ
| ТаблицаТоваров.НомерСтроки КАК НомерСтроки,
| ТаблицаТоваров.Номенклатура КАК Номенклатура,
| ТаблицаТоваров.Характеристика КАК Характеристика,
| НЕОПРЕДЕЛЕНО КАК Серия,
| ТаблицаТоваров.СтатусУказанияСерий КАК СтатусУказанияСерий,
| ТаблицаТоваров.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ТаблицаТоваров.ГруппаПродукции КАК ГруппаПродукции,
| ТаблицаТоваров.ПодразделениеПолучатель КАК ПодразделениеПолучатель,
| ТаблицаТоваров.Количество КАК Количество,
| ТаблицаТоваров.КоличествоПоРНПТ КАК КоличествоПоРНПТ,
| АНалитика.МестоХранения КАК Склад,
| ЗНАЧЕНИЕ(Справочник.СтавкиНДС.ПустаяСсылка) КАК СтавкаНДС,
| ТаблицаТоваров.СуммаСНДС КАК СуммаСНДС,
| ТаблицаТоваров.СуммаНДС КАК СуммаНДС,
| ТаблицаТоваров.СуммаВознаграждения КАК СуммаВознаграждения,
| ТаблицаТоваров.СуммаНДСВознаграждения КАК СуммаНДСВознаграждения,
| ТаблицаТоваров.Назначение КАК Назначение,
| ИСТИНА КАК ПодбиратьВидыЗапасов,
| ТаблицаТоваров.НомерГТД КАК НомерГТД
|ПОМЕСТИТЬ ТаблицаТоваров
|ИЗ
| ВтТаблицаТоваров КАК ТаблицаТоваров
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СправочникНоменклатура
| ПО ТаблицаТоваров.Номенклатура = СправочникНоменклатура.Ссылка
|
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КлючиАналитикиУчетаНоменклатуры КАК Аналитика
| ПО ТаблицаТоваров.АналитикаУчетаНоменклатуры = Аналитика.Ссылка
|ГДЕ
| &ИспользоватьУчетПрослеживаемыхИмпортныхТоваров
| И СправочникНоменклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Работа)
| И СправочникНоменклатура.ПрослеживаемыйТовар
|;
|
|
|ВЫБРАТЬ
| ТаблицаВидыЗапасов.НомерСтроки КАК НомерСтроки,
| ТаблицаВидыЗапасов.ИдентификаторСтроки КАК ИдентификаторСтроки,
| ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ТаблицаВидыЗапасов.ГруппаПродукции КАК ГруппаПродукции,
| ТаблицаВидыЗапасов.ПодразделениеПолучатель КАК ПодразделениеПолучатель,
| ТаблицаВидыЗапасов.ВидЗапасов КАК ВидЗапасов,
| ТаблицаВидыЗапасов.НомерГТД КАК НомерГТД,
| ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка) КАК СкладОтгрузки,
| ТаблицаВидыЗапасов.Количество КАК Количество,
| ТаблицаВидыЗапасов.КоличествоПоРНПТ КАК КоличествоПоРНПТ,
| 0 КАК СуммаСНДС,
| 0 КАК СуммаНДС
|ПОМЕСТИТЬ ВТВидыЗапасов
|ИЗ
| &ТаблицаВидыЗапасов КАК ТаблицаВидыЗапасов
|;
|
|
|ВЫБРАТЬ
| ТаблицаВидыЗапасов.НомерСтроки КАК НомерСтроки,
| ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ТаблицаВидыЗапасов.ИдентификаторСтроки КАК ИдентификаторСтроки,
| ТаблицаВидыЗапасов.ГруппаПродукции КАК ГруппаПродукции,
| ТаблицаВидыЗапасов.ПодразделениеПолучатель КАК ПодразделениеПолучатель,
| НЕОПРЕДЕЛЕНО КАК АналитикаУчетаНаборов,
| Аналитика.Номенклатура КАК Номенклатура,
| Аналитика.Характеристика КАК Характеристика,
| Аналитика.Серия КАК Серия,
| ТаблицаВидыЗапасов.ВидЗапасов КАК ВидЗапасов,
| ТаблицаВидыЗапасов.НомерГТД КАК НомерГТД,
| ЗНАЧЕНИЕ(Справочник.СтавкиНДС.ПустаяСсылка) КАК СтавкаНДС,
| ТаблицаВидыЗапасов.СкладОтгрузки КАК СкладОтгрузки,
| Аналитика.МестоХранения КАК Склад,
| ТаблицаВидыЗапасов.Количество КАК Количество,
| ТаблицаВидыЗапасов.КоличествоПоРНПТ КАК КоличествоПоРНПТ,
| ТаблицаВидыЗапасов.СуммаСНДС КАК СуммаСНДС,
| ТаблицаВидыЗапасов.СуммаНДС КАК СуммаНДС,
| &ВидыЗапасовУказаныВручную КАК ВидыЗапасовУказаныВручную
|ПОМЕСТИТЬ ТаблицаВидыЗапасов
|ИЗ
| ВТВидыЗапасов КАК ТаблицаВидыЗапасов
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КлючиАналитикиУчетаНоменклатуры КАК Аналитика
| ПО ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры = Аналитика.Ссылка
|
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура,
| Характеристика,
| Серия,
| Склад
|;
|
|
|УНИЧТОЖИТЬ ВТВидыЗапасов";
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Запрос.УстановитьПараметр("Дата", Дата);
Запрос.УстановитьПараметр("Организация", Организация);
Запрос.УстановитьПараметр("ОрганизацияПолучатель", ОрганизацияПолучатель);
Запрос.УстановитьПараметр("Подразделение", Подразделение);
Запрос.УстановитьПараметр("ХозяйственнаяОперация", ХозяйственнаяОперация);
Запрос.УстановитьПараметр("ВидыЗапасовУказаныВручную", ВидыЗапасовУказаныВручную);
Запрос.УстановитьПараметр("ТаблицаТоваров", Товары);
Запрос.УстановитьПараметр("ТаблицаВидыЗапасов", ВидыЗапасов);
УчетПрослеживаемыхТоваровЛокализация.УстановитьПараметрыИспользованияУчетаПрослеживаемыхТоваров(Запрос);
ЗапасыСервер.ДополнитьВременныеТаблицыОбязательнымиКолонками(Запрос);
ОбщегоНазначенияУТ.ЗаменитьОтсутствующиеПоляТаблицыЗначенийВТекстеЗапроса(
Товары,
Запрос.Текст,
"&ТекстПоляТаблицаТоваровКоличествоПоРНПТ_",
"ТаблицаТоваров",
"КоличествоПоРНПТ",
"ТаблицаТоваров.КоличествоПоРНПТ",
"0");
ОбщегоНазначенияУТ.ЗаменитьОтсутствующиеПоляТаблицыЗначенийВТекстеЗапроса(
Товары,
Запрос.Текст,
"&ТекстПоляТаблицаТоваровНомерГТД_",
"ТаблицаТоваров",
"НомерГТД",
"ТаблицаТоваров.НомерГТД",
"ЗНАЧЕНИЕ(Справочник.НомераГТД.ПустаяСсылка)");
Запрос.Выполнить();
Возврат МенеджерВременныхТаблиц;
КонецФункции
Процедура ИнициализироватьПараметрыЗаполненияВидовЗапасовДляПроведения(ДокументОбъект, РежимЗаписи = Неопределено) Экспорт
ПараметрыЗаполненияВидовЗапасов = ЗапасыСервер.ПараметрыЗаполненияВидовЗапасов();
ДокументОбъект.ДополнительныеСвойства.Вставить("ПараметрыЗаполненияВидовЗапасов", ПараметрыЗаполненияВидовЗапасов);
КонецПроцедуры
Функция УстановитьСтатус(НовыйСтатус, ДополнительныеПараметры) Экспорт
Статус = Перечисления.СтатусыАктовВыполненныхВнутреннихРабот[НовыйСтатус];
Возврат ПроверитьЗаполнение();
КонецФункции
#КонецОбласти
#Область ОбработчикиСобытий
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(ЭтотОбъект);
ИсправлениеДокументов.ПередЗаписью(ЭтотОбъект, Отказ, РежимЗаписи, РежимПроведения);
ПроведениеДокументов.ПередЗаписьюДокумента(ЭтотОбъект, РежимЗаписи, РежимПроведения);
Если РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
ЗаполнитьКлючиАналитикиУчетаНоменклатуры();
ЗаполнитьВидыЗапасов(Отказ);
ИначеЕсли РежимЗаписи = РежимЗаписиДокумента.ОтменаПроведения Тогда
Если Не ВидыЗапасовУказаныВручную Тогда
ВидыЗапасов.Очистить();
КонецЕсли;
КонецЕсли;
АктВыполненныхВнутреннихРаботЛокализация.ПередЗаписью(ЭтотОбъект, Отказ, РежимЗаписи, РежимПроведения);
ОбщегоНазначенияУТ.ЗаполнитьИдентификаторыДокумента(ЭтотОбъект, "Товары,ВидыЗапасов");
КонецПроцедуры
Процедура ПриЗаписи(Отказ)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
ПроведениеДокументов.ПриЗаписиДокумента(ЭтотОбъект, Отказ);
АктВыполненныхВнутреннихРаботЛокализация.ПриЗаписи(ЭтотОбъект, Отказ);
КонецПроцедуры
Процедура ПриКопировании(ОбъектКопирования)
ИсправлениеДокументов.ПриКопировании(ЭтотОбъект, ОбъектКопирования);
ИнициализироватьДокумент();
ОбщегоНазначенияУТ.ОчиститьИдентификаторыДокумента(ЭтотОбъект, "Товары");
АктВыполненныхВнутреннихРаботЛокализация.ПриКопировании(ЭтотОбъект, ОбъектКопирования);
КонецПроцедуры
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка)
Если ТипЗнч(ДанныеЗаполнения) = Тип("Структура") Тогда
ЗаполнитьЗначенияСвойств(ЭтотОбъект, ДанныеЗаполнения);
Если ДанныеЗаполнения.Свойство("РеквизитыШапки") Тогда
ЗаполнитьЗначенияСвойств(ЭтотОбъект, ДанныеЗаполнения.РеквизитыШапки);
КонецЕсли;
Если ДанныеЗаполнения.Свойство("ОбъектыОснований") Тогда
ЗаполнитьПоОбъектамОснований(ДанныеЗаполнения.ОбъектыОснований);
Если ДанныеЗаполнения.ОбъектыОснований.Количество() = 1 Тогда
ДокументОснование = ДанныеЗаполнения.ОбъектыОснований[0];
КонецЕсли;
КонецЕсли;
Если ДанныеЗаполнения.Свойство("Товары") Тогда
Для Каждого ТекСтрока Из ДанныеЗаполнения.Товары Цикл
ЗаполнитьЗначенияСвойств(Товары.Добавить(), ТекСтрока);
КонецЦикла;
КонецЕсли;
ИначеЕсли ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка." + Метаданные().Имя) Тогда
ИсправлениеДокументов.ЗаполнитьИсправление(ЭтотОбъект, ДанныеЗаполнения);
КонецЕсли;
ИнициализироватьДокумент();
АктВыполненныхВнутреннихРаботЛокализация.ОбработкаЗаполнения(ЭтотОбъект, ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка);
КонецПроцедуры
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
МассивНепроверяемыхРеквизитов = Новый Массив;
ЗатратыСервер.ПроверитьИспользованиеПартионногоУчета22(ЭтотОбъект, Дата, Отказ);
#Область ПроверкаХарактеристик
ПараметрыПроверкиХарактеристик = НоменклатураСервер.ПараметрыПроверкиЗаполненияХарактеристик();
НоменклатураСервер.ПроверитьЗаполнениеХарактеристик(ЭтотОбъект, МассивНепроверяемыхРеквизитов, Отказ, ПараметрыПроверкиХарактеристик);
#КонецОбласти
#Область ПроверкаПолучателей
ПроверитьПолучателей(Отказ);
#КонецОбласти
Если Не ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПриемПередачаРаботМеждуФилиалами Тогда
МассивНепроверяемыхРеквизитов.Добавить("ОрганизацияПолучатель");
КонецЕсли;
ИсправлениеДокументов.ОбработкаПроверкиЗаполнения(ЭтотОбъект, Отказ, ПроверяемыеРеквизиты);
ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты, МассивНепроверяемыхРеквизитов);
Если Не Отказ И ОбщегоНазначенияУТ.ПроверитьЗаполнениеРеквизитовОбъекта(ЭтотОбъект, ПроверяемыеРеквизиты) Тогда
Отказ = Истина;
КонецЕсли;
АктВыполненныхВнутреннихРаботЛокализация.ОбработкаПроверкиЗаполнения(ЭтотОбъект, Отказ, ПроверяемыеРеквизиты);
КонецПроцедуры
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
ИнициализироватьПараметрыЗаполненияВидовЗапасовДляПроведения(ЭтотОбъект);
ПроведениеДокументов.ОбработкаПроведенияДокумента(ЭтотОбъект, Отказ);
АктВыполненныхВнутреннихРаботЛокализация.ОбработкаПроведения(ЭтотОбъект, Отказ, РежимПроведения);
КонецПроцедуры
Процедура ОбработкаУдаленияПроведения(Отказ)
ИнициализироватьПараметрыЗаполненияВидовЗапасовДляПроведения(ЭтотОбъект);
ПроведениеДокументов.ОбработкаУдаленияПроведенияДокумента(ЭтотОбъект, Отказ);
АктВыполненныхВнутреннихРаботЛокализация.ОбработкаУдаленияПроведения(ЭтотОбъект, Отказ);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Процедура ИнициализироватьДокумент()
Дата = ТекущаяДатаСеанса();
Организация = ЗначениеНастроекПовтИсп.ПолучитьОрганизациюПоУмолчанию(Организация);
Ответственный = Пользователи.ТекущийПользователь();
Если ПолучитьФункциональнуюОпцию("ИспользоватьСтатусыАктовВыполненныхВнутреннихРабот") Тогда
Статус = Перечисления.СтатусыАктовВыполненныхВнутреннихРабот.Выставлен;
Иначе
Статус = Перечисления.СтатусыАктовВыполненныхВнутреннихРабот.Принят;
КонецЕсли;
Если ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПриемПередачаРаботМеждуФилиалами Тогда
ОрганизацияПолучатель = ЗначениеНастроекПовтИсп.ПолучитьОрганизациюПоУмолчанию(ОрганизацияПолучатель);
КонецЕсли;
ПараметрыЗаполнения = Документы.АктВыполненныхВнутреннихРабот.ПараметрыЗаполненияВидаДеятельностиНДС(ЭтотОбъект);
УчетНДСУП.ЗаполнитьВидДеятельностиНДС(ПеремещениеПодДеятельность, ПараметрыЗаполнения);
КонецПроцедуры
Процедура ЗаполнитьПоОбъектамОснований(ОбъектыОснований)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТаблицаТоваров.Номенклатура КАК Номенклатура,
| ТаблицаТоваров.Характеристика КАК Характеристика,
| ТаблицаТоваров.Назначение КАК Назначение,
| ТаблицаТоваров.Количество КАК Количество
|ПОМЕСТИТЬ ВтТовары
|ИЗ
| Документ.ПроизводствоБезЗаказа.ВыходныеИзделия КАК ТаблицаТоваров
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНоменклатура
| ПО ТаблицаТоваров.Номенклатура = СпрНоменклатура.Ссылка
|ГДЕ
| ТаблицаТоваров.Ссылка В(&ОбъектыОснований)
| И СпрНоменклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Работа)
| И ТаблицаТоваров.НаправлениеВыпуска = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВыпускПродукцииВПодразделение)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ТаблицаТоваров.Номенклатура КАК Номенклатура,
| ТаблицаТоваров.Характеристика КАК Характеристика,
| ТаблицаТоваров.Назначение КАК Назначение,
| ТаблицаТоваров.Количество КАК Количество
|ИЗ
| Документ.ПроизводствоБезЗаказа.ПобочныеИзделия КАК ТаблицаТоваров
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНоменклатура
| ПО ТаблицаТоваров.Номенклатура = СпрНоменклатура.Ссылка
|ГДЕ
| ТаблицаТоваров.Ссылка В(&ОбъектыОснований)
| И СпрНоменклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Работа)
| И ТаблицаТоваров.НаправлениеВыпуска = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВыпускПродукцииВПодразделение)
|;
|
|
|ВЫБРАТЬ
| ВтТовары.Номенклатура КАК Номенклатура,
| ВтТовары.Характеристика КАК Характеристика,
| ВтТовары.Назначение КАК Назначение,
| СУММА(ВтТовары.Количество) КАК Количество
|ИЗ
| ВтТовары КАК ВтТовары
|
|СГРУППИРОВАТЬ ПО
| ВтТовары.Назначение,
| ВтТовары.Характеристика,
| ВтТовары.Номенклатура";
Запрос.УстановитьПараметр("ОбъектыОснований", ОбъектыОснований);
Результат = Запрос.Выполнить();
Товары.Загрузить(Результат.Выгрузить());
КонецПроцедуры
Процедура ЗаполнитьКлючиАналитикиУчетаНоменклатуры()
МестаУчета = РегистрыСведений.АналитикаУчетаНоменклатуры.МестаУчета
(ХозяйственнаяОперация,
Подразделение,
Подразделение,
Неопределено);
ИменаПолей = РегистрыСведений.АналитикаУчетаНоменклатуры.ИменаПолейКоллекцииПоУмолчанию();
ИменаПолей.Вставить("Назначение", "Назначение");
ИменаПолей.Вставить("СтатусУказанияСерий", Неопределено);
РегистрыСведений.АналитикаУчетаНоменклатуры.ЗаполнитьВКоллекции(Товары, МестаУчета, ИменаПолей);
КонецПроцедуры
Процедура ПроверитьПолучателей(Отказ)
КлючДанных = ОбщегоНазначенияУТ.КлючДанныхДляСообщенияПользователю(ЭтотОбъект);
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТаблицаТовары.НомерСтроки КАК НомерСтроки,
| ТаблицаТовары.Подразделение КАК Подразделение
|ПОМЕСТИТЬ ТаблицаТовары
|ИЗ
| &ТаблицаТовары КАК ТаблицаТовары
|;
|
|
|ВЫБРАТЬ
| ТаблицаТовары.НомерСтроки КАК НомерСтроки,
| ТаблицаТовары.Подразделение КАК Подразделение
|ИЗ
| ТаблицаТовары КАК ТаблицаТовары
|
|ГДЕ
| ТаблицаТовары.Подразделение = &Подразделение
|";
Запрос.УстановитьПараметр("ТаблицаТовары", Товары.Выгрузить(, "НомерСтроки, Подразделение"));
Запрос.УстановитьПараметр("Подразделение", Подразделение);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ТекстСообщения = НСтр("ru = 'Подразделение-получатель и выпускающее подразделение должны различаться.'");
Поле = ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("Товары", Выборка.НомерСтроки, "Подразделение");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, КлючДанных , Поле, "Объект", Отказ);
КонецЦикла;
КонецПроцедуры
#Область ВидыЗапасов
Процедура ЗаполнитьВидыЗапасов(Отказ)
УстановитьПривилегированныйРежим(Истина);
МенеджерВременныхТаблиц = ВременныеТаблицыДанныхДокумента();
ПерезаполнитьВидыЗапасов = ЗапасыСервер.ПроверитьНеобходимостьПерезаполненияВидовЗапасовДокумента(ЭтотОбъект);
Если Не Проведен
Или ПерезаполнитьВидыЗапасов
Или ПроверитьИзменениеРеквизитовДокумента(МенеджерВременныхТаблиц)
Или ПроверитьИзменениеТоваров(МенеджерВременныхТаблиц) Тогда
ПараметрыЗаполнения = ПараметрыЗаполненияВидовЗапасов();
ЗапасыСервер.ЗаполнитьВидыЗапасовПоТоварамОрганизаций(ЭтотОбъект, МенеджерВременныхТаблиц, Отказ, ПараметрыЗаполнения);
ИменаКолонокГруппировки = "АналитикаУчетаНоменклатуры, ВидЗапасов, НомерГТД";
ИменаКолонокСуммирования = "Количество, КоличествоПоРНПТ";
ВидыЗапасов.Свернуть(ИменаКолонокГруппировки, ИменаКолонокСуммирования);
Если Не Отказ Тогда
ЗаполнитьРеквизитыПолучателяВидовЗапасов();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Функция ПараметрыЗаполненияВидовЗапасов()
ПараметрыЗаполнения = ЗапасыСервер.ПараметрыЗаполненияВидовЗапасов();
ПараметрыЗаполнения.ПодбиратьВТЧТоварыПринятыеНаОтветственноеХранение.Вставить(Перечисления.ТипыЗапасов.ТоварНаХраненииСПравомПродажи, "Никогда");
ПараметрыЗаполнения.ПриНехваткеТоваровОрганизацииЗаполнятьВидамиЗапасовПоУмолчанию = Ложь;
ПараметрыЗаполнения.СторнируемыйДокумент = СторнируемыйДокумент;
ОтборыВидовЗапасов = ПараметрыЗаполнения.ОтборыВидовЗапасов;
ДоступныеТипыЗапасов = Новый Массив;
ДоступныеТипыЗапасов.Добавить(Перечисления.ТипыЗапасов.Работа);
ОтборыВидовЗапасов.ТипЗапасов = ДоступныеТипыЗапасов;
Возврат ПараметрыЗаполнения;
КонецФункции
Функция ПроверитьИзменениеРеквизитовДокумента(МенеджерВременныхТаблиц)
ИменаРеквизитов = "Организация, ОрганизацияПолучатель, ХозяйственнаяОперация, Подразделение";
Возврат ЗапасыСервер.ПроверитьИзменениеРеквизитовДокумента(МенеджерВременныхТаблиц, Ссылка, ИменаРеквизитов);
КонецФункции
Функция ПроверитьИзменениеТоваров(МенеджерВременныхТаблиц)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТаблицаТоваров.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ТаблицаТоваров.ПодразделениеПолучатель КАК ПодразделениеПолучатель,
| ТаблицаТоваров.ГруппаПродукции КАК ГруппаПродукции
|ИЗ (
| ВЫБРАТЬ
| ТаблицаТоваров.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ТаблицаТоваров.ПодразделениеПолучатель КАК ПодразделениеПолучатель,
| ТаблицаТоваров.ГруппаПродукции КАК ГруппаПродукции,
| ТаблицаТоваров.Количество КАК Количество,
| ЛОЖЬ КАК ЕстьНоваяРучнаяСтрокаВидовЗапасов
| ИЗ
| ТаблицаТоваров КАК ТаблицаТоваров
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ТаблицаВидыЗапасов.ПодразделениеПолучатель КАК ПодразделениеПолучатель,
| ТаблицаВидыЗапасов.ГруппаПродукции КАК ГруппаПродукции,
| -ТаблицаВидыЗапасов.Количество КАК Количество,
| ТаблицаВидыЗапасов.ИдентификаторСтроки = """" КАК ЕстьНоваяРучнаяСтрокаВидовЗапасов
| ИЗ
| ТаблицаВидыЗапасов КАК ТаблицаВидыЗапасов
| ) КАК ТаблицаТоваров
|
|СГРУППИРОВАТЬ ПО
| ТаблицаТоваров.АналитикаУчетаНоменклатуры,
| ТаблицаТоваров.ПодразделениеПолучатель,
| ТаблицаТоваров.ГруппаПродукции
|
|ИМЕЮЩИЕ
| СУММА(ТаблицаТоваров.Количество) <> 0
| ИЛИ МАКСИМУМ(ТаблицаТоваров.ЕстьНоваяРучнаяСтрокаВидовЗапасов)";
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
РезультатЗапрос = Запрос.Выполнить();
Возврат (Не РезультатЗапрос.Пустой());
КонецФункции
Процедура ЗаполнитьРеквизитыПолучателяВидовЗапасов()
Запрос = Новый Запрос();
Запрос.Текст =
"ВЫБРАТЬ
| ВЫРАЗИТЬ(ТаблицаТовары.АналитикаУчетаНоменклатуры КАК Справочник.КлючиАналитикиУчетаНоменклатуры) КАК АналитикаУчетаНоменклатуры,
| ВЫРАЗИТЬ(ТаблицаТовары.Номенклатура КАК Справочник.Номенклатура) КАК Номенклатура,
| ТаблицаТовары.Характеристика КАК Характеристика,
| ТаблицаТовары.Назначение КАК Назначение,
| ТаблицаТовары.Подразделение КАК Подразделение,
| ТаблицаТовары.ГруппаПродукции КАК ГруппаПродукции,
| ТаблицаТовары.Количество КАК Количество
|ПОМЕСТИТЬ ВТТовары
|ИЗ
| &Товары КАК ТаблицаТовары
|;
|
|ВЫБРАТЬ
| ТаблицаТовары.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ТаблицаТовары.Номенклатура КАК Номенклатура,
| ТаблицаТовары.Характеристика КАК Характеристика,
| ТаблицаТовары.Назначение КАК Назначение,
| ТаблицаТовары.Подразделение КАК Подразделение,
| ТаблицаТовары.ГруппаПродукции КАК ГруппаПродукции,
| СУММА(ТаблицаТовары.Количество) КАК Количество
|ПОМЕСТИТЬ ВТТаблицаТовары
|ИЗ
| ВТТовары КАК ТаблицаТовары
|СГРУППИРОВАТЬ ПО
| ТаблицаТовары.АналитикаУчетаНоменклатуры,
| ТаблицаТовары.Номенклатура,
| ТаблицаТовары.Характеристика,
| ТаблицаТовары.Назначение,
| ТаблицаТовары.Подразделение,
| ТаблицаТовары.ГруппаПродукции
|;
|
|ВЫБРАТЬ
| ТаблицаТовары.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| СУММА(ТаблицаТовары.Количество) КАК Количество
|ПОМЕСТИТЬ ВТТаблицаТоварыКоличествоБезРаспределяемойАналитики
|ИЗ
| ВТТовары КАК ТаблицаТовары
|СГРУППИРОВАТЬ ПО
| ТаблицаТовары.АналитикаУчетаНоменклатуры
|;
|
|ВЫБРАТЬ
| ВЫРАЗИТЬ(ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры КАК Справочник.КлючиАналитикиУчетаНоменклатуры) КАК АналитикаУчетаНоменклатуры,
| ТаблицаВидыЗапасов.ВидЗапасов КАК ВидЗапасов,
| ТаблицаВидыЗапасов.НомерГТД КАК НомерГТД,
| ТаблицаВидыЗапасов.Количество КАК Количество,
| ТаблицаВидыЗапасов.КоличествоПоРНПТ КАК КоличествоПоРНПТ
|ПОМЕСТИТЬ ВТТаблицаВидыЗапасов
|ИЗ
| &ВидыЗапасов КАК ТаблицаВидыЗапасов
|;
|
|ВЫБРАТЬ
| ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ТаблицаВидыЗапасов.ВидЗапасов КАК ВидЗапасов,
| ТаблицаВидыЗапасов.НомерГТД КАК НомерГТД,
| ТаблицаТовары.Подразделение КАК ПодразделениеПолучатель,
| ТаблицаТовары.ГруппаПродукции КАК ГруппаПродукции,
| ВЫРАЗИТЬ(ТаблицаТовары.Количество * ТаблицаВидыЗапасов.Количество / ТаблицаТоварыСгруппированная.Количество КАК ЧИСЛО(15, 3)) КАК Количество,
| ВЫРАЗИТЬ(ТаблицаТовары.Количество * ТаблицаВидыЗапасов.КоличествоПоРНПТ / ТаблицаТоварыСгруппированная.Количество КАК ЧИСЛО(23, 11)) КАК КоличествоПоРНПТ
|ПОМЕСТИТЬ ВТРезультатРаспределения
|ИЗ
| ВТТаблицаВидыЗапасов КАК ТаблицаВидыЗапасов
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТТаблицаТовары КАК ТаблицаТовары
| ПО ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры = ТаблицаТовары.АналитикаУчетаНоменклатуры
|
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТТаблицаТоварыКоличествоБезРаспределяемойАналитики КАК ТаблицаТоварыСгруппированная
| ПО ТаблицаТовары.АналитикаУчетаНоменклатуры = ТаблицаТоварыСгруппированная.АналитикаУчетаНоменклатуры
|;
|
|ВЫБРАТЬ
| РезультатРаспределения.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| РезультатРаспределения.ВидЗапасов КАК ВидЗапасов,
| РезультатРаспределения.НомерГТД КАК НомерГТД,
| СУММА(РезультатРаспределения.Количество) КАК Количество,
| СУММА(РезультатРаспределения.КоличествоПоРНПТ) КАК КоличествоПоРНПТ
|ПОМЕСТИТЬ ВТРезультатРаспределенияДляПроверки
|ИЗ
| ВТРезультатРаспределения КАК РезультатРаспределения
|СГРУППИРОВАТЬ ПО
| РезультатРаспределения.АналитикаУчетаНоменклатуры,
| РезультатРаспределения.ВидЗапасов,
| РезультатРаспределения.НомерГТД
|
|;
|
|ВЫБРАТЬ
| РезультатРаспределения.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| РезультатРаспределения.ВидЗапасов КАК ВидЗапасов,
| РезультатРаспределения.НомерГТД КАК НомерГТД,
| ТаблицаВидыЗапасов.Количество - РезультатРаспределения.Количество КАК ОтклонениеКоличество,
| ТаблицаВидыЗапасов.КоличествоПоРНПТ - РезультатРаспределения.КоличествоПоРНПТ КАК ОтклонениеКоличествоПоРНПТ
|ИЗ
| ВТРезультатРаспределенияДляПроверки КАК РезультатРаспределения
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТТаблицаВидыЗапасов КАК ТаблицаВидыЗапасов
| ПО РезультатРаспределения.АналитикаУчетаНоменклатуры = ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры
| И РезультатРаспределения.НомерГТД = ТаблицаВидыЗапасов.НомерГТД
|ГДЕ
| ТаблицаВидыЗапасов.Количество - РезультатРаспределения.Количество <> 0
| ИЛИ ТаблицаВидыЗапасов.КоличествоПоРНПТ - РезультатРаспределения.КоличествоПоРНПТ <> 0
|;
|
|ВЫБРАТЬ
| РезультатРаспределения.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| РезультатРаспределения.ВидЗапасов КАК ВидЗапасов,
| РезультатРаспределения.НомерГТД КАК НомерГТД,
| РезультатРаспределения.ПодразделениеПолучатель КАК ПодразделениеПолучатель,
| РезультатРаспределения.ГруппаПродукции КАК ГруппаПродукции,
| РезультатРаспределения.Количество КАК Количество,
| РезультатРаспределения.КоличествоПоРНПТ КАК КоличествоПоРНПТ
|ИЗ
| ВТРезультатРаспределения КАК РезультатРаспределения
|УПОРЯДОЧИТЬ ПО
| РезультатРаспределения.Количество - РезультатРаспределения.КоличествоПоРНПТ <> 0 УБЫВ
|";
Запрос.УстановитьПараметр("Товары", Товары);
Запрос.УстановитьПараметр("ВидыЗапасов", ВидыЗапасов);
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Результат = Запрос.ВыполнитьПакет();
ВидыЗапасовОстатокРаспределения = Результат[Результат.ВГраница() - 1].Выбрать();
ВидыЗапасовРаспределенные = Результат[Результат.ВГраница()].Выгрузить();
ПараметрыОтбора = Новый Структура("АналитикаУчетаНоменклатуры, ВидЗапасов, НомерГТД");
Пока ВидыЗапасовОстатокРаспределения.Следующий() Цикл
ЗаполнитьЗначенияСвойств(ПараметрыОтбора, ВидыЗапасовОстатокРаспределения);
НайденныеСтроки = ВидыЗапасовРаспределенные.НайтиСтроки(ПараметрыОтбора);
Если НайденныеСтроки.Количество() > 0 Тогда
СтрокаКРаспределению = НайденныеСтроки[0];
СтрокаКРаспределению.Количество = СтрокаКРаспределению.Количество
+ ВидыЗапасовОстатокРаспределения.ОтклонениеКоличество;
СтрокаКРаспределению.КоличествоПоРНПТ = СтрокаКРаспределению.КоличествоПоРНПТ
+ ВидыЗапасовОстатокРаспределения.ОтклонениеКоличествоПоРНПТ;
КонецЕсли;
КонецЦикла;
ВидыЗапасов.Загрузить(ВидыЗапасовРаспределенные);
Если ХозяйственнаяОперация <> Перечисления.ХозяйственныеОперации.ПриемПередачаРаботМеждуПодразделениями Тогда
ЗаполнитьВидЗапасовПолучателя();
КонецЕсли;
КонецПроцедуры
Процедура ЗаполнитьВидЗапасовПолучателя() Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Запасы.НомерСтроки КАК НомерСтроки,
| ВЫРАЗИТЬ(Запасы.АналитикаУчетаНоменклатуры КАК Справочник.КлючиАналитикиУчетаНоменклатуры) КАК АналитикаУчетаНоменклатуры,
| Запасы.ВидЗапасов КАК ВидЗапасов
|ПОМЕСТИТЬ Запасы
|ИЗ
| &ВидыЗапасов КАК Запасы
|;
|
|
|ВЫБРАТЬ
| Запасы.НомерСтроки КАК НомерСтроки,
| Запасы.ВидЗапасов КАК ВидЗапасов,
| &ОрганизацияПолучатель КАК ОрганизацияПолучательЗапасов,
| ЗНАЧЕНИЕ(Перечисление.ТипыЗапасов.Работа) КАК ТипЗапасов,
| НЕОПРЕДЕЛЕНО КАК ВладелецТовара,
| НЕОПРЕДЕЛЕНО КАК Контрагент,
| НЕОПРЕДЕЛЕНО КАК Договор,
| НЕОПРЕДЕЛЕНО КАК Соглашение,
| НЕОПРЕДЕЛЕНО КАК Валюта,
| НЕОПРЕДЕЛЕНО КАК ВидЦены,
| &ПеремещениеПодДеятельность КАК НалогообложениеНДС,
| &НалогообложениеОрганизации КАК НалогообложениеОрганизации,
| ЗНАЧЕНИЕ(Справочник.ГруппыФинансовогоУчетаНоменклатуры.ПустаяСсылка) КАК ГруппаФинансовогоУчета,
| ЗНАЧЕНИЕ(Справочник.ГруппыАналитическогоУчетаНоменклатуры.ПустаяСсылка) КАК ГруппаПродукции,
| ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ЗакупкаУПоставщика) КАК ХозоперацияВидаЗапаса
|ИЗ
| Запасы КАК Запасы
|
|УПОРЯДОЧИТЬ ПО
| НомерСтроки";
ПараметрыУчетаПоОрганизации = УчетНДСУП.ПараметрыУчетаПоОрганизации(ОрганизацияПолучатель, Дата);
Запрос.УстановитьПараметр("ВидыЗапасов", ВидыЗапасов.Выгрузить(, "НомерСтроки, АналитикаУчетаНоменклатуры, ВидЗапасов"));
Запрос.УстановитьПараметр("НалогообложениеОрганизации", ПараметрыУчетаПоОрганизации.ОсновноеНалогообложениеНДСПродажи);
Запрос.УстановитьПараметр("ОрганизацияПолучатель", ОрганизацияПолучатель);
Запрос.УстановитьПараметр("ПеремещениеПодДеятельность", ПеремещениеПодДеятельность);
Запрос.УстановитьПараметр("Ссылка", Ссылка);
ВидыЗапасовПолучателя = Новый Соответствие;
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ВидЗапасовПолучателя = Справочники.ВидыЗапасов.ВидЗапасовДокумента(
Выборка.ОрганизацияПолучательЗапасов,
Выборка.ХозоперацияВидаЗапаса,
Выборка);
ВидыЗапасовПолучателя.Вставить(Выборка.НомерСтроки, ВидЗапасовПолучателя);
КонецЦикла;
Для Каждого Запас Из ВидыЗапасов Цикл
ВидЗапасовПолучателя = ВидыЗапасовПолучателя[Запас.НомерСтроки];
Запас.ВидЗапасовПолучателя = ?(ВидЗапасовПолучателя = Неопределено, Запас.ВидЗапасов, ВидЗапасовПолучателя);
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#КонецЕсли