Тип не определен (Запрос) Запрос = Новый <<?>>Запрос; (Проверка: Тонкий клиент) |
Я |
23.06.22 — 13:05
Таких тем здесь много, ответ понятен, нельзя на клиенте использовать: Запрос = Новый Запрос; Но вопрос не в этом. Обычно работаю с конфигурациями ОФ: Альфа-Авто, КА1 (УПП)… Везде использую общий модуль мвДоработки с галочками: Сервер, Клиент (обычное приложение), Внешнее соединение (в Альфа-Авто не использую), Вызов сервера. Когда в конфигурацию надо внести более 2-х строк, то пишу их в этот модуль в виде функции, а вызов этой функции вставляю в то место, где нужно внести изменение. Когда поддержка КА1 закончилась, сделал базу на КА2 (еще вроде на КА2.1), но в ней пока не работаем, обновляем КА1 УПП. В КА2 тоже сделал общий модуль мвДоработки с галочками: Клиент, Сервер, Внешнее соединение. В нем написал несколько функций (в УФ я начинающий). Среди них есть:
// Возвращает Истина, если у номенклатуры единственное наименование
//
Функция ЕдинственноеНаименованиеНоменклатуры(Номенклатура) Экспорт
Запрос = Новый Запрос;
Запрос.Текст = »
|ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Наименование = &Наименование»;
Запрос.УстановитьПараметр(«Наименование», Номенклатура.Наименование);
Выборка = Запрос.Выполнить().Выбрать();
Счетчик = 0;
Пока Выборка.Следующий() Цикл
Если Счетчик > 0 Тогда
Возврат Ложь;
КонецЕсли;
Счетчик = Счетчик + 1;
КонецЦикла;
Возврат Истина;
КонецФункции
// Возвращает полное наименование ключа аналитики номенклатуры
// без дублей по наименованию
Функция ПолучитьПолноеНаименованиеКлючаАналитикиНоменклатуры(МенеджерЗаписи) Экспорт
Попытка
НаименованиеСклада = СокрЛП(МенеджерЗаписи.МестоХранения);
Исключение
НаименованиеСклада = СокрЛП(МенеджерЗаписи.Склад);
КонецПопытки;
Наименование = СокрЛП(МенеджерЗаписи.Номенклатура) + ?(ЕдинственноеНаименованиеНоменклатуры(МенеджерЗаписи.Номенклатура), «», «, »
+ ?(ПустаяСтрока(МенеджерЗаписи.Номенклатура.Артикул), СокрЛП(МенеджерЗаписи.Номенклатура.Код), СокрЛП(МенеджерЗаписи.Номенклатура.Артикул))) + «; »
+ ?(ЗначениеЗаполнено(МенеджерЗаписи.Характеристика), СокрЛП(МенеджерЗаписи.Характеристика) + «; «, «»)
+ ?(ЗначениеЗаполнено(МенеджерЗаписи.Серия), СокрЛП(МенеджерЗаписи.Серия) + «; «, «»)
+ ?(ЗначениеЗаполнено(МенеджерЗаписи.Назначение), СокрЛП(МенеджерЗаписи.Назначение) + «; «, «»)
+ ?(ЗначениеЗаполнено(МенеджерЗаписи.СтатьяКалькуляции), СокрЛП(МенеджерЗаписи.СтатьяКалькуляции) + «; «, «»)
+ СокрНаименованиеСклада(НаименованиеСклада);
Если СтрДлина(Наименование) > 100 Тогда
Наименование = Лев(СокрЛП(МенеджерЗаписи.Номенклатура), СтрДлина(СокрЛП(МенеджерЗаписи.Номенклатура)) — СтрДлина(Наименование) + 97) + «…»
+ ?(ЕдинственноеНаименованиеНоменклатуры(МенеджерЗаписи.Номенклатура), «», «, »
+ ?(ПустаяСтрока(МенеджерЗаписи.Номенклатура.Артикул), СокрЛП(МенеджерЗаписи.Номенклатура.Код), СокрЛП(МенеджерЗаписи.Номенклатура.Артикул))) + «; »
+ ?(ЗначениеЗаполнено(МенеджерЗаписи.Характеристика), СокрЛП(МенеджерЗаписи.Характеристика) + «; «, «»)
+ ?(ЗначениеЗаполнено(МенеджерЗаписи.Серия), СокрЛП(МенеджерЗаписи.Серия) + «; «, «»)
+ ?(ЗначениеЗаполнено(МенеджерЗаписи.Назначение), СокрЛП(МенеджерЗаписи.Назначение) + «; «, «»)
+ ?(ЗначениеЗаполнено(МенеджерЗаписи.СтатьяКалькуляции), СокрЛП(МенеджерЗаписи.СтатьяКалькуляции) + «; «, «»)
+ СокрНаименованиеСклада(НаименованиеСклада);
КонецЕсли;
Возврат Наименование;
КонецФункции
которая вызывается из РС АналитикаУчетаНоменклатуры:
Функция ПолучитьПолноеНаименованиеКлючаАналитики(МенеджерЗаписи)
Возврат мвДоработки.ПолучитьПолноеНаименованиеКлючаАналитикиНоменклатуры(МенеджерЗаписи); //+МВ 12.05.2019
// Возврат СокрЛП(МенеджерЗаписи.Номенклатура) + «; »
// + ?(ЗначениеЗаполнено(МенеджерЗаписи.Характеристика), СокрЛП(МенеджерЗаписи.Характеристика) + «; «, «»)
// + ?(ЗначениеЗаполнено(МенеджерЗаписи.Серия), СокрЛП(МенеджерЗаписи.Серия) + «; «, «»)
// + ?(ЗначениеЗаполнено(МенеджерЗаписи.Назначение), СокрЛП(МенеджерЗаписи.Назначение) + «; «, «»)
// + ?(ЗначениеЗаполнено(МенеджерЗаписи.СтатьяКалькуляции), СокрЛП(МенеджерЗаписи.СтатьяКалькуляции) + «; «, «»)
// + СокрЛП(МенеджерЗаписи.МестоХранения);
КонецФункции
В данном случае галочка Клиент на мвДоработки не нужна, но можно ли ее убрать? Наверное это зависит от других функций модуля. Как навскидку определить: может ли функция выполняться только на клиенте? Вопрос наверное глупый, но в УФ я начинающий. Убрал галочку Клинт — ошибка: Тип не определен (Запрос) исчезла. Потом вернул ее, сохранил конфигурацию, ошибка не появилась!? Раньше она появлялась, до обновления на 2.5.8.221.
Модератор
1 — 23.06.22 — 13:08
в тонком клиенте нет запросов. Управление надо передать на сервер
2 — 23.06.22 — 13:19
Возврат Выборка.Количество() <= 1
3 — 23.06.22 — 13:39
Инструкциями препроцессора (#Если Не ТонкийКлиент И Не ВебКлиент И Не МобильныйКлиент Тогда) можно заэкранировать фрагменты модуля, если не хочется делать отдельный модуль.
4 — 23.06.22 — 14:31
(1) На счет запросов понятно — клиент их не может делать. Но вопрос: что может клиент, но не может сервер?
5 — 23.06.22 — 14:33
(4)
ТекстовыйДокумент (TextDocument)
Показать (Show)
Доступность:
Тонкий клиент, веб-клиент, толстый клиент.
6 — 23.06.22 — 14:42
(4) В настройках синтаксис помощника
https://i.imgur.com/W1Nf3eh.png
7 — 23.06.22 — 14:56
(4) чтобы не было каши в названиях модулей и галочках
https://its.1c.ru/db/v8std#content:469:hdoc
8 — 23.06.22 — 16:00
(5) ТекстовыйДокумент() — этого точно нет в общем модуле мвДоработки.
(6), (7) Спс. Значит можно снять галочку Клиент с мвДоработки.
9 — 23.06.22 — 16:07
Эта тему можно закрыть. Может кто поможет с вопросом КД2: Сравнение и объединение правил обмена а то он не по теме.
10 — 28.07.22 — 10:48
Рано еще зарывать. Раньше УПП работала 8.3.10, как и все базы, Альфа-Авто выше не работала. Теперь решил перевести на 8.3.19.1522 (установлена для КА2), знаю что Com-обмены могут работать на разных платформах, а вот OLE — не знаю? При загрузки Выписки из УПП выскочила ошибка Тип не определен Запрос = ОбъектКА.NewObject(«Запрос»); а затем: Ошибка при вызове конструктора (COMОбъект): -2147221005(0x800401F3): Недопустимая строка с указанием класса. Как убрать ошибку 1С «-2147221005(0x800401F3): Недопустимая строка с указанием класса» нашел статью: https://zen.yandex.ru/media/nastroyka1c/kak-ubrat-oshibku-1s-21472210050x800401f3-nedopustimaia-stroka-s-ukazaniem-klassa-5e56042f5c1f4e2533321a22 и ужаснулся: не уже ли так, больше никак?
11 — 28.07.22 — 10:52
(10) «и ужаснулся: не уже ли так, больше никак?» — уже давно так, ничего сложного там нет
12 — 28.07.22 — 11:12
(10) я больше ужаснулся, когда увидел, как зверски слово «неужели» разорвали на три части
13 — 28.07.22 — 11:22
(12) разорвало в клочья.
14 — 28.07.22 — 11:52
(10) «знаю что Com-обмены могут работать на разных платформах», можете поделиться ссылкой на описание, как это организовать?
15 — 28.07.22 — 12:09
16 — 28.07.22 — 15:25
(11) Давно, но так-то что-то настраивал в службе компонентов Службы компонентов: возможно ли создать обертку OLE соединения V83.Application Что-то создавал там, но сейчас найти не могу где? Не давно обновил высокую платформу, может там что перенастроить нужно? Но где ранее сделанные настройки?
(15) самое неприятное: «Ну и самое главное: не забываем, что работать это будет только при запуске 1С с административными правами.» — а обычным пользователям как работать!?
17 — 29.07.22 — 08:28
Нашел, последняя была 8.3.16.1959, сейчас 8.3.19.1522 https://ibb.co/ZHk8XsH Как исправить? Менять цифры в наименовании наверное бесполезно.
18 — 29.07.22 — 10:05
19 — 29.07.22 — 10:41
Вроде сделал по инструкции (10). Не знаю как перезапустить службу компонентов?
(18) Что за «Управление СОМ классами 1С (ИР)» — где ее взять?
20 — 29.07.22 — 11:38
(19) ИР — Инструменты разработчика Tormozit для 1С
http://devtool1c.ucoz.ru/
21 — 30.07.22 — 08:49
(20) Скачал ИНСТРУМЕНТЫ РАЗРАБОТЧИКА ПОРТАТИВНЫЙ 1С 8.2+ V6.37.1P, как его запустить?
(19) Ночью перезагрузил сервер, похоже ничего не изменилось.
22 — 30.07.22 — 09:45
23 — 30.07.22 — 10:10
Капец, деректив не знаешь, функцию СтрШаблон видимо тоже(
«Но вопрос: что может клиент, но не может сервер?» В синтакспомощнике забанен походу)
24 — 30.07.22 — 10:14
Что может клиент и не может сервер — много чего. В основном интерактивная работа — формы, диалоги.
А еще сервер много чего может чего не может клиент. Новичков в УФ обычно начинает бомбить от того, что на клиенте нельзя использовать таблицу значений.
25 — 30.07.22 — 10:29
(24) зачем было запрещать таблицу на клиенте вообще не понятно. Тем более что через хаки ее можно там получить
26 — 30.07.22 — 11:06
(25) > через хаки
Ну давай, получи её в веб-клиенте. Через хаки.
27 — 30.07.22 — 11:07
Чо за хаки?
28 — 30.07.22 — 11:19
(26) уж в веб клиенте на жс реализовать ничего не мешало
29 — 30.07.22 — 11:19
(27) через внешнюю компоненту
30 — 30.07.22 — 11:45
(28) > ничего не мешало
Ну, то есть тема с хаками закрывается и начинается традиционное «да я сам жаваскрипт знаю, там все просто».
31 — 30.07.22 — 11:46
(30) ничего не мешало, просто не сделали.
Почему? Это только внутри 1с знают
32 — 30.07.22 — 11:55
У текущего пользователя ИБ включен флажок «Защита от опасных действий». Для корректной работы инструментов его рекомендуется выключить!
Как это сделать?
33 — 30.07.22 — 12:21
Эта галка только в конфигураторе
34 — 30.07.22 — 12:24
Галка у пользователя в конфигураторе. Есть еще защита от опасных действий, безопасный режим у расширения.
35 — 30.07.22 — 12:33
(33),(34) Обычный реквизит? — найти не могу.
36 — 30.07.22 — 12:33
Пользователи это не справочник
37 — 30.07.22 — 12:36
(36) Как так, не только?
38 — 30.07.22 — 13:07
Где еще?
39 — 30.07.22 — 14:00
(34) у расширения? А если его не использую…
40 — 30.07.22 — 15:42
(39) если не используешь, значит это тебе не надо.
41 — 30.07.22 — 15:42
Пользователи Информационной базы. В конфигураторе.
42 — 30.07.22 — 16:22
(40) Не понял.
43 — 30.07.22 — 17:08
Если нет расширений значит это ограничениев расширении не работает. Остается только пользователь.
44 — 31.07.22 — 07:07
(43) В справочнике Пользователи, или где он?
45 — 31.07.22 — 07:33
Почему в службе компонентов в свойствах V83COMConnector_8_3_19_1522 не вижу версию comcntr.dll (пункт 9 инструкции (10)). Почему в имени V83COMConnector_ в написании версии не могу использовать точки вместо подчеркиваний 8_3_19_1522?
46 — 31.07.22 — 08:25
D свойствах V83COMConnector_8_3_19_1522 на вкладке «Удостоверение» обязательно указывать пользователь/пароль? Если Да, то какого?
47 — 31.07.22 — 08:28
48 — 31.07.22 — 09:35
(47) Администрирование/Пользователи
49 — 31.07.22 — 09:52
Но там не стоит «защита от опасных действий» https://ibb.co/MhcBtGW .
50 — 01.08.22 — 06:49
Вернемся к нашей ошибке: -2147221005(0x800401F3): Недопустимая строка с указанием класса — как ее исправить?
51 — 01.08.22 — 07:29
Сумел открыть инструмент (18) по подсказке (22) ?
52 — 01.08.22 — 07:39
(50) Используй для начала 32-разрядную платформу
53 — 01.08.22 — 08:06
(52) НЕ хотелось бы…
54 — 01.08.22 — 08:07
(53) Начни с малого. Возможно, натолкнёт на решение большего.
55 — 01.08.22 — 08:14
(54) Платформа 8.3.19.1522 у меня стоит 2-й платформой на сервере (на других портах) не хотелось бы ее трогать.
56 — 01.08.22 — 08:49
(55) Дело не в том, что ты хочешь, а в том, чтобы разобраться в причинах. Что мешает проверить на копии локально хотя бы в файловом режиме?
57 — 01.08.22 — 10:39
(56) Не пойму какие выводы я должен вынести из этого эксперимента, ну сменю версию платформы, ну исчезнет ошибка, а дальше что делать?
58 — 16.08.22 — 13:18
Нашел картинку старой службы компонентов https://ibb.co/318LvJV — до обновления 8.3.19, и инструкцию как ее создавал: https://infostart.ru/public/610960/ — COM соединения с базами 1С на различных версиях платформы «Без перерегистрации и СМС». Старые платформы 8.3.14 и 16 удалил. Добавил новую 8.3.19 вроде все по этой инструкции, но ошибка: «Недопустимая строка с указанием класса» осталась!?
59 — 16.08.22 — 14:17
С таким подходом к концу года сам разберешься наверное.
60 — 16.08.22 — 14:28
(59) Хотелось бы раньше.
61 — 16.08.22 — 14:38
(60) тогда вернись к (20) и попробуй утильку от TormozIT
62 — 16.08.22 — 15:52
(61) Ну скачал его, а что делать с ним не знаю?
63 — 16.08.22 — 18:09
(62) Открыть в нем инструмент «Управление СОМ классами 1С»
64 — 16.08.22 — 18:13
(63) И дальше что, как сделать правильно, чтобы работало?
65 — 16.08.22 — 18:29
Надо понять где выполняется код, вызывающий COM-соединение. Если на сервере, то тебе надо запустить на сервере терминальный сеанс под тем же пользователем ОС, под которым работает служба 1С. Открываешь «Управление СОМ классами 1С (ИР)» и показываешь нам картинку.
66 — 16.08.22 — 18:34
(65) Прежде чем показать нужно это запустить. Как это сделать?
67 — 16.08.22 — 18:40
68 — 16.08.22 — 19:13
(67) Не удачный пример с расширением. Расширением я не пользуюсь, оно в 8.3.10 недоступно. Другие примеры есть без расширений?
69 — 16.08.22 — 19:19
Для обычных форм.
70 — 16.08.22 — 22:28
(68) Обманываешь. Для варианта «Расширение» на странице скачивания указано «Для 1С 8.3.10+ в режиме совместимости 8.3.9+»
Если же не пользуешься по религиозным причинам, то значит ты скачал вариант «Портативный». Тогда идешь и читаешь раздел «Запуск» (целое одно предложение) в его описании http://devtool1c.ucoz.ru/index/variant_portativnyj/0-39
71 — 17.08.22 — 11:49
(70) Не понял, по ссылке: 404 Не Найдено!?
72 — 17.08.22 — 12:00
(70) > то значит ты скачал вариант «Портативный»
Да, писал в (21).
73 — 17.08.22 — 14:37
Нашел COM-соединение и версии платформ в ней ссылка на Книга знаний: Вызов 32-битных COM-объектов на стороне 64-битного сервера 1С — мало отличается от инструкции в (58), но есть неясные места, например, 5. Учетная запись для запуска приложения: выбираем учетку под которой стартует сервер 1С — как выбирать? Или 6. В ветке созданного приложения переходим на ветку «Роли» открываем роль «CreatorOwner» и далее в разделе «Пользователи» создаем пользователя — учетную запись под которой работает сервер 1С. — это как? Пароль я знаю, ввожу его, когда устанавливаю или обновляю сервер 1С. Открываю роль «CreatorOwner» в папке Пользователи вижу свою учетную запись — она и есть, ничего вводить не надо?
Далее все как (58), а нет: 9. Открываем свойства только что созданного компонента, идем на вкладку «Безопасность», проверяем в списке «Явно установленные для выделенных объектов роли» стоит ли «птичка» напротив роль CreatorOwner — если нет, тогда устанавливаем эту «птичку». Попробую с птичкой.
74 — 17.08.22 — 14:53
Птичка не помогла.
75 — 17.08.22 — 15:36
76 — 17.08.22 — 16:54
(75) Открыл по ссылке http://devtool1c.ucoz.ru/index/variant_portativnyj/0-39 (части твой), далее скачал rdtt.zip, извлек из него ирПортативный.erp, попытался его открыть в Альфа-Авто на 8.3.10.2466, которая не может COM-соединится с КА1 (УПП) на 8.3.19.1522, получил:
Ошибка инициализации модуля: ВнешняяОбработка.ирПортативный.МодульОбъекта
по причине:
{ВнешняяОбработка.ирПортативный.МодульОбъекта(3928)}: Ошибка при вызове метода контекста (Создать)
по причине:
Ошибка подключения внешних метаданных
по причине:
Каталог не обнаружен ‘\corp.akitworkspace$1c1с_АрхивыCAМодулиирКэш.epf’
Папку Модули создал, а где взять ирКэш.epf?
77 — 17.08.22 — 17:07
Создал пустой ирКэш.epf, получил:
Ошибка инициализации модуля: ВнешняяОбработка.ирПортативный.МодульОбъекта
по причине:
{ВнешняяОбработка.ирПортативный.МодульОбъекта(3928)}: Ошибка при вызове метода контекста (Создать)
по причине:
Ошибка подключения внешних метаданных
по причине:
Ошибка загрузки документа.
Как открыть, запустить ирПортативный.erp?
78 — 17.08.22 — 18:54
(76) Ладно. Бросай ты этот ИР. Там слишком сложно запускать. Тебе подойдут только инструменты из одной внешней обработки. У меня таких нет.
79 — 17.08.22 — 19:46
Нашел еще более старую картинку с платформой 8.3.14.1779: https://ibb.co/LvGfVX8, жаль не показано внутреннее содержимое вкладок.
80 — 17.08.22 — 20:05
Может кто подскажет что должно быть на вкладке Безопасность?
81 — 18.08.22 — 00:01
(50)Попробуй перерегистрировать dll из командной строки.
82 — 18.08.22 — 08:15
83 — 18.08.22 — 08:50
(80) В инструкции https://infostart.ru/public/610960/ в комментариях написано:
2. В оснастке служб компонентов, «Службы компонентов» — «Компьютеры» — «Мой компьютер» — «Приложения COM+»
3. Создаем новое приложение, правой кнопкой по «Приложения COM+» — «Создать» — «Приложение»
4*. Выбираем «Создать новое приложение», называем например «1cv8», тип выбираем «Серверное приложение»,
Учетная запись — Текущий пользователь, Пользователь с ролью Owner — поставил администратора компьютера (сервера).
(без этого возможна ошибка -2147024769(0x8007007F): Не найдена указанная процедура)
Мне не понятна фраза: «Пользователь с ролью Owner — поставил администратора компьютера (сервера)» — у меня лишь роль CreatorOwner https://ibb.co/7GrSHgm, надо что-то делать? Судя по старым картинкам приложения не ставил, только Компоненты.
84 — 18.08.22 — 08:54
85 — 18.08.22 — 15:25
Сделал все по Книга знаний: Вызов 32-битных COM-объектов на стороне 64-битного сервера 1С , но все равно ошибка: «Недопустимая строка с указанием класса» осталась!? Раньше не проверял OLE-соединение, только Com-соединение. Может все инструкции (которые здесь упоминал) не предназначены для OLE?
86 — 18.08.22 — 16:35
(83) В свойствах приложения на вкладку Удостоверение добавил администратора компьютера (сервера) ИмяСервераUSR1CV82, но это не помогло. Не знаю правильно ли понял фразу из (83)?
87 — 19.08.22 — 01:42
(82)консоль надо с правами админа запускать, а у тебя явно пользовательский запуск судя по картинке.
88 — 19.08.22 — 07:49
(87) Консоль командной строки запущена под Администратором.
89 — 19.08.22 — 07:54
(87) Смотри заголовок командной строки, или я чего-то не понимаю.
90 — 19.08.22 — 09:26
Каюсь база КА1 (УПП), к которой я цепляюсь по COM-соединению, оказывается открыта конфигуратором в 8.3.10.2466, перезапустил в 8.3.19.1522, но все равно ошибка: «Недопустимая строка с указанием класса» осталась!?
91 — 19.08.22 — 12:10
Удалил V83.COMConnector_8.3.19.1522 из службы компонентов совсем, Альфа-Авто ведет себя также как будь-то не было V83.COMConnector_8.3.19.1522 вовсе!?
92 — 19.08.22 — 12:41
Нет ошибки, например: Не найдена указанная процедура.
93 — 19.08.22 — 12:44
Используйте веб сервисы и будет вам счастье
94 — 19.08.22 — 14:32
(93) Раньше же до перехода (обновления) на другую версию платформы работало.
95 — 19.08.22 — 14:36
(94) Удалите все ком коннекторы, на клиенте и на сервере и заново зарегайте библиотеку комконнектор. Самостоятельно ее пропишите в компонентах по инструкциям. Может повезет и заработает
96 — 19.08.22 — 14:54
(95) Уточни, где, что удалить? В конфигураторе или в Службе компонентов? А то формы общие.
97 — 19.08.22 — 15:22
(96) А как вы в конфигураторе удалите ком коннекторы?))
Речь идет о службах компонентов. Поймите уже наконец как работает ком соединение. Если на пальцах, есть библиотека 1с КомКоннектор.Длл. Через службу компонентов мы создаем обертку для этой библиотеки. Указываем права и прочие параметры. 1ска же цепляется к этой обертке и уже через нее работает с библиотекой. Нужно так же правильно прописывать путь до коннектора.
98 — 19.08.22 — 15:23
Обычно, при установке платформы, 1ска сама это дело регистрирует и прописывает, но вот иногда бывают косяки. Или бывает несколько платформ развернуто с разными версиями, что тоже может вызывать косяки.
99 — 19.08.22 — 16:23
(98) >> Обычно
это достаточно новая мулька. раньше вообще всегда надо было регать вручную
и теперь, когда ты ставишь дистриб на компе, где понах.ячено как у (0), то автоматически ничего не срабатывает — надо так же вручную вписывать новые компоненты.
100 — 19.08.22 — 16:57
Сделал опять приложение (в конфигураторе прописал его имя: БазаКА = Новый COMОбъект(«V8_ComConnector»); — правильно? как в Книга знаний: Вызов 32-битных COM-объектов на стороне 64-битного сервера 1С в компоненте на вкладке Безопасность для роли CreatorOwner поставил галочку. Получил ошибку: Ошибка при вызове метода контекста (Connect): Произошла исключительная ситуация (V83.COMConnector.1): Неверные или отсутствующие параметры соединения с информационной базой. Хотя компоненту V83.COMConnector.1 заменил на псевдоним V83.COMConnector_8.3.19.1522 — правильно?
kosvo |
|
||
---|---|---|---|
|
Доброго времени суток!
Помогите пожалуйста разобраться! При создании нового запроса выдает постоянно ошибку…, причем , даже если вводится пример из справки. ========================= Процедура сталь_055ПриИзменении(Элемент) Запрос = Новый Запрос(); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл КонецПроцедуры Выдает ошибку: {ОбщаяФорма.Вариант.Форма(6,16)}: Тип не определен (Запрос) Учусь в ДемоВерсии 1С.v8 Спасибо! |
Yandex |
|
||
---|---|---|---|
|
Mokey |
|
||
---|---|---|---|
|
Что первое в голову пришло, буквы Рус-Лат какие-то в слове «Запрос».
Изменено 02.04.12 11:31:47 |
E_Migachev |
|
||
---|---|---|---|
|
(0) kosvo,
1. Пишется: Код 1C v 8.х
2. Если это УП, то Запрос можно выполнять только на сервере |
Mokey |
|
||
---|---|---|---|
|
(2) E_Migachev, вроде же и со скобками работает…
… проверил у себя (засомневался было), всё работает со скобками. Изменено 02.04.12 11:45:04 |
kosvo |
|
||
---|---|---|---|
|
т.е. причина в «&НаКлиенте» ? |
E_Migachev |
|
||
---|---|---|---|
|
(3) Mokey, хорошо |
Mokey |
|
||
---|---|---|---|
|
Ух ты.. а я и не обратил внимание на &НаКлиенте… сорри |
kosvo |
|
||
---|---|---|---|
|
Всем СПАСИБО! |
kosvo |
|
||
---|---|---|---|
|
Вопрос закрыт! |
DJ_Serega |
|
||
---|---|---|---|
|
(5) E_Migachev,
Я обычно так пишу запросы: Код 1C v 8.х
Текст получается компакнтым, и все запросы отдельно написаны в модуле объекта, изза чего можно их использовать из других объектов *07 Изменено 03.04.12 12:02:47 |
Подсказка: Вы получили ответ на свой вопрос — закройте вопрос! |
Доброго времени суток. Появляются такие ошибки:
{Форма.ФормаОтчета.Форма(31,17)}: Тип не определен (Запрос)
Запрос = Новый <<?>>Запрос; (Проверка: Тонкий клиент)
{Форма.ФормаОтчета.Форма(203,23)}: Тип не определен (Запрос)
ЗапрУвол = Новый <<?>>Запрос; (Проверка: Тонкий клиент)
{Форма.ФормаОтчета.Форма(274,21)}: Тип не определен (Запрос)
ЗапрУвол = Новый <<?>>Запрос; (Проверка: Тонкий клиент)
{Форма.ФормаОтчета.Форма(348,23)}: Тип не определен (Запрос)
ЗапрОтпуск = Новый <<?>>Запрос; (Проверка: Тонкий клиент)
{Форма.ФормаОтчета.Форма(418,23)}: Тип не определен (Запрос)
ЗапрОтпуск = Новый <<?>>Запрос; (Проверка: Тонкий клиент)
{Форма.ФормаОтчета.Форма(581,17)}: Тип не определен (Запрос)
Запрос = Новый <<?>>Запрос; (Проверка: Тонкий клиент)
Прошу объяснить, что не так, пожалуйста
Содержание:
1. Пример с внешней обработкой
2. Исправление ошибки в 1С
3. Новое условие при выполнении запроса
Данная ошибка выполнения запроса 1С может возникнуть при выполнении запроса, если в качестве параметра передается таблица значений с колонками, в которых не определен тип.
Разберем на примере почему данная ошибка программы 1С происходит, и как ее избежать при разработке.
1. Пример с внешней обработкой
Для простоты создадим внешнюю обработку 1С 8, которая будет выгружать в табличную часть обработки номенклатуры.
Предположим, у вас есть таблица значений, заполняемая некоторыми данными, например, наименованием производителей (Рисунок 1).
Рис. 1
Теперь напишем запрос, который будет выводить номенклатуру данных производителей (Рисунок 2).
Рис. 2
При попытке запустить заполнение табличной части 1С 8.3 выдает ошибку «Тип не может быть выбран в запросе» (Рисунок 3).
Рис. 3
Данная ошибка при выполнении операции в 1С возникла потому, что в таблице значений не указан тип колонки «Наименование».
2. Исправление ошибки в 1С
Чтобы исправить ошибку, необходимо явно указать тип при добавлении колонки. Сделать это можно при помощи Описания типов. Укажем наименование строкового типа данных (Рисунок 4).
Рис. 4
Также можно указать тип «СправочникСсылка.Производители», но тогда таблица значений не заполнится необходимыми данными, что, впрочем, можно исправить, воспользовавшись поиском по наименованию в справочнике, и подставив найденное значение в поле «Наименование» (Рисунок 5).
Рис. 5
Но остановимся на типе «Строка».
При попытке выполнить код, возникает новая ошибка программы, говорящая о том, что нельзя сравнивать разные типы (Рисунок 6).
Рис. 6
3. Новое условие при выполнении запроса 1С
Вернемся к выполнению запроса 1С и изменим его, заменив жесткое сравнение на условие «Подобно».
Запрос примет следующий вид (Рисунок 7).
Рис. 7
В результате мы получим список всей номенклатуры данных производителей (Рисунок 8).
Рис. 8
Специалист компании «Кодерлайн»
Айдар Фархутдинов
Тип не определен (Запрос) |
Я |
GreenDay1986
07.11.12 — 12:51
Тип не определен (Запрос)
Запрос = Новый <<?>>Запрос(); (Проверка: Тонкий клиент)
Всем здравствуйте. Создаю новую информационную базу, не из шаблона, для разработки. Создаю справочники, доки, регистры. Собственно вопрос. Если стоит параметр &НаКлиенте я так понимаю тип запрос на клиенте не определен, ставлю на сервере, ничего не происходит
&НаКлиенте
Процедура ПриОткрытии()
Запрос = Новый Запрос();
Запрос.Текст=»ВЫБРАТЬ
|Рег.Цена КАК Цена,
|Рег.Дата КАК Дата
|ИЗ РегистрСведений.Цены КАК Рег
|»;
Рез = Запрос.Выполнить().Выбрать();
Пока Рез.Следующий() Цикл
Сообщить(Рез.Цена);
Сообщить(Рез.Дата);
КонецЦикла;
КонецПроцедуры
Что пишу неправильно?
GreenDay1986
1 — 07.11.12 — 12:52
&НаСервере
Процедура ПриОткрытии()
Запрос = Новый Запрос();
Запрос.Текст=»ВЫБРАТЬ
|Рег.Цена КАК Цена,
|Рег.Дата КАК Дата
|ИЗ РегистрСведений.Цены КАК Рег
|»;
Рез = Запрос.Выполнить().Выбрать();
Пока Рез.Следующий() Цикл
ЭтаФорма.Элементы.Цена = Рез.Цена;
Сообщить(Рез.Цена);
Сообщить(Рез.Дата);
КонецЦикла;
КонецПроцедуры
или просто
Процедура ПриОткрытии()
Запрос = Новый Запрос();
Запрос.Текст=»ВЫБРАТЬ
|Рег.Цена КАК Цена,
|Рег.Дата КАК Дата
|ИЗ РегистрСведений.Цены КАК Рег
|»;
Рез = Запрос.Выполнить().Выбрать();
Пока Рез.Следующий() Цикл
ЭтаФорма.Элементы.Цена = Рез.Цена;
Сообщить(Рез.Цена);
Сообщить(Рез.Дата);
КонецЦикла;
КонецПроцедуры
ошибок не выдает но и запросы также не исполняются
mikecool
2 — 07.11.12 — 12:53
с чего решил, что запросы не выполняются?
GreenDay1986
3 — 07.11.12 — 12:54
С того что никакие сообщения не выводятся, точнее может и исполняются, однако результата нет
mikecool
4 — 07.11.12 — 12:55
(3) сообщения выводятся, только на сервере
включай уже мосх )
Magic Dick
5 — 07.11.12 — 12:56
Новый Запрос;
Песец
6 — 07.11.12 — 12:56
Проверка: Тонкий клиент
GreenDay1986
7 — 07.11.12 — 12:57
Процедура ПриОткрытии()
Запрос = Новый Запрос();
Запрос.Текст=»ВЫБРАТЬ
|Рег.Цена КАК Цена,
|Рег.Дата КАК Дата
|ИЗ РегистрСведений.Цены КАК Рег
|»;
Рез = Запрос.Выполнить().Выбрать();
Пока Рез.Следующий() Цикл
ЭтаФорма.Элементы.Цена = Рез.Цена;
Сообщить(Рез.Цена);
Сообщить(Рез.Дата);
КонецЦикла;
КонецПроцедуры
Здесь куда выводятся?
vmv
8 — 07.11.12 — 12:57
тс — глупый тролль, уничтожиить!
Magic Dick
9 — 07.11.12 — 12:58
(8) а может 86 год?
GreenDay1986
10 — 07.11.12 — 12:58
брррр, да нет, не тролль, учусь маленько
Песец
11 — 07.11.12 — 12:59
Запрос (Query)
…
Доступность:
Сервер, толстый клиент, внешнее соединение.
(с) СП
GreenDay1986
12 — 07.11.12 — 12:59
(11) То есть мне нужно создавать новую базу на сервере, так понимаю?
vmv
13 — 07.11.12 — 13:00
(10) открываем сп и в первой главе «директивы компиляции» изучаем, хотя может лучше порясят выращивать — ты подумай, что выгоднее
Песец
14 — 07.11.12 — 13:00
(12) Не, базу не надо.
Песец
15 — 07.11.12 — 13:01
(14+) Медитируй до просветления:
Тип не определен (Запрос)
Запрос = Новый <<?>>Запрос(); (Проверка: Тонкий клиент)
GreenDay1986
16 — 07.11.12 — 13:01
(14) То есть базу на локальном компьютере я правильно создал. Что дальше делать дабы в ней сожно было работать с запросами?
Песец
17 — 07.11.12 — 13:03
(16) В тонком клиенте тип «Запрос» не определен.
Sammo
18 — 07.11.12 — 13:03
Запрос это сущность или процедура?
ptiz
19 — 07.11.12 — 13:03
(16) На сервере выполняешь запрос. На клиента возвращаешь сообщения.
Песец
20 — 07.11.12 — 13:04
(17+) …в нем толко интерфейс, что-либо делать с базой надо на стороне сервера.
GreenDay1986
21 — 07.11.12 — 13:04
(19) спасибо, счас попробую.
GreenDay1986
22 — 07.11.12 — 13:06
(19) Как это с точки зрения синтаксиса будет выглядеть? 2 процедуры?
GreenDay1986
23 — 07.11.12 — 13:12
Хм, можно пример как возвратить с сервера на клиент? Исполнение так понимаю
&НаСервере
Процедура ПриОткрытии()
Запрос = Новый Запрос();
Запрос.Текст=»ВЫБРАТЬ
|Рег.Цена КАК Цена,
|Рег.Дата КАК Дата
|ИЗ РегистрСведений.Цены КАК Рег
|»;
Рез = Запрос.Выполнить().Выбрать();
КонецПроцедуры
Шапокляк
24 — 07.11.12 — 13:16
(23) Запрос = Новый Запрос;
Убери скобочки! И — нескромный вопрос — а что на сервере открывают-то?
Песец
25 — 07.11.12 — 13:16
(23) На клиенте этой процедуры просто не будет.
Как вариант — создать общий модуль с галочками «сервер» и «вызов сервера», в нем расположить твою функцию которая вернет данные, ее и вызывать из ПриОткрытии.
GreenDay1986
26 — 07.11.12 — 13:20
(25) В общем все мои запросы исполнять в общих модулях, При открытии прописывать уже непосредственно передаваемые с сервера параметры?
GreenDay1986
27 — 07.11.12 — 13:21
Мутновато пока укладывается, ну ладно, спасибо, будем разбираться
le_
28 — 07.11.12 — 13:25
(27) Поищи видеокурс Гилева по управляемым формам.
Xapac_2
29 — 07.11.12 — 13:27
на КЛИЕНТЕ же!!!
сделай на сервере
Wobland
30 — 07.11.12 — 13:28
ТС как минимум уже год учится, никак не научится
Aprobator
31 — 07.11.12 — 13:28
(27) чего тут укладываться то? УФ — видимость методов и т.п. смотреть обязательно, только и всего.
GreenDay1986
32 — 07.11.12 — 13:35
Хм, как ИБ без управляемых форм сделать? Конфигурации подревнее поискать?
Wobland
33 — 07.11.12 — 13:35
(32) нужно как-то себя заставить
GreenDay1986
34 — 07.11.12 — 13:36
(33)Ога, я пока ток БП ковырял, без УФ.
GreenDay1986
35 — 07.11.12 — 14:33
Для примера родил следующее.
&НаСервере
Функция ВыбратьДанные(Найм)
Запрос = Новый Запрос;
Запрос.Текст =»ВЫБРАТЬ
|Ном.Наименование КАК Наим
|ИЗ Справочник.Номенклатура КАК Ном
|ГДЕ Наим.Наименование=&Найм
|»;
Запрос.УстановитьПараметр(«Найм»,Найм);
Рез = Запрос.Выполнить().Выбрать();
Пока Рез.Следующий()Цикл;
Сообщить(Рез.Наим);
КонецЦикла;
КонецФункции
&НаКлиенте
Процедура ПриОткрытии()
Сообщить(ВыбратьДанные(Этаформа.Элементы.Наименование));
КонецПроцедуры
Возвращает ошибку
{Справочник.Номенклатура.Форма.ФормаЭлемента.Форма(20)}: Ошибка при вызове метода контекста (ВыбратьДанные)
Сообщить(ВыбратьДанные(Этаформа.Элементы.Наименование));
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства ‘param’:
форма: Элемент
имя: {http://v8.1c.ru/8.2/managed-application/modules}param
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа ‘ПолеФормы’
salvator
36 — 07.11.12 — 14:36
Если Рез.Следующий() Тогда;
Возврат Рез.Наим;
КонецЕсли;
GreenDay1986
37 — 07.11.12 — 14:39
(36) таже самая ошибка возвращается.
Romich1981
38 — 07.11.12 — 14:44
Посмотри хоть какой тип у «Этаформа.Элементы.Наименование»
GreenDay1986
39 — 07.11.12 — 14:44
(38) Поле ввода
Romich1981
40 — 07.11.12 — 14:45
=) о чем и речь. Какие типы можно передавать?
hhhh
41 — 07.11.12 — 14:45
(37) а вот этот бред как объясните? Что это за слово?
ГДЕ Наим.Наименование
GreenDay1986
42 — 07.11.12 — 14:47
Где Ном.Наименование, простите
samozvanec
43 — 07.11.12 — 14:48
все не читал. Что за прикол менять директиву компиляции у событий формы?
GreenDay1986
44 — 07.11.12 — 14:49
Не ругайтесь шибко, УФ первый раз юзаю
GreenDay1986
45 — 07.11.12 — 14:57
Уррра, нашел ЭтаФорма.Объект.Наименование. Передалось таки
sidalexsandr
46 — 07.11.12 — 14:58
Можно так:
&НаСервере
Функция ВыбратьДанные(Найм)
Запрос = Новый Запрос;
Запрос.Текст =»ВЫБРАТЬ
|Ном.Наименование КАК Наим
|ИЗ Справочник.Номенклатура КАК Ном
|ГДЕ Наим.Наименование=&Найм
|»;
Запрос.УстановитьПараметр(«Найм»,Найм);
РезультатЗапроса = Запрос.Выполнить();
СпособОбхода = ОбходРезультатаЗапроса.Прямой;
ТабЗнач = РезультатЗапроса.Выгрузить(СпособОбхода);
Возврат ТабЗнач;
КонецФункции
GreenDay1986
47 — 07.11.12 — 14:59
(46) Спасибо!
sidalexsandr
48 — 07.11.12 — 15:00
(46)+
Дальше
&НаКлиенте
Процедура ЗабратьССервера()
ТаблЗначений = ВыбратьДанные(Найм);
// Дальше получай на здоровье данные из Таблицы значений
КонецПроцедуры
sidalexsandr
49 — 07.11.12 — 15:00
(47) Вот теперь можеш спасибо
sidalexsandr
50 — 07.11.12 — 15:01
Напиши, что получилось.
hhhh
51 — 07.11.12 — 15:05
(49) ТаблицаЗначений
Доступность:
Сервер, толстый клиент, внешнее соединение.
GreenDay1986
52 — 07.11.12 — 15:11
(50) Соединяю с регистромСведений цены.Сообщение выдалось
GreenDay1986
53 — 07.11.12 — 15:28
Получилось так
&НаСервере
Функция ВыбратьДанные(Найм)
Запрос = Новый Запрос;
Запрос.Текст =»ВЫБРАТЬ
|Ном.Наименование КАК Наим,
|ЕСТЬNULL(Рег.Цена,0) КАК Цена,
|ЕСТЬNULL(Рег.Период,0) КАК Период
|ИЗ Справочник.Номенклатура КАК Ном
|ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены.СрезПоследних(&ДатаСреза)КАК Рег
|ПО Ном.Наименование = Рег.Наименование
|ГДЕ Ном.Наименование=&Найм
|»;
Запрос.УстановитьПараметр(«ДатаСреза», КонецДня(ТекущаяДата()));
Запрос.УстановитьПараметр(«Найм»,Найм);
Рез = Запрос.Выполнить().Выбрать();
Пока Рез.Следующий()Цикл
Сообщить(Рез.Наим);
Сообщить(Рез.Цена);
Сообщить(Рез.Период);
КонецЦикла;
КонецФункции
&НаКлиенте
Процедура ПриОткрытии()
ВыбратьДанные(ЭтаФорма.Объект.Наименование);
КонецПроцедуры
Наименование обьекта текущей формы возвращает. Цену и Период возвращает почему-то пустыми. Хотя в регистресведений Цены эти данные заполнены
DionisSergeevich
54 — 07.11.12 — 15:34
(53) Отладчик в руки и смотри что у тебя в Рез после Рез.Следующий. Попробуй запрос с твоими параметрами в консоли запросов. Так на глаз не вижу почему возвращает пустые значения
Шапокляк
55 — 07.11.12 — 15:50
(53) Ну и кто там на сервере это читает
Пока Рез.Следующий()Цикл
Сообщить(Рез.Наим);
Сообщить(Рез.Цена);
Сообщить(Рез.Период);
КонецЦикла;
Засовывай в структуру и возвращай клиенту
DionisSergeevich
56 — 07.11.12 — 15:51
(55) суть то не в этом. суть то в другом
GreenDay1986
57 — 07.11.12 — 15:55
(55) Рез.Наим возвращает и сообщает. Цену с периодом берет пустые
Aprobator
58 — 07.11.12 — 15:56
(46) (48) не взлетит по той простой причине, что таблица значений не живет на клиенте.
Aprobator
59 — 07.11.12 — 15:58
(53) дык у тебя соединения нет. Кто же соединение по наименованию делает? Самописка что ли полная?
Шапокляк
60 — 07.11.12 — 15:58
(56) Суть… Интересно, какой кошмар у него затаился в регистре Цены? Неужто Измерение Наименование строкового типа?
GreenDay1986
61 — 07.11.12 — 16:01
(60) Измерение Наименование типа СправочникСсылка.Номенклатура
hhhh
62 — 07.11.12 — 16:02
(61) а измерение Номенклатура типа СправочникСсылка.Номенклатура значит безжалостно удалил?
Шапокляк
63 — 07.11.12 — 16:02
(61) Да ну? А это как понимать?
|ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены.СрезПоследних(&ДатаСреза)КАК Рег
|ПО Ном.Наименование = Рег.Наименование
Serginio1
64 — 07.11.12 — 16:02
Может ВыбратьДанные(ЭтаФорма.Объект.Наименование.ТекстРедактирования);
или что там еще
GreenDay1986
65 — 07.11.12 — 16:03
(63) тут накосячил, Ном.Ссылка = Рег.Ссылка?
salvator
66 — 07.11.12 — 16:04
(65) продолжайте наблюдения
DionisSergeevich
67 — 07.11.12 — 16:07
(65) У записи регистра нет ссылки. Да открой ты консоль запросов
GreenDay1986
68 — 07.11.12 — 16:08
Извиняйте ребят, психологических отклонений нет,просто мудаг :))) Измерение Наименование сделал В общем переименовал заработало все.
При запросе выдает ошибку.
Автор Серега16, 09 авг 2014, 13:54
0 Пользователей и 1 гость просматривают эту тему.
в 1с 8.2 Почему выдает ошибку
Запрос.УстановитьПараметр(«Наименование»<<?>>Наименование); (Проверка: Сервер)
а вот сам код
Запрос = Новый Запрос;
Запрос.Текст ="ВЫБРАТЬ
| Покупатель.Наименование
|ИЗ
| Справочник.Покупатель КАК Покупатель
|Где
|Покупатель.Наименование = &Наименование" ;
Запрос.УстановитьПараметр("Наименование"Наименование);
Результат = Запрос.Выполнить();
Если НЕ Результат.Пустой() Тогда
Сообщить( "Данный покупатель уже существует!");
КонецЕсли;
РS Пробывал и на сервере и на клиенте везде выдает ошибку. Роботает только в модуле объекта. ПередЗаписью
А я хочу при НаименованиеОкончаниеВводаТекста.
Посмотрите описание этого события, по-моему из него запрещено обращаться на сервер.
Используйте событие ПриИзменении
Цитата: GRADUS от 09 авг 2014, 14:07
Посмотрите описание этого события, по-моему из него запрещено обращаться на сервер.
Используйте событие ПриИзменении
ПриИзменении вот такая ошибка.
Тип не определен (Запрос)
Запрос = Новый <<?>>Запрос; (Проверка: Тонкий клиент)
Серега16, после «Наименование» в УстановитьПараметр вообще-то следует ставить запятую.
ЦитироватьРоботает только в модуле объекта
Это я видел;
а прежде сообщение об ошибке:
ЦитироватьЗапрос.УстановитьПараметр(«Наименование»<<?>>Наименование); (Проверка: Сервер)
и далее код с этой ошибкой.
Тогда реально с чем работает автор темы? И что мы обсуждаем?
Цитата: pavl_vs от 09 авг 2014, 18:14
ЦитироватьРоботает только в модуле объекта
Это я видел;
а прежде сообщение об ошибке:
ЦитироватьЗапрос.УстановитьПараметр(«Наименование»<<?>>Наименование); (Проверка: Сервер)
и далее код с этой ошибкой.
Тогда реально с чем работает автор темы? И что мы обсуждаем?
Запятую я потерял чуть позже когда пытался поменять параметры. Ща перепроверю все свои эксперименты с запятой.
Добавлено: 09 авг 2014, 19:41
&НаКлиенте
Процедура НаименованиеПриИзменении(Элемент)
Проверка();
КонецПроцедуры
&НаСервере
Процедура Проверка()экспорт
Запрос = Новый Запрос;
Запрос.Текст ="ВЫБРАТЬ
| Покупатель.Наименование
|ИЗ
| Справочник.Покупатель КАК Покупатель
|Где
|Покупатель.Наименование = &Наименование" ;
Запрос.УстановитьПараметр("Наименование",Наименование);
Результат = Запрос.Выполнить();
Если НЕ Результат.Пустой() Тогда
Сообщить( "Данный покупатель уже существует!");
КонецЕсли;
{Справочник.Покупатель.Форма.ФормаЭлемента.Форма(17,49)}: Переменная не определена (Наименование)
Запрос.УстановитьПараметр(«Наименование»,<<?>>Наименование); (Проверка: Сервер).
Может есть другой способ проверки на уникальность при создании. Хотелось чтоб при заполнении первого регистра была проверка, а не после заполнения всех данных.
И что же у нас в переменной наименование, выложите скрин значения переменной «Наименование» в отладчике. После скрина продолжаем разговор.
В форме элемента просто так ссылаться на поле по его названию нельзя.
Ссылка на значение поля идет через объект, то есть код будет таким:
Запрос.УстановитьПараметр(«Наименование», Объект.Наименование);
И, к тому же, если у вас весь код в модуле формы элемента справочника, а обращаться к серверной процедуре вы из других мест конфигурации не собираетесь, то слово «Экспорт» можно не писать.
Теги:
- Форум 1С
- ►
Форум 1С — ПРЕДПРИЯТИЕ 8.0 8.1 8.2 8.3 8.4 - ►
Конфигурирование, программирование в 1С Предприятие 8 - ►
При запросе выдает ошибку.
Похожие темы (5)
Поиск
kosvo |
|
||
---|---|---|---|
|
Доброго времени суток! ========================= Процедура сталь_055ПриИзменении(Элемент) Запрос = Новый Запрос(); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл КонецПроцедуры Выдает ошибку: {ОбщаяФорма.Вариант.Форма(6,16)}: Тип не определен (Запрос) Учусь в ДемоВерсии 1С.v8 Спасибо! |
Yandex |
|
||
---|---|---|---|
|
Mokey |
|
||
---|---|---|---|
|
Что первое в голову пришло, буквы Рус-Лат какие-то в слове «Запрос». Изменено 02.04.12 11:31:47 |
E_Migachev |
|
||
---|---|---|---|
|
(0) kosvo,
2. Если это УП, то Запрос можно выполнять только на сервере |
Mokey |
|
||
---|---|---|---|
|
(2) E_Migachev, вроде же и со скобками работает… … проверил у себя (засомневался было), всё работает со скобками. Изменено 02.04.12 11:45:04 |
kosvo |
|
||
---|---|---|---|
|
т.е. причина в «&НаКлиенте» ? |
E_Migachev |
|
||
---|---|---|---|
|
(3) Mokey, хорошо |
Mokey |
|
||
---|---|---|---|
|
Ух ты.. а я и не обратил внимание на &НаКлиенте… сорри |
kosvo |
|
||
---|---|---|---|
|
Всем СПАСИБО! |
kosvo |
|
||
---|---|---|---|
|
Вопрос закрыт! |
DJ_Serega |
|
||
---|---|---|---|
|
(5) E_Migachev,
Текст получается компакнтым, и все запросы отдельно написаны в модуле объекта, изза чего можно их использовать из других объектов *07 Изменено 03.04.12 12:02:47 |
Подсказка: Щелникни по Имени пользователя напротив ответа, и тем самым покажешь, что сообщение адресовано ему. |
Содержание:
1. Пример с внешней обработкой
2. Исправление ошибки в 1С
3. Новое условие при выполнении запроса
Данная ошибка выполнения запроса 1С может возникнуть при выполнении запроса, если в качестве параметра передается таблица значений с колонками, в которых не определен тип.
Разберем на примере почему данная ошибка программы 1С происходит, и как ее избежать при разработке.
1. Пример с внешней обработкой
Для простоты создадим внешнюю обработку 1С 8, которая будет выгружать в табличную часть обработки номенклатуры.
Предположим, у вас есть таблица значений, заполняемая некоторыми данными, например, наименованием производителей (Рисунок 1).
Рис. 1
Теперь напишем запрос, который будет выводить номенклатуру данных производителей (Рисунок 2).
Рис. 2
При попытке запустить заполнение табличной части 1С 8.3 выдает ошибку «Тип не может быть выбран в запросе» (Рисунок 3).
Рис. 3
Данная ошибка при выполнении операции в 1С возникла потому, что в таблице значений не указан тип колонки «Наименование».
2. Исправление ошибки в 1С
Чтобы исправить ошибку, необходимо явно указать тип при добавлении колонки. Сделать это можно при помощи Описания типов. Укажем наименование строкового типа данных (Рисунок 4).
Рис. 4
Также можно указать тип «СправочникСсылка.Производители», но тогда таблица значений не заполнится необходимыми данными, что, впрочем, можно исправить, воспользовавшись поиском по наименованию в справочнике, и подставив найденное значение в поле «Наименование» (Рисунок 5).
Рис. 5
Но остановимся на типе «Строка».
При попытке выполнить код, возникает новая ошибка программы, говорящая о том, что нельзя сравнивать разные типы (Рисунок 6).
Рис. 6
3. Новое условие при выполнении запроса 1С
Вернемся к выполнению запроса 1С и изменим его, заменив жесткое сравнение на условие «Подобно».
Запрос примет следующий вид (Рисунок 7).
Рис. 7
В результате мы получим список всей номенклатуры данных производителей (Рисунок 8).
Рис. 8
Специалист компании «Кодерлайн»
Айдар Фархутдинов
Тип не может быть выбран в запросе
Ошибка при вызове возникает в запросе, когда тип не может быть выбран в качестве источника данных (таблицы), либо не инициализирован в процессе выборки из временной таблицы. Значит вы пытаетесь загрузить таблицу значений в запрос 1С.
Полный текст ошибки:
Ошибка при вызове метода контекста (Выполнить) ТЗ = Запрос.Выполнить().Выгрузить(); по причине: {(310, 32)}: Тип не может быть выбран в запросе
Сопутствующий ошибке код:
В качестве одного из параметров передается заполненная «Таблица значений», которая помещается во временную таблицу запроса, а затем уже производится ее выборка.
Например:
Запрос.УстановитьПараметр(«ТЗДеньги», Новый ТаблицаЗначений);
Сам текст запроса:
ВЫБРАТЬ * ПОМЕСТИТЬ ТДеньги ИЗ &ТЗДеньги КАК Т
;
ВЫБРАТЬ
ЗарплатныйПериод,
Статья,
Сотрудник,
Подразделение,
Сумма
ИЗ
тДеньги
Ошибка возникает в версиях 8.2 и 8.3 платформы 1С.
Причина ошибки:
Не инициализированные типы колонок в таблице значений.
ТЗДеньги = Новый ТаблицаЗначений; ТЗДеньги.Колонки.Добавить("ЗарплатныйПериод"); ТЗДеньги.Колонки.Добавить("Статья"); ТЗДеньги.Колонки.Добавить("Сотрудник"); ТЗДеньги.Колонки.Добавить("Подразделение"); ТЗДеньги.Колонки.Добавить("Сумма");
Ошибка может проявится при значениях в таблице, которые не могут быть выбраны: объект Картинка, Диаграмма, Шрифт и прочие интерфейсные, либо не ссылочные типы.
Решение
Верная инициализация, каждой колонки в таблице значений:
ТЗДеньги = Новый ТаблицаЗначений; ТЗДеньги.Колонки.Добавить("ЗарплатныйПериод",Новый ОписаниеТипов("Дата")); ТЗДеньги.Колонки.Добавить("Статья",Новый ОписаниеТипов("Строка")); ТЗДеньги.Колонки.Добавить("Сотрудник",Новый ОписаниеТипов("Строка")); ТЗДеньги.Колонки.Добавить("Подразделение",Новый ОписаниеТипов("Строка")); ТЗДеньги.Колонки.Добавить("Сумма",Новый ОписаниеТипов("Число"));
Если колонка должна содержать несколько типов, тогда используйте другой вариант инициализации ОписаниеТипов:
МассивТипов = Новый Массив; МассивТипов.Добавить("Строка"); МассивТипов.Добавить("Число"); пОписаниеТипов = Новый ОписаниеТипов(МассивТипов);
Основное требование — точное указание для всех колонок.
Также смотрите про статью про тип «ЛюбаяСсылка»
Попутно может возникнуть ошибка, связанная с некорректным типом для агрегатных функций запроса:
«Неверные параметры Сумма», возникает, в случае хотя бы одно из значений в переданной таблице значений равно Null.
Люди кончают самоубийством оттого, что получают по почте одну рекламу.
Тема: Путаница в модулях! Откуда вызывать запрос? (Прочитано 4757 раз)
0 Пользователей и 1 Гость просматривают эту тему.
Всем доброго времени суток! Совсем запуталась в модулях! Объясните, пожалуйста, что делаю не так?
У документа реквизиты: Номер, Дата, СчетДенежныхСредств, ОстатокНаСчете, СуммаФактическая, такие-же на форме. Хочу при выборе счета автоматом получть остаток по нему. Пробовала так:
&НаКлиенте
Процедура СчетДенежныхСредствПриИзменении(Элемент)
СуммаНаСчете = ВернутьОстатокПоСчету();
КонецПроцедуры
&НаСервере
Функция ВернутьОстатокПоСчету()
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ОстатокПоСчетамДенежныхСредствОстатки.СуммаОстаток
|ИЗ
| РегистрНакопления.ОстатокПоСчетамДенежныхСредств.Остатки(&НаДату, СчетДенежныхСредств = &Счет) КАК ОстатокПоСчетамДенежныхСредствОстатки";
Запрос.УстановитьПараметр("НаДату", Дата);
Запрос.УстановитьПараметр("Счет", СчетДенежныхСредств);
Результат = Запрос.Выполнить().Выгрузить();
Возврат Результат.СуммаОстаток;
КонецФункции
Орёт, что переменная не определена:
{Документ.КорректировкаСчетаДенежныхСредств.Форма.ФормаДокумента.Форма(13,38)}: Переменная не определена (Дата)
Запрос.УстановитьПараметр(«НаДату», <<?>>Дата); (Проверка: Сервер)
{Документ.КорректировкаСчетаДенежныхСредств.Форма.ФормаДокумента.Форма(14,36)}: Переменная не определена (СчетДенежныхСредств)
Запрос.УстановитьПараметр(«Счет», <<?>>СчетДенежныхСредств); (Проверка: Сервер)
Пыталась передавать их в процедуру:
СуммаНаСчете = ВернутьОстатокПоСчету(Дата, СчетДенжныхСредств);
Орёт уже на форму:
{Документ.КорректировкаСчетаДенежныхСредств.Форма.ФормаДокумента.Форма(3,39)}: Переменная не определена (Дата)
СуммаНаСчете = ВернутьОстатокПоСчету(<<?>>Дата, СчетДенжныхСредств); (Проверка: Тонкий клиент)
{Документ.КорректировкаСчетаДенежныхСредств.Форма.ФормаДокумента.Форма(3,45)}: Переменная не определена (СчетДенжныхСредств)
СуммаНаСчете = ВернутьОстатокПоСчету(Дата, <<?>>СчетДенжныхСредств); (Проверка: Тонкий клиент)
Перекинула эту функцию в модуль объекта, пыталась вызывать её из модуля формы, ругается, что функция не определена, хотя я даже добавила к функции «Экспорт».
А в самой процедуре СчетДенежныхСредствПриИзменении(Элемент) не даёт сделать запрос, ругается на запрос.
{Документ.КорректировкаСчетаДенежныхСредств.Форма.ФормаДокумента.Форма(3,17)}: Тип не определен (Запрос)
Запрос = Новый <<?>>Запрос; (Проверка: Тонкий клиент)
Где что не так делаю? Как правильно и почему?
Заранее благодарна!
Записан
&НаКлиенте
Процедура СчетДенежныхСредствПриИзменении(Элемент) тут надо в отладчике посмотреть и из элемента найти значение нового счета
СуммаНаСчете = ВернутьОстатокПоСчету(ДАТА, СЧЕТ); здесь надо передать значение даты и значение счета(или строку счета а в серверной функции найти счет по коду)
КонецПроцедуры
&НаСервере
Функция ВернутьОстатокПоСчету(ДАТА, СЧЕТ)
Запрос = Новый Запрос;
Запрос.Текст = «ВЫБРАТЬ
| ОстатокПоСчетамДенежныхСредствОстатки.СуммаОстаток
|ИЗ
| РегистрНакопления.ОстатокПоСчетамДенежныхСредств.Остатки(&НаДату, СчетДенежныхСредств = &Счет) КАК ОстатокПоСчетамДенежныхСредствОстатки»;
Запрос.УстановитьПараметр(«НаДату», Дата);
Запрос.УстановитьПараметр(«Счет», СчетДенежныхСредств);
Результат = Запрос.Выполнить().Выгрузить();
Возврат Результат.СуммаОстаток;
КонецФункции
Записан
Ничё не поняла! Можно поподробней?
В отладчике смотрела, но значение даты и счета так и не нашла.
Записан
На клиенте определите переменную Дата И Счет
&НаКлиенте
Процедура СчетДенежныхСредствПриИзменении(Элемент)
Дата = Объект.Дата;
Счет = Объект. СчетДенежныхСредств;
//Затем передайте эти переменный в процедуру на сервер в качестве параметров
СуммаНаСчете = ВернутьОстатокПоСчету(Дата, Счет);
КонецПроцедуры
//После чего можно вызывать функцию на сервере без контекста
&НаСервереБезКонтекста
Функция ВернутьОстатокПоСчету(Дата, Счет)
Запрос = Новый Запрос;
Запрос.Текст = «ВЫБРАТЬ
| ОстатокПоСчетамДенежныхСредствОстатки.СуммаОстаток
|ИЗ
| РегистрНакопления.ОстатокПоСчетамДенежныхСредств.Остатки(&НаДату, СчетДенежныхСредств = &Счет) КАК ОстатокПоСчетамДенежныхСредствОстатки»;
Запрос.УстановитьПараметр(«НаДату», Дата);
Запрос.УстановитьПараметр(«Счет», Счет);
Результат = Запрос.Выполнить().Выгрузить();
Возврат Результат.СуммаОстаток;
КонецФункции
Записан
Данная ошибка возникает в том случае, когда вы пытаетесь использовать значение типа, о котором платформа не знает.
Вы зададитесь вопросом: «Как она может его не знать!?» Очень просто: либо используемый Вами релиз платформы ниже 1С:Предприятие 8.3.14, либо в свойствах конфигурации установлен режим совместимости ниже 8.3.14. Начиная с него тип УправляемаяФорма
стал называться ФормаКлиентскогоПриложения
. Это не означает, что старый тип не работает, но он устарел и фирма «1С» не дает никаких гарантий, что его не удалят в одном из будущих релизов.
Возможные варианты решений:
- Найти и заменить в коде все упоминания типа
ФормаКлиентскогоПриложения
на типУправляемаяФорма
- Переключить режим совместимости в свойствах конфигурации на 8.3.14 и выше
- Выполнить апгрейд технологической платформы на версию 8.3.14 и выше
Внимание! В последних двух случаях не забывайте выполнить проверку остальных ключевых механизмов на тестовой среде перед обновлением платформы на рабочем контуре
Читайте также:
- Ошибка «Отсутствует отображение для типа (ФормаКлиентскогоПриложения)»
Тип не определен (Запрос) Запрос = Новый <<?>>Запрос; (Проверка: Тонкий клиент) Всем здравствуйте. Создаю новую информационную базу, не из шаблона, для разработки. Создаю справочники, доки, регистры. Собственно вопрос. Если стоит параметр &НаКлиенте я так понимаю тип запрос на клиенте не определен, ставлю на сервере, ничего не происходит КонецПроцедуры Что пишу неправильно?
&НаСервере КонецПроцедуры ошибок не выдает но и запросы также не исполняются
с чего решил, что запросы не выполняются?
С того что никакие сообщения не выводятся, точнее может и исполняются, однако результата нет
сообщения выводятся, только на сервере включай уже мосх )
КонецПроцедуры Здесь куда выводятся?
тс — глупый тролль, уничтожиить!
брррр, да нет, не тролль, учусь маленько
… Доступность: Сервер, толстый клиент, внешнее соединение. (с) СП
То есть мне нужно создавать новую базу на сервере, так понимаю?
открываем сп и в первой главе «директивы компиляции» изучаем, хотя может лучше порясят выращивать — ты подумай, что выгоднее
(14+) Медитируй до просветления: Тип не определен (Запрос) Запрос = Новый <<?>>Запрос; (Проверка: Тонкий клиент)
То есть базу на локальном компьютере я правильно создал. Что дальше делать дабы в ней сожно было работать с запросами?
В тонком клиенте тип «Запрос» не определен.
Запрос это сущность или процедура?
На сервере выполняешь запрос. На клиента возвращаешь сообщения.
(17+) …в нем толко интерфейс, что-либо делать с базой надо на стороне сервера.
Как это с точки зрения синтаксиса будет выглядеть? 2 процедуры?
Хм, можно пример как возвратить с сервера на клиент? Исполнение так понимаю
Запрос = Новый Запрос; Убери скобочки! И — нескромный вопрос — а что на сервере открывают-то?
На клиенте этой процедуры просто не будет. Как вариант — создать общий модуль с галочками «сервер» и «вызов сервера», в нем расположить твою функцию которая вернет данные, ее и вызывать из ПриОткрытии.
В общем все мои запросы исполнять в общих модулях, При открытии прописывать уже непосредственно передаваемые с сервера параметры?
Мутновато пока укладывается, ну ладно, спасибо, будем разбираться
Поищи видеокурс Гилева по управляемым формам.
на КЛИЕНТЕ же!!! сделай на сервере
ТС как минимум уже год учится, никак не научится
чего тут укладываться то? УФ — видимость методов и т.п. смотреть обязательно, только и всего.
Хм, как ИБ без управляемых форм сделать? Конфигурации подревнее поискать?
нужно как-то себя заставить
Ога, я пока ток БП ковырял, без УФ.
Для примера родил следующее. &НаСервере Возвращает ошибку {Справочник.Номенклатура.Форма.ФормаЭлемента.Форма}: Ошибка при вызове метода контекста (ВыбратьДанные) Сообщить(ВыбратьДанные(Этаформа.Элементы.Наименование)); по причине: Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа. по причине: Ошибка преобразования данных XDTO: Запись значения свойства ‘param’: форма: Элемент имя: { по причине: Ошибка отображения типов: Отсутствует отображение для типа ‘ПолеФормы’
таже самая ошибка возвращается.
Посмотри хоть какой тип у «Этаформа.Элементы.Наименование»
=) о чем и речь. Какие типы можно передавать?
а вот этот бред как объясните? Что это за слово?
Где Ном.Наименование, простите
все не читал. Что за прикол менять директиву компиляции у событий формы?
Не ругайтесь шибко, УФ первый раз юзаю
Уррра, нашел ЭтаФорма.Объект.Наименование. Передалось таки
ТаблицаЗначений Доступность: Сервер, толстый клиент, внешнее соединение.
Соединяю с регистромСведений цены.Сообщение выдалось
Наименование обьекта текущей формы возвращает. Цену и Период возвращает почему-то пустыми. Хотя в регистресведений Цены эти данные заполнены
Отладчик в руки и смотри что у тебя в Рез после Рез.Следующий. Попробуй запрос с твоими параметрами в консоли запросов. Так на глаз не вижу почему возвращает пустые значения
Ну и кто там на сервере это читает КонецЦикла; Засовывай в структуру и возвращай клиенту
суть то не в этом. суть то в другом
Рез.Наим возвращает и сообщает. Цену с периодом берет пустые
не взлетит по той простой причине, что таблица значений не живет на клиенте.
дык у тебя соединения нет. Кто же соединение по наименованию делает? Самописка что ли полная?
Суть… Интересно, какой кошмар у него затаился в регистре Цены? Неужто Измерение Наименование строкового типа?
Измерение Наименование типа СправочникСсылка.Номенклатура
а измерение Номенклатура типа СправочникСсылка.Номенклатура значит безжалостно удалил?
Да ну? А это как понимать?
Может ВыбратьДанные(ЭтаФорма.Объект.Наименование.ТекстРедактирования); или что там еще
тут накосячил, Ном.Ссылка = Рег.Ссылка?
У записи регистра нет ссылки. Да открой ты консоль запросов
Извиняйте ребят, психологических отклонений нет,просто мудаг :))) Измерение Наименование сделал В общем переименовал заработало все.
Тэги: 1С 8
Комментарии доступны только авторизированным пользователям
Тема: Путаница в модулях! Откуда вызывать запрос? (Прочитано 5033 раз)
0 Пользователей и 1 Гость просматривают эту тему.
Всем доброго времени суток! Совсем запуталась в модулях! Объясните, пожалуйста, что делаю не так?
У документа реквизиты: Номер, Дата, СчетДенежныхСредств, ОстатокНаСчете, СуммаФактическая, такие-же на форме. Хочу при выборе счета автоматом получть остаток по нему. Пробовала так:
&НаКлиенте
Процедура СчетДенежныхСредствПриИзменении(Элемент)
СуммаНаСчете = ВернутьОстатокПоСчету();
КонецПроцедуры
&НаСервере
Функция ВернутьОстатокПоСчету()
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ОстатокПоСчетамДенежныхСредствОстатки.СуммаОстаток
|ИЗ
| РегистрНакопления.ОстатокПоСчетамДенежныхСредств.Остатки(&НаДату, СчетДенежныхСредств = &Счет) КАК ОстатокПоСчетамДенежныхСредствОстатки";
Запрос.УстановитьПараметр("НаДату", Дата);
Запрос.УстановитьПараметр("Счет", СчетДенежныхСредств);
Результат = Запрос.Выполнить().Выгрузить();
Возврат Результат.СуммаОстаток;
КонецФункции
Орёт, что переменная не определена:
{Документ.КорректировкаСчетаДенежныхСредств.Форма.ФормаДокумента.Форма(13,38)}: Переменная не определена (Дата)
Запрос.УстановитьПараметр(«НаДату», <<?>>Дата); (Проверка: Сервер)
{Документ.КорректировкаСчетаДенежныхСредств.Форма.ФормаДокумента.Форма(14,36)}: Переменная не определена (СчетДенежныхСредств)
Запрос.УстановитьПараметр(«Счет», <<?>>СчетДенежныхСредств); (Проверка: Сервер)
Пыталась передавать их в процедуру:
СуммаНаСчете = ВернутьОстатокПоСчету(Дата, СчетДенжныхСредств);
Орёт уже на форму:
{Документ.КорректировкаСчетаДенежныхСредств.Форма.ФормаДокумента.Форма(3,39)}: Переменная не определена (Дата)
СуммаНаСчете = ВернутьОстатокПоСчету(<<?>>Дата, СчетДенжныхСредств); (Проверка: Тонкий клиент)
{Документ.КорректировкаСчетаДенежныхСредств.Форма.ФормаДокумента.Форма(3,45)}: Переменная не определена (СчетДенжныхСредств)
СуммаНаСчете = ВернутьОстатокПоСчету(Дата, <<?>>СчетДенжныхСредств); (Проверка: Тонкий клиент)
Перекинула эту функцию в модуль объекта, пыталась вызывать её из модуля формы, ругается, что функция не определена, хотя я даже добавила к функции «Экспорт».
А в самой процедуре СчетДенежныхСредствПриИзменении(Элемент) не даёт сделать запрос, ругается на запрос.
{Документ.КорректировкаСчетаДенежныхСредств.Форма.ФормаДокумента.Форма(3,17)}: Тип не определен (Запрос)
Запрос = Новый <<?>>Запрос; (Проверка: Тонкий клиент)
Где что не так делаю? Как правильно и почему?
Заранее благодарна!
Записан
&НаКлиенте
Процедура СчетДенежныхСредствПриИзменении(Элемент) тут надо в отладчике посмотреть и из элемента найти значение нового счета
СуммаНаСчете = ВернутьОстатокПоСчету(ДАТА, СЧЕТ); здесь надо передать значение даты и значение счета(или строку счета а в серверной функции найти счет по коду)
КонецПроцедуры
&НаСервере
Функция ВернутьОстатокПоСчету(ДАТА, СЧЕТ)
Запрос = Новый Запрос;
Запрос.Текст = «ВЫБРАТЬ
| ОстатокПоСчетамДенежныхСредствОстатки.СуммаОстаток
|ИЗ
| РегистрНакопления.ОстатокПоСчетамДенежныхСредств.Остатки(&НаДату, СчетДенежныхСредств = &Счет) КАК ОстатокПоСчетамДенежныхСредствОстатки»;
Запрос.УстановитьПараметр(«НаДату», Дата);
Запрос.УстановитьПараметр(«Счет», СчетДенежныхСредств);
Результат = Запрос.Выполнить().Выгрузить();
Возврат Результат.СуммаОстаток;
КонецФункции
Записан
Ничё не поняла! Можно поподробней?
В отладчике смотрела, но значение даты и счета так и не нашла.
Записан
На клиенте определите переменную Дата И Счет
&НаКлиенте
Процедура СчетДенежныхСредствПриИзменении(Элемент)
Дата = Объект.Дата;
Счет = Объект. СчетДенежныхСредств;
//Затем передайте эти переменный в процедуру на сервер в качестве параметров
СуммаНаСчете = ВернутьОстатокПоСчету(Дата, Счет);
КонецПроцедуры
//После чего можно вызывать функцию на сервере без контекста
&НаСервереБезКонтекста
Функция ВернутьОстатокПоСчету(Дата, Счет)
Запрос = Новый Запрос;
Запрос.Текст = «ВЫБРАТЬ
| ОстатокПоСчетамДенежныхСредствОстатки.СуммаОстаток
|ИЗ
| РегистрНакопления.ОстатокПоСчетамДенежныхСредств.Остатки(&НаДату, СчетДенежныхСредств = &Счет) КАК ОстатокПоСчетамДенежныхСредствОстатки»;
Запрос.УстановитьПараметр(«НаДату», Дата);
Запрос.УстановитьПараметр(«Счет», Счет);
Результат = Запрос.Выполнить().Выгрузить();
Возврат Результат.СуммаОстаток;
КонецФункции
Записан
Что я люблю в 1с, так это непонятные непредвиденные ошибки. На днях нужно было помочь человеку обновить старую бухгалтерию до современного релиза, я согласился. Как же я был удивлен когда 1с подкинула мне ошибку тип не определен.
Предистория: Бухгалтерия предприятия базовая 2.0.66.138 нужно обновить до актуального релиза бухгалтерии 3.0.
Каких-то особых выдумок я применять не стал, скачал обновление с https://releases.1c.ru/total и установил его. Я сильно удивился увидев ошибку тип не определен.
В начале я попробовал откатится к версии до обновления. Хорошо что я перед работами всегда делаю бекап. Сделал тестирование и исправление, проверил базу на повреждения, обновил повторно, но получил ту же ошибку. После этого решил посмотреть журнал регистрации и поправить ошибку в отладке.
Журнал регистрации всеми силами направлял меня в общий модуль управление доступом служебный.
Тип не определен {ОбщийМодуль.УправлениеДоступомСлужебный.Модуль(26085)}: {ОбщийМодуль.УправлениеДоступомСлужебный.Модуль(25277)}: {ОбщийМодуль.УправлениеДоступомСлужебный.Модуль(24362)}: {ОбщийМодуль.УправлениеДоступомСлужебный.Модуль(23491)}: {ОбщийМодуль.УправлениеДоступомСлужебный.Модуль(23243)}: {ОбщийМодуль.УправлениеДоступомСлужебный.Модуль(22956)}: {ОбщийМодуль.УправлениеДоступомСлужебный.Модуль(22337)}: {ОбщийМодуль.УправлениеДоступомСлужебный.Модуль(22217)}: {РегистрСведений.ПараметрыОграниченияДоступа.МодульМенеджера(206)}:ДействующиеПараметры = УправлениеДоступомСлужебный.ДействующиеПараметрыОграниченияДоступа( {РегистрСведений.ПараметрыОграниченияДоступа.МодульМенеджера(157)}:ЗапланироватьОбновление_00_00268406("ПереходНаВерсиюБСП_3.0.3.168"); {ОбщийМодуль.УправлениеДоступомСлужебный.Модуль(4489)}: {(1)}:УправлениеДоступомСлужебный.ОбновитьВспомогательныеДанныеПоИзменениямКонфигурации() {ОбщийМодуль.ОбщегоНазначения.Модуль(5113)}:Выполнить ИмяМетода + "(" + ПараметрыСтрока + ")"; {ОбщийМодуль.ОбновлениеИнформационнойБазыСлужебный.Модуль(6320)}:ОбщегоНазначения.ВыполнитьМетодКонфигурации(Обработчик.Процедура, ПараметрыОбработчика); {ОбщийМодуль.ОбновлениеИнформационнойБазыСлужебный.Модуль(2155)}:ВыполнитьОбработчикОбновления(Обработчик, ПараметрыОбработчика, ДополнительныеПараметры); {ОбщийМодуль.ОбновлениеИнформационнойБазыСлужебный.Модуль(1707)}:ИтерацияОбновления.ВыполненныеОбработчики = ВыполнитьИтерациюОбновления(ИтерацияОбновления, Параметры); {ОбщийМодуль.ОбновлениеИнформационнойБазыСлужебный.Модуль(93)}:ВыполнитьДействияПриОбновленииИнформационнойБазы(ПараметрыОбновления, ДополнительныеПараметры); {ОбщийМодуль.ОбновлениеИнформационнойБазыСлужебный.Модуль(2289)}:Результат = ВыполнитьОбновлениеИнформационнойБазы(ПараметрыОбновления); {(1)}:ОбновлениеИнформационнойБазыСлужебный.ВыполнитьОбновлениеИнформационнойБазыВФоне(Параметры[0],Параметры[1]) {ОбщийМодуль.ОбщегоНазначения.Модуль(5113)}:Выполнить ИмяМетода + "(" + ПараметрыСтрока + ")"; {ОбщийМодуль.ДлительныеОперации.Модуль(1036)}:ОбщегоНазначения.ВыполнитьМетодКонфигурации(ИмяПроцедуры, ПараметрыВызова); {ОбщийМодуль.ДлительныеОперации.Модуль(1026)}:ВызватьПроцедуру(ВсеПараметры.ИмяПроцедуры, ВсеПараметры.ПараметрыПроцедуры);
Перехожу в конфигуратор ищу ОбщийМодуль.УправлениеДоступомСлужебный и что же я вижу. Исходный текст модуля отсутствует, конфигурация на поддержке и снимать и ломать модуль для рядового обновления это точно ложный путь.
Пришло время изучать ошибку тип не определен, вот что удалось выяснить. Ссылки с решением долго не заставили себя ждать, давний баг, который привели в порядок, но старые версии БСП и старая версия платформы написаны так, словно это не ошибка.
https://bugboard.v8.1c.ru/error/000100482
https://partners.v8.1c.ru/forum/topic/1950512
В версиях платформы до 8.3.22.1704 конструкция Тип(“”) (где в качестве аргумента – пустая строка), возвращала пустое значение типа Тип, в новой версии платформы попытка выполнения данной конструкции приводит к ошибке.
Причем если взять и разные версии платформы и потестировать, что будет возвращаться, поведение и тип возвращаемого значения меняется в каждой версии платформы. Причем если в старых платформах возвращается пустая строка или пустое значение типа, то начиная с 8.3.22.1704 конструкция просто приводит к вылету с ошибкой.
Я не стал выдумывать патчи и писать какие-то доработки, просто использовал более старую версию платформы и все заработало.
Какой можно сделать вывод из этой истории – нужно обновлять платформу и конфигурации вовремя!