8.х Подбор

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем nbIpKuH_BaH9I, 10 фев 2011.

  1. TopicStarter Overlay
    nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.987
    Симпатии:
    398
    Баллы:
    104
    Подскажите пожалуйста.
    Делаю подбор. При нажатии на кнопку появляется формаСписка справочника. Выбирается нужное значение. Но вот как поставить проверку на то, что если выбранное значение уже присутствует в табличной части, то оно не появляется. А то у меня до бесконечности можно добавлять одни и те же значения.
  2. Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    Код:
    Отбор = Новый Структура("Номенклатура", ИскомаяНоменклатура);
    НайденныеСтроки = ТЧ.НайтиСтроки(Отбор);
    
  3. TopicStarter Overlay
    nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.987
    Симпатии:
    398
    Баллы:
    104
    Все получилось. Вот распишу как сделал.
    Событие ОбработкаВыбора
    Код:
    ПараметрыОтбора = Новый Структура("Значение", ВыбранноеЗначение);
    Если ТЧ.НайтиСтроки(ПараметрыОтбора).Количество() > 0 Тогда
    СтандартнаяОбработка = Ложь;
    КонецЕсли;
    
    
  4. gosn1ck
    Offline

    gosn1ck Опытный в 1С

    Регистрация:
    13 авг 2009
    Сообщения:
    1.329
    Симпатии:
    1
    Баллы:
    26
    перетащите типовую функцию
    Код:
    ОбработкаТабличныхЧастей.НайтиСтрокуТабЧасти(ТабличнаяЧасть, СтруктураОтбора);
    
  5. Kapafla
    Offline

    Kapafla

    Регистрация:
    15 фев 2009
    Сообщения:
    21
    Симпатии:
    0
    Баллы:
    1
    Прошу прощения, если задам глупый вопрос..но с 8-кой только начала работать..в голове еще 7-ка..я пишу в основном для учета товара на складах..в 7-ке при нажатии на кнопку Подбор. открывала обработку, в которой отображала остатки товара на необходимом складе, в разрезе цен (т.е. один и тот же товар может храниться на складе по нескольким ценам)..потом при выборе товара использовала процедура Обработка Подбора() с помощью которой переносила данные в табличную часть документа....

    ВОПРОС: как что то типа такого сделать на 8-ке...если и открываю подбор. то не могу понять, через что получать выбранные данные в документ..как получить ссылку выбранного товара...открывать подбором справочник - это не вариант..так как мне мало того, что надо отобразить остаток товара в разрезе цены закупки, так еще и в разрезе серийного номера...

    Помогите разобраться, пожалуйста :angry:
  6. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.781
    Симпатии:
    509
    Баллы:
    204
    смотрите как работает метод ОповеститьОВыборе()
    И посмотрите как работает стандартный отбор.
  7. mialord
    Offline

    mialord Модераторы Команда форума Модератор

    Регистрация:
    31 июл 2009
    Сообщения:
    5.398
    Симпатии:
    40
    Баллы:
    54
    Leona, не указана конфигурация, наверное УТ

    Остатки товара в 8-ке не хранятся в разрезе закупочных цен, и механизм ценообразования для этого не заточен.
  8. Kapafla
    Offline

    Kapafla

    Регистрация:
    15 фев 2009
    Сообщения:
    21
    Симпатии:
    0
    Баллы:
    1
    Конфигурацию, пишу с самого нуля..там только те документы и справочники, которые я сама создаю..я так привыкла работать на 7-ке...не пользуюсь типовыми..и по правде даже их не имею в наличии..


    а куда смотреть? честно..просто не знаю
  9. TopicStarter Overlay
    nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.987
    Симпатии:
    398
    Баллы:
    104
    А какие именно данные вам необходимы для подбора? Может проще создать произвольную форму, и запросом добавлять в нее необходимые данные?
  10. Kapafla
    Offline

    Kapafla

    Регистрация:
    15 фев 2009
    Сообщения:
    21
    Симпатии:
    0
    Баллы:
    1
    У меня документ ПриходнаНакладная-реквизиты табличной части это Товар(Справочник.Товар), Серия (текстовое поле) Количество, Цена и сумма...В регистрНакопления ОстатокСклада я при проведении документа записываю Товар, Серия, Цена - это измерения, и в ресурсы - количество....

    Документ расходнаяНакладная...мне необходимо организовать подбор товара из остатка, при этом сразу указываю пользователя сколько, какого с какой серией и по какой цене есть товар на остатке...
    если организовывать подбор по справочнику, то пользователь не видит с каким серийным номером выбирать товар..и приходоваться мог по разным ценам...

    я раньше этот вопрос решала через обработку, на форму кидала таблицу...при открытии обработки, я из регистра выбирали остатки товара в том разрезе, как мне требовалось (через группировку делала в запросе)...и когда пользователь на форме нажимал enter или мышкой два раза, то предлагала ввести нужное ему количество, а остальные данные переносила с таблицы на обработке, используя процедуру ОбработкаПодбора(выбТов)...

    как что то типа такого сделать тут...
  11. mialord
    Offline

    mialord Модераторы Команда форума Модератор

    Регистрация:
    31 июл 2009
    Сообщения:
    5.398
    Симпатии:
    40
    Баллы:
    54
    Странно, пишите с нуля, а вопросы по типовому подбору )
    Вообще, если Вы хотите всё же написать так как задумали, то Вас надо запросом выбирать остатки партий на складах, брать у них цену закупа и серию партии, и показывать пользователю.
  12. Kapafla
    Offline

    Kapafla

    Регистрация:
    15 фев 2009
    Сообщения:
    21
    Симпатии:
    0
    Баллы:
    1
    Честно сказать, я не совсем понимаю, что вас смущает...чему научилась, то, как говориться и использую...если это стандартный отбор, почему же его нет в типовых?..Но вопрос не в этом...Я из регистра получаю все данные. которые мне необходимо показать пользователю...При нажатии кнопки ПОДБОР, я вызываю форму Обработки
    Код:
    Процедура КоманднаяПанель1Подбор(Кнопка)
    ФормаПодбора = Обработки.Товар.ПолучитьФорму("ФормаТов",ЭлементыФормы.СкладОТ,ЭтаФорма);
    ФормаПодбора.ВладелецФормы=ЭтаФорма.ЭлементыФормы.СкладОТ;
    ФормаПодбора.РежимВыбора        = Истина;
    ФормаПодбора.ЗакрыватьПриВыборе = Ложь;
    ФормаПодбора.МножественныйВыбор = Ложь;
    
    ФормаПодбора.Открыть();
    КонецПроцедуры
    
    
    В табличную часть, расположенную на форме обработки, я вывожу свои остатки

    Код:
    
    Процедура ЗаполнитьНажатие(Элемент)
    Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ
    |	ОстатокОстатки.Товар,
    |	ОстатокОстатки.Цена,
    |	ОстатокОстатки.КолвоОстаток
    |ИЗ
    |	РегистрНакопления.Остаток.Остатки КАК ОстатокОстатки
    |ГДЕ
    |	ОстатокОстатки.Склад.Ссылка = &Склад
    |
    |СГРУППИРОВАТЬ ПО
    |	ОстатокОстатки.Товар,
    |	ОстатокОстатки.Цена,
    |	ОстатокОстатки.КолвоОстаток";
    Запрос.УстановитьПараметр("Склад", Склад);
    
    Результат = Запрос.Выполнить().Выбрать();
    Пока   Результат.Следующий()>0 Цикл
    НоваяСтрока = ТЗ.Добавить();
    НоваяСтрока.НаименованиеТовара = Результат.Товар;
    НоваяСтрока.Остаток = Результат.КолвоОстаток;
    НоваяСтрока.КодТовара = Результат.Товар.Код;
    НоваяСтрока.Цена = Результат.Цена;
    НоваяСтрока.Сумма = Результат.Цена*Результат.КолвоОстаток;
    
    КонецЦикла;	
    
    
    КонецПроцедуры
    
    
    
    Процедура ПриОткрытии()
    Склад=ВладелецФормы.Значение;
    ЗаполнитьНажатие(Склад);
    // Вставить содержимое обработчика.
    КонецПроцедуры
    
    
    т.е. в результате - у меня есть все те данные, которые мне нужны...проблема, в том, что не могу передать выбранные пользователем данные...
    он на нужной строке нажимает enter или мышкой...но ничего не происходит...даже не получается запросить количество для списания...ну и потом обращаться к данным, чтоб создавать в документе в Таб.части новую строку

    ну вот..проблема..где то вот такая...
  13. Kapafla
    Offline

    Kapafla

    Регистрация:
    15 фев 2009
    Сообщения:
    21
    Симпатии:
    0
    Баллы:
    1
    Просто подскажите, как перехватить нажатие на форме обработки...причем чтоб можно было получить данные строки, на которой пользователь нажал enter...как ему предложить потом ввести кол-во...я знаю...

    я пробовала и на форме документа (Расх.накладная) процедуру ТЗОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка), туда просто не попадаю...так же на форме обработки Процедура ТЗОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка). и
    Процедура ТЗПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
    Процедура ТЗПриАктивизацииСтроки(Элемент)
    Процедура ТЗВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)

    ничего не помогает.....я в них просто не перехожу...

    Пожалуйста...очень срочно нужно
  14. mialord
    Offline

    mialord Модераторы Команда форума Модератор

    Регистрация:
    31 июл 2009
    Сообщения:
    5.398
    Симпатии:
    40
    Баллы:
    54
    Конечно поможем
    Да, тут немного другой путь...
    При вызове формы подбора
    Код:
    СтруктураПараметровВызова =  Новый Структура();
    
    // Заполняем структуру произвольными параметрами для передачи в форму при открытии
    //
    
    ФормаПодбора = ПодборНоменклатуры.ПолучитьФорму("ОсновнаяФорма", ФормаДокументаОткрывшегоПодбор, ФормаДокументаОткрывшегоПодбор); // Получаем форму и устанавливаем владельца формы
    ФормаПодбора.ОбработкаОбъект.СтруктураИсходныхПараметров = СтруктураПараметров; //Переменная СтруктураИсходныхПараметров должна быть определена в подборе мы её просто переписываем
    ФормаПодбора.Открыть();
    
    
    Открывается форма подбора, мы выполняем в ней действия, после того как определились что возвращаем заводим структуру возвратных параметров
    Код:
    СтруктураПодбора = Новый Структура();
    СтруктураПодбора.Вставить("Номенклатура",                  Номенклатура);
    //................................................
    ОповеститьОВыборе(СтруктураПодбора) //Посылает оповещение владельцу формы о выполнении выбора или подбора
    
    
    А вот теперь начинаем принимать сообщение от формы подбора документом, ожидающим товар. Сообщения от подчиненных форм обрабатывается формами в событии формы ОбработкаВыбора(ЗначениеВыбора, Источник).
    Возникает при выборе объекта в одной из подчиненных форм или при вызове в одной из подчиненных форм метода ОповеститьОВыборе.
    Для извлечения результата выбора в процедуре ОбработкаПодбора(ЗначениеВыбора, Источник) обрабатываем следующим образом
    Код:
    Перем Номенклатура
    ЗначениеВыбора.Свойство("Номенклатура", Номенклатура);
    
    
    Ну вот, как то так, пробуйте.
  15. Kapafla
    Offline

    Kapafla

    Регистрация:
    15 фев 2009
    Сообщения:
    21
    Симпатии:
    0
    Баллы:
    1
    Код:
    ФормаПодбора = ПодборНоменклатуры.ПолучитьФорму("ОсновнаяФорма", ФормаДокументаОткрывшегоПодбор, ФормаДокументаОткрывшегоПодбор);
    
    
    ведь это мы справочник открываем? простите, mialord, но я немного не уловила....Если мы будем использовать форму подбора справочника, ведь му тогда не сможем показать что у нас на остатке есть один и тот же элемент справочника но с разными ценами?...простите, если вы это описывали, и я не поняла, подскажите где именно это вы описали...а то у меня не получается
  16. mialord
    Offline

    mialord Модераторы Команда форума Модератор

    Регистрация:
    31 июл 2009
    Сообщения:
    5.398
    Симпатии:
    40
    Баллы:
    54
    Вообще надо смотреть типповую УТ.
    Открываем мы форму обработку, где всё рисуем так как нам надо, а в обработке показываем остатки.
  17. Kapafla
    Offline

    Kapafla

    Регистрация:
    15 фев 2009
    Сообщения:
    21
    Симпатии:
    0
    Баллы:
    1
    Вы меня простите, mialord, за надоедливость, и за долгое понимание...сделайте скидку на то, что только учусь....и в голове сидит еще 7-ая версия
    Вы пишете
    я все это пишу в процедуре. которая выполняется при нажатии книпки в документе ПОДБОР?

    далее....с заполнением структуры-я разобралась...а вот мне что то никак не получается понять след строку
    ФормаПодбора - это просто переменная?..что такое ПодборНоменклатуры?-это название самой обработки? а основнаяФорма - это ее форма?у меня например в конфигурации Обработка (в которой я заполняю перечень остатков) называется Товар_Подбор, ее форма ФормаТов...
    т.е мне можно написать след: ФормаПодбора=Товар_Подбор.ПолучитьФорму("ФормаТов",?,?)...вот здесь тоже мне не совсем ясно...что за переменная ФормаДокументаОткрывшегоПодбор....где она определяется и чему она равна...

    простите еще раз. если вопросы глупые.... :angry:
  18. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    ФормаПодбора - это просто переменная.

    ПодборНоменклатуры - название обработки. Пишите:
    Обработки.Товар_Подбор.ПолучитьФорму(...);
    (т.е. не забывайте указывать непосредственно тип метаданных).


    Первый параметр - название формы, т.е. в вашем случае "ФормаТов".

    Форма документа открывшего подбор - форма того документа из которого у вас была вызванна обработка подбора. Можете просто написать "ЭтаФорма".

    Таким образом полный код у вас будет выглядеть:
    Код:
    // Открываем форму подбора.
    ФормаПодбора = Обработки.Товар_Подбор.ПолучитьФорму("ФормаТов", ЭтаФорма, ЭтаФорма);
    ФормаПодбора.ОбработкаОбъект.СтруктураИсходныхПараметров = СтруктураПараметров;
    ФормаПодбора.Открыть();
    
  19. Kapafla
    Offline

    Kapafla

    Регистрация:
    15 фев 2009
    Сообщения:
    21
    Симпатии:
    0
    Баллы:
    1
    shurikvz, спасибо большое...очень подробно объяснили...
    вот еще вопросики( :angry: возможно опять простые и глупые, но у меня затруднения с ними)
    - это я должна именно в модуле формы ФормаТов описать? и она будет такая же как структура СтруктураПараметровВызова?
    правильно ли я делаю, создавая структуру СтруктураПараметровВызова?
    Код:
    	СтруктураПараметровВызова =  Новый Структура();
    СтруктураПараметровВызова.Вставить("Товар");
    СтруктураПараметровВызова.Вставить("СерийныйНомер");
    СтруктураПараметровВызова.Вставить("Колво");
    СтруктураПараметровВызова.Вставить("Цена");
    
    
    так же само, мне описать в СтруктураИсходныхПараметров ?
    и еще один вопросик: у меня ругается программа на переменную СтруктураПараметров...пишет
    Переменная не определена (СтруктураПараметров)
    ФормаПодбора.ОбработкаОбъект.СтруктураИсходныхПараметров = <<?>>СтруктураПараметров;


    где я ее определяю?

    спасибо большое за понимание и помощь :))
  20. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    СтруктураИсходныхПараметров - это реквизит обработки (Товар_Подбор в вашем случае). Тип значения - "Произвольный".

    СтруктураПараметровВызова - это структуру вы создаете в той форме, откуда будете вызывать обработку подбора. В этой структуре вы передадите необходимые параметры для обработки.
    В самой обработке - создавать ее не надо (это ведь реквизит обработки!), в обработке вы уже анализируете переданную структуру, берете из нее необходимые параметры, делаете все что надо с этими параметрами (там отбор к примеру установить, остаток рассчитать и т.п.). В общем случае этот реквизит является необязательным. Для простоты можете попробовать для начала сделать без него.


    Ну так, а какую переменную вы заводите? Внимательно посмотрите. Сравните:
    Код:
    СтруктураПараметровВызова =  Новый Структура();
    СтруктураПараметровВызова.Вставить("Товар");
    СтруктураПараметровВызова.Вставить("СерийныйНомер");
    СтруктураПараметровВызова.Вставить("Колво");
    СтруктураПараметровВызова.Вставить("Цена");
    ФормаПодбора.ОбработкаОбъект.СтруктураИсходныхПараметров = [b]СтруктураПараметров[/b];
    
    и
    Код:
    СтруктураПараметровВызова =  Новый Структура();
    СтруктураПараметровВызова.Вставить("Товар");
    СтруктураПараметровВызова.Вставить("СерийныйНомер");
    СтруктураПараметровВызова.Вставить("Колво");
    СтруктураПараметровВызова.Вставить("Цена");
    ФормаПодбора.ОбработкаОбъект.СтруктураИсходныхПараметров = [b]СтруктураПараметровВызова[/b];
    

Поделиться этой страницей