Обогатил свою компетенцию, научившись передавать таблицу значений в качестве параметра запроса com-соединению с 1С Предприятием 8.2.
Изначально думал, что я это делать умею, и никаких подвохов от задачи не ждал.
Однако передача конструктору ОписаниеТипов массива допустимых типов с единственным значением Тип(«Строка») привела к ошибке выполнения удалённого запроса «Тип не может быть выбран в запросе» в момент выполнения запроса.
Стал пытаться изменить типизацию таблицы, заменив Тип(«Строка») на что-то другое. Первая мысль была — вызвать эту функцию Тип() в контексте com-соединения. Однако на этом пути меня ждало полное разочарование.
Долго пытался понять, почему у com-соединения 1С Предприятием 8.2 нет метода Тип(), Type() или чего-то подобного. Потратив битый час, так и не разобрался, почему…
Стал рыскать в поисках информации по интернету, как народ передаёт таблицу значений в качестве параметра запроса com-соединению с 1С Предприятием 8.2. Просмотрев пару статей, наткнулся на крошечную заметку, где в конструкторе ОписаниеТипов нет вызова этой функции Тип(), а есть просто строка с именем типа (то есть, аргумент функции Тип). Попробовал опустить вызов Тип(), оставив вместо вызова функции её аргумент. Помогло!
Дальше получил ошибку в запросе «нельзя сравнивать поля неограниченной длины и несовместимые типы» и стал разбираться с квалификаторами строки. Квалификатор строки в вызове конструктора ОписаниеТипов стоит на втором месте, на первом месте квалификатор числа был опущен. Оказывается, в com-соединении так делать нельзя. Поставил квалификатор строки на первое место, и мой запрос заработал!
Итак, описать типизированную таблицу значений для передачи com-соединению можно так :
КвалифСтроки = СоединениеС_ЗУП.NewObject(«КвалификаторыСтроки», 20);
ДопустимыеТипы = СоединениеС_ЗУП.NewObject(«ОписаниеТипов», «Строка», КвалифСтроки);
ТаблицаПараметровЗУП.Колонки.Добавить(«УпрКод_Склада», ДопустимыеТипы);
ТаблицаПараметровЗУП.Колонки.Добавить(«УпрКод_Фирмы», ДопустимыеТипы);
Вот на эти 4 строки я потратил около часа, чтобы мой запрос в удалённой базе заработал так, как мне нужно. Причём до самого конца я не был уверен, что то, что я хочу, вообще возможно, и уже мысленно продумывал пути обхода этого неожиданного препятствия.
Спасибо за решение, сам столкнулся с такой проблемой, но подумать не мог, что для этого надо колонкам тип давать создавая его через NewObject.
Спасибо. Очень помогла публикация.
Я посоветовал бы вам знакомство с языком программирования начинать с прочтения документации, тогда не появится даже мысли создавать такие посты.
При чем здесь com соединение, если в 1С нельзя использовать в запросах таблицы значений, где есть поля неограниченной длины?
Смысл поста был как раз в том, чтобы из таблицы значений со строками неограниченной длины сделать таблицу со строками ограниченной длины. При работе в com-соединении.