Элемент таблицы значений - таблица значений
17.05.2004
07:19
#1
Необходимо загнать в таблицу значения данные документа. Естественно как шапку, так и табличную часть. Подскажите, плз, как лучше это сделать, не нашёл нигде примера.
18.05.2004
00:02
#2
а собственно ТЗ умеешь создавать и с ней работать? и зачем это понадобилось шапку в ТЗ "загонять"? в табличной части у тебя несколько строк, а шапка - она шапка и есть, там конечное число реквизитов...
18.05.2004
04:49
#3
С ТЗ работаю без проблем. Но выборка должна делаться по табличной части, шапка лишь для распознавания определённого документа. Хотя может ты и прав. Просто получится дублирование шапки документа в каждой строке таблицы.
18.05.2004
12:04
#4
так это просто дополнительная колонка "Документ", а потом к любому реквизиту шапки обратишься :]
25.05.2004
06:42
#5
Мне как раз надо обратится к любому реквизиту табличной части через шапку. А шапку желательно иметь в единственном экземпляре, что бы избежать путаницы и лишней обработки
25.05.2004
08:10
#7
Да не то что бы... Просто пока не знаю, с какого конца приступить. Я ведь затеял это что бы лишних циклов в циклах избежать. Тз позволяет выборку по поиску делать, без перебора всей таблицы. Вот теперь думаю, как это поиск организовать сначала в основной ТЗ, а затем во вложенной.
26.05.2004
11:26
#8
"Вот что я сделал:
Запрос = СоздатьОбъект("Запрос");
ТЗ= "//{{ЗАПРОС(ТЗ)
|Период С датаНН ПО датаКК;
|ОбрабатыватьДокументы Все;
|Док = Документ.Карточка.ТекущийДокумент;
|ВесБ = Документ.Карточка.ВесБ;
|НаименованиеБлюда = Документ.Карточка.НаименованиеБлюда;
|Продукт = Документ.Карточка.Продукт;
|Порции = Документ.Карточка.Порции;
|НомерСтр = Документ.Карточка.ТекущийДокумент.НомерСтроки;
|Группировка Док упорядочить по Док.ТекущийДокумент;
|Группировка НомерСтр;
|Условие(ПустаяСтрока(НаименованиеБлюда)=0);";
ТЗ = ТЗ+"
|"//}}ЗАПРОС
;
если Запрос.Выполнить(ТЗ)=0 тогда
Сообщить("Ошибка в запросе!","!");
Возврат;
конецесли;
//-----------------------------------------------------------------
пока Запрос.Группировка(1)=1 Цикл
ШапкаДокумента.НоваяСтрока();
ШапкаДокумента.Документ = Запрос.Док;
ШапкаДокумента.Порции = Запрос.Порции;
ШапкаДокумента.НаименованиеБлюда = СокрЛП(Запрос.НаименованиеБлюда);
ШапкаДокумента.СтрокаДокумента = СоздатьОбъект("ТаблицаЗначений");
ШапкаДокумента.СтрокаДокумента.НоваяКолонка("Продукт", "Строка");
ШапкаДокумента.СтрокаДокумента.НоваяКолонка("КодПродукта", "Документ.Продукт.Код");
ШапкаДокумента.СтрокаДокумента.НоваяКолонка("ВесБ", "Документ.ВесБ");
пока Запрос.Группировка(2)=1 Цикл
ШапкаДокумента.СтрокаДокумента.НоваяСтрока();
ШапкаДокумента.СтрокаДокумента.КодПродукта = Запрос.Продукт.Код;
ШапкаДокумента.СтрокаДокумента.Продукт = СокрЛП(Запрос.Продукт);
ШапкаДокумента.СтрокаДокумента.ВесБ = Запрос.ВесБ;
конеццикла;
конеццикла;
//-----------------------------------------------------------------
Запрос1 = СоздатьОбъект("Запрос");
ТЗ1= "//{{ЗАПРОС(ТЗ)
|Элем = Справочник.Продукты.ТекущийЭлемент;
|Наименование = Справочник.Продукты.Наименование;
|БазаЕдИзм = Справочник.Продукты.БазаЕдИзм;
|Группировка Элем;
|условие (Элем.ЭтоГруппа()=0);";
ТЗ = ТЗ1+"
|"//}}ЗАПРОС
;
если Запрос1.Выполнить(ТЗ1)=0 тогда
Сообщить("Ошибка в запросе!","!");
Возврат;
конецесли;
//---------------------------------------------------------------------
Далее идёт выборка:
пока Запрос1.Группировка(1)=1 Цикл
если ШапкаДокумента.НайтиЗначение(СокрЛП(ПриемПищи[сч]),Стрк,Клнк) = 1 тогда
сообщить("Стрк "+Стрк);
сообщить("Клнк "+Клнк);
ШапкаДокумента.ПолучитьСтрокуПоНомеру(Стрк);
ШапкаДокумента.СтрокаДокумента.НайтиЗначение(СокрЛПЗапрос1.Наименование),СтркСтрока,КлнкСтрока);
сообщить("СтркСтрока "+СтркСтрока);
сообщить("КлнкСтрока "+КлнкСтрока);
СтркСтрока = """";
КлнкСтрока = """";
конецесли;
конеццикла;
Всё конечно сокращённо, но по сути, по-моему, ясно.
Так вот, выборка Стрк и Клнк происходит, а вот СтркСтрока и КлнкСтрока нет
Подскажите, плз, что я не так делаю."
Запрос = СоздатьОбъект("Запрос");
ТЗ= "//{{ЗАПРОС(ТЗ)
|Период С датаНН ПО датаКК;
|ОбрабатыватьДокументы Все;
|Док = Документ.Карточка.ТекущийДокумент;
|ВесБ = Документ.Карточка.ВесБ;
|НаименованиеБлюда = Документ.Карточка.НаименованиеБлюда;
|Продукт = Документ.Карточка.Продукт;
|Порции = Документ.Карточка.Порции;
|НомерСтр = Документ.Карточка.ТекущийДокумент.НомерСтроки;
|Группировка Док упорядочить по Док.ТекущийДокумент;
|Группировка НомерСтр;
|Условие(ПустаяСтрока(НаименованиеБлюда)=0);";
ТЗ = ТЗ+"
|"//}}ЗАПРОС
;
если Запрос.Выполнить(ТЗ)=0 тогда
Сообщить("Ошибка в запросе!","!");
Возврат;
конецесли;
//-----------------------------------------------------------------
пока Запрос.Группировка(1)=1 Цикл
ШапкаДокумента.НоваяСтрока();
ШапкаДокумента.Документ = Запрос.Док;
ШапкаДокумента.Порции = Запрос.Порции;
ШапкаДокумента.НаименованиеБлюда = СокрЛП(Запрос.НаименованиеБлюда);
ШапкаДокумента.СтрокаДокумента = СоздатьОбъект("ТаблицаЗначений");
ШапкаДокумента.СтрокаДокумента.НоваяКолонка("Продукт", "Строка");
ШапкаДокумента.СтрокаДокумента.НоваяКолонка("КодПродукта", "Документ.Продукт.Код");
ШапкаДокумента.СтрокаДокумента.НоваяКолонка("ВесБ", "Документ.ВесБ");
пока Запрос.Группировка(2)=1 Цикл
ШапкаДокумента.СтрокаДокумента.НоваяСтрока();
ШапкаДокумента.СтрокаДокумента.КодПродукта = Запрос.Продукт.Код;
ШапкаДокумента.СтрокаДокумента.Продукт = СокрЛП(Запрос.Продукт);
ШапкаДокумента.СтрокаДокумента.ВесБ = Запрос.ВесБ;
конеццикла;
конеццикла;
//-----------------------------------------------------------------
Запрос1 = СоздатьОбъект("Запрос");
ТЗ1= "//{{ЗАПРОС(ТЗ)
|Элем = Справочник.Продукты.ТекущийЭлемент;
|Наименование = Справочник.Продукты.Наименование;
|БазаЕдИзм = Справочник.Продукты.БазаЕдИзм;
|Группировка Элем;
|условие (Элем.ЭтоГруппа()=0);";
ТЗ = ТЗ1+"
|"//}}ЗАПРОС
;
если Запрос1.Выполнить(ТЗ1)=0 тогда
Сообщить("Ошибка в запросе!","!");
Возврат;
конецесли;
//---------------------------------------------------------------------
Далее идёт выборка:
пока Запрос1.Группировка(1)=1 Цикл
если ШапкаДокумента.НайтиЗначение(СокрЛП(ПриемПищи[сч]),Стрк,Клнк) = 1 тогда
сообщить("Стрк "+Стрк);
сообщить("Клнк "+Клнк);
ШапкаДокумента.ПолучитьСтрокуПоНомеру(Стрк);
ШапкаДокумента.СтрокаДокумента.НайтиЗначение(СокрЛПЗапрос1.Наименование),СтркСтрока,КлнкСтрока);
сообщить("СтркСтрока "+СтркСтрока);
сообщить("КлнкСтрока "+КлнкСтрока);
СтркСтрока = """";
КлнкСтрока = """";
конецесли;
конеццикла;
Всё конечно сокращённо, но по сути, по-моему, ясно.
Так вот, выборка Стрк и Клнк происходит, а вот СтркСтрока и КлнкСтрока нет
Подскажите, плз, что я не так делаю."
Читают тему
(гостей: 1)