• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Зарегистрироваться возможно в рабочие дни, с 8:00 до 20:00 (мск).

Если у вас возникнут вопросы или потребуется дополнительная информация, не стесняйтесь обращаться к нашей службе поддержки. Вы можете связаться с нами по указанным контактным данным на нашем сайте.

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

Чтение спецификаций из 1С неверное считывание количества стандартных изделий

Автор arbuzovds, 30.03.17, 18:07:08

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

arbuzovds

С помощью 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;
               конецпопытки;
            конецесли;
            
         конеццикла;
         
      КонецЕсли;
      
   конеццикла;
   
КонецЕсли;

GL_E

Здравствуйте.
А если из компаса "сохранить как..." таблицу excel. 1C-у с excel-em всяко проще, мне кажется.

arbuzovds

Из эксель проще, Вы правы, но, у нас большое количество спецификаций и конвертировать каждую в эксель не удобно. Тем более пользователи не очень продвинутые. А если учесть, что в процессе бывает много изменений, то от экселя хочется уйти. Хотелось бы напрямую.

GL_E

я имел ввиду программно. из 1С открыть КОМПАС, пересохранить во временный excel-eвский файл  спецификацию, закрыть компас и дальше уже работать с временным файлом.


----
хотя уже не уверен в такой возможности. в справке сохранить как excel есть, а по факту нет :(
+ Благодарностей: 1

arbuzovds

Эх, если бы еще подсказали, как программно сохранить в эксель. Я бы прыгал от счастья. Намучался я с этим кодом Компаса. Ничего не помогает. Читает 1 шт. и все. Такое ощущение, что эта информация не храниться в самой спецификации, а находиться в сборочном чертеже и передается туда через какую-то связку. Но ведь когда нажимаем кнопку "показать все объекты", то Компас показывает все 16 строк по одной штуке. Как туда получить доступ? Пробовал установить программно при чтении файла spec.Active.ShowAllObjects = true, но это не помогает. И само свойство не меняется. Может разработчики помогут?

arbuzovds

Никогда не пишу на форумах, но Компас вынуждает.  :`(

Потратил два дня. К полуночи дошло! Все дело в specItem.ShowAllObjects = TRUE; Дело в том, что эта штуковина не устанавливается просто так. Сначала нужно получить доступ к спецификации через doc.SpecificationDescriptions, установить specItem.ShowAllObjects = TRUE, сохранить спецификацию, а затем снова получать к ней доступ. В этом случае в спецификацию попадают все объекты. Кто бы знал!!!
:um: :!:
+ Благодарностей: 2

СЛ_Елизавета

А можете подсказать как мне вытащить уникальный идентификатор из спецификации? И узнать корневой или не корневой элемент.