Добрый день!
Прошу помочь начинающему программисту 1С
Суть задачи:
1. Имеется регистр Остатков, в котором ведется учет по партиями
2. Учетная политика предполагает идентифицированное списание материалов (из конкретной партии, которую должен указать пользователь)
3. Пользователь в документе ВыпускПродукции в ТабличномПоле должен указать какие материалы были потрачены: Материал, Количество, Партия
4. Связываю метаданные: Материал-Тип:Справочник.Номенклатура.Ссылка
Количество -Тип:Числовой
Партия - НЕ МОГУ ПРИДУМАТЬ - пользователь должен выбрать партию из выпадающего списка. Этот список я получаю запросом из регистра Остатков (чтобы в списке были только те партии по которым есть остатки)
Вопросы следующие:
Какой тип должен быть у ПоляВвода, предназначенного для введения партии
Как подсунуть этому полю массив РегистраторовПартии
Заранее благодарен за любую помощь!!!
Для начала, вы б, конфигурацию указали, а то сейчас тема для http://pro1c.org.ua/index.php?showforum=136. Наверняка у вас этот мехнизм есть, вы просто не знаете как ним воспользоваться.
Конфигурацию делаю с нуля на платформе 8.1 (мой шеф наотрез отказался от типовой)
А если сделать что-то типа Процедуры подбора?Которая будет заносить Таблицу значений в поле ввода?
To Flexy - Спасибо за идею с подбором- завтра поковыряюсь, мож че-то и получится )
Не майтесь ерундой. Начинающий и "с нуля" не вяжется.
По делу:
"Какой тип должен быть у ПоляВвода, предназначенного для введения партии
Как подсунуть этому полю массив РегистраторовПартии"
тип ДокументСсылка
в обработчик НачалоВыбораИзСписка пихаем что то типа:
Сп = Новый СписокЗначений();
Сп.Добавить(Док1);
Сп.Добавить(Док2);
Сп.Добавить(Док3);
Элемент.СписокВыбора = ФормыОплаты;
Тип у ПоляВвода - составной = (ДокументСсылка.ПоступлениеТоваров, ДокументСсылка.Оприходование, ДокументСсылка.Выпуск)
Работу реализовал через подбор. Все очень довольны.
Теперь по делу:
1. Создал Обработку "ПодборПартии"
2. Создал Форму этой обработки (ФормаПодбора),
на этой форме разместил ТабличноеПоле с именем "ОстаткиПоПартиям"
на вкладке Реквизиты формы добавил реквизиты: Дата, Номенклатура, Характеристика, Склад.
В созданные реквизиты я из формы ВыпускПродукции передаю данные, которые в обработке ПодборПартии используются как параметры запроса
теперь коды:
1.на событие ПриОкрытии формы "ПодборПартии"
Процедура ПриОткрытии()
ПолучитьОстатки(Номенклатура, Дата, Характеристика,Склад);
КонецПроцедуры
Процедура ПолучитьОстатки(Номенклатура,Период, Характеристика,Склад)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| Остатки.Партия,
| СУММА(Остатки.КоличествоОстаток) КАК Остаток,
| Остатки.СуммаОстаток КАК Сумма,
| СУММА(Остатки.СуммаОстаток / ЕСТЬNULL(Остатки.КоличествоОстаток, 1)) КАК Цена
|ИЗ
| РегистрНакопления.ПартииТоваровНаСкладах.Остатки(
| &Период,
| Номенклатура = &Номенклатура
| И Характеристика = &Характеристика
| И Склад = &Склад) КАК Остатки
|
|СГРУППИРОВАТЬ ПО
| Остатки.Партия,
| Остатки.Номенклатура,
| Остатки.Склад,
| Остатки.СуммаОстаток";
Запрос.УстановитьПараметр("Номенклатура", Номенклатура1); //Справочник ссылка: Номенклатура
Запрос.УстановитьПараметр("Период", Период1); //Дата
Запрос.УстановитьПараметр("Характеристика", Характеристика1);
Запрос.УстановитьПараметр("Склад", Склад1);
РезультатЗапроса = Запрос.Выполнить();
ОстаткиПоПартиям.Очистить();
ОстаткиПоПартиям.Загрузить(РезультатЗапроса.Выгрузить());
КонецПроцедуры
Процедура ОстаткиПоПартиямВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)
СтандартнаяОбработка=Ложь;
ОповеститьОВыборе(ВыбраннаяСтрока);
КонецПроцедуры
Процедура КоманднаяПанель1ПодборПартии(Кнопка)
ТекСтрока=ЭлементыФормы.Товары.ТекущиеДанные;
ТекСтрока.Партия=Документы.ПоступлениеТоваров.ПустаяСсылка(); //очистить предыдущий выбор
ФормаПодбора=Обработки.ПодборПартии.ПолучитьФорму("ФормаПодбора",ЭтаФорма);// Важно- обязательно задать подчиненной форме главную (эта форма) иначе эта форма не обработает событие "оповестить о выборе"
// передаем данные для параметров запроса
ФормаПодбора.Дата=Дата;
ФормаПодбора.Склад=СкладИсточник;
ФормаПодбора.Номенклатура=ТекСтрока.Номенклатура;
ФормаПодбора.Характеристика=ТекСтрока.Характеристика;
ФормаПодбора.РежимВыбора=Истина; //указываем что форма открывается для выбора
ФормаПодбора.ОткрытьМодально(); //Открываем как подчиненную
КонецПроцедуры
Процедура ОбработкаВыбора(ЗначениеВыбора, Источник)
ТекСтрока=ЭлементыФормы.Товары.ТекущиеДанные;
ТекСтрока.Партия=ЗначениеВыбора.Партия;
ТекСтрока.Цена=ЗначениеВыбора.Цена;
ТекСтрока.Сумма=ТекСтрока.Количество*ТекСтрока.Цена;
КонецПроцедуры
За 2 месяца, если человек плотно занимается изучением 1С часов по 10 в день и имеет за собой опыт программирования ООП - он может стать мегамонстром в 1С ...
Тип поля должен быть такой же как и регистратор партий. Т.е. документ конкретного типа.
Остатки.Партия - изврат из 7.7. В 8 есть понятие Регистратор.
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua