Версия 8.3.7.1845
Бухгалтерия для Беларуси 1.6
Доброго времени суток. Делаю запрос и получаю COM объект в значениях.
Как получить сами значения из запроса, то есть не COMобъекты, а цифры строки и т.д.?
ЗапросВТорг = База.NewObject("Запрос");
ЗапросВТорг.Текст = "ВЫБРАТЬ
| ПеремещениеТоваров.Ссылка,
| ПеремещениеТоваров.ВерсияДанных,
| ПеремещениеТоваров.ПометкаУдаления,
| ПеремещениеТоваров.Номер,
| ПеремещениеТоваров.Дата,
| ПеремещениеТоваров.Проведен,
| ПеремещениеТоваров.Автомобиль,
| ПеремещениеТоваров.ВидОперации,
| ПеремещениеТоваров.ОтражатьВНалоговомУчете,
| ПеремещениеТоваров.Владелец,
| ПеремещениеТоваров.Водитель,
| ПеремещениеТоваров.ДоверенностьДата,
| ПеремещениеТоваров.ДоверенностьНомер,
| ПеремещениеТоваров.ДоверенностьФИО,
| ПеремещениеТоваров.Сделка,
| ПеремещениеТоваров.Заказчик,
| ПеремещениеТоваров.КоличествоСтрокНаСтраницеПриложения,
| ПеремещениеТоваров.Комментарий,
| ПеремещениеТоваров.КомуВыданыТМЦ,
| ПеремещениеТоваров.СчетСписанияНДСНУ,
| ПеремещениеТоваров.СубконтоСписанияНДСНУ1,
| ПеремещениеТоваров.СубконтоСписанияНДСНУ2,
| ПеремещениеТоваров.СубконтоСписанияНДСНУ3,
| ПеремещениеТоваров.НДСвСтоимостиТоваров,
| ПеремещениеТоваров.НомерНакладной,
| ПеремещениеТоваров.Организация,
| ПеремещениеТоваров.ОснованиеОтпуска,
| ПеремещениеТоваров.Ответственный,
| ПеремещениеТоваров.ОтпускПроизвел,
| ПеремещениеТоваров.ОтпускРазрешил,
| ПеремещениеТоваров.ПереданыДокументы,
| ПеремещениеТоваров.ПечататьНаОдинЛист,
| ПеремещениеТоваров.ПринялПолучатель,
| ПеремещениеТоваров.Прицеп,
| ПеремещениеТоваров.ПунктПогрузки,
| ПеремещениеТоваров.ПунктРазгрузки,
| ПеремещениеТоваров.ПутевойЛист,
| ПеремещениеТоваров.РучнаяКорректировка,
| ПеремещениеТоваров.СдалОтправитель,
| ПеремещениеТоваров.СерияБланка,
| ПеремещениеТоваров.СкладОтправитель,
| ПеремещениеТоваров.СкладПолучатель,
| ПеремещениеТоваров.СубконтоСписанияНДС1,
| ПеремещениеТоваров.СубконтоСписанияНДС2,
| ПеремещениеТоваров.СубконтоСписанияНДС3,
| ПеремещениеТоваров.СчетСписанияНДС,
| ПеремещениеТоваров.ТипЦен,
| ПеремещениеТоваров.Транспорт,
| ПеремещениеТоваров.Франко,
| ПеремещениеТоваров.ВидПеревозки,
| ПеремещениеТоваров.Грузоотправитель,
| ПеремещениеТоваров.Грузополучатель,
| ПеремещениеТоваров.ЦельПриобретения,
| ПеремещениеТоваров.Экспедитор,
| ПеремещениеТоваров.ВидимостьТабличнойЧастиСписаниеБСО,
| ПеремещениеТоваров.ТипБСО,
| ПеремещениеТоваров.АвтоЗаполнениеПриОбмене,
| ПеремещениеТоваров.КоличествоЕздок,
| ПеремещениеТоваров.Товары.(
| Ссылка,
| НомерСтроки,
| Номенклатура,
| КоличествоМест,
| ЕдиницаИзмерения,
| Коэффициент,
| Количество,
| Цена,
| СчетУчетаБУ,
| СчетУчетаНУ,
| НовыйСчетУчетаБУ,
| НовыйСчетУчетаНУ,
| ЦенаВРознице,
| СуммаВРознице,
| СтавкаНДСВРознице,
| ДокументОприходования,
| Партия,
| ВидТары,
| КоличествоВМесте,
| Масса,
| ГрузоДокументы,
| Протокол,
| Прейскурант,
| СтавкаНПВРознице,
| Сертификат,
| СтранаПроисхождения,
| ЦенаИзготовителя,
| Сделка,
| СтавкаНП,
| Контрагент,
| ДоговорКонтрагента,
| ЦенаВРубляхБезНДС,
| Номенклатура.Код КАК КодНоменклатуры
| ),
| ПеремещениеТоваров.ТоварыНаКомиссии.(
| Ссылка,
| НомерСтроки,
| Номенклатура,
| КоличествоМест,
| ЕдиницаИзмерения,
| Коэффициент,
| Количество,
| Цена,
| СчетУчетаБУ,
| СчетУчетаНУ,
| НовыйСчетУчетаБУ,
| НовыйСчетУчетаНУ,
| Номенклатура.Код КАК КодНоменклатуры
| ),
| ПеремещениеТоваров.ВозвратнаяТара.(
| Ссылка,
| НомерСтроки,
| Номенклатура,
| Количество,
| СчетУчетаБУ,
| СчетУчетаНУ,
| НовыйСчетУчетаБУ,
| НовыйСчетУчетаНУ,
| Партия,
| ЕдиницаИзмерения,
| ЦенаВРубляхБезНДС,
| Номенклатура.Код КАК КодНоменклатуры
| ),
| ПеремещениеТоваров.НомераБСО.(
| Ссылка,
| НомерСтроки,
| Организация,
| ТипХранения,
| Номенклатура,
| Партия,
| Склад,
| Сотрудник,
| ТипБСО,
| СерияБСО,
| НомерБланка,
| Количество,
| Сумма,
| ТипСписания,
| Основной,
| Номенклатура.Код КАК КодНоменклатуры
| )
|ИЗ
| Документ.ПеремещениеТоваров КАК ПеремещениеТоваров
|ГДЕ
| ПеремещениеТоваров.Дата МЕЖДУ &Дата1 И &Дата2";
ЗапросВТорг.УстановитьПараметр("Дата1",Дата(ЭтотОбъект.Дата1));
ЗапросВТорг.УстановитьПараметр("Дата2",Дата(ЭтотОбъект.Дата2));
РезультатВыбора = ЗапросВТорг.Выполнить().Выбрать();
Счетчик = 0;
СчетчикНеудачПоКоду =0;
СчетчикНеудачПоНаименванию= 0;
СчетчикОтсутсвияНоменклатуры = 0;
СчетчикДокументов = 0;
Пока РезультатВыбора.Следующий() Цикл
Предмет = Справочники.Номенклатура.НайтиПоКоду(РезультатВыбора.Товары.Columns.КодНоменклатуры);
НаименованиеПредмета = Справочники.Номенклатура.НайтиПоНаименованию( РезультатВыбора.Товары.Columns.Номенклатура, Истина);
Если ЗначениеЗаполнено(Предмет)И ЗначениеЗаполнено (НаименованиеПредмета ) Тогда
Счетчик = Счетчик +1;
ИначеЕсли ЗначениеЗаполнено(Предмет) И НЕ ЗначениеЗаполнено (НаименованиеПредмета ) Тогда
СчетчикНеудачПоНаименванию = СчетчикНеудачПоНаименванию +1;
ИначеЕсли НЕ ЗначениеЗаполнено(Предмет) И ЗначениеЗаполнено (НаименованиеПредмета ) Тогда
СчетчикНеудачПоКоду = СчетчикНеудачПоКоду +1;
ИначеЕсли НЕ ЗначениеЗаполнено(Предмет) И НЕ ЗначениеЗаполнено (НаименованиеПредмета ) Тогда
СчетчикОтсутсвияНоменклатуры = СчетчикОтсутсвияНоменклатуры + 1;
КонецЕсли;
СчетчикДокументов = СчетчикДокументов + 1;
КонецЦикла;
Сообщить ("Было проверено " + СчетчикДокументов + " документов"+" с " + Формат(Дата(ЭтотОбъект.Дата1), "ДФ=dd.MM.yyyy")
+ " по " + Формат(Дата(ЭтотОбъект.Дата2), "ДФ=dd.MM.yyyy"));
Сообщить ("Было " +Счетчик + " попаданий");
Сообщить ("Было промахов по причине кода " + СчетчикНеудачПоКоду);
Сообщить ("Было неудач по наименованию " + СчетчикНеудачПоНаименванию);
Сообщить ("Не было найдено номенклатуры ни по коду, ни по наименованию " + СчетчикОтсутсвияНоменклатуры);
Что-то как-то Вы неправильно с вложенными таблицами в Запросе работаете. Рекомендую почитать, например, https://pro1c.org.ua/redirect.php?https://www.1s-up.ru/vlozhennye-tablicy-v-jazyke-zaprosov-1s/
Выражение
РезультатВыбора.Товары.Columns.КодНоменклатуры
...
Пока РезультатВыбора.Следующий() Цикл
// здесь должна быть выборка по строкам таб. части Товары - обходим строки данной таб. части
ВыборкаТовары = РезультатВыбора.Товары.Выбрать();
Пока ВыборкаТовары.Следующий() Цикл
КодНоменклатуры = ВыборкаТовары.КодНоменклатуры; // вот ето значение примитивного типа, по нему можете осуществлять поиск в текущей Базе
НоменклатураCOM = ВыборкаТовары.Номенклатура; // а ето Номенклатура из COM-базы. То есть, COM-объект
НоменклатураНаименование = НоменклатураCOM.Наименование; // ето также значение примитивного типа, по нему можно осуществлять поиск
НоменклатураUID = НоменклатураCOM.УникальныйИдентификатор(); // а вот по етой позиции лучше всего искать ссылку, если у Вас идет синхронизация обмена по внутреннему идентификатору
...
КонецЦикла;
СчетчикДокументов = СчетчикДокументов + 1;
КонецЦикла;
Появился еще вопрос по теме. Есть реквизит в документе ссылка на перечисление, получаю тоже как комобъект, возможно ли получить значение этого реквизита?
| ПеремещениеТоваров.НДСвСтоимостиТоваров,
DmitryPushkarev @ Сегодня, 8:17
,
Добрый день! Я когда импртировал справочник ТМЦ из 1С 7 в 1с 8 по ОЛЕ, то использовал вот такой код:
V77 = Новый COMОбъект("V77.Application");
V77.глрасшифровка = СпрОле.ВидТМЦ; //получение представления идентификатора Перечисления.ВидыТМЦ
Вид = V77.EvalExpr("Строка(глРасшифровка)");
ЭлементПоиска = Справочники.ВидыНоменклатуры.НайтиПоНаименованию(Вид);
Если ЭлементПоиска.Пустая() Тогда
ЭлементПоиска = Справочники.ВидыНоменклатуры.СоздатьЭлемент();
ЭлементПоиска.Наименование = Вид;
Если Вид = "Услуга" Тогда
ЭлементПоиска.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Услуга;
Иначе
ЭлементПоиска.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Товар;
КонецЕсли;
ЭлементПоиска.Записать();
Иначе
Сообщить("Такой вид ТМЦ уже есть!");
КонецЕсли;
ПРЕДСТАВЛЕНИЕ (ПеремещениеТоваров.НДСвСтоимостиТоваров)
,вроде бы является одним из возможных решений.
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua