Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » 1С Программирование и поддержка (1C)

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

Daseraf

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

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

Всего записей: 6 | Зарегистр. 23-07-2015 | Отправлено: 14:49 11-03-2018
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » 1С Программирование и поддержка (1C)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru