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