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