С помощью 1С 8.3 загружаю из Компас 16 спецификации. Все грузится, но есть отдельные спецификации, в которых 1С неверно считывает количество. НАпример, в спецификации Компас 16 болтов, а программно считывается 1. Если в спецификации через компас выбрать "вид - показать все объекты", то в спецификации отображается 16 строк с данным болтом и в каждой строчке количество 1 шт. Вопрос - как правильно считать все количество?
Вот код, которым читаю спецификацию:
kompas=Новый COMОбъект("Kompas.Application.7");
doc=kompas.documents.open(Путь,0,1);
spec=doc.SpecificationDescriptions;
// spec.Active.ShowAllObjects = true;
если spec.count>0 тогда
specItem = spec.item(0);
для каждого объектСтрока из specItem.Objects цикл
если объектСтрока.objectType=1 или объектСтрока.objectType=2 тогда
позиция=0;Обозначение=""; Наименование="";индекс=0;Количество=0; НомерКолонкиИсполнения=0;НаименованиеМатериала = ""; Формат = ""; Примечание = "";
пока индекс<объектСтрока.Columns.count цикл
Column=объектСтрока.Columns.item(индекс);
индексC=0;
текст="";
пока индексC<Column.ColumnItems.count цикл
Item=Column.ColumnItems.item(индексC);
текст=текст+Item.Value;
индексC=индексC+1;
конеццикла;
если Column.ColumnType=6 тогда
попытка
Количество=число(текст);
исключение
Количество=0;
конецпопытки;
конецесли;
конеццикла;
КонецЕсли;
конеццикла;
КонецЕсли;
Здравствуйте.
А если из компаса "сохранить как..." таблицу excel. 1C-у с excel-em всяко проще, мне кажется.
Из эксель проще, Вы правы, но, у нас большое количество спецификаций и конвертировать каждую в эксель не удобно. Тем более пользователи не очень продвинутые. А если учесть, что в процессе бывает много изменений, то от экселя хочется уйти. Хотелось бы напрямую.
я имел ввиду программно. из 1С открыть КОМПАС, пересохранить во временный excel-eвский файл спецификацию, закрыть компас и дальше уже работать с временным файлом.
----
хотя уже не уверен в такой возможности. в справке сохранить как excel есть, а по факту нет :(
Эх, если бы еще подсказали, как программно сохранить в эксель. Я бы прыгал от счастья. Намучался я с этим кодом Компаса. Ничего не помогает. Читает 1 шт. и все. Такое ощущение, что эта информация не храниться в самой спецификации, а находиться в сборочном чертеже и передается туда через какую-то связку. Но ведь когда нажимаем кнопку "показать все объекты", то Компас показывает все 16 строк по одной штуке. Как туда получить доступ? Пробовал установить программно при чтении файла spec.Active.ShowAllObjects = true, но это не помогает. И само свойство не меняется. Может разработчики помогут?
Никогда не пишу на форумах, но Компас вынуждает. :`(
Потратил два дня. К полуночи дошло! Все дело в specItem.ShowAllObjects = TRUE; Дело в том, что эта штуковина не устанавливается просто так. Сначала нужно получить доступ к спецификации через doc.SpecificationDescriptions, установить specItem.ShowAllObjects = TRUE, сохранить спецификацию, а затем снова получать к ней доступ. В этом случае в спецификацию попадают все объекты. Кто бы знал!!!
:um: :!:
А можете подсказать как мне вытащить уникальный идентификатор из спецификации? И узнать корневой или не корневой элемент.