Имя: Пароль:
1C
1С v8
Добавление группы номенклатуры в реализацию
0 R0m1n
 
18.03.13
10:45
УТ 10.2. Потребовалось добавить в реализацию товаров/услуг добавление разом всей группы из справочника "Номенклатура" в табличную часть "Товары". сделал по аналогии с документом "Установка скидок номенклатуры" - из командной панели открываем форму модально, делаем запрос, результат как бы должен перенестись в "Товары". но у меня почему то перенос не срабатывает. не пойму даже к каким "Товарам" из этой формы обращается - добавляю для проверки несколько позиций номенклатуры, а Товары.Количество() - выдает ноль почему то.
1 Галахад
 
гуру
18.03.13
10:47
Иллюстрации собственным кодом повышают карму.
2 ZaprosMan
 
18.03.13
10:48
Давай запрос.
3 R0m1n
 
18.03.13
10:52
// Процедура вызывается при нажатии кнопки "ОК",
// заполняет табличную часть документа.
//
Процедура ОКНажатие(Элемент)

   ТекстЗапроса = "ВЫБРАТЬ
                  |    Номенклатура.Ссылка КАК Номенклатура,
                  |    &ПроцентСкидкиНаценки КАК ПроцентСкидкиНаценки,
                  |    &ОграничениеСкидкиНаценки КАК ОграничениеСкидкиНаценки
                  |ИЗ
                  |    Справочник.Номенклатура КАК Номенклатура
                  |
                  |ГДЕ
                  |    (НЕ(Номенклатура.Ссылка.ЭтоГруппа)) И
                  |    (НЕ(Номенклатура.Ссылка.Набор)) И
                  |    Номенклатура.Ссылка В ИЕРАРХИИ(&Группы)
                  |
                  |ОБЪЕДИНИТЬ ВСЕ
                  |
                  |ВЫБРАТЬ
                  |    КомплектующиеНоменклатуры.Комплектующая,
                  |    &ПроцентСкидкиНаценки,
                  |    &ОграничениеСкидкиНаценки
                  |ИЗ
                  |    РегистрСведений.КомплектующиеНоменклатуры КАК КомплектующиеНоменклатуры
                  |
                  |ГДЕ
                  |    (НЕ(КомплектующиеНоменклатуры.Номенклатура.Ссылка.ЭтоГруппа)) И
                  |    ((КомплектующиеНоменклатуры.Номенклатура.Ссылка.Набор)) И
                  |    (КомплектующиеНоменклатуры.Номенклатура.Ссылка В ИЕРАРХИИ (&Группы))";

   Запрос = Новый Запрос;
   Запрос.Текст = ТекстЗапроса;
   Запрос.УстановитьПараметр("Группы", Группы);
   Запрос.УстановитьПараметр("ПроцентСкидкиНаценки", ПроцентСкидкиНаценки);
   Запрос.УстановитьПараметр("ОграничениеСкидкиНаценки", ОграничениеСкидкиНаценки);

   ТаблицаТоваров = Запрос.Выполнить().Выгрузить();

   Добавить = Ложь;
   мСтруктураПараметров.Свойство("Добавить",                        Добавить);
   КачествоПустой = Справочники.Качество.ПустаяСсылка();
   Если Добавить = Неопределено Или НЕ Добавить Тогда

       ТаблицаТоваров.Колонки.Добавить("Качество");
       ТаблицаТоваров.ЗаполнитьЗначения(КачествоПустой, "Качество");
       Товары.Загрузить(ТаблицаТоваров);
   Иначе
       ТаблицаПроверкиДублей = Товары.Выгрузить();
       Сообщить(Товары.Количество());
       Для Каждого СтрокаДобавления ИЗ ТаблицаТоваров Цикл
           Если ТаблицаПроверкиДублей.Найти(СтрокаДобавления.Номенклатура, "Номенклатура") = Неопределено Тогда
               СтрокаТовара = Товары.Добавить();
               СтрокаТовара.Номенклатура = СтрокаДобавления.Номенклатура;
               СтрокаТовара.Качество = КачествоПустой;
               Сообщить("добавление");
           КонецЕсли;
       КонецЦикла;
   КонецЕсли;
   
КонецПроцедуры
4 R0m1n
 
18.03.13
10:55
код тупо скопирован с обработки заполнения документа "Установка скидок номенклатуры", как и вся форма заполнения. Просто убрал чтобы переносились только строки без процентов наценки пока. Строки в таблице товаров есть проверял: сообщить("добавление").
5 Maxus43
 
18.03.13
10:55
Добавить = Ложь;
  Если Добавить = Неопределено Или НЕ Добавить Тогда

это вот зачем вобще?
З.ы. Товары.Загрузить(ТаблицаТоваров) - Товары там не ТЧ реализации. Форма другая же
6 pessok
 
18.03.13
10:58
(5) ему б не загружать, а все же в цикле Добавить(), скорее всего
7 Reset
 
18.03.13
11:00
(4) >> тупо скопирован с обработки
В той обработке так и написано:
                  |ГДЕ
                  |    (НЕ(Номенклатура.Ссылка.ЭтоГруппа)) И
                  |    (НЕ(Номенклатура.Ссылка.Набор)) И
8 R0m1n
 
18.03.13
11:02
(7) Ну и что? я вообще смысла не вижу запрос обсуждать - там все нормально, строки выбираются как надо. Мне непонятно почему я к ТЧ "Товары" не могу обратиться?
9 pessok
 
18.03.13
11:03
(8) ВладелецФормы.Товары.Загрузить(ТаблицаТоваров)
10 Галахад
 
гуру
18.03.13
11:04
Попробуй так:
//        ТаблицаТоваров.Колонки.Добавить("Качество");
//        ТаблицаТоваров.ЗаполнитьЗначения(КачествоПустой, "Качество");
11 ZaprosMan
 
18.03.13
11:06
В результате запроса есть что то?
Данные есть? выбирает запрос?
12 Reset
 
18.03.13
11:10
(8) Нет, в запросе просто характерен подход - через опу, без понимания происходящего и без желания понять.
13 R0m1n
 
18.03.13
11:10
(11) есть. я же говорю проблема не в этом. проблема в том что я к "Товары" вообще не могу обратиться. в документе "Установка скидок номенклатуры" при использовании аналогичной обработки Сообщить(Товары.Количество())выдает количество строк в табличной части документа. А в реализации у меня 0 выкидывает, даже если что то там есть. в этом проблема.
14 pessok
 
18.03.13
11:11
(13) ты (9) пробовал?
15 R0m1n
 
18.03.13
11:12
(14) значение не явяется значением объектного типа(Товары)
16 Reset
 
18.03.13
11:13
(15) Вот этот код покажи
"из командной панели открываем форму модально, "
и где находится эта командна панель, не мешало бы
17 Reset
 
18.03.13
11:14
и что такое Товары в (3), поясни
18 pessok
 
18.03.13
11:15
(17) меня тоже смутило, такое ощущение, что в (3) никаких кривых форм не открывается, а просто идет обработчик, как везде
19 R0m1n
 
18.03.13
11:15
(17) Табличная часть "Товары" документа "реализация товаров услуг"
20 Reset
 
18.03.13
11:15
Зря я воелз, я даже проблему непонимаю :)
"проблема в том что я к "Товары" вообще не могу обратиться" tt
21 Reset
 
18.03.13
11:16
(19) Процедура из (3) где находится?
22 R0m1n
 
18.03.13
11:17
Процедура КоманднаяПанельТоварыДобавитьИзГруппы(Кнопка)
   // Процедура вызывается при нажатии кнопки "Заполнить" командной панели
// табличного поля "Товары".
//
   ЗаполнитьТовары(Истина, "Группа");

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

// Осуществляет вызов формы заполнения табличной части документа
//
// Параметры:
//  Добавить            - Истина - добавить, Ложь - заполнить с предворительной очисткой,
//  ОснованиеЗаполнения - строка "Группа" или "Поставщик".
//
Процедура ЗаполнитьТовары(Добавить, ОснованиеЗаполнения)

   Если Товары.Количество() > 0 И НЕ Добавить Тогда

       ТекстВопроса = "Перед заполнением табличная часть будет очищена. Заполнить?";
       Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет, 60, КодВозвратаДиалога.Да, Метаданные().Представление());
       Если Ответ <> КодВозвратаДиалога.Да Тогда
           Возврат;
       КонецЕсли;

   КонецЕсли;

   Если ОснованиеЗаполнения = "Группа" Тогда

       // Теперь нужно выбрать группу, по которой будем заполнять.
       ФормаЗаполнения = ПолучитьФорму("ФормаЗаполнения");
       
       ФормаЗаполнения.мСтруктураПараметров = Новый Структура("Добавить", Добавить);

       ФормаЗаполнения.Заголовок   = "Выберите группу справочника ""Номенклатура"" для заполнения табличной части документа ""Установка скидок""";

       Группа = ФормаЗаполнения.ОткрытьМодально();

   КонецЕсли;

КонецПроцедуры // ЗаполнитьТовары()
23 R0m1n
 
18.03.13
11:17
(21) в модуле формы, той которую модально открываю
24 pessok
 
18.03.13
11:18
(23) а в первоначальном варианте где находилась?
25 R0m1n
 
18.03.13
11:18
там же
26 pessok
 
18.03.13
11:18
(22) воооооот. не было там никакой кривой формы, а ты придумал свой велосипед. раз открываешь новую форму, то делай как в (9). А лучше тупо откажись от ненужной лишней сущности
27 pessok
 
18.03.13
11:19
(26) а, была форма. притом форма добавлена в сам документ, жуть какая
28 cw014
 
18.03.13
11:19
ТС, если в группе - товары, тогда можешь сделать через набор и не париться
29 R0m1n
 
18.03.13
11:20
(26) так не работает же - я написал.
30 R0m1n
 
18.03.13
11:21
(28) в 10.2 наборов вроде и нету
31 cw014
 
18.03.13
11:22
(30) Дааа, древностью балуетесь
32 pessok
 
18.03.13
11:22
(29) потому что при получении формы не задал владельца
33 R0m1n
 
18.03.13
11:25
(32) так он же вроде автоматом назначается - я же форму модально открываю из другой, разве нет?
34 cw014
 
18.03.13
11:25
(33) Разве нет...
35 pessok
 
18.03.13
11:25
(33) что у тебя в ВладелецФормы по отладчику?
36 R0m1n
 
18.03.13
11:28
пусто
37 R0m1n
 
18.03.13
11:28
почему пусто-то?
38 Reset
 
18.03.13
11:29
Если хочушь тупо, как ты любишь - указывай владельца при создании формы и (9)
39 R0m1n
 
18.03.13
11:29
из за этого связь и не устанавливается с товарами
40 cw014
 
18.03.13
11:29
(37) Ааааааааааа, почему пусто? Кошмар....

Потому что не указал, смотри в СП синтаксис ПолучитьФорму и ОткрытьФорму
41 Reset
 
18.03.13
11:30
Еще загадка - должно было в (3) говорить что переменная Товары не определена
42 Reset
 
18.03.13
11:31
(39) Форма, в которой процедура (3) - создавалась как "форма документа" или как "произвольная форма"
43 Reset
 
18.03.13
11:31
?
44 pessok
 
18.03.13
11:31
(41) да не открывается там форма наверняка, идет форма выбора номенклатуры по группам и сразу обработка, как пить дать
45 R0m1n
 
18.03.13
11:32
я её вообще тупо с установки скидок номенклатуры перетащил прямо и все. так она произвольная сама по себе
46 Reset
 
18.03.13
11:33
(45) kek
47 Reset
 
18.03.13
11:37
Поэтому и (41).
Скопировалась как форма документа-объекта установки скидок (оттуда и товары)
48 Reset
 
18.03.13
11:37
Копипастеры хреновы
49 pessok
 
18.03.13
11:37
+(47) а ДокументОбъект само собой пустой
50 Reset
 
18.03.13
11:38
(49) Ну да, новый. Его автор самоотверженно и заполняет
51 R0m1n
 
18.03.13
11:43
короче в коде установил владельца, запахало
ФормаЗаполнения = ПолучитьФорму("ФормаЗаполнения", ЭтаФорма);

только все равно не пойму почему в установке скидок номенклатуры все нормально работает? где то там привязка выставлена?
52 pessok
 
18.03.13
11:44
(51) потому что гладиолус. когда ты скопировал форму, у тебя и Объект-основание скопировался. Можно изменить объект-основание самой формы и не юзать владельца
53 Галахад
 
гуру
18.03.13
11:45
(51) Зайди в "Свойства" формы.
54 R0m1n
 
18.03.13
11:45
я заходил - ничё не увидел. щас еще раз проверю
55 pessok
 
18.03.13
11:46
ты там должен был увидеть Объект: ДокументОбъект.УстановкаСкидокНоменклатуры
56 R0m1n
 
18.03.13
11:49
блин все равно не вижу. щелкаю правой кнопкой по "ФормаЗапонения" - свойства, правильно? Там только Имя, Синоним, Комментарий и ТипФормы. нету больше ничё
57 R0m1n
 
18.03.13
11:50
да и вообще, я поиск ссылок на другие объекты сделал перед тем как копировать - он мне ничё не выдал. чё за шляпа? где эти скрытые реквизиты?
58 cw014
 
18.03.13
11:50
(56) А теперь попробуй внизу формы ткнуть "реквизиты"
59 cw014
 
18.03.13
11:50
(56) Иногда помогает
60 Галахад
 
гуру
18.03.13
11:55
(56) Ну тыкне по форме еще раз или два.
61 R0m1n
 
18.03.13
11:55
(59) нашел, спасибо всем. в свое оправдание могу сказать, что я сразу написал что копировал подчистую всю форму. так и знал что реквизит какой нибудь поганый где нибудь не выставлен. а поиск ссылок сейчас нормально сработал почему-то - видимо руки выпрямились)
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс