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