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