8.х Регистр сведений

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

  1. TopicStarter Overlay
    Dmitrij
    Offline

    Dmitrij Опытный в 1С

    Регистрация:
    6 май 2008
    Сообщения:
    844
    Симпатии:
    1
    Баллы:
    26
    to LxS: Я конечно же все так и сделал, но при выполнении процедуры когда шаг доходит до стоки
    Код:
    Для каждого ТекущаяСтрока Из Представление Цикл
    
    далее цикл не выполняется не могу понять почему, а сразу же идет на завершение цикла
  2. LxS
    Offline

    LxS Разработчик

    Регистрация:
    5 апр 2007
    Сообщения:
    680
    Симпатии:
    0
    Баллы:
    26
    Эм...
    Цикл использует ТЗ Представление, которую ты получаешь при выгрузке из моего запроса.

    Посмотри в отладчике при помощи метода ВыбратьСтроку(), применяемого к полученной ТЗ, чем заполнена эта таблица, если заполнена вообще. Если она пустая, значит в результате запроса по регистру нет совпадений значения представления со значением передаваемого параметра.
  3. TopicStarter Overlay
    Dmitrij
    Offline

    Dmitrij Опытный в 1С

    Регистрация:
    6 май 2008
    Сообщения:
    844
    Симпатии:
    1
    Баллы:
    26
    пустая таблица, но в поле адрес доставки устанавливается ведь из регистра значит они должны быть эдентичны?
  4. LxS
    Offline

    LxS Разработчик

    Регистрация:
    5 апр 2007
    Сообщения:
    680
    Симпатии:
    0
    Баллы:
    26
    Посмотри значение параметра Представление на предмет пробелов. Поставь на всякий пожарный СокрЛП.
  5. TopicStarter Overlay
    Dmitrij
    Offline

    Dmitrij Опытный в 1С

    Регистрация:
    6 май 2008
    Сообщения:
    844
    Симпатии:
    1
    Баллы:
    26
    Код:
    Запрос.Текст="ВЫБРАТЬ
    |   РеализацияТоваровУслугТовары.Ссылка,
    |   РеализацияТоваровУслугТовары.Ссылка.Номер,
    |	РеализацияТоваровУслугТовары.Ссылка.Контрагент,
    |	РеализацияТоваровУслугТовары.Ссылка.Организация,
    |	РеализацияТоваровУслугТовары.Ссылка.АдресДоставки,
    |   РеализацияТоваровУслугТовары.Ссылка.Ответственный,
    |	РеализацияТоваровУслугТовары.Номенклатура,
    |	РеализацияТоваровУслугТовары.Количество КАК Количество,
    |	ЕдиницыИзмерения.Ссылка КАК ЕдИзм,
    |	ЕдиницыИзмерения.Вес КАК СуммарныйВес,
    |   РеализацияТоваровУслугТовары.Номенклатура.Артикул КАК Код,
    |   РеализацияТоваровУслугТовары.Ссылка.Контрагент.СпрФорматов КАК Формат,
    |   РеализацияТоваровУслугТовары.Ссылка.Контрагент.СпрГК КАК Клиент
    |ИЗ
    |	Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
    |		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения  
    |		ПО РеализацияТоваровУслугТовары.Номенклатура = ЕдиницыИзмерения.Владелец
    |ГДЕ
    |	РеализацияТоваровУслугТовары.Ссылка.Организация = &Организация
    |	И РеализацияТоваровУслугТовары.Ссылка.Контрагент В(&СписокКонтрагентов)
    |	И РеализацияТоваровУслугТовары.Ссылка.Проведен
    |   И РеализацияТоваровУслугТовары.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаКонца
    |   И РеализацияТоваровУслугТовары.Номенклатура в(&СписокНоменклатуры)";
    
    Выборка=Запрос.выполнить().выбрать();
    ТЗ=Новый ТаблицаЗначений;
    ТЗ.Колонки.Добавить("Документ");
    ТЗ.Колонки.Добавить("Номер");
    ТЗ.Колонки.Добавить("Код");
    //ТЗ.Колонки.Добавить("Адрес");
    ТЗ.Колонки.Добавить("Формат");
    ТЗ.Колонки.Добавить("Клиент");
    ТЗ.Колонки.Добавить("Ответственный");
    //ТЗ.Колонки.Добавить("Представление");
    ТЗ.Колонки.Добавить("СуммарныйВес");
    ТЗ.Колонки.Добавить("Контрагент");
    ТЗ.Колонки.Добавить("Номенклатура");
    ТЗ.Колонки.Добавить("АдресДоставки");
    ТЗ.Колонки.Добавить("Количество");
    Макет = ПолучитьМакет("Макет");
    ТабДокумент = Новый ТабличныйДокумент;
    Шапка  = Макет.ПолучитьОбласть("Шапка");
    Заглавие=Макет.ПолучитьОбласть("Заглавие");
    Шапка.Параметры.ДатаНачала=ДатаНачала;
    Шапка.Параметры.ДатаОкончания=ДатаКонца;
    ТабДокумент.Вывести(шапка);
    ТабДокумент.Вывести(заглавие);
    строка=Макет.ПолучитьОбласть("Строка");
    
    
    Пока Выборка.следующий() цикл
    Стр=ТЗ.Добавить();
    Стр.Документ=Выборка.Ссылка;
    стр.Номер=Выборка.Номер;
    Стр.Ответственный=Выборка.Ответственный;
    Стр.Код=Выборка.Код;
    Стр.Формат=Выборка.Формат;
    Стр.Клиент=Выборка.Клиент;
    стр.Контрагент=Выборка.Контрагент;
    стр.АдресДоставки=СокрЛП(Выборка.АдресДоставки);
    Стр.Номенклатура=Выборка.номенклатура;
    Стр.Количество=Выборка.Количество;
    стр.СуммарныйВес=Выборка.СуммарныйВес*Стр.Количество;
    КонецЦикла;
    
    ЗапросР = Новый Запрос;
    ЗапросР.УстановитьПараметр("Представление",стр.АдресДоставки);
    ЗапросР.Текст = "ВЫБРАТЬ
    |    КонтактнаяИнформация.Поле1,
    |    КонтактнаяИнформация.Поле2,
    |    КонтактнаяИнформация.Поле3,
    |    КонтактнаяИнформация.Поле4,
    |    КонтактнаяИнформация.Поле5,
    |    КонтактнаяИнформация.Поле6,
    |    КонтактнаяИнформация.Поле7,
    |    КонтактнаяИнформация.Поле8,
    |    КонтактнаяИнформация.Поле9,
    |    КонтактнаяИнформация.Поле10,
    |    КонтактнаяИнформация.Представление
    |ИЗ
    |    РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
    |ГДЕ
    |    КонтактнаяИнформация.Представление ПОДОБНО &Представление";
    Представление=ЗапросР.Выполнить().Выгрузить();
    
    Для каждого ТекущаяСтрока Из Представление Цикл
    Строка.Параметры.Заполнить(ТекущаяСтрока);//Подразумевается, что в данной области имена     
    ТабДокумент.Вывести(Строка);                   //параметров совпадают с синонимами из запроса;
    КонецЦикла;
    
    Для к=0 по  тз.количество()-1 цикл
    стр=тз.получить(к);
    Строка.Параметры.ДатаДок=Лев(стр.Документ.Дата,10);
    Строка.Параметры.Артикул=стр.Номер;
    Строка.Параметры.Код=Стр.Код;
    Строка.Параметры.Клиент=Стр.Клиент;
    Строка.Параметры.Формат=Стр.Формат;
    Строка.Параметры.Контрагент=стр.Контрагент;
    Строка.Параметры.Номенклатура=стр.Номенклатура;
    Строка.Параметры.Количество=Стр.СуммарныйВес;
    Строка.Параметры.Адрес=стр.АдресДоставки;
    Строка.Параметры.Отв=Стр.Ответственный;
    ТабДокумент.Вывести(строка);
    КонецЦикла;
    
    
    ТабДокумент.ТолькоПросмотр=Истина;
    ТабДокумент.Показать();
    ТабДокумент.ТолькоПросмотр=Истина;
    
    
    У меня ощущения что я где то не так написал, посмотрите пожалуйста
  6. LxS
    Offline

    LxS Разработчик

    Регистрация:
    5 апр 2007
    Сообщения:
    680
    Симпатии:
    0
    Баллы:
    26
    Че-т ты, друг, тут ваще намутил. У меня бы Конфигуратор от такого кода с ошибкой вылетел к чертям. :unsure: (без обид).
    Я дома гляну. Завтра отпишусь.
  7. TopicStarter Overlay
    Dmitrij
    Offline

    Dmitrij Опытный в 1С

    Регистрация:
    6 май 2008
    Сообщения:
    844
    Симпатии:
    1
    Баллы:
    26
    У меня не вылетает нормально работает все выдает верно (кроме адресов), а с 1С не давно свезался, буду дальше изучать, а за то что посмотрите СПАСИБО.
  8. AlexFF
    Offline

    AlexFF Разбирающийся

    Регистрация:
    6 мар 2007
    Сообщения:
    565
    Симпатии:
    1
    Баллы:
    26
    Повторюсь еще раз в ощих модулях есть
    "УправлениеКонтактнойИнформацией" и "ФормированиеПечатныхФорм"
    О чем уже BabySG тактично намекал.
    Там вы найдете все необходимые функции и процедуры.
    Примеры их использования можно посмотреть в стандаотных отчетах.

    Или вопрос стоит в самообразовании?
  9. LxS
    Offline

    LxS Разработчик

    Регистрация:
    5 апр 2007
    Сообщения:
    680
    Симпатии:
    0
    Баллы:
    26
    1. Прочти. Сообщение #20
    2. Думаю, что на вопрос стоит ответить утвердительно.
  10. TopicStarter Overlay
    Dmitrij
    Offline

    Dmitrij Опытный в 1С

    Регистрация:
    6 май 2008
    Сообщения:
    844
    Симпатии:
    1
    Баллы:
    26
    LxS Вы посмотрели? что не так с кодом?
  11. LxS
    Offline

    LxS Разработчик

    Регистрация:
    5 апр 2007
    Сообщения:
    680
    Симпатии:
    0
    Баллы:
    26
    Короче. Несмотря на все выкрики по поводу общих модулей, я сделал немного иначе.

    Действительно, в общих модулях куча инструментария для решения твоей задачи, но у меня лично пока не вышел каменный цветок. Структура строки, содержащей представление, может быть так сильно искажена, что ни одна из функций или процедур модуля УправлениеКонтактнойИнформацией не сможет ее корректно расшифровать (проверил на своей базе, уважаемые AlexFF и BabySG). Лично я туда и обращусь, если у меня возникнет необходимость. А чувак должен попрактиковаться.
    Неужели предложенный мной вариант непригоден?
    Вопрос еще и в том, что за бесплатно тратить кучу времени никто не будет. Цель поста на форуме - задать направление, а не целиком решить проблему за другого. :unsure:
    Код:
        Запрос                 = Новый Запрос;
    Запрос.УстановитьПараметр("Организация",Организация);
    Запрос.УстановитьПараметр("СписокКонтрагентов", СписокКонтрагентов);
    Запрос.УстановитьПараметр("ДатаНачала", НачПериода);
    Запрос.УстановитьПараметр("ДатаОкончания", КонПериода);
    Запрос.УстановитьПараметр("СписокНоменклатуры", СписокНоменклатуры);
    Запрос.Текст         = 
    "ВЫБРАТЬ
    |   РеализацияТоваровУслугТовары.Ссылка КАК Документ,
    |   РеализацияТоваровУслугТовары.Ссылка.Номер,
    |    РеализацияТоваровУслугТовары.Ссылка.Контрагент,
    |    РеализацияТоваровУслугТовары.Ссылка.Организация,
    |    РеализацияТоваровУслугТовары.Ссылка.АдресДоставки,
    |   РеализацияТоваровУслугТовары.Ссылка.Ответственный,
    |    РеализацияТоваровУслугТовары.Номенклатура,
    |    РеализацияТоваровУслугТовары.Количество КАК Количество,
    |    ЕдиницыИзмерения.Ссылка КАК ЕдИзм,
    |    ЕдиницыИзмерения.Вес КАК СуммарныйВес,
    |   РеализацияТоваровУслугТовары.Номенклатура.Артикул КАК Код,
    |   РеализацияТоваровУслугТовары.Ссылка.Контрагент.СпрФорматов КАК Формат,
    |   РеализацияТоваровУслугТовары.Ссылка.Контрагент.СпрГК КАК Клиент
    |ИЗ
    |    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
    |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения  
    |        ПО РеализацияТоваровУслугТовары.Номенклатура = ЕдиницыИзмерения.Владелец
    |ГДЕ
    |    РеализацияТоваровУслугТовары.Ссылка.Организация = &Организация
    |    И РеализацияТоваровУслугТовары.Ссылка.Контрагент В(&СписокКонтрагентов)
    |    И РеализацияТоваровУслугТовары.Ссылка.Проведен
    |   И РеализацияТоваровУслугТовары.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаКонца
    |   И РеализацияТоваровУслугТовары.Номенклатура в(&СписокНоменклатуры)";
    ТЗ                     = Запрос.Выполнить().Выгрузить();
    //    Результат запроса ты можешь выгрузить сразу в ТЗ, не создавая ее, и не добавляя колонки. 
    //    Если нужны "красивые" имена колонок, задавай нормальные синонимы в запросе.
    Макет                 = ПолучитьМакет("Макет");
    ТабДокумент         = Новый ТабличныйДокумент;
    Шапка                  = Макет.ПолучитьОбласть("Шапка");
    Заглавие             = Макет.ПолучитьОбласть("Заглавие");
    Шапка.Параметры.ДатаНачала         = ДатаНачала;
    Шапка.Параметры.ДатаОкончания     = ДатаКонца;
    ТабДокумент.Вывести(Шапка);
    ТабДокумент.Вывести(Заглавие);
    СтрокаДанных         = Макет.ПолучитьОбласть("СтрокаДанных"); //в макете лучше не использовать имя Строка. 
    //Это функция платформы.
    //и при исполнении кода могут возникнуть ошибки. Переименуй область                                           
    /////////////////////////////////////////////////здесь ты вставил мой запрос на адрес, НО!!!
    //тебе же адрес надо получать в цикле! У тебя стр.АдресДоставки пуст будт всегда.
    
    //твой цикл                    
    //Для к=0 по  тз.количество()-1 цикл
    //    стр = тз.получить(к);
    //    Строка.Параметры.ДатаДок=Лев(стр.Документ.Дата,10);
    //    Строка.Параметры.Артикул=стр.Номер;
    //    Строка.Параметры.Код=Стр.Код;
    //    Строка.Параметры.Клиент=Стр.Клиент;
    //    Строка.Параметры.Формат=Стр.Формат;
    //    Строка.Параметры.Контрагент=стр.Контрагент;
    //    Строка.Параметры.Номенклатура=стр.Номенклатура;
    //    Строка.Параметры.Количество=Стр.СуммарныйВес;
    //    Строка.Параметры.Адрес=стр.АдресДоставки;
    //    Строка.Параметры.Отв=Стр.Ответственный;
    //    ТабДокумент.Вывести(строка);
    //КонецЦикла;
    //мой цикл
    Для каждого Стр из ТЗ Цикл
    СтрокаДанных.Параметры.Заполнить(Стр);
    ЗапросР             = Новый Запрос;
    ЗапросР.УстановитьПараметр("Представление",Стр.АдресДоставки);
    ЗапросР.Текст         = 
    "ВЫБРАТЬ
    |    КонтактнаяИнформация.Поле1,
    |    КонтактнаяИнформация.Поле2,
    |    КонтактнаяИнформация.Поле3,
    |    КонтактнаяИнформация.Поле4,
    |    КонтактнаяИнформация.Поле5,
    |    КонтактнаяИнформация.Поле6,
    |    КонтактнаяИнформация.Поле7,
    |    КонтактнаяИнформация.Поле8,
    |    КонтактнаяИнформация.Поле9,
    |    КонтактнаяИнформация.Поле10,
    |    КонтактнаяИнформация.Представление
    |ИЗ
    |    РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
    |ГДЕ
    |    КонтактнаяИнформация.Представление ПОДОБНО &Представление";
    Рез = ЗапросР.Выполнить().Выгрузить();
    Если Рез.Количество() > 0 Тогда
    СтрокаДанных.Параметры.Заполнить(Рез[0]);
    КонецЕсли;
    ТабДокумент.Вывести(Строкаданных);    
    КонецЦикла;
    ТабДокумент.Показать();
    ТабДокумент.ТолькоПросмотр=Истина;
    
    
    
  12. AlexFF
    Offline

    AlexFF Разбирающийся

    Регистрация:
    6 мар 2007
    Сообщения:
    565
    Симпатии:
    1
    Баллы:
    26
    Да повсякому можно :)
    Никто не против Вашего решения. И как Вы верно подметили практика, практика и еще раз практика.
  13. TopicStarter Overlay
    Dmitrij
    Offline

    Dmitrij Опытный в 1С

    Регистрация:
    6 май 2008
    Сообщения:
    844
    Симпатии:
    1
    Баллы:
    26
    LxS во втором запросе "ЗапросР" если я правильно понял выгружается в таблицу значений Рез тогда получается у данной таблицы должны быть строки стр и колонки поле1 поле2 и т.д. Если да, то система выдает сообщение о том что поле объекта не обнаружено стр.поле1 Подскажите пожалуйста

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