Что я люблю в 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 конструкция просто приводит к вылету с ошибкой.
Я не стал выдумывать патчи и писать какие-то доработки, просто использовал более старую версию платформы и все заработало.
Какой можно сделать вывод из этой истории – нужно обновлять платформу и конфигурации вовремя!
Тип не определен (Запрос) Запрос = Новый <<?>>Запрос; (Проверка: Тонкий клиент) |
Я |
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 — правильно?
Данная ошибка возникает в том случае, когда вы пытаетесь использовать во встроенном языке значение типа, о котором платформа ничего не знает.
Вы зададитесь вопросом: «Как она может его не знать!?» Очень просто: либо используемый Вами релиз платформы ниже 1С:Предприятие 8.3.14, либо в свойствах конфигурации установлен режим совместимости ниже 8.3.14. Начиная с него тип УправляемаяФорма стал называться ФормаКлиентскогоПриложения. Это не означает, что старый тип не работает, но он устарел и фирма «1С» не дает никаких гарантий, что его не удалят в одном из будущих релизов.
Возможные варианты решений:
- Найти и заменить в коде все упоминания типа
ФормаКлиентскогоПриложенияна типУправляемаяФорма - Переключить режим совместимости в свойствах конфигурации на 8.3.14 и выше
- Выполнить апгрейд технологической платформы на версию 8.3.14 и выше
Внимание! В последних двух случаях не забывайте выполнить проверку остальных ключевых механизмов на тестовой среде перед обновлением платформы на рабочем контуре
Читайте также:
- Ошибка «Отсутствует отображение для типа (ФормаКлиентскогоПриложения)»
Поделиться страницей в соц.сетях
Метки: Метки 1С:Предприятие 8.2.14+ Управляемые формы
Тип не определен (ЗаписьJSON)
Ошибка «Тип не определен» говорит об устаревшей платформе. В конфигурации используются более современные объект, чем присутствуют в платформе.
Либо контекст, который не позволяет использования данного объекта: запуск под другим типом клиента, а также банальная опечатка в имени типа.
В данном конкретном случае таким объектом является «ЗаписьJSON», которая появилась не так давно в версии 8.3 платформы 1С.
Полный текст ошибки
Тип не определен (ЗаписьJSON)
ЗаписьJSON = Новый <<?>>ЗаписьJSON;
Особенности проблемы:
Платформа позволяет использовать в конфигурации новые объекты, даже если в конфигурации установлен режим совместимости со старой версией.
Если же объектами являются объекты метаданных (к примеру, такие как Web-сервисы), то изменить такую конфигурацию не возможно (хотя она будет работать без данных объектов, не вызывая ошибок)
На скриншоте ниже: с версией 8.2
Другие причины проблемы:
Возможно новая платформа установлена, но запускается старая
для этого зайдите в свойства базы («Изменить» в списке запуска:) — нижнее поле «Версия 1С:Предприятия»
Либо указана устаревшая «версия» платформы (кнопка «Настройка» в списке баз) — раздел «Используемые версии»
Поведение системы
В большинстве случаев «тип не определен» это критичная ошибка, которая возникает:
- в момент запуска самой 1С, при этом полностью блокирует запуск.
- при запуске форм списка или форм объектов — блокирует запуск этого или ряда объектов.
Обычно не связана с правами пользователя и со средой исполнения, если это не com/activex-объекты.
Часто вызывающие ошибку объекты:
httpзапрос, настройкикомандногоинтерфейса, выборкаизрезультатазапроса
Реклама — узаконенная ложь.
ТаблицаЗначений Обработка МодульФормы
Автор fsa, 31 янв 2016, 15:16
0 Пользователей и 1 гость просматривают эту тему.
Пытаюсь в Модуле формы Обработки создать ТаблицуЗначений.
ТЗ = Новый ТаблицаЗначений Выдает ошибку, Тип не определен.
Пытался в глобальном ее написать, ругается что не может передать с сервера на клиент……
Неужели через Реквизит придется таблицу добавлять?
сие действительно факт
1. на клиенте нет типа ТаблицаЗначений
2. с сервера не передается
в чем глобальная задача?
Получил помощь — скажи СПАСИБО.
Разобрался сам — расскажи другим.
делайте табличную часть, на клиенте её заполняйте, на сервере создавайте документ
Помог? Нажми — Спасибо 
skype: Soprov1C
Цитата: дфтын от 31 янв 2016, 21:16
делайте табличную часть, на клиенте её заполняйте, на сервере создавайте документ
Я в шоке. А че так сложно? Реквизит ТаблицаЗначений требует меньше ресурсов? в 8.2 вроде все работает…..
СЛОЖНО?
это, а где вы увидели реквизит — таблица значений? мне просто интересно. и причем тут 8.2.
Сдается мне у Вас несоглосование в голове
Помог? Нажми — Спасибо 
skype: Soprov1C
Цитата: дфтын от 31 янв 2016, 21:40
СЛОЖНО?это, а где вы увидели реквизит — таблица значений? мне просто интересно. и причем тут 8.2.
Сдается мне у Вас несоглосование в голове
Возможно. Давайте по порядку. Создать табличную часть. Что имели ввиду?
я? я имел ввиду создать табличную часть.
Вы не в курсе, что это?
вперед учиться или нанимать программистов. за печеньки.
Помог? Нажми — Спасибо 
skype: Soprov1C
Цитата: дфтын от 31 янв 2016, 21:50
я? я имел ввиду создать табличную часть.
Вы не в курсе, что это?
вперед учиться или нанимать программистов. за печеньки.
Обязательно последую вашему совету. Но чуть позже. 1С у меня в догонку к основным обязанностям.
Я разобрался…. Спасибо. но суть от этого не меняется. Зачем создавать табличную часть, когда есть ТаблицаЗначений? Но которую нельзя использовать! Не понимаю……
Помог? Нажми — Спасибо 
skype: Soprov1C
Anastasia_Sokel, ТаблицаЗначений недоступна на клиенте, есть на сервере. Из своей процедуры вызывай другую, серверную, там и объявляй.
Пользуйся синтакс-помощником, там много полезного:
Кликните здесь для просмотра всего текста
ТаблицаЗначений (ValueTable)
Элементы коллекции:
СтрокаТаблицыЗначений
Для объекта доступен обход коллекции посредством оператора Для каждого … Из … Цикл. При обходе выбираются элементы коллекции.
Возможно обращение к элементу коллекции посредством оператора […]. В качестве аргумента передается индекс строки (нумерация с 0).
Свойства:
Индексы (Indexes)
Колонки (Columns)
Методы:
Вставить (Insert)
ВыбратьСтроку (ChooseRow)
ВыгрузитьКолонку (UnloadColumn)
Добавить (Add)
ЗагрузитьКолонку (LoadColumn)
ЗаполнитьЗначения (FillValues)
Индекс (IndexOf)
Итог (Total)
Количество (Count)
Найти (Find)
НайтиСтроки (FindRows)
Очистить (Clear)
Получить (Get)
Свернуть (GroupBy)
Сдвинуть (Move)
Скопировать (Copy)
СкопироватьКолонки (CopyColumns)
Сортировать (Sort)
Удалить (Delete)
Конструкторы:
По умолчанию
Описание:
Таблица значений предназначена для хранения значений в табличном виде. Все основные операции с таблицей производятся именно через этот объект. Он позволяет манипулировать строками таблицы значений и предоставляет доступ к коллекции колонок. Колонки могут быть различных типов (в том числе множественных).
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер).
Возможен обмен с сервером. Сериализуется. Данный объект может быть сериализован в/из XDTO. Тип XDTO, соответствующий данному объекту, определяется в пространстве имен {http://v8.1c.ru/8.1/data/core}. Имя типа XDTO: ValueTable.
Перенос таблицы значений между клиентом и сервером
16.05.2017
Всем привет.
Бывают такие моменты, когда необходимо таблицу значений передать с сервера на клиент, увы, Мутабельные значения и т.д.
В тоже время есть возможность перекидывать все это добро через Хранилище, чем собственно разработчики часто пользуются.
Но сегодня я бы хотел вынести на Вашу критику вот такой пример переноса.
Сильно не пинайте.
Все мы сталкивались с ситуацией, когда необходимо с сервера передать данные на клиент. И далеко не всегда это примитивные типы.
Об одном из таких типов я бы сегодня и хотел поговорить.
Речь сегодня о таблицы значений.
Данный тип является мутабельным и при попытке выполнить это действия мы получим ошибку:
{Справочник.НастройкиЗаполненияОбъектов1СДокументооборота.МодульОбъекта(33)}: Ошибка при вызове метода контекста (ПолучитьПрокси)
Прокси = ИнтеграцияС1СДокументооборотВызовСервера.ПолучитьПрокси();
по причине:
Попытка передачи мутабельного значения результата метода ПолучитьПрокси ().
(текст ошибки в каждом случае свой)
Сегодня я выношу на Вашу критику и обозрение один из вариантов решения этой проблемы, а именно преобразование в Массив(может передаваться) из структур и обратно в таблицу.
Функция «ПреобразоватьТаблицуЗначенийВМассив» выполняется на сервере перед передачей данных, а «ПреобразоватьМассивВТаблицуЗначений» уже на клиенте соответственно.
Код этих функций:
// Функция преобразует ТаблицуЗначений в Массив из структур. // Функция ПреобразоватьТаблицуЗначенийВМассив(тзДанные) Экспорт мсДанные = Новый Массив; // Запишем в массив Для Каждого СтрокаТЗ Из тзДанные Цикл стСтрокаТаблицы = Новый Структура; Для Каждого ИмяКолонки Из тзДанные.Колонки Цикл стСтрокаТаблицы.Вставить(ИмяКолонки.Имя, СтрокаТЗ[ИмяКолонки.Имя]); КонецЦикла; мсДанные.Добавить(стСтрокаТаблицы); КонецЦикла; Возврат мсДанные; КонецФункции // ПреобразоватьТаблицуЗначенийВМассив() // Функция преобразует Массив из структур в ТаблицуЗначений. // Функция ПреобразоватьМассивВТаблицуЗначений(мсДанные) Экспорт тзДанные = Новый ТаблицаЗначений; Для Каждого ЭлементМассива Из мсДанные Цикл // Рисуем колонки для таблицы Если тзДанные.Колонки.Количество() = 0 Тогда Для Каждого ЗначениеСтруктуры Из ЭлементМассива Цикл тзДанные.Колонки.Добавить(ЗначениеСтруктуры.Ключ); КонецЦикла; КонецЕсли; // Добавляем данные в таблицу НоваяСтрока = тзДанные.Добавить(); Для Каждого ЗначениеСтруктуры Из ЭлементМассива Цикл НоваяСтрока[ЗначениеСтруктуры.Ключ] = ЗначениеСтруктуры.Значение; КонецЦикла; КонецЦикла; Возврат тзДанные; КонецФункции // ПреобразоватьМассивВТаблицуЗначений()
Собственно сабж. В то время, как охотники… зачеркнуто В то время, как Соответствие и Структура — доступны. ГДЕ логика?
Есть конечно мысль — чтобы товарисчи с клюшками вычисления, основаные на ТЗ, не лепили на ТонкомКлиенте по привычке, а переносили на супермегакластеризированные сервера. Трогает такая забота.
а что мешает товарищам с клюшками (которые мануал всё-таки читали) использовать коллекцию (ТаблицаЗначений) на клиенте для своих гадких вычислений?
{МодульУправляемогоПриложения(43,32)}: Тип не определен (ТаблицаЗначений) ЧЯДНТ?
Не, ты ткни меня носом. Я с удовольствием реализую все на ТЗ, ибо уже все написал, и переделывать на Соотвествие — ломает. Вообще задача — Сохранить, Запустить, Удалить файл. Но ВебКлиент с его асинхронностью усложняет это всё до дикости.
В редакторе форм, где окошко с реквизитами формы — добавь новый реквизит и выбери тип ТаблицаЗначений. Колонки тож там добавлять.
+ На сервере чтобы в этот реквизит присвоить ТЗ надо либо либо просто присвоить не получится
Это вижу. Но см. {МодульУправляемогоПриложения(43,32)}
Кстати да, погорячился о полной недоступности ТЗ на клиенте. В упр. формах они доступны.
Твоя функция на клиенте компилируется, потому и ошибка.
Главное отличать ТаблицаЗначений от (ТаблицаЗначений).
Хочешь сказать, что я не смогу сделать так: ? Тоесть, вычисления ТЗ на клиенте невозможны?
Элементы коллекции: ДанныеФормыЭлементКоллекции Для объекта доступен обход коллекции посредством оператора Для каждого … Из … Цикл. При обходе выбираются элементы. Методы: Вставить (Insert) Описание: Предназначен для моделирования коллекций в данных управляемой формы. Доступность: Тонкий клиент, веб-клиент, сервер, толстый клиент. См. также: ТаблицаФормы, свойство ВыделенныеСтроки Расширение поля формы для поля календаря, свойство ВыделенныеДаты Глобальный контекст, метод ДанныеФормыВЗначение Глобальный контекст, метод ЗначениеВДанныеФормы УправляемаяФорма, метод ЗначениеВРеквизитФормы УправляемаяФорма, метод РеквизитФормыВЗначение
Тэги:
Комментарии доступны только авторизированным пользователям
ТаблицаЗначений — это программный объект встроенного языка, позволяющий строить произвольные наборы данных в памяти компьютера, отображать их в табличном виде, а также программно и интерактивно манипулировать ими (добавлять, редактировать, удалять и сортировать).
Таблицы состоят из строк и колонок. Строки располагаются вниз по вертикали, а колонки — вправо по горизонтали. Строки и колонки имеют индексы, по которым к ним можно обращаться напрямую (начинаются с 0). Кроме этого, к колонкам можно обращаться по идентификатору.
Пересечения строк и колонок образуют ячейки, в которых содержатся значения. Тип значения определяется типом значения колонки.
Таблица значений является полностью динамическим объектом, т.е. Вы можете манипулировать не только строками таблицы, добавляя и удаляя их, но и колонками.
Таблица значений может использоваться явно при создании в коде необходимого количества переменных типа ТаблицаЗначений, либо неявно: при добавлении элемента управления ТабличноеПоле на обычную форму, и ТаблицаФормы — на управляемую. Здесь мы рассмотрим только программную работу с таблицей значений.
Создание таблицы значений
Как и большинство объектов встроенного языка, новая таблица значений может быть создана с помощью оператора Новый:
тз = Новый ТаблицаЗначений;
Колонки таблицы значений
Прежде чем начать работу с таблицей значений, необходимо создать структуру колонок. Каждая колонка характеризуется следующими свойствами:
Имя— идентификатор колонки (может содержать только алфавитные символы, цифры и знаки подчеркивания. Причем, начинаться имя колонки может только с буквы или символа подчеркивания);Заголовок— представление колонки в диалогах (может содержать произвольные символы);ТипЗначения— тип значения содержимого ячеек в этой колонке. Если тип не задан, в ячейке можно хранить значения произвольного типа;Ширина— ширина колонки в диалогах;
Доступ к колонкам производится через свойство Колонки объекта ТаблицаЗначений. Для добавления новой колонки используется метод Добавить():
тз.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка")); тз.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число")); тз.Колонки.Добавить("Свойство");//можно хранить произвольные данные
Для того, чтобы определить наличие колонки с нужным именем используется метод Найти():
найдКолонка = тз.Колонки.Найти("Наименование"); Если найдКолонка = Неопределено Тогда Сообщить("Колонка не найдена!"); КонецЕсли;
Перебор колонок выполняется следующим образом:
Для каждого Колонка Из тз.Колонки Цикл Сообщить(Колонка.Имя); КонецЦикла;
Для удаления колонки используется метод Удалить():
найдКолонка = тз.Колонки.Найти("Свойство"); Если НЕ найдКолонка = Неопределено Тогда тз.Колонки.Удалить(найдКолонка); КонецЕсли;
Свойства колонки таблицы значений
| Имя | Тип | Описание |
|---|---|---|
| Имя | Строка | символьный идентификатор колонки, по которому к ней можно обращаться из кода |
| Заголовок | Строка | строковое представление колонки на форме |
| ТипЗначения | ОписаниеТипов | свойство органичивает пространство доступных значений, которые можно указать в данной колонке |
| Ширина | Число | ширина колонки на форме (выражается в количестве символов) |
Методы коллекции колонок таблицы значений
| Вставить() | Вставляет новую колонку в указанную позицию коллекции |
| Добавить() | Добавляет новую колонку в конец коллекции |
| Количество() | Возвращает количество колонок в коллекции |
| Найти() | Ищет колонку в коллекции по имени |
| Очистить() | Удаляет все колонки из коллекции |
| Сдвинуть() | Сдвигает колонку влево или вправо |
| Удалить() | Удаляет колонку из коллекции |
Строки таблицы значений
С колонками разобрались. Давайте теперь разберемся со строками. Строки таблицы значений можно программно добавлять и удалять, перемещать и сортировать, а также выполнять операции поиска и отбора.
Добавление и удаление строк
Для добавления новой строки используется метод Добавить() объекта ТаблицаЗначений. Метод возвращает объект СтрокаТаблицыЗначений, с которым доступны дальнейшие манипуляции:
СтрокаТЧ = тз.Добавить();
И только теперь мы можем заполнить строку данными. Для этого обращаемся к ячейкам строки, указывая идентификаторы колонок через точку:
СтрокаТЧ.Наименование = "Стул деревянный"; СтрокаТЧ.Количество = 1; СтрокаТЧ.Свойство = ТекущаяДата();
Обратите внимание, что каждая СтрокаТаблицыЗначений ссылается на таблицу значений с помощью метода Владелец():
тз = СтрокаТЧ.Владелец();
Для удаления строки используется метод Удалить() объекта ТаблицаЗначений. Строку можно удалить либо передав методу непосредственно строку, либо ее индекс:
//непосредственное удаление строки тз.Удалить(СтрокаТЧ); //удаление строки по индексу тз.Удалить(тз.Индекс(СтрокаТЧ));
Перебор строк таблицы значений
Для перебора строк удобнее всего использовать оператор цикла Для Каждого. В редких случаях оправдано применение цикла Для:
Для Каждого СтрокаТЧ Из тз Цикл ИндСтроки = тз.Индекс(СтрокаТЧ); КонецЦикла; //в редких случаях Для ИндСтроки = 0 По тз.Количество() - 1 Цикл СтрокаТЧ = тз.Получить(ИндСТроки); КонецЦикла;
Поиск строк
В отличие от платформы 1С:Предприятие 7.7 в 8-ке расширен функционал работы с таблицей значений. Поиск можно выполнять не только по значению в колонке (в этом случае будет возвращена первая найденная строка), но и по набору свойств (в этом случае возвращается массив строк):
//поиск первой строки НайдСтрока = тз.Найти(Номенклатура, "Номенклатура"); //поиск набора строк ПараметрыПоиска = Новый Структура("Номенклатура", Номенклатура); мНайдСтроки = тз.НайтиСтроки(ПараметрыПоиска);
Все методы таблицы значений:
| Вставить() | Вставляет строку на указанное место |
| ВыбратьСтроку() | Позволяет интерактивно выбрать строку в диалоговом окне |
| ВыгрузитьКолонку() | Выгружает значения ячеек указанной колонки в массив значений |
| Добавить() | Добавлет новую строку в таблицу значений |
| ЗагрузитьКолонку() | Загружает значения в ячейки указанной колонки из массива |
| ЗаполнитьЗначения() | Заполняет ячейки указанных колонок определенным значением |
| Индекс() | Возвращает индекс строки таблицы значений |
| Итог() | Возвращает просуммированный итог по колонке таблицы значений |
| Количество() | Возвращает количество строк в таблице значений |
| Найти() | Выполняет поиск строки по значению |
| НайтиСтроки() | Выполняет поиск строк по указанным параметрам |
| Очистить() | Очищает строки таблицы значений |
| Получить() | Возвращает строку по ее индексу |
| Свернуть() | Выполняет сжатие строк и колонок таблицы значений |
| Сдвинуть() | Сдвигает строку вверх или вниз по таблице |
| Скопировать() | Создает новую таблицу значений копированием текущей |
| СкопироватьКолонки() | Создает новую пустую таблицу значений путем копирования колонок текущей таблицы |
| Сортировать() | Выполняет сортировку строк таблицы значений по указанным колонкам |
| Удалить() | Удаляет строку таблицы значений |
Иерархию свойств и типов значений, связанных с таблицей значений, схематически можно представить в виде дерева:
Читайте также:
- Как объединить таблицы значений
- Как программно выгрузить таблицу значений
- Как правильно загрузить значений в колонку таблицы значений из массива
Содержание:
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
Специалист компании «Кодерлайн»
Айдар Фархутдинов
| akamuza |
|
||
|---|---|---|---|
|
|
Есть внешняя обработка WebExport, в ней есть табличная часть КатегорииНоменклатуры.
и любвлю ошибку Тип не определен Постоянно эта ошибка. Код 1C v 8.х
Это срабатывает. Но оно мне ни к чему — просто для теста, что хотябы что-то работает. В общем, вопрос: как проверить тип для табличной части во внешней обработке? Изменено 03.04.14 01:27:15 по причине: Правка ошибок |
| Yandex |
|
||
|---|---|---|---|
|
|
| E_Migachev |
|
||
|---|---|---|---|
|
|
(0) akamuza, приложи обработку или покажи полный текст, так не понятно для чего получается тип и зачем это вообще |
| akamuza |
|
||
|---|---|---|---|
|
|
Эта тема для того, чтобы обрабатывать перетаскивания между двумя табличными полями: одно привязано к дереву значений, а второе привязано к табличной части. Сравнение на тип вызывается при проверке перетаскивания, чтобы было понятно, перетаскивают ли ветку дерева, или перетаскивают элемент с табличного поля на ветку дерева. Зависимо от результата срабатывает необходимая процедура. Примерно так: Код 1C v 8.х
Так вот, для Код 1C v 8.х
ошибка Тип не определен. Проблему решил так: Код 1C v 8.х
Поскольку табличная часть КатегорииНоменклатуры будет всегда содержать строку, то решение работает. Но спортивный интерес остался, чтобы решить вопрос правильным образом. Изменено 03.04.14 12:34:28 |
| Подсказка: Вы получили ответ на свой вопрос — закройте вопрос! |










