7.7 Привет всем! Принимайте в свои ряды! Ну и вопрос сходу...

Тема в разделе "Отчеты и обработки для "1С:Предприятие 7.7"", создана пользователем azamatufa, 4 июл 2007.

  1. TopicStarter Overlay
    azamatufa
    Offline

    azamatufa

    Регистрация:
    4 июл 2007
    Сообщения:
    3
    Симпатии:
    0
    Баллы:
    1
    1С7 имеется документ и большая табличная часть.
    Можно ли запросом обработать строки табличной части?
    В частности мне надо сгруппировать записи табличной части по некоторым критериям.

    Спасибо!
  2. Tiger
    Offline

    Tiger Опытный в 1С

    Регистрация:
    12 июл 2006
    Сообщения:
    489
    Симпатии:
    0
    Баллы:
    26
    Что имеете ввиду?
    Сформировать отчет? - Можно.
    Модифицировать данные? - Нет.
    В 1С7 SQL-запросы не являются полноценными.
  3. Steel Rain
    Offline

    Steel Rain Опытный в 1С

    Регистрация:
    29 сен 2006
    Сообщения:
    408
    Симпатии:
    2
    Баллы:
    29
    Для подобных задач существует метод Сортировать(<?>,);
    Синтаксис:
    Сортировать(<Колонки>,<ДокумПоДате>)
    Назначение:
    Сортировать таблицу значений по колонкам.
    Параметры:
    <Колонки> - строковое выражение, которое определяет колонки, порядок и направление сортировки. Формат передаваемой строки - это разделенные запятыми номера или идентификаторы колонок со знаком направления сортировки ( ''+'' - сортировать по возрастанию; ''- '' - сортировать по убыванию; ''*'' - сортировать по внутреннему значению). Знак направления сортировки можно указывать до или после обозначения колонки через пробел или без пробела. По умолчанию направление сортировки принимается по возрастанию.
    <ДокумПоДате> - необязательный параметр. Имеет смысл только в том случае, если значениями таблицы значений являются документы. В этом случае можно задавать сортировку документов по их хронологии. Число: 1 - сортировка по хронологии документов; 0 - нет. Значение по умолчанию - 0.
  4. TopicStarter Overlay
    azamatufa
    Offline

    azamatufa

    Регистрация:
    4 июл 2007
    Сообщения:
    3
    Симпатии:
    0
    Баллы:
    1
    У меня вот такая задача:
    ----------------------------------

    1. Имеется "Документ.Исходный"
    там табличная часть (перечислю основные)
    <Наименование> <НомерНакл> <АдресДоставки><Цена><Колво>
    Ручка-1 0034 ул.Ленина 5 2
    Ручка-2 0034 ул.Ленина 5 2
    Ручка-3 0034 ул.Ленина 5 2
    Карандаш-01 0281 ул.гагарина 4 1
    Карандаш-02 0281 ул.гагарина 4 1

    2. Имеется "Документ.Конечный" - по полям копия Исходного.

    3. Мне надо "раскидать" табличную часть "Документ.Исходный" в "Документ.Конечный" (создавая новые документы "Документ.Конечный"), при этом группировать по <НомеруНакл>

    т.е. в итоге (исходя из вышеуказанных данных) должны появиться 2 документа "Документ.Конечный"
    Первый:
    <Наименование> <НомерНакл> <АдресДоставки><Цена><Колво>
    Ручка-1 0034 ул.Ленина 5 2
    Ручка-2 0034 ул.Ленина 5 2
    Ручка-3 0034 ул.Ленина 5 2

    Второй:
    <Наименование> <НомерНакл> <АдресДоставки><Цена><Колво>
    Карандаш-01 0281 ул.гагарина 4 1
    Карандаш-02 0281 ул.гагарина 4 1


    Мои мысли такие:
    -------------
    1. Сделать запрос по "Документу.Исходный" и выбрать только <Номера накладных> (группировкой).
    2. внутри цикла перебора 1-го запроса еще сделать запрос на остальные поля - и уже их послать в "Документ.Конечный"

    Запрос1 =
    |Период с ... по ...
    |НомерНакл = Документ.Исходный.НомерНакл;
    |Группировка НомерНакл

    Пока Запрос1.Группировка(1) Цикл
    Запрос2 =
    |Период с ... по ...
    |НаимТов = Документ.Исходный.НаимТовара
    |НомерНакл = Документ.Исходный.НомерНакл
    |Условие (НомthНакл = Запрос1.НомерНакл)

    Пока Запрос2 Цикл
    Создать Документ.Конечный и вставить туда данные
    КонецЦикла

    КонецЦикла



    Спасибо!!!
  5. Steel Rain
    Offline

    Steel Rain Опытный в 1С

    Регистрация:
    29 сен 2006
    Сообщения:
    408
    Симпатии:
    2
    Баллы:
    29
    У меня была недавно задача подобная. Из документа Заявка формируются Транспортные листы. На каждого водителя, отдельный док. Соответственно Заявка делается сразу на всех водителей. Реализовано так:
    Код:
        НомСтроки=1;
    
    Лист=СоздатьОбъект("Документ.ТранспортныйЛист");
    Док=СоздатьОбъект("Документ.ЗаявкаНаТранспорт");
    Док=ТекущийДокумент();
    ВыбратьСтроки();
    Пока ПолучитьСтрокуПоНомеру(НомСтроки)=1 Цикл
    ПолучитьСтрокуПоНомеру(НомСтроки);
    Имя=Водитель;
    Лист.Новый();
    Лист.Водитель=Водитель;
    Лист.ДокументОснование=Док;
    глЗаполнитьШапку(Лист,0);
    Лист.ДатаДок=ДатаДок;
    Для й=1 По КоличествоСтрок() Цикл
    ПолучитьСтрокуПоНомеру(НомСтроки);
    Если Имя=Водитель Тогда
    Лист.НоваяСтрока();
    Лист.ВремяНачЧ=ВремяНачЧ;
    Лист.ВремяНачМин=ВремяНачМин;
    Лист.ВремяКонЧ=ВремяКонЧ;
    Лист.ВремяКонМин=ВремяКонМин;
    Лист.Заказчик=Заказчик;
    Лист.Место=Место;
    Лист.ПунктОтправления=ПунктОтправления;     
    Лист.Машина=Машина;
    ТрЛист=Лист.ТекущийДокумент();
    НомСтроки=НомСтроки+1;
    Иначе
    
    КонецЕсли;
    КонецЦикла; 
    Лист.Записать();
    КонецЦикла;
    
    
    ИМХО проще, чем запросом. Да и, сдается мне, твой вариант запроса работать не будет...
  6. TopicStarter Overlay
    azamatufa
    Offline

    azamatufa

    Регистрация:
    4 июл 2007
    Сообщения:
    3
    Симпатии:
    0
    Баллы:
    1
    слушай, а если в исходной таблице данные по полю водитель не отсортированы?
  7. Steel Rain
    Offline

    Steel Rain Опытный в 1С

    Регистрация:
    29 сен 2006
    Сообщения:
    408
    Симпатии:
    2
    Баллы:
    29
    Ну естественно сначала исходная таблица сортируется по водителю.

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