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