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