Группа: Пользователи
Сообщений: 294
Спасибо сказали: 1 раз
Рейтинг: 0
1С Предприятие 7.7(сетевая версия) - 7.70.027,Конф: ПУБ(7.70.010) Подскажите пожалуйста, как организовать обращение к нескольким документам в запросе с одинаковыми реквизитами. Просто надо вытянуть данные из 4 документов, а именно три реквизита КодДК, СуммаСНДС, ДатаДок. Я сделала обращение только к одному документу, все выдает, как только в запросе я начинаю прописывать реквизит второго документа, к идентификатору добавляется 1. Вот мой код:
Процедура Сформировать() Перем Запрос, ТекстЗапроса, Таб; //Создание объекта типа Запрос Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с ВыбНачПериода по ВыбКонПериода; |ОбрабатыватьДокументы Проведенные; |КодДК = Документ.ПриходнаяНакладнаяЗапасы.КодДК; |Закупки = Документ.ПриходнаяНакладнаяЗапасы.Закупки; |СуммаСНДС = Документ.ПриходнаяНакладнаяЗапасы.СуммаСНДС; |ДатаДок = Документ.ПриходнаяНакладнаяЗапасы.ДатаДок; |Группировка КодДК; |"//}}ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли;
// Подготовка к заполнению выходных форм данными запроса Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Сформировать"); // Заполнение полей "Заголовок" Таб.ВывестиСекцию("Заголовок"); Состояние("Заполнение выходной таблицы..."); Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0); Пока Запрос.Группировка(1) = 1 Цикл // Заполнение полей КодДК Если (ПустоеЗначение(ВыбКод) = 0)и((Лев(СокрЛП(Запрос.КодДК),СтрДлина(СокрЛП(ВыбКод))) <> СокрЛП(ВыбКод))или(СтрДлина(СокрЛП(ВыбКод))>СтрДлина(СокрЛП(Запрос.КодДК)))) Тогда Продолжить; КонецЕсли; ТекДок = Запрос.КодДК; // Заполнение полей КодДК Закупки = Запрос.Закупки; СуммаСНДС = Запрос.СуммаСНДС; ДатаДок = Запрос.ДатаДок; Таб.ВывестиСекцию("Прих"); КонецЦикла; // Вывод заполненной формы Таб.ТолькоПросмотр(1); Таб.Показать("Сформировать", "");
1С Предприятие 7.7(сетевая версия) - 7.70.027,Конф: ПУБ(7.70.010)
Группа: Пользователи
Сообщений: 294
Спасибо сказали: 1 раз
Рейтинг: 0
Процедура Сформировать() Перем Запрос, ТекстЗапроса, Таб; //Создание объекта типа Запрос Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с ВыбНачПериода по ВыбКонПериода; |ОбрабатыватьДокументы Проведенные; |Док = Документ.ПриходнаяНакладнаяЗапасы.ТекущийДокумент, Документ.БанковскаяВыписка.ТекущийДокумент; |Группировка Док; |"//}}ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли;
БуфКод = ""; ПечКод = БуфКод+".00.00.00"; Спр = СоздатьОбъект("Справочник.КодыПоКлассификатору"); Спр.ВыбратьЭлементы(); Пока Спр.ПолучитьЭлемент() = 1 Цикл Если СокрЛП(Спр.Код) = СокрЛП(ПечКод) Тогда ПечНазв = СокрЛП(Спр.КодДК); КонецЕсли; КонецЦикла;
//Док = ""; Пока Запрос.Группировка(1) = 1 Цикл Док = Запрос.Док;
Если (Док.Вид() = "БанковскаяВыписка") ИЛИ (Док.Вид() = "ПриходнаяНакладнаяЗапасы") Тогда Док.ВыбратьСтроки(); Сумма = 0; Пока Док.ПолучитьСтроку() = 1 Цикл Если ПустоеЗначение(Док.КодДК) = 1 Тогда Продолжить; КонецЕсли; Если (ПустоеЗначение(ВыбКод) = 0)и((Лев(СокрЛП(Док.КодДК),СтрДлина(СокрЛП(ВыбКод))) <> СокрЛП(ВыбКод))или(СтрДлина(СокрЛП(ВыбКод))>СтрДлина(СокрЛП(Док.КодДК)))) Тогда Продолжить; КонецЕсли;
Пишет вот такую ошибку: Таб.КодДК = Док.КодДК; {C:\DOCUMENTS AND SETTINGS\WMATIK\РАБОЧИЙ СТОЛ\РАСШИФРОВКА ФАКТА ПО ЗАКУПКАМ.ERT(56)}: Поле агрегатного объекта не обнаружено (КодДК)
1С Предприятие 7.7(сетевая версия) - 7.70.027,Конф: ПУБ(7.70.010)
Док = ""; Пока Запрос.Группировка(1) = 1 Цикл Док = Запрос.Док;
Если (Док.Вид() = "БанковскаяВыписка") ИЛИ (Док.Вид() = "ПриходнаяНакладнаяЗапасы") Тогда Док.ВыбратьСтроки(); Сумма = 0; Пока Док.ПолучитьСтроку() = 1 Цикл Если ПустоеЗначение(Док.КодДК) = 1 Тогда Продолжить; КонецЕсли; Если (ПустоеЗначение(ВыбКод) = 0)и((Лев(СокрЛП(Док.КодДК),СтрДлина(СокрЛП(ВыбКод))) <> СокрЛП(ВыбКод))или(СтрДлина(СокрЛП(ВыбКод))>СтрДлина(СокрЛП(Док.КодДК)))) Тогда Продолжить; КонецЕсли;
Док = ""; Пока Запрос.Группировка(1) = 1 Цикл Док = Запрос.Док;
Если (Док.Вид() = "БанковскаяВыписка") ИЛИ (Док.Вид() = "ПриходнаяНакладнаяЗапасы") Тогда Док.ВыбратьСтроки(); Сумма = 0; Пока Док.ПолучитьСтроку() = 1 Цикл Если ПустоеЗначение(Док.КодДК) = 1 Тогда Продолжить; КонецЕсли; Если (ПустоеЗначение(ВыбКод) = 0)и((Лев(СокрЛП(Док.КодДК),СтрДлина(СокрЛП(ВыбКод))) <> СокрЛП(ВыбКод))или(СтрДлина(СокрЛП(ВыбКод))>СтрДлина(СокрЛП(Док.КодДК)))) Тогда Продолжить; КонецЕсли;
Пишет вот такую ошибку: Таб.КодДК = Док.КодДК; {C:\DOCUMENTS AND SETTINGS\WMATIK\РАБОЧИЙ СТОЛ\РАСШИФРОВКА ФАКТА ПО ЗАКУПКАМ.ERT(56)}: Поле агрегатного объекта не обнаружено (КодДК)
Это неудивительно, поскольку Таб -- это таблица, а не таблица значений. Возможно, Вы имели ввиду:
Группа: Местный
Сообщений: 186
Спасибо сказали: 31 раз
Рейтинг: 0
Цитата(wmatik @ 25.06.11, 13:41)
Процедура Сформировать() Перем Запрос, ТекстЗапроса, Таб; //Создание объекта типа Запрос Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с ВыбНачПериода по ВыбКонПериода; |Код = Документ.ПриходнаяНакладнаяЗапасы.КодДК,Документ.БанковскаяВыписка.КодДК; |СуммаСНДС = Документ.ПриходнаяНакладнаяЗапасы.СуммаСНДС,Документ.БанковскаяВыписка.СуммаСНДС ; |Группировка Код; |Условие(Код в ВыбКод); |"//}}ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли;
// Подготовка к заполнению выходных форм данными запроса Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Сформировать"); // Заполнение полей "Заголовок" Таб.ВывестиСекцию("Заголовок"); Состояние("Заполнение выходной таблицы..."); Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0); Пока Запрос.Группировка(1) = 1 Цикл // Заполнение полей Код Таб.ВывестиСекцию("Код"); КонецЦикла; // Вывод заполненной формы Таб.ТолькоПросмотр(1); Таб.Показать("Сформировать", ""); КонецПроцедуры
Можно попробовать вот-так. Зачем перебирать документы, потом их строки - если нас интересует конкретный кодДК ?
Старайтесьвсе данные получить запросом, что бы поменьше было условий и переборов в группировках. Тем более, как я понял, Вы их делаете конструктором.
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!