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