8.х Таблица значений: индексация

Тема в разделе "Отчеты и обработки для "1С:Предприятие 8"", создана пользователем MyNameNoName, 19 июл 2013.

  1. TopicStarter Overlay
    MyNameNoName
    Offline

    MyNameNoName Опытный в 1С

    Регистрация:
    17 май 2013
    Сообщения:
    931
    Симпатии:
    0
    Баллы:
    26
    Проблему решил как оказалось все очень просто:
    Код:
    Для Каждого СтрокаЗакупаемых Из Таблица5 Цикл
    СтрокиИсходной = Таблица4.НайтиСтроки(Новый Структура("АналогСсылка", СтрокаЗакупаемых.АналогСсылка));
    // распределяем количество
    КоличествоРаспределить = СтрокиИсходной[0].СписанныеТоварыКоличество;
    Для Сч = 0 По СтрокиИсходной.Количество()-1 Цикл
    Если ПривестиКЧислу(СтрокиИсходной[Сч].ЗаказНоменклатураКоличество)<ПривестиКЧислу(КоличествоРаспределить) И
    Сч <> СтрокиИсходной.Количество()-1 Тогда
    СтрокиИсходной[Сч].Сумма = СтрокиИсходной[Сч].ЗаказНоменклатураКоличество;
    КоличествоРаспределить = КоличествоРаспределить-СтрокиИсходной[Сч].ЗаказНоменклатураКоличество;
    Иначе
    СтрокиИсходной[Сч].Сумма = КоличествоРаспределить;
    КоличествоРаспределить = 0;
    КонецЕсли;
    КонецЦикла;
    КонецЦикла;
    
  2. TopicStarter Overlay
    MyNameNoName
    Offline

    MyNameNoName Опытный в 1С

    Регистрация:
    17 май 2013
    Сообщения:
    931
    Симпатии:
    0
    Баллы:
    26
    Код:
    ТЗПотребности = Новый ТаблицаЗначений;
    ТЗПотребности.Колонки.Добавить("Артикул");
    ТЗПотребности.Колонки.Добавить("Количество");
    //код
    
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ТЗПотребности.Артикул,
    |    СУММА(ТЗПотребности.Количество) КАК Количество
    |ИЗ
    |    ТЗПотребности КАК ТЗПотребности
    |
    |СГРУППИРОВАТЬ ПО
    |    ТЗПотребности.Артикул";
    Запрос.УстановитьПараметр("ТЗПотребности", ТЗПотребности);
    ТЗПотребности2 = Запрос.Выполнить().Выгрузить();
    
    {Форма.Форма.Форма(48)}: Ошибка при вызове метода контекста (Выполнить)
    ТЗПотребности2 = Запрос.Выполнить().Выгрузить();
    по причине:
    {(5, 2)}: Таблица не найдена "ТЗПотребности"
    <<?>>ТЗПотребности КАК ТЗПотребности


    Не могу понять в чем ошибка?
  3. TopicStarter Overlay
    MyNameNoName
    Offline

    MyNameNoName Опытный в 1С

    Регистрация:
    17 май 2013
    Сообщения:
    931
    Симпатии:
    0
    Баллы:
    26
    И еще вопрос. Как в одной обработке считать данные из разных двух документов excel?
    При заполнение из второго документа почему-то данные попадают из первого.
    Код:
    Попытка
    Эксель = Новый COMОбъект("Excel.Application"); // для v7 код будет: Эксель = СоздатьОбъект("Excel.Application");
    Исключение
    Сообщить(ОписаниеОшибки());
    Возврат;
    КонецПопытки;
    
    Книга = Эксель.WorkBooks.Open("F:\1.xls");
    Лист = Книга.WorkSheets(1);
    ВсегоКолонок = Лист.Cells(1,1).SpecialCells(11).Column;
    ВсегоСтрок = Лист.Cells(1,1).SpecialCells(11).Row;
    
    ///код
    
    
    Книга2 = Эксель.WorkBooks.Open("F:\2.xls");
    Лист2 = Книга.WorkSheets(1);
    ВсегоКолонок2= Лист2.Cells(1,1).SpecialCells(11).Column;
    ВсегоСтрок2 = Лист2.Cells(1,1).SpecialCells(11).Row;
    
    
    ///код
    
    
  4. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.991
    Симпатии:
    399
    Баллы:
    104
    В том, что таблица не найдена.
    Код:
    	| ИЗ
    |	&ТЗПотребности КАК ТЗПотребности
  5. TopicStarter Overlay
    MyNameNoName
    Offline

    MyNameNoName Опытный в 1С

    Регистрация:
    17 май 2013
    Сообщения:
    931
    Симпатии:
    0
    Баллы:
    26
    Точно, проглядел.
    А возможно ли вывести данные из второго excel или лучше однин большой документ готовить?
  6. TopicStarter Overlay
    MyNameNoName
    Offline

    MyNameNoName Опытный в 1С

    Регистрация:
    17 май 2013
    Сообщения:
    931
    Симпатии:
    0
    Баллы:
    26
    Все равно ругается на:
    {Форма.Форма.Форма(53)}: Ошибка при вызове метода контекста (Выполнить)
    ТЗПотребности2 = Запрос.Выполнить().Выгрузить();
    по причине:
    Содержимое объекта данных может быть выбрано только во временную таблицу
  7. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.991
    Симпатии:
    399
    Баллы:
    104
    Все же по-русски.
    Код:
    "ВЫБРАТЬ
    |    ТЗПотребности.Артикул,
    |    ТЗПотребности.Количество КАК Количество
    |ПОМЕСТИТЬ ВТПотребость 
    |ИЗ
    |    ТЗПотребности КАК ТЗПотребности
    |; 
    |ВЫБРАТЬ ТЗПотребности.Артикул, Сумма(ВТПотребности.Количество) КАК Количество
    |ИЗ
    |    ВТПотребость КАК ВТПотребость 
    |
    |СГРУППИРОВАТЬ ПО
    |    ВТПотребость .Артикул
    "
  8. TopicStarter Overlay
    MyNameNoName
    Offline

    MyNameNoName Опытный в 1С

    Регистрация:
    17 май 2013
    Сообщения:
    931
    Симпатии:
    0
    Баллы:
    26
    Пробовал сделать так не помогло:
    Код:
    "ВЫБРАТЬ
    |    ТЗПотребности.Артикул,
    |    ТЗПотребности.Количество КАК Количество
    |ПОМЕСТИТЬ ТЗПотребности0
    |ИЗ
    |    &ТЗПотребности КАК ТЗПотребности
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    ТЗПотребности0.Артикул,
    |    ТЗПотребности0.Количество
    |ИЗ
    |    ТЗПотребности0 КАК ТЗПотребности0";
    
    
    {Форма.Форма.Форма(59)}: Ошибка при вызове метода контекста (Выполнить)
    ТЗПотребности2 = Запрос.Выполнить().Выгрузить();
    по причине:
    {(2, 2)}: Тип не может быть выбран в запросе
    <<?>>ТЗПотребности.Артикул,
  9. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.991
    Симпатии:
    399
    Баллы:
    104
    Потому что нужно тип присвоить колонкам таблицы. И не помешало бы ее заполнить значениями. А то у вас результат запрос будет всегда пустой.
    Код:
    ТЗПотребности.Колонки.Добавить("Артикул", Новый ОписаниеТипов("Строка"));
  10. TopicStarter Overlay
    MyNameNoName
    Offline

    MyNameNoName Опытный в 1С

    Регистрация:
    17 май 2013
    Сообщения:
    931
    Симпатии:
    0
    Баллы:
    26
    Вот теперь заработало:)
    Только добавиль суммирование количества
    Код:
    "ВЫБРАТЬ
    |    ТЗПотребности.Артикул,
    |    ТЗПотребности.Количество КАК Количество
    |ПОМЕСТИТЬ ТЗПотребности0
    |ИЗ
    |    &ТЗПотребности КАК ТЗПотребности
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    ТЗПотребности0.Артикул,
    |    СУММА(ТЗПотребности0.Количество) КАК Количество
    |ИЗ
    |    ТЗПотребности0 КАК ТЗПотребности0
    |
    |СГРУППИРОВАТЬ ПО
    |    ТЗПотребности0.Артикул";
    
    и опять ошибка
    {Форма.Форма.Форма(62)}: Ошибка при вызове метода контекста (Выполнить)
    ТЗПотребности2 = Запрос.Выполнить().Выгрузить();
    по причине:
    {(17, 2)}: Недопустимое поле для группировки "Артикул"
    <<?>>ТЗПотребности0.Артикул
  11. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.991
    Симпатии:
    399
    Баллы:
    104
    Поставьте ограничение на количество символов в строке...
  12. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    Код:
    "ВЫБРАТЬ
    |	ВЫРАЗИТЬ(ТЗПотребности.Артикул КАК СТРОКА(150)) КАК Артикул,
    |	ТЗПотребности.Количество КАК Количество
    |ПОМЕСТИТЬ ТЗПотребности0
    |ИЗ
    |	&ТЗПотребности КАК ТЗПотребности
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |	ТЗПотребности0.Артикул,
    |	СУММА(ТЗПотребности0.Количество) КАК Количество
    |ИЗ
    |	ТЗПотребности0 КАК ТЗПотребности0
    |
    |СГРУППИРОВАТЬ ПО
    |	ТЗПотребности0.Артикул";
    
    вот так например

    Код:
    Попытка
    Эксель = Новый COMОбъект("Excel.Application"); // для v7 код будет: Эксель = СоздатьОбъект("Excel.Application");
    Исключение
    Сообщить(ОписаниеОшибки());
    Возврат;
    КонецПопытки;
    
    Книга = Эксель.WorkBooks.Open("F:\1.xls");
    Лист = Книга.WorkSheets(1);
    ВсегоКолонок = Лист.Cells(1,1).SpecialCells(11).Column;
    ВсегоСтрок = Лист.Cells(1,1).SpecialCells(11).Row;
    
    ///код
    
    
    Книга2 = Эксель.WorkBooks.Open("F:\2.xls");
    Лист2 =  Книга2.WorkSheets(1);  // было Книга.WorkSheets(1);
    ВсегоКолонок2= Лист2.Cells(1,1).SpecialCells(11).Column;
    ВсегоСтрок2 = Лист2.Cells(1,1).SpecialCells(11).Row;
    
    
    ///код
    
    
  13. TopicStarter Overlay
    MyNameNoName
    Offline

    MyNameNoName Опытный в 1С

    Регистрация:
    17 май 2013
    Сообщения:
    931
    Симпатии:
    0
    Баллы:
    26
    Ничего не могу понять.
    Если беру данные из ТЗЗаказы то вывод работает а если из ТЗЗаказы2 то слеующая ошибка:
    {Форма.Форма.Форма(145)}: Поле объекта не обнаружено (РазмещеноВЗаказах)
    Область.Параметры.РазмещеноВЗаказах = Элемент.РазмещеноВЗаказах;

    Код:
    ТЗЗаказы = Новый ТаблицаЗначений;
    ТЗЗаказы.Колонки.Добавить("Артикул", Новый ОписаниеТипов("Строка"));
    ТЗЗаказы.Колонки.Добавить("РазмещеноВЗаказах", Новый ОписаниеТипов("Число"));
    
    Для Строка = 1 По ВсегоСтрок Цикл
    Артикул = Лист.Cells(Строка,3).Value;
    РазмещеноВЗаказах = Лист.Cells(Строка,4).Value;
    Если Артикул = Неопределено Или СокрЛП(Артикул) = "" Тогда
    Продолжить;
    КонецЕсли;
    Стр = ТЗЗаказы.Добавить();
    Стр.Артикул = Артикул;
    Стр.РазмещеноВЗаказах = РазмещеноВЗаказах;
    КонецЦикла;
    
    Запрос2 = Новый Запрос;
    Запрос2.Текст =
    "ВЫБРАТЬ
    |	ВЫРАЗИТЬ(ТЗЗаказы.Артикул КАК СТРОКА(50)) КАК Артикул,
    |	ТЗЗаказы.РазмещеноВЗаказах
    |ПОМЕСТИТЬ ТЗЗаказы0
    |ИЗ
    |    &ТЗЗаказы КАК ТЗЗаказы
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |	ТЗЗаказы0.Артикул,
    |	СУММА(ТЗЗаказы0.РазмещеноВЗаказах) КАК РазмещеноВЗаказах
    |ИЗ
    |	ТЗЗаказы0 КАК ТЗЗаказы0
    |
    |СГРУППИРОВАТЬ ПО
    |	ТЗЗаказы0.Артикул";
    Запрос2.УстановитьПараметр("ТЗЗаказы", ТЗЗаказы);
    ТЗЗаказы2 = Запрос.Выполнить().Выгрузить();
    
    
    уже 1000 раз проверил вроде все правильно ...
  14. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    смотреть под отладчиком что приехало в ТЗЗаказы2 и показать цикл вывода данных в табличный документ
  15. TopicStarter Overlay
    MyNameNoName
    Offline

    MyNameNoName Опытный в 1С

    Регистрация:
    17 май 2013
    Сообщения:
    931
    Симпатии:
    0
    Баллы:
    26
    Код:
    Область = Макет.ПолучитьОбласть("Таблица");
    Для Каждого Элемент ИЗ ТЗЗаказы2 Цикл
    Область.Параметры.Артикул = Элемент.Артикул;
    Область.Параметры.РазмещеноВЗаказах = Элемент.РазмещеноВЗаказах;
    ТабДок.Вывести(Область);
    КонецЦикла;
    
  16. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    в макете параметр РазмещеноВЗаказах точно так называется? под отладчиком что показал в ТЗЗаказы2?

Поделиться этой страницей