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