Построитель-Ошибка -(Текст) |
Я |
11.08.06 — 18:22
Постановка:
1. Текст запроса Построителя в модуле объекта
2. В модуле формы наращиваю запрос (условия)
При ПОВТОРНОМ «Сформировать» имею:
Ошибка при установке значения атрибута контекста (Текст)
Помогите….дереву дремучему
1 — 11.08.06 — 18:25
Неправильный код значит, в коде ищи ошибку
2 — 11.08.06 — 18:47
Краткость не удалась(таланту нет)
ТЕКСТ В модуле
Построитель.Текст =
«ВЫБРАТЬ
| Продажи.Номенклатура,
| Продажи.Регистратор,
| Продажи.Количество КАК Количество,
| Продажи.Стоимость КАК СУММА,
| Продажи.ДокументПродажи.Контрагент,
| Продажи.ДокументПродажи.Дата,
| Продажи.ДокументПродажи.Номер
|ИЗ
| РегистрНакопления.Продажи КАК Продажи
|ГДЕ
| Продажи.ДокументПродажи.Проведен
| И Продажи.Период > &НачПериода
| И Продажи.Период < &КонПериода
|»;
текст в форме:
Если ЗначениеНеЗаполнено(ВводНоменклатура) Тогда
Предупреждение («НЕ указана Номенклатура»);
Иначе
Построитель.Текст = Построитель.Текст + »
| И Продажи.Номенклатура = &Номенклатура
|ИТОГИ
| СУММА(Количество)
|ПО
| ОБЩИЕ
|»;
при первом «Сформировать» очень хорошо выполняет
а при ПОВТОРНОМ
тыкает в форму на строчку
Построитель.Текст = Построитель.Текст + »
| И Продажи.Номенклатура = &Номенклатура
воть…
ЗЫ. Это я про 8-ку писала, но ловкость рук…… можно перенести?
3 — 11.08.06 — 18:55
И сколько раз ты собираешься наращивать текст построителя?
4 — 11.08.06 — 19:00
Есть ограничения?
когда я делала этот отчет НЕ Построителем… вопроса не возникала…
а мне Построитель нравится… как обойти ошибку, а?
5 — 11.08.06 — 19:02
Что, ты больше одного раза добавляла
| И Продажи.Номенклатура = &Номенклатура
|ИТОГИ
| СУММА(Количество)
|ПО
| ОБЩИЕ
|»;
и у тебя все работало?!
6 — 11.08.06 — 19:10
да
текст запроса был в форме
и в начале стояло
Процедура КнопкаСформироватьНажатие(Кнопка)
Запрос = Новый Запрос;
…..
чудненьк Фсё получалось…
7 — 11.08.06 — 19:23
Мда, может я конечно ошибаюсь, но все-таки женщинам как правило лучше не заниматься программированием, мозг у них как-то по другому устроен :o)
Строка
Запрос = Новый Запрос;
создает НОВЫЙ объект, у которого НИКАКОГО текста еще нет, поэтому текст запроса ессно НЕ наращивается
а Построитель.Текст = …
НЕ создает нового объекта, а поэтому его текст после первого прибавления второй раз уже работать не будет :o)
8 — 11.08.06 — 19:27
Это ты, конечно, верно подметил… про мозги… ЗАЧЕМ по твоему я тебе эту строчку написала?!
переведу вопрос
КАК ТАКОЕ НАПИСАТЬ С ПОСТРОИТЕЛЕМ
9 — 11.08.06 — 19:30
(8) Очень просто. Например так.
Если ЗначениеНеЗаполнено(ВводНоменклатура) Тогда
Предупреждение («НЕ указана Номенклатура»);
Возврат;
КонецЕсли;
Построитель.Текст =
«ВЫБРАТЬ
| Продажи.Номенклатура,
| Продажи.Регистратор,
| Продажи.Количество КАК Количество,
| Продажи.Стоимость КАК СУММА,
| Продажи.ДокументПродажи.Контрагент,
| Продажи.ДокументПродажи.Дата,
| Продажи.ДокументПродажи.Номер
|ИЗ
| РегистрНакопления.Продажи КАК Продажи
|ГДЕ
| Продажи.ДокументПродажи.Проведен
| И Продажи.Период > &НачПериода
| И Продажи.Период < &КонПериода
| И Продажи.Номенклатура = &Номенклатура
|ИТОГИ
| СУММА(Количество)
|ПО
| ОБЩИЕ
|»;
10 — 11.08.06 — 19:33
если не задана Номенклатура нужно вывести ВСЁ а если задана, то по конкретной позиции…
11 — 11.08.06 — 19:36
Наташа, вы меня извините, но я бы вам порекомендовал срочно подучиться или чем-нить другим заняться :o)
Без обид, просто констатация факта :o)
Если ЗначениеНеЗаполнено(ВводНоменклатура) Тогда
Предупреждение («НЕ указана Номенклатура»);
Построитель.Текст =
«ВЫБРАТЬ
| Продажи.Номенклатура,
| Продажи.Регистратор,
| Продажи.Количество КАК Количество,
| Продажи.Стоимость КАК СУММА,
| Продажи.ДокументПродажи.Контрагент,
| Продажи.ДокументПродажи.Дата,
| Продажи.ДокументПродажи.Номер
|ИЗ
| РегистрНакопления.Продажи КАК Продажи
|ГДЕ
| Продажи.ДокументПродажи.Проведен
| И Продажи.Период > &НачПериода
| И Продажи.Период < &КонПериода
|»;
Иначе
Построитель.Текст =
«ВЫБРАТЬ
| Продажи.Номенклатура,
| Продажи.Регистратор,
| Продажи.Количество КАК Количество,
| Продажи.Стоимость КАК СУММА,
| Продажи.ДокументПродажи.Контрагент,
| Продажи.ДокументПродажи.Дата,
| Продажи.ДокументПродажи.Номер
|ИЗ
| РегистрНакопления.Продажи КАК Продажи
|ГДЕ
| Продажи.ДокументПродажи.Проведен
| И Продажи.Период > &НачПериода
| И Продажи.Период < &КонПериода
| И Продажи.Номенклатура = &Номенклатура
|ИТОГИ
| СУММА(Количество)
|ПО
| ОБЩИЕ
|»;
КонецЕсли;
12 — 11.08.06 — 19:37
Я как раз учусь
13 — 11.08.06 — 19:39
(12) Тогда вы рано начали задавать вопросы на форуме, такую элементарщину нужно читать в ЖКК (документация) и на дисках ИТС.
А вообще лучшая школа — это 1С франчайзи, устройтесь в какой-нить, там научат :o)
14 — 11.08.06 — 19:42
малиновые штаны? ну тогда
КУуууу
15 — 11.08.06 — 19:48
(14) Нет, просто подсказки на форуме как правило ничему не учат, люди через минуту забывают то, что им сказали, потому что они НЕ ПОНИМАЮТ этого, они просто тупо переписывают код, который им написали :o)
Да и почему в среде одинэсников считается, что прочитать несколько жалких книжек — себя не уважать и всегда успеется? Почему бы не потратить месяц на самообучение?
16 — 11.08.06 — 19:52
Я форум очень внимательно читаю (и перечитываю) и ссылку твою по Построителю распечатала и N-ского захода прониклась
но другой литературы кроме ПС и твоей статьи где бы для «особенных Ламеров» ( к коим я себя отношу) нет.
поэтому решила спросить
17 — 11.08.06 — 20:00
и это……
ТВОЙ ПРИМЕР не работает
и не потому, что я чего то не понимаю….
18 — 11.08.06 — 20:05
(17) Если он не работает, то он не у меня не работает, так как я всего лишь показал принцип, верность текста запроса я ессно не проверял, как я могу его проверить :o)
19 — 14.08.06 — 12:13
Прочитав еще раз ТВОЙ трактат таки сдела..
НО (учитывая, что мозг мой женский) не стала плодить как ты предлагал запросы а упрямо нарашиваю имеющийся
всё работает. ты был прав (конечно прав) не имеет значение где в модуле или в форме.
20 — 14.08.06 — 12:16
Про женщин в (7) не согласен. Видел множество мужских примеров, куда более вопиющих.
21 — 14.08.06 — 14:10
(20) Из всякого правила…
22 — 14.08.06 — 14:12
(19) Поздравляю.
Хотя, если запрос не наращивается, а один раз делается либо таким, либо таким (а так и есть, судя по твоим постам), то мне кажется более логичным задание его одним блоком, хотя бы потому, что его можно редактировать в конструкторе
23 — 14.08.06 — 14:14
Построитель.Текст = "ВЫБРАТЬ | Продажи.Номенклатура, | Продажи.Регистратор, | Продажи.Количество КАК Количество, | Продажи.Стоимость КАК СУММА, | Продажи.ДокументПродажи.Контрагент, | Продажи.ДокументПродажи.Дата, | Продажи.ДокументПродажи.Номер |ИЗ | РегистрНакопления.Продажи КАК Продажи |ГДЕ | Продажи.ДокументПродажи.Проведен | И Продажи.Период > &НачПериода | И Продажи.Период < &КонПериода |{ |ГДЕ | Продажи.Номенклатура КАК Номенклатура |} |ИТОГИ | СУММА(Количество) |ПО | ОБЩИЕ |"; ЭлОтбора = Построитель.Отбор.Добавить("Номенклатура"); ЭлОтбора.Значение = ВводНоменклатура; ЭлОтбора.Использование = НЕ ЗначениеНеЗаполнено(ВводНоменклатура);
24 — 14.08.06 — 20:33
(23)
Красиво как получается.
Спасибо.
25 — 16.08.06 — 14:08
Эх…. признаю…. туплю…. ну туплю! Что тут сказать?
По порядку.
ПостроительОтчета является реквизитом отчета
На форме сделала табличное поле
Данные:ПостроительОтчета.Порядок
тип значения: Порядок
(тест запроса находится в Форме)
не работает (не добавить, не изменить)
Построитель = Новый ПостроительОтчета;
Построитель.Текст =
«ВЫБРАТЬ
| Продажи.Номенклатура,
| Продажи.Регистратор,
| Продажи.Количество КАК Количество,
| Продажи.Стоимость КАК СУММА,
| Продажи.ДокументПродажи.Контрагент,
| Продажи.ДокументПродажи.Дата,
| Продажи.ДокументПродажи.Номер,
| Продажи.Регистратор.Ответственный.Ссылка
|{ВЫБРАТЬ
| Номенклатура.*,
| Регистратор.*,
| Количество,
| СУММА,
| ДокументПродажиКонтрагент.*,
| ДокументПродажиДата КАК ДокументПродажиДата,
| ДокументПродажиНомер,
| РегистраторОтветственныйСсылка.*}
|ИЗ
| РегистрНакопления.Продажи КАК Продажи
|ГДЕ
| Продажи.ДокументПродажи.Проведен
| И Продажи.Период > &НачПериода
| И Продажи.Период < &КонПериода
|{ГДЕ
| Продажи.Номенклатура КАК Номенклатура,
| Продажи.Регистратор.Ответственный.Ссылка КАК Менеджер}
|{УПОРЯДОЧИТЬ ПО
| ДокументПродажиНомер,
| ДокументПродажиДата,
| ДокументПродажиКонтрагент.*,
| СУММА,
| Количество}
|ИТОГИ
| СУММА(Количество)
|ПО
| ОБЩИЕ
|{ИТОГИ ПО
| СУММА}»;
Построитель.ЗаполнитьНастройки();
Построитель.Параметры.Вставить(«НачПериода», НачПериода );
Построитель.Параметры.Вставить(«КонПериода», КонПериода );
Построитель.Параметры.Вставить(«Номенклатура», ВНоменклатура);
ЭлОтбора = Построитель.Отбор.Добавить(«Номенклатура»);
ЭлОтбора.Значение = ВНоменклатура;
ЭлОтбора.Использование = НЕ ЗначениеНеЗаполнено(ВНоменклатура);
…..
26 — 17.08.06 — 12:48
УРА!!!!!!!!!!
сняла с тормоза!!!
(26) Поздравляю :))
Содержание:
1. Ошибка при установке значения атрибута контекста
2. Ошибка при получении значения атрибута контекста
Одной из наиболее частых ошибок исполнения кода 1С являются ошибки, связанные с установкой реквизита либо получением реквизита через точку, либо ошибка при вызове функции или процедуры через точку. Все данные объекты являются атрибутами информационных объектов-владельцев, к которым они принадлежат. Рассмотрим примеры таких ошибок и причины их возникновения.
1. Ошибка при установке значения атрибута контекста
Ошибка при установке значения атрибута контекста говорит нам о невозможности присвоить выбранное значение определенному атрибуту информационного объекта. Вызвано это либо несовпадением типа атрибута и присваиваемого ей значения, отсутствием возможности присвоить значение выбранному атрибуту, так как его можно только читать, но не записывать в него, отсутствием прав у текущего пользователя на запись значений в данный атрибут. Например, в реквизит «ДатаДокумента» с типом «Дата» пытаемся записать строку, в реквизит с типом данных ссылки на документ пытаемся записать не ссылку, а объект, полученный по ссылке, что невозможно из-за несоответствия типов, что приводит к ошибке установки значения атрибута.
Другой пример – проходя циклом выборку запроса, пытаемся в колонку выборки записать значение, что невозможно, так как значения выборки запроса можно только считывать, а для того, чтобы можно было полученные из запроса данные изменять в коде, нужно пользоваться не выборкой, а выгружать результат запроса в таблицу значений, в таком случае в цикле по ней можно будет менять значения в колонках, но только на значения, соответствующие типу колонки. Либо у пользователя, под которым выполняется код, нет прав на изменение даты документа, при попытке записать в данный реквизит новую дату, будет выведено сообщение об ошибке установке значения, но в причине будет указано отсутствие прав у пользователя.
2. Ошибка при получении значения атрибута контекста
Ошибка при получении значения атрибута контекста указывает на невозможность прочитать значение атрибута объекта в силу его отсутствия, либо отсутствия прав на его чтение. Например, обращение к несуществующему реквизиту объекта, несуществующему полю выборки из запроса, несуществующему свойству элемента формы и т.п. Так же как пример можно рассмотреть получение текущего пользователя из параметров сеанса — если данный параметр сеанса не установлен, то тоже будет выведена ошибка получения значения атрибута контекста, но в причине будет указана попытка получения неинициализированного значения параметра сеанса.
При возникновении данных ошибок значения атрибута в 1Св первую очередь следует проверить существование атрибута, к которому обращаются, затем проверить совпадение типов значений атрибута и присваиваемого ему значения, затем уже проверить права на установку либо чтение значения. Проверить, является ли дело в правах либо дать права на действия с атрибутом, можно, установив привилегированный режим для совершения действия с данным атрибутом, прописав перед строчкой с ошибкой УстановитьПривилегированныйРежим(Истина), после строчки — УстановитьПривилегированныйРежим(Ложь).
Специалист компании «Кодерлайн»
Александр Суворов
8.2 Проблема с временной таблицей в постоителе
- Подписаться на тему
- Сообщить другу
- Скачать/распечатать тему
|
|
Делаю запрос для построителя:
ТаблицаПервичныхДанных = Новый ТаблицаЗначений; ТаблицаПервичныхДанных.Колонки.Добавить(«ДатаВизитаМесяцСтрокой», Новый ОписаниеТипов(«Строка»)); УниверсальныйОтчет.ПостроительОтчета.Параметры.Вставить(«ТаблицаПервичныхДанных», ТаблицаПервичныхДанных); ТекстЗапроса = « |ВЫБРАТЬ | * |ПОМЕСТИТЬ | ПервичнаяТаблица |ИЗ | &ТаблицаПервичныхДанных КАК ТаблицаПервичныхДанныхВрем |; | |…….»; УниверсальныйОтчет.ПостроительОтчета.Текст = ТекстЗапроса;
Вываливается сообщение: Что делать не соображу, нужно поместить данные в первичную таблицу из таблицы значений для выполнения запроса, как это ещё можно сделать? |
Outlander |
|
Таблица Первичных данных должна быть жестко типизирована |
lastlogic |
|
Цитата Outlander @ 22.08.12, 14:25 должна быть жестко типизирована Сделал так:
КС = Новый КвалификаторыСтроки(10); Массив = Новый Массив; Массив.Добавить(Тип(«Строка»)); ОписаниеТиповС = Новый ОписаниеТипов(Массив, , КС); ТаблицаПервичныхДанных = Новый ТаблицаЗначений; ТаблицаПервичныхДанных.Колонки.Добавить(«ДатаВизитаМесяцСтрокой», ОписаниеТиповС, «ДатаВизитаМесяцСтрокой», 10); Не помогло, также ошибка. |
Outlander |
|
Выбрать * в этом случае тоже не катит надо явно именовать поля |
0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
0 пользователей:
- Предыдущая тема
- 1С: Проблемы и решения
- Следующая тема
[ Script execution time: 0,0532 ] [ 15 queries used ] [ Generated: 14.06.23, 03:20 GMT ]
Anhel
Постоялец |
Доброго времени суток! Не могу понять что делаю не так, подскажите что не правильно: ТаблицаДанных = ТЗ.Скопировать(); Выдает ошибку: {ВнешнийОтчет.Доставки.МодульОбъекта(253)}: Ошибка при установке значения атрибута контекста (Текст) по причине: |
||
|
Kivals |
По-моему так делать нельзя — нужно идти через МенеджерВременныхТаблиц. Вот пример для простого запроса (без построителя): // Сформируем запрос |
||
|
Anhel
Постоялец |
Спасибо за ответ. Получается что построитель не может использовать внешние таблицы как ТЗ? |
||
|
Kivals |
Да нет — мне кажется может. Просто сначала их нужно поместить во временную таблицу простым запросом (ВЫБРАТЬ * ПОМЕСТИТЬ ВременнаяТаблица ИЗ &ТаблицаДанных КАК ТаблицаДанных), а уже потом использовать ее (временную таблицу) в основном запросе. |
||
|
Anhel
Постоялец |
Не хочет так работать, пробовали МенеджеромВрТаб и временной таблицей, внешним источником данных, ругается и все. |
||
|
Anhel
Постоялец |
Сделал отчет через макет табличного документа. |
||
|
Ошибка при установке значения атрибута контекста (СписокВыбора)
Данная ошибка возникает при попытке установить полю с типом «СписокЗначений» значение неподходящего типа. Например: Неопределено.
Полная ошибка
Ошибка при установке значения атрибута контекста (СписокВыбора)
ЭлементыФормы.Поставщик.СписокВыбора = КЭШируемые.СписокПоставщиков(Контрагент);
по причине:
Несоответствие типов
Скриншот:
Причина: В функции, которая формировала данный список (КЭШируемые.СписокПоставщиков()) отсутствовал возврат значения.
В экспериментальных целях:
передал значение с типом «Массив» — текст ошибки не поменялся.
В итоге переписал на более универсальный метод ЗагрузитьЗначения() самого элемента диалога:
ЭлементыФормы.Поставщик.СписокВыбора.ЗагрузитьЗначения(КЭШируемые.СписокПоставщиков(Контрагент));
Реклама — искусство превращения полуправды в полную ложь.