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