Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Помогите: Как заполнить табличную часть документа по заданным полям справочника  (Прочитано 24073 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Gunslinger
Постоялец

ru
Offline Offline

« : 18-02-2010 18:19 » new

1с изучать со стороны программера начал совсем недавно, но довольно давно тружусь админом - так что мне хватит хотя бы ссылки на толковый мануал...
Проблема вот какая: есть справочник.. с кучей реквизитов. Есть документ с двумя реквизитами - они есть и в справочнике. и табличной частью с тремя реквизитами - они тоже есть в этом справочнике. Суть в том чтобы по двум реквизитам в шапке документа сделать выборку из справочника.. а в идеале - автоматом заполнить реквизиты табличной части.. Заранее благодарю отозвавшихся))
« Последнее редактирование: 20-02-2010 13:07 от Kivals » Записан
Элексир
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 18-02-2010 18:27 » 

можно сделать перебор элементов справочника и при совпадении реквизитов находящихся в шапке добавлять в табличную часть нужные элементы.
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 18-02-2010 20:10 » 

Элексир, работать будет, но для 8.Х это идеологически неправильный метод, т.к. перебор будет на стороне клиента (если специально не сделать общий модуль с серверной обработкой), а 8.Х клиент-серверная и правильно ресурсоемкие задачи выполнять на сервере.

Gunslinger, ИМХО нагляднее всего (не в ущерб правильности решения) сделать запросом. Получится что-то вроде:
Код:
ТекстЗапроса=
"ВЫБРАТЬ
| НазваниеСправочника.Ссылка,
| НазваниеСправочника.Реквизит1,
| НазваниеСправочника.Реквизит2,
| НазваниеСправочника.Реквизит3
|ИЗ
| Справочник.НазваниеСправочника КАК НазваниеСправочника
|ГДЕ
| (НазваниеСправочника.Реквизит4 = &Параметр4)
| И (НазваниеСправочника.Реквизит5 = &Параметр5)
|
|СГРУППИРОВАТЬ ПО
| НазваниеСправочника.Ссылка,
| НазваниеСправочника.Реквизит1,
| НазваниеСправочника.Реквизит2,
| НазваниеСправочника.Реквизит3
|";
Запрос=Новый Запрос(ТекстЗапроса);
Запрос.Параметры.Вставить("Параметр4", РеквизитДокумента4);
Запрос.Параметры.Вставить("Параметр5", РеквизитДокумента5);
Выборка=Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
// Заполняем табличную часть
Стр=ТабличнаяЧастьДокумента.Добавить();
Стр.Реквизит1=Выборка.Реквизит1;
// ...
КонецЦикла;

Не забудь заменить заглушки на реальные названия справочника и реквизитов
Записан
Gunslinger
Постоялец

ru
Offline Offline

« Ответ #3 : 19-02-2010 10:28 » 

Kivals спасибо за помощь. В одном месте не разобрался
ТекстЗапроса=
   "ВЫБРАТЬ
   |   Заказы.Ссылка,
   |   Заказы.Клиент,
   |   Заказы.Куда,
   |   Заказы.Форма
   |ИЗ
   |   Справочник.Заказы КАК Заказы
   |ГДЕ
   |   (Заказы.Машина = &Смена.Машина)
   |   И (Заказы.ДатаЗвонка = &Смена.ДатаСмены)
   |
   |СГРУППИРОВАТЬ ПО
   |   Заказы.Ссылка,
   |   Заказы.Клиент,
   |   Заказы.Куда,
   |   Заказы.Форма
   |";
Запрос=Новый Запрос(ТекстЗапроса);
Запрос.Параметры.Вставить("Смена.Машина", Машина);              //В этом месте при работе с документом "Смена" выскакивает ошибка
Запрос.Параметры.Вставить("Смена.ДатаСмены", ДатаСмены);  //"Поле объекта не обнаружено "Параметры"
Выборка=Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
   // Заполняем табличную часть
   Стр=ВыполненныеЗаказы.Добавить();
   Стр.Клиент=Выборка.Клиент;
   Стр.Куда=Выборка.Куда;
   Стр.Форма=Выборка.Форма;
   // ...
КонецЦикла;
Записан
Dest
Опытный

ru
Offline Offline

« Ответ #4 : 20-02-2010 00:07 » 

Без точки

Код:
Запрос.Параметры.Вставить("СменаМашина", Машина);             
Запрос.Параметры.Вставить("СменаДатаСмены", ДатаСмены);
Записан
Gunslinger
Постоялец

ru
Offline Offline

« Ответ #5 : 20-02-2010 05:34 » 

не помогло.. та же ошибка
Записан
Dest
Опытный

ru
Offline Offline

« Ответ #6 : 20-02-2010 07:35 » 

В запросе тоже исправил?

Код:
   |   (Заказы.Машина = &СменаМашина)
   |   И (Заказы.ДатаЗвонка = &СменаДатаСмены)
Записан
Gunslinger
Постоялец

ru
Offline Offline

« Ответ #7 : 21-02-2010 06:01 » 

угу. то же самое
Записан
Dest
Опытный

ru
Offline Offline

« Ответ #8 : 21-02-2010 08:28 » 

Что пишет то? какая ошибка?
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #9 : 21-02-2010 10:52 » 

Dest, думаю та же:
Цитата
//"Поле объекта не обнаружено "Параметры"

Gunslinger
1. Нету ли у тебя случайно реквизита формы/документа с идентификатором Запрос и заданным типом?
Попробуй переименование переменную: вместо Запрос используй ЗапросПоСправочнику
2. Попробуй заново перенабрать с клавиатуры слово Параметры - может там где-то вкралась английская буква?
Записан
Gunslinger
Постоялец

ru
Offline Offline

« Ответ #10 : 21-02-2010 12:41 » 

Попробовал все варианты.. Та же ошибка... Может проблема в том что у меня учебная версия восьмерки?
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #11 : 21-02-2010 13:10 » 

С учебной версией не работал.
А какая версия платформы (с точностью до 4й цифры)?
Сделай выгрузку конфигурации в cf файл и прикрепи сюда (желательно в архиве).
Записан
Gunslinger
Постоялец

ru
Offline Offline

« Ответ #12 : 21-02-2010 15:39 » 

Вот конфигурация

* 1Cv8.cf (58.1 Кб - загружено 939 раз.)
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #13 : 21-02-2010 21:11 » 

Уточни версию.
У меня на 8.1.14.72 твой код работает без ошибок
Записан
Gunslinger
Постоялец

ru
Offline Offline

« Ответ #14 : 22-02-2010 09:21 » 

8.1.9.57 Точно работает? Компилится то он и у меня. Ошибки в самой работе программы - на этапе ввода в документ значения поля "Машина"
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #15 : 23-02-2010 10:04 » 

Нет - у меня все работает корректно.
В 1С нет понятие "компилируется", точнее преобразование в псевдокод происходит в момент обращения к модулю, т.е. в твоем случае - при открытии формы. А в конфигураторе выполняется исключительно синтаксический контроль.
Версия достаточно старая - наверное в ней этого еще не было. Попробуй такой синтаксис:
Код:
ЗапросПоСправочнику.УстановитьПараметр("СменаМашина", Машина);
ЗапросПоСправочнику.УстановитьПараметр("СменаДатаСмены", ДатаСмены);
Записан
Gunslinger
Постоялец

ru
Offline Offline

« Ответ #16 : 23-02-2010 11:29 » 

Dest, Kivals, огромное спасибо за помощь) все работает и дальше ,думаю, легче пойдет))
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines