Имя: Пароль:
1C
1С v8
подбор номенклатуры с остатками в Расходной накладной
0 Ramis333
 
14.08.17
10:07
в форме документа создал кнопку подбор
добавил процедуру

&НаКлиенте
Процедура Подбор(Команда)
    
    
ПараметрЗаголовок = НСтр("ru = 'Подбор товаров в %Документ%'");
    Если ЗначениеЗаполнено(Объект.Ссылка) Тогда
        ПараметрЗаголовок = СтрЗаменить(ПараметрЗаголовок, "%Документ%", Объект.Ссылка);
    Иначе
        ПараметрЗаголовок = СтрЗаменить(ПараметрЗаголовок, "%Документ%", НСтр("ru = 'реализацию товаров и услуг'"));
    КонецЕсли;
    
    ПараметрыФормы = Новый Структура;
    ПараметрыФормы.Вставить("Склад", Объект.Склад);
    ПараметрыФормы.Вставить("Документ", Объект.Ссылка);
    
    ОткрытьФорму("Обработка.ПодборТоваровВДокументПродажи.Форма", ПараметрыФормы, ЭтаФорма, УникальныйИдентификатор);
    
          
    
КонецПроцедуры

в обработке добавил табличную часть с колонками номенклатура/количество/количество для подбора.
добавил ячейку склад. при указании склада запросом заполняется табличная часть. в колонке количество для подбора вручную проставляем количество.
каким образом это количество можно перенести в табл.часть документа.
процедурой при закрытии?
1 zvial
 
14.08.17
10:38
Посмотри как это в типовой реализовано. Это ж проще, чем сотню ответов читать потом ) А так, ОповеститьОВыборе, возможно тебе поможет?
2 Ramis333
 
14.08.17
10:46
в типовой ссылается на АдресноеХранилище.  туда нужно данные выгрузить и оттуда уже потом загрузить. думал, что есть способ попроще
3 zvial
 
14.08.17
12:07
Попроще - ОповеститьОВыборе при выборе в окне подбора. А в форме документа событие лови в ОбработкаВыбора
4 Ramis333
 
14.08.17
12:12
не знаю, какой код писать.
5 zvial
 
14.08.17
12:49
Синтаксис помощник тебе в помощь. Там код не сложнее, чем в (0) приведено.
6 Ramis333
 
14.08.17
22:55
может кому-то пригодится
в форме документа прописал следующий код

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

&НаКлиенте
Процедура ТоварыОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
    Для Каждого Стр Из ВыбранноеЗначение Цикл
    РезультатПоиска = Объект.Товары.НайтиСтроки(Новый Структура("Номенклатура", Стр.Номенклатура));
    Если РезультатПоиска.Количество() = 0 Тогда
        НовСтр = Объект.Товары.Добавить();
        НовСтр.Номенклатура = Стр.Номенклатура;
    Иначе
        НовСтр = РезультатПоиска[0];    
    КонецЕсли;
    НовСтр.Количество = НовСтр.Количество + Стр.Количество;
КонецЦикла;
// Вставить содержимое обработчика.
КонецПроцедуры



в форме справочника  (списокВыбора)


&НаКлиенте
Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)          
    // Проверка на наличие выбранной строки в списке
    ТекДанные = Элементы.Список.ТекущиеДанные;
    Если ТекДанные = Неопределено Тогда Возврат; КонецЕсли;       
    // Для групп номенклатуры подбор не производится. Именно для обращения
    // к свойству "ЭтоГруппа" бил установлен флаг "Использовать всегда", иначе
    // при отсутствии колонки "Это группа" в списке вылетала бы ошибка "Поле объекта не найдено"
    //Если ТекДанные.ЭтоГруппа Тогда Возврат; КонецЕсли;
    // Отключаем стандартную обработку
    СтандартнаяОбработка = Ложь;
    // Ищем товар в таблице "Подобранные товары". Если нет - добавляем строку, иначе добавляем количество
    РезультатПоиска = ПодобранныеТовары.НайтиСтроки(Новый Структура("Номенклатура", ТекДанные.Ссылка));
    Если РезультатПоиска.Количество() = 0 Тогда
        Стр = ПодобранныеТовары.Добавить();
        Стр.Номенклатура = ТекДанные.Ссылка;
    Иначе
        Стр = РезультатПоиска[0];
    КонецЕсли;
    Стр.Количество = Стр.Количество + 1;      
КонецПроцедуры

&НаКлиенте
Процедура ПеренестиВДокумент(Команда)
    
    // Передаем в родительский элемент формы "Товары" данные выбора - таблицу "Подобранные товары"
    ОповеститьОВыборе(ПодобранныеТовары);          

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

&НаКлиенте
Процедура СписокОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
    // Вставить содержимое обработчика.
    // Проверка на наличие выбранной строки в списке
    ТекДанные = Элементы.Список.ТекущиеДанные;
    Если ТекДанные = Неопределено Тогда Возврат; КонецЕсли;       
    // Для групп номенклатуры подбор не производится. Именно для обращения
    // к свойству "ЭтоГруппа" бил установлен флаг "Использовать всегда", иначе
    // при отсутствии колонки "Это группа" в списке вылетала бы ошибка "Поле объекта не найдено"
    Если ТекДанные.ЭтоГруппа Тогда Возврат; КонецЕсли;
    // Отключаем стандартную обработку
    СтандартнаяОбработка = Ложь;
    // Ищем товар в таблице "Подобранные товары". Если нет - добавляем строку, иначе добавляем количество
    РезультатПоиска = ПодобранныеТовары.НайтиСтроки(Новый Структура("Номенклатура", ТекДанные.Ссылка));
    Если РезультатПоиска.Количество() = 0 Тогда
        Стр = ПодобранныеТовары.Добавить();
        Стр.Номенклатура = ТекДанные.Ссылка;
    Иначе
        Стр = РезультатПоиска[0];
    КонецЕсли;
    Стр.Количество = Стр.Количество + 1;  
КонецПроцедуры
7 Ramis333
 
14.08.17
22:56
такого, к сожалению, в синтаксис помощнике не найдешь.