#Если Клиент тогда Процедура Инициализировать(ЗнОбъект, ИмяТабличнойЧасти, ТабличноеПоле) Экспорт; СуммаПодбора = ЗнОбъект[ИмяТабличнойЧасти].Итог("Сумма"); Если не ВвестиЧисло(СуммаПодбора, "Введите необходимую сумму",10,2) тогда возврат; КонецЕсли; ЗнОбъект[ИмяТабличнойЧасти].Очистить(); //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА // Данный фрагмент построен конструктором. // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!! Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ХозрасчетныйОстатки.Субконто1 КАК Номенклатура, | ХозрасчетныйОстатки.Субконто2.БазоваяЕдиницаИзмерения КАК ЕдиницаИзмерения, | ХозрасчетныйОстатки.Субконто2 КАК Партия, | ВЫБОР | КОГДА &ЦенаВключаетНДС | ТОГДА (СУММА(ХозрасчетныйОстатки.СуммаОстаток) + 1) / СУММА(ХозрасчетныйОстатки.КоличествоОстаток) * 1.2 | ИНАЧЕ (СУММА(ХозрасчетныйОстатки.СуммаОстаток) + 1) / СУММА(ХозрасчетныйОстатки.КоличествоОстаток) | КОНЕЦ КАК Цена, | ВЫБОР | КОГДА &СуммаВключаетНДС | ТОГДА (СУММА(ХозрасчетныйОстатки.СуммаОстаток) + 1) * 1.2 | ИНАЧЕ СУММА(ХозрасчетныйОстатки.СуммаОстаток) + 1 | КОНЕЦ КАК Сумма, | ВЫБОР | КОГДА &СуммаВключаетНДС | ТОГДА (СУММА(ХозрасчетныйОстатки.СуммаОстаток) + 1) * 1.2 | ИНАЧЕ СУММА(ХозрасчетныйОстатки.СуммаОстаток) + 1 | КОНЕЦ КАК СуммаБезСкидки, | 0 КАК СуммаСкидки, | 1 КАК Коэффициент, | (СУММА(ХозрасчетныйОстатки.СуммаОстаток) + 1) * 0.2 КАК СуммаНДС, | СУММА(ХозрасчетныйОстатки.КоличествоОстаток) КАК Количество, | ХозрасчетныйОстатки.Субконто1.СтавкаНДС КАК СтавкаНДС |ПОМЕСТИТЬ Остатки |ИЗ | РегистрБухгалтерии.Хозрасчетный.Остатки(&Дата, Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ТоварыНаСкладе), , Организация = &Организация) КАК ХозрасчетныйОстатки |ГДЕ | ХозрасчетныйОстатки.КоличествоОстаток > 0 | И ХозрасчетныйОстатки.СуммаОстаток > 0 | |СГРУППИРОВАТЬ ПО | ХозрасчетныйОстатки.Субконто1, | ХозрасчетныйОстатки.Субконто2, | ХозрасчетныйОстатки.Субконто2.БазоваяЕдиницаИзмерения, | ХозрасчетныйОстатки.Субконто1.СтавкаНДС |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Остатки.Номенклатура, | Остатки.ЕдиницаИзмерения, | Остатки.Партия, | Остатки.Цена, | Остатки.Сумма, | Остатки.СуммаБезСкидки, | Остатки.СуммаСкидки, | Остатки.Коэффициент, | Остатки.СуммаНДС, | Остатки.Количество, | Остатки.СтавкаНДС |ИЗ | Остатки КАК Остатки |ГДЕ | Остатки.Цена < &СуммаПодбора"; Запрос.УстановитьПараметр("ЦенаВключаетНДС", ЗнОбъект.ТипЦен.ЦенаВключаетНДС); Запрос.УстановитьПараметр("СуммаВключаетНДС", ЗнОбъект.СуммаВключаетНДС); Запрос.УстановитьПараметр("Дата", ЗнОбъект.Дата); Запрос.УстановитьПараметр("Организация", ЗнОбъект.Организация); Запрос.УстановитьПараметр("СуммаПодбора", СуммаПодбора); Результат = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = Результат.Выбрать(); ТблЗП = Результат.Выгрузить(); ТблЗ = Результат.Выгрузить(); СуммаОстатка = СуммаПодбора; Поиск = Истина; Генер =Новый ГенераторСлучайныхЧисел(); Пока Поиск Цикл Слч = Генер.СлучайноеЧисло(0,ТблЗ.Количество()-1); ТекСтрока = ТблЗ[Слч]; Если ЗнОбъект[ИмяТабличнойЧасти].НайтиСтроки(Новый Структура("Номенклатура",ТекСтрока.Номенклатура)).Количество()>0 тогда продолжить; КонецЕсли; Количество = Генер.СлучайноеЧисло(1,ТекСтрока.Количество); СуммаТек = Количество * ТекСтрока.Цена; Если СуммаТек < СуммаОстатка тогда СтрокаТабличнойЧасти = ЗнОбъект[ИмяТабличнойЧасти].Добавить(); ЗаполнитьЗначенияСвойств(СтрокаТабличнойЧасти,ТекСтрока); СтрокаТабличнойЧасти.Количество = Количество; ОбработкаТабличныхЧастей.ПриИзмененииНоменклатурыТабЧасти(СтрокаТабличнойЧасти, ЗнОбъект); // Рассчитываем реквизиты табличной части. ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(СтрокаТабличнойЧасти, ЗнОбъект); ОбработкаТабличныхЧастей.РассчитатьСуммуНДСТабЧасти(СтрокаТабличнойЧасти, ЗнОбъект); СуммаОстатка = СуммаОстатка - СтрокаТабличнойЧасти.Сумма; КонецЕсли; Запрос = Новый Запрос("ВЫБРАТЬ | ТТабл.Номенклатура, | ТТабл.ЕдиницаИзмерения, | ТТабл.Партия, | ТТабл.Цена, | ТТабл.Сумма, | ТТабл.СуммаБезСкидки, | ТТабл.СуммаСкидки, | ТТабл.Коэффициент, | ТТабл.СуммаНДС, | ТТабл.Количество, | ТТабл.СтавкаНДС |ПОМЕСТИТЬ ТТабл |ИЗ | &ТТабл КАК ТТабл |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ТТабл.Номенклатура, | ТТабл.ЕдиницаИзмерения, | ТТабл.Партия, | ТТабл.Цена, | ТТабл.Сумма, | ТТабл.СуммаБезСкидки, | ТТабл.СуммаСкидки, | ТТабл.Коэффициент, | ТТабл.СуммаНДС, | ТТабл.Количество, | ТТабл.СтавкаНДС |ИЗ | ТТабл КАК ТТабл |ГДЕ | ТТабл.Цена < &СуммаОстатка"); Запрос.УстановитьПараметр("СуммаОстатка",СуммаОстатка); Запрос.УстановитьПараметр("ТТабл",ТблЗ); ТблЗ = Запрос.Выполнить().Выгрузить(); Если ТблЗ.Количество() = 0 тогда прервать; КонецЕсли; КонецЦикла; КонецПроцедуры #КонецЕсли
Friday, February 10, 2012
1с подбор номенклатуры в случайном порядке
Возникла задача подобрать из остатков товар в случайном порядке и случайном количестве. Задача реализована на 1с 8.2 для конфигурации "Бухгалтерия Для Украины". Для это создаем внешнею обработку, и вставляем эту процедуру, далее обработку вставляем в справочник дополнительных обработок.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment