Версия для печати темы (https://pro1c.org.ua/index.php?s=b5ce049d9fcd77ba18f412f82a197ba4&showtopic=2947)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.1 (8.0) _ Возможность выбора регистратора партии (из регистра ОстаткиПоПартиям)

Автор: Salex 15.02.11, 16:20

Добрый день!
Прошу помочь начинающему программисту 1С

Суть задачи:
1. Имеется регистр Остатков, в котором ведется учет по партиями
2. Учетная политика предполагает идентифицированное списание материалов (из конкретной партии, которую должен указать пользователь)
3. Пользователь в документе ВыпускПродукции в ТабличномПоле должен указать какие материалы были потрачены: Материал, Количество, Партия
4. Связываю метаданные: Материал-Тип:Справочник.Номенклатура.Ссылка
Количество -Тип:Числовой
Партия - НЕ МОГУ ПРИДУМАТЬ - пользователь должен выбрать партию из выпадающего списка. Этот список я получаю запросом из регистра Остатков (чтобы в списке были только те партии по которым есть остатки)
Вопросы следующие:
Какой тип должен быть у ПоляВвода, предназначенного для введения партии
Как подсунуть этому полю массив РегистраторовПартии

Заранее благодарен за любую помощь!!!

Автор: Vofka 15.02.11, 16:32

Для начала, вы б, конфигурацию указали, а то сейчас тема для http://pro1c.org.ua/index.php?showforum=136. Наверняка у вас этот мехнизм есть, вы просто не знаете как ним воспользоваться.

Автор: Salex 15.02.11, 16:36

Конфигурацию делаю с нуля на платформе 8.1 (мой шеф наотрез отказался от типовой)

Автор: Flexy 15.02.11, 16:42

А если сделать что-то типа Процедуры подбора?Которая будет заносить Таблицу значений в поле ввода?

Автор: Vofka 15.02.11, 16:42

Цитата
Конфигурацию делаю с нуля на платформе 8.1

Тогда здесь в 2 словах не объяснить. Смотрите типовые конфигурации.

Цитата
мой шеф наотрез отказался от типовой

Да уж. А можно узнать причину отказа (интересно просто)?

Автор: Salex 15.02.11, 16:59

To Flexy - Спасибо за идею с подбором- завтра поковыряюсь, мож че-то и получится smile.gif)

Автор: zetovich 15.02.11, 20:39

Не майтесь ерундой. Начинающий и "с нуля" не вяжется.
По делу:
"Какой тип должен быть у ПоляВвода, предназначенного для введения партии
Как подсунуть этому полю массив РегистраторовПартии"
тип ДокументСсылка
в обработчик НачалоВыбораИзСписка пихаем что то типа:

Сп = Новый СписокЗначений();
Сп.Добавить(Док1);
Сп.Добавить(Док2);
Сп.Добавить(Док3);
        
Элемент.СписокВыбора = ФормыОплаты;

Автор: Salex 17.02.11, 17:03

Тип у ПоляВвода - составной = (ДокументСсылка.ПоступлениеТоваров, ДокументСсылка.Оприходование, ДокументСсылка.Выпуск)

Работу реализовал через подбор. Все очень довольны.

Теперь по делу:

1. Создал Обработку "ПодборПартии"
2. Создал Форму этой обработки (ФормаПодбора),
на этой форме разместил ТабличноеПоле с именем "ОстаткиПоПартиям"
на вкладке Реквизиты формы добавил реквизиты: Дата, Номенклатура, Характеристика, Склад.
В созданные реквизиты я из формы ВыпускПродукции передаю данные, которые в обработке ПодборПартии используются как параметры запроса

теперь коды:

1.на событие ПриОкрытии формы "ПодборПартии"

Процедура ПриОткрытии()
    ПолучитьОстатки(Номенклатура, Дата, Характеристика,Склад);
КонецПроцедуры


2. Сама процедура ПолучитьОстатки:
Процедура ПолучитьОстатки(Номенклатура,Период, Характеристика,Склад)

Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    Остатки.Партия,
                   |    СУММА(Остатки.КоличествоОстаток) КАК Остаток,
                   |    Остатки.СуммаОстаток КАК Сумма,
                   |    СУММА(Остатки.СуммаОстаток / ЕСТЬNULL(Остатки.КоличествоОстаток, 1)) КАК Цена
                   |ИЗ
                   |    РегистрНакопления.ПартииТоваровНаСкладах.Остатки(
                   |            &Период,
                   |            Номенклатура = &Номенклатура
                   |                И Характеристика = &Характеристика
                   |                И Склад = &Склад) КАК Остатки
                   |
                   |СГРУППИРОВАТЬ ПО
                   |    Остатки.Партия,
                   |    Остатки.Номенклатура,
                   |    Остатки.Склад,
                   |    Остатки.СуммаОстаток";
    Запрос.УстановитьПараметр("Номенклатура",    Номенклатура1);     //Справочник ссылка: Номенклатура
    Запрос.УстановитьПараметр("Период",    Период1);     //Дата
    Запрос.УстановитьПараметр("Характеристика",    Характеристика1);
    Запрос.УстановитьПараметр("Склад",    Склад1);
    РезультатЗапроса = Запрос.Выполнить();
    
    ОстаткиПоПартиям.Очистить();
    ОстаткиПоПартиям.Загрузить(РезультатЗапроса.Выгрузить());
    

КонецПроцедуры


3.Пользователь видит список партий с остатками суммами и ценами и выбирает нужную - двойной щелчок и получаем событие "Выбор" табличного поля ОстаткиПоПартиям. Его обработчик:

Процедура ОстаткиПоПартиямВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)
    СтандартнаяОбработка=Ложь;
    ОповеститьОВыборе(ВыбраннаяСтрока);
КонецПроцедуры


Этой процедурой я передаю в форму ВыпускПродукции всю строку, выбранную пользователем

Теперь несколько слов о главной форме:
1. Обрабочик события нажатия кнопки "ПодборПартии"
Процедура КоманднаяПанель1ПодборПартии(Кнопка)
    ТекСтрока=ЭлементыФормы.Товары.ТекущиеДанные;
    ТекСтрока.Партия=Документы.ПоступлениеТоваров.ПустаяСсылка(); //очистить предыдущий выбор
    
        ФормаПодбора=Обработки.ПодборПартии.ПолучитьФорму("ФормаПодбора",ЭтаФорма);// Важно- обязательно задать подчиненной форме главную (эта форма) иначе эта форма не обработает событие "оповестить о выборе"
    
        // передаем данные для параметров запроса    
    ФормаПодбора.Дата=Дата;
    ФормаПодбора.Склад=СкладИсточник;
    ФормаПодбора.Номенклатура=ТекСтрока.Номенклатура;
    ФормаПодбора.Характеристика=ТекСтрока.Характеристика;

    ФормаПодбора.РежимВыбора=Истина; //указываем что форма открывается для выбора
    ФормаПодбора.ОткрытьМодально(); //Открываем как подчиненную
КонецПроцедуры


2 Форме ВыпускПродукции была назначена обработка события: ОбработкаВыбора
Процедура ОбработкаВыбора(ЗначениеВыбора, Источник)
    ТекСтрока=ЭлементыФормы.Товары.ТекущиеДанные;
    ТекСтрока.Партия=ЗначениеВыбора.Партия;
    ТекСтрока.Цена=ЗначениеВыбора.Цена;
    ТекСтрока.Сумма=ТекСтрока.Количество*ТекСтрока.Цена;
КонецПроцедуры


Все отлично работает


To zetovich
Цитата
Начинающий и "с нуля" не вяжется.

Программированием 1С занялся 2 месяца назад. Изучаю самостоятельно. Большое спасибо вот таким вот форумам

Автор: Flexy 17.02.11, 17:08

Цитата(Salex @ 17.02.11, 18:03) *
Программированием 1С занялся 2 месяца назад. Изучаю самостоятельно. Большое спасибо вот таким вот форумам

Неплохой такой прогресс за 2 месяца smile.gif
Удачи Вам в дальнейшем развитии. 32000000.gif

Автор: zetovich 18.02.11, 11:39

Цитата(Flexy @ 17.02.11, 18:08) *
Неплохой такой прогресс за 2 месяца smile.gif
Удачи Вам в дальнейшем развитии. 32000000.gif

ага.
но как то слабо верится что только 2 месяца.
так да и так smile.gif

Автор: Fynjy 19.02.11, 8:29

За 2 месяца, если человек плотно занимается изучением 1С часов по 10 в день и имеет за собой опыт программирования ООП - он может стать мегамонстром в 1С ...
Тип поля должен быть такой же как и регистратор партий. Т.е. документ конкретного типа.
Остатки.Партия - изврат из 7.7. В 8 есть понятие Регистратор.

Автор: awp 20.02.11, 11:49

Цитата(Fynjy @ 19.02.11, 9:29) *
Остатки.Партия - изврат из 7.7. В 8 есть понятие Регистратор.


Регистратором может быть любой документ: РН, Списание, Оприходование, Поступление - а партия она и в Африке партия smile.gif

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua