Имя: Пароль:
1C
1С v8
Нужна помощь со структурой
,
0 pavelul73
 
20.09.12
12:28
Добрый день. Возникла вот такая проблема:
Через обработку создаю документ Установка цен номенклатуры
Часть кода:
Процедура СформироватьДокумент()
Док = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
ФормаВыбораЦен = Обработки.ФормированиеЦен.ПолучитьФорму("ФормаВыбораТипаЦен", ЭтаФорма);
СписокЦен = ФормаВыбораЦен.ОткрытьМодально();

СписокЦен получается структура с выбранными типами цен.
Вопрос в следующем, как передать эту структуру в документ, чтобы в нем заполнились эти типы цен?
Заранее спасибо за помощь.
Прошу сильно не "пинать", со структурами работал мало.
1 pavelul73
 
20.09.12
12:37
Никто не сталкивался?
2 Zmich
 
20.09.12
12:38
(0). Как у тебя эта структура формируется в самой обработке?
3 pavelul73
 
20.09.12
12:41
обращаюсь к обработке ФормированиеЦен, открываю ее модально, она возвращает структуру выбранных типов цен
4 pavelul73
 
20.09.12
12:42
к обработке ФормированиеЦен обращаюсь из своей обработки
5 pavelul73
 
20.09.12
12:53
Мне просто нужно, чтобы в документе установки цен были заполнены типы цен. Может можно как-то по другому?
6 ice777
 
20.09.12
12:53
Проще всего вниматено посмотреть код обработки ФормированиеЦен
7 pavelul73
 
20.09.12
13:00
А как можно выбрать данные из структуры? или передать ее в таблицу значений? или так нельзя?
8 pavelul73
 
20.09.12
13:10
Возвращаемая структура имеет список значений. Можно ли теперь передать этот список значений в документ. В документе типыцен - это также список значений.
9 Шапокляк
 
20.09.12
13:12
(8) В документе это табличная часть. Перебрать список и заполнить ТЧ не предлагать?
10 pavelul73
 
20.09.12
13:18
Там есть и ТЧ, но на самой форме документа - это список значений.
Скриншот:
http://narod.ru/disk/61290466001.6a4ebe99b03f82cfad6ab9b60ea2a357/установкацен.JPG.html
11 Шапокляк
 
20.09.12
13:23
Да пофиг что на форме, вы ж документ создаете!
12 pavelul73
 
20.09.12
13:38
(11)Не заполняет. Оставляет пустым.
13 hhhh
 
20.09.12
13:44
(12) а как заполняете?
14 1Сергей
 
20.09.12
13:46
15 pavelul73
 
20.09.12
13:46
Док = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
Для каждого строка из СписокТиповЦен Цикл
НЭлемент = Док.ТипыЦен.добавить();
НЭлемент.ТипЦен = Строка.Значение;
КонецЦикла;
//где списоктипов цен - список значений с выбранными типами цен. Этот список находится на форме обработки.
16 pavelul73
 
20.09.12
13:48
после этого записываю документ и открываю форму документа
17 pavelul73
 
20.09.12
13:49
(14) спасибо за ссылку
18 Шапокляк
 
20.09.12
13:55
(16) Отладчик показывает, что в вашей обработке СписокТиповЦен заполнен?
Отладчик показывает, что при открытии документа ТЧ ТипыЦен пустая?
Вы в (0) получаете структуру - там список заполнен? Если да, почему не его перебираете для заполнения в документ?
19 pavelul73
 
20.09.12
14:01
(18)Я на форме создал такое же поле как и в документе Установки цен. Его заполняю при открытии обработки:
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
   // Вставить содержимое обработчика.
   ФормаВыбораЦен = Обработки.ФормированиеЦен.ПолучитьФорму("ФормаВыбораТипаЦен", ЭтаФорма);
   МойТипЦен = ФормаВыбораЦен.ОткрытьМодально();
   СписокТиповЦен.Добавить(МойТипЦен.СписокТиповЦенСкидок);
КонецПроцедуры

Далее я создаю документ

Процедура СформироватьДокумент()

Док = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
Док.Дата = ТекущаяДата();
Док.Комментарий = "Введен из обработки Изменение цен номенклатуры";
для Каждого строка из СписокТиповЦен цикл
Нэлемент=Док.ТипыЦен.Добавить();
сообщить(строка.значение);
Нэлемент.ТипЦен = строка.значение;
конеццикла;
док.Записать();

Для каждого строка из Товары Цикл
ТчТовары = Док.Товары.Добавить();
ТчТовары.Номенклатура = Строка.Номенклатура;
ТчТовары.Цена = Строка.НоваяЦена;
ТчТовары.ЕдиницаИзмерения = Строка.Номенклатура.ЕдиницаХраненияОстатков;
КонецЦикла;
Попытка
Док.Записать();
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
ФормаДокумента = Док.ПолучитьФорму("ФормаДокумента");
ФормаДокумента.Открыть();
КонецПроцедуры

СписокЦен в форме обработки заполнен. список цен на форме обработки - такой же список значений как и в документе.
Когда я пытался заполнить список типов цен в документе вот таким образом:
Док.СписокТиповЦен.ДОбавить(МойСписокТиповЦен) Ругалется что не может найти список типов цен в документе хотя в конфигураторе в форме этого документа он прописан именно так.
Потом я попытался сделать по другому:
ФормаДокумента = Док.ПолучитьФорму("ФормаДокумента");
ФормаДокумента.СписокТиповЦен.Добавить(МойСписокТиповЦен); Тоже самое
20 pavelul73
 
20.09.12
14:03
уже прям и не знаю как еще можно заполнить список значений в документе, который создаю, имея такой же список значений заполненный в обработке.
21 pavelul73
 
20.09.12
14:07
По моему понятно в чем ошибка, когда я перебираю в цикле :
для каждого строка из списоктиповцен Цикл
строка.значение = списку значений

как можно перебрать список значений, чтобы получить каждый элемент отдельно?
22 Рэйв
 
20.09.12
14:07
(19)У тебя СписокТиповЦен - реквизит формы, а не объекта.  а ты ищешь его в объекте, судя по

Док.СписокТиповЦен

Естественно, что он его н находит.
23 Шапокляк
 
20.09.12
14:08
(19) я правильно поняла - вы получили структуру МойТипЦен = ФормаВыбораЦен.ОткрытьМодально();
и значение итой структуры - МойТипЦен.СписокТиповЦенСкидок - это список?
И вы его прямо так берете и добавляете как элемент списка в СписокТиповЦен? И программа не ругается?
и далее - вы в тчТовары добавляете строки. Почему вы там не указываете тип  цен?
Вы получаете форму пустого незаписанного документа. Открываете ее и там внезапно пусто.
24 Рэйв
 
20.09.12
14:09
(23)Она не доходит до того что бы начать ругаться:-))...Оно даже список найти не может:-)
25 pavelul73
 
20.09.12
14:11
(22) нет это я просто так пробовал сейчас через цикл.
Судя по всему нужно выгрузить этот список значений и записать все его значения в табличную часть документа
26 Рэйв
 
20.09.12
14:12
(25)Так будет проще всего.
27 Рэйв
 
20.09.12
14:12
(25)Только не выгружать, а перебирать.
28 pavelul73
 
20.09.12
14:14
(27) как его перебрать?
29 Шапокляк
 
20.09.12
14:14
(24) пардон, затупила. Когда все делается через задний проход сложно сориентироваться.
(21) Почему бы вам уже после открытия обработки не вызвать форму подбора типов цен? И не сохранить результат этого подбора в какой-то реквизит обработки или ее формы? В виде структуры или ее значения, которое список значений? А когда дойдет ход до создания документа, перебрать этот список и записать его в ТЧ документа.
Ну и тчТовары заполнять с указанием типов цен, т.е. если у вас типов цен несколько, то и каждому товару в тч товары должно соответствовать несколько строк с этими разными типами цен.
30 pavelul73
 
20.09.12
14:18
(29) да можно и так, так кажется намного проще, но как перебрать этот список значений?
что-то я совсем уже запутался с этим списком
31 Шапокляк
 
20.09.12
14:23
(30) ну хотя бы так
Кол=ТвойСписок.Количество()-1;
Если Кол>=0 Тогда
Для инд=0 по кол Цикл
Эл=ТвойСписок.Получить(инд);
Стр=ТвояТЧ.Добавить();
Стр.ТипЦен=Эл.Значение;
КонецЦикла;
КонецЕсли;
32 pavelul73
 
20.09.12
14:28
Пробовал я так, но он не перебирает их, поставил сообщить(Эл.Значение); вот что показывает:
закупочные; опт
т.е он их списком и показывает, а не по отдельности
33 Шапокляк
 
20.09.12
14:48
(32) невозможно понять, что за список вы перебираете!
Если у вас Эл.Значение - это список, то вы этот Эл.Значение и перебирайте. ТакойТоСписок=Эл.Значение. И вот этот ТакойТоСписок перебирайте.
Мне почему-то кажется, что на самом деле вам это не нужно, т.к. у вас есть некоторая таблица с колонками товар,Цена. Это так?
34 pavelul73
 
20.09.12
14:51
(32) нет это не так, если бы было так, я бы не спрашивал(
35 pavelul73
 
20.09.12
14:53
Всем спасибо за советы. проблему решил следующим образом:
Док = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
//заполнение шапки документа
//получение типов цен типовым образом
ФормаДокумента = Док.ПолучитьФорму("ФормаДокумента");
ФормаВыбораЦен = Обработки.ФормированиеЦен.ПолучитьФорму("ФормаВыбораТипаЦен", ФормаДокумента);
ФормаВыбораЦен.ОткрытьМодально();
//заполнение ТЧТовары
и далее уже заполняю документ нужными значениями для каждого типа цен.