for flooders
:: Главная :: Решения :: Статьи :: Сайт М. Дроздова :: Файловый архив :: Книга по VFP 9 :: Русский Help Online :: OFF-LINE Форум
   Л и с о в о д ы   в с е х   с т р а н,  о б ъ е д и н я й т е с ь !!!  

Список Форумов  :: Вопросы по 1С
   :: Помощь сайту :: 

Получить форму списка расходных накладных
Зингер
Автор

Сообщений: 520
Откуда: Белгород
Дата: 27.10.16 12:27:10ОтветитьЦитировать
Привет всем. Продолжаю изучать 1С.
На форме документа приходной накладной хочу, чтобы по кнопке открывалась форма списка расходных накладных, где бы отражались только те расходные накладные, в составе которых есть данные по текущему документу приходной накладной.
Т.е. Если в приходной накладной "Холодильник", то и открываются расходные накладные только с холодильником.

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

1) Помогите пож-та, установить параметр для текущего объекта верно.
2) Как после того, как отработает запрос, открыть форму списка расходных накладных с нужными параметрами?
3) Правильно ли я сделал, что на форме приходной накладной разместил кнопку? Возможен ли другой способ (напр. на основании)?
Ratings: 0 negative/0 positive

Re: Получить форму списка расходных накладных
ssa
[Модератор]

Сообщений: 12064
Откуда: Москва
Дата: 27.10.16 12:44:37ОтветитьЦитировать
1. ВСЕГДА надо указывать версии платформы и конфиги, а также режим запуска предприятия (обычное/управляемое).
2. Связаны ли и как связаны приходные и расходные документы?
3. Не надо сначала делать запрос и потом думать как к нему открыть форму. Запрос должен быть в форме списка.
4.
Зингер
Возможен ли другой способ (напр. на основании)?
Другой способ ЧЕГО? Пока ты показал какую-то реализацию решения какой-то неизвестной задачи. Зачем тебе форма со списком? Просто показать или еще что-то потом делать?

------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive

Re: Получить форму списка расходных накладных
Зингер
Автор

Сообщений: 520
Откуда: Белгород
Дата: 27.10.16 13:01:02ОтветитьЦитировать
А-а, извините.

ssa
1. ВСЕГДА надо указывать версии платформы и конфиги, а также режим запуска предприятия (обычное/управляемое).
Версия 8.3. Режим запуска-Управляемое

ssa
2. Связаны ли и как связаны приходные и расходные документы?
Никак не связаны.

ssa
3. Не надо сначала делать запрос и потом думать как к нему открыть форму. Запрос должен быть в форме списка.
Извините, не понял. Запрос должен быть в форме списка расходных накладных?

ssa
4. Другой способ ЧЕГО? Пока ты показал какую-то реализацию решения какой-то неизвестной задачи. Зачем тебе форма со списком? Просто показать или еще что-то потом делать?
Для начала, просто показать.
Ratings: 0 negative/0 positive

Re: Получить форму списка расходных накладных
pasha_usue

Сообщений: 2950
Откуда: Е-бург
Дата: 27.10.16 13:15:37ОтветитьЦитировать
Зингер
1) Помогите пож-та, установить параметр для текущего объекта верно.
Вы выполняете процедуру НаСервереБезКонтекста, значит вам не доступны реквизиты формы. Если вы находитесь в форме документа, то у вас есть реквизит "Объект", который описывает объект документа. А у объекта есть реквизит "Ссылка". Значит вам надо обратиться к "Объект.Ссылка". Но в этой процедуре он вам недоступен, как я уже сказал выше.
Зингер
2) Как после того, как отработает запрос, открыть форму списка расходных накладных с нужными параметрами?
Сергей говорит абсолютно правильно. Сначала надо найти или создать форму с нужным функционалом. Функционал: "Показать список документов". Дополнительные условия: "По списку номенклатуры". Если такой формы нет, её надо создать. Соответственно, форма должна полностью инкапсулировать свой функционал. Значит, запрос должен быть в форме, которая показывает список документов по заданному условию.
Зингер
3) Правильно ли я сделал, что на форме приходной накладной разместил кнопку? Возможен ли другой способ (напр. на основании)?
"На основании" - вообще не про это. Ну разместили кнопку и разместили. Вам же потом эту конфигурацию поддерживать. Но есть одно серьезное "но!". Документ, показываемый пользователю, и документ, записанный в базу, это две разные сущности. Пользователь только что добавил номенклатуру, или две. Потом нажимает вашу кнопку, а в базе этой номенклатуры еще нет. А возможно, что и документа еще нет (новый документ). Так что, ваш подход дважды ущербный.
Ratings: 0 negative/0 positive

Re: Получить форму списка расходных накладных
ssa
[Модератор]

Сообщений: 12064
Откуда: Москва
Дата: 27.10.16 13:32:03ОтветитьЦитировать
Зингер
А-а, извините.
ssa
1. ВСЕГДА надо указывать версии платформы и конфиги, а также режим запуска предприятия (обычное/управляемое).
Версия 8.3.
8.3.6 и 8.3.8 ОЧЕНЬ сильно могут отличаться
Цитата:
Режим запуска-Управляемое
Прелестно. А конфига? Или самописная?
Цитата:
ssa
3. Не надо сначала делать запрос и потом думать как к нему открыть форму. Запрос должен быть в форме списка.
Извините, не понял. Запрос должен быть в форме списка расходных накладных?
Запрос должен быть в форме. А уж в какой - зависит от задачи, которую, как мне кажется, мы так и не узнаем.
Цитата:

ssa
4. Другой способ ЧЕГО? Пока ты показал какую-то реализацию решения какой-то неизвестной задачи. Зачем тебе форма со списком? Просто показать или еще что-то потом делать?
Для начала, просто показать.
А в конце долбиться головой в стену потому что решили не думать над тем, что будет потом7

------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive

Re: Получить форму списка расходных накладных
Аспид

Сообщений: 3177
Откуда: Москва
Дата: 27.10.16 14:27:35ОтветитьЦитировать
Зингер
Запрос.УстановитьПараметр("Документ","Ссылка"); //Здесь что то не правильно
Здесь не что то, а вовсе не верно)))
В запросе -
  
  |	Материалы.Ссылка = &Документ
Из чего следует, что очевидно тип &Документ должен быть Материалы.Ссылка
А у вас это строка.

Остальное не понял)
Может так?
Встали на строку Холодильник ПО и теперь смотрим, расходные, кто его забрал?
Тогда это чуть ближе к вашему запросу.


------------------
Ratings: 0 negative/0 positive

Re: Получить форму списка расходных накладных
Зингер
Автор

Сообщений: 520
Откуда: Белгород
Дата: 27.10.16 15:05:49ОтветитьЦитировать
pasha_usue
Вы выполняете процедуру НаСервереБезКонтекста, значит вам не доступны реквизиты формы. Если вы находитесь в форме документа, то у вас есть реквизит "Объект", который описывает объект документа. А у объекта есть реквизит "Ссылка". Значит вам надо обратиться к "Объект.Ссылка". Но в этой процедуре он вам недоступен, как я уже сказал выше.

Конечно. Как я не подумал.
Теперь с учетом изменений

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


ssa
Прелестно. А конфига? Или самописная?
Самописная. Более того, предназначена для всяческих тренировок и извращений. Никого практического смысла не имеет.

В цикле вертится сообщение, просто чтобы убедиться в правильности своей выборки.

Теперь создам форму:
pasha_usue
Сергей говорит абсолютно правильно. Сначала надо найти или создать форму с нужным функционалом. Функционал: "Показать список документов". Дополнительные условия: "По списку номенклатуры". Если такой формы нет, её надо создать. Соответственно, форма должна полностью инкапсулировать свой функционал. Значит, запрос должен быть в форме, которая показывает список документов по заданному условию.
Спасибо за подсказку.

Тогда подскажите, как из одной формы (ПриходнаяНакладная) вызвать другую (ОказаниеУслуги) с параметром Форма.ПриходнаяНакладная.ССылка ?
Ratings: 0 negative/0 positive

Re: Получить форму списка расходных накладных
Зингер
Автор

Сообщений: 520
Откуда: Белгород
Дата: 27.10.16 15:10:01ОтветитьЦитировать
Аспид
Встали на строку Холодильник ПО и теперь смотрим, расходные, кто его забрал?

Тоже интересная идея. После закрытия текущего вопроса, покумекаю над этим.

P.S. Что такое ПО?
Ratings: 0 negative/0 positive

Re: Получить форму списка расходных накладных
pasha_usue

Сообщений: 2950
Откуда: Е-бург
Дата: 27.10.16 15:10:50ОтветитьЦитировать
Зингер
Спасибо за подсказку.

Тогда подскажите, как из одной формы (ПриходнаяНакладная) вызвать другую (ОказаниеУслуги) с параметром Форма.ПриходнаяНакладная.ССылка ?
Плохо читаете. Я еще раз мягко намекну, да?

  
  &НаКлиенте  
  Процедура ВызватьФорму(Команда)  
  	ТекПараметры = Новый Структура();  
  	ТекПараметры.Вставить("ПереченьНоменклатуры", ПолучитьМассивНоменклатурыИзТабличнойЧастиНаСервере());  
  	ФормаОбработки = ПолучитьФорму(<<ПутьКМоейФорме>>, ТекПараметры, ЭтаФорма);  
  	ФормаОбработки.Открыть();  
  КонецПроцедуры
Ratings: 0 negative/0 positive

Re: Получить форму списка расходных накладных
Аспид

Сообщений: 3177
Откуда: Москва
Дата: 27.10.16 15:41:06ОтветитьЦитировать
Зингер
Аспид
Встали на строку Холодильник ПО и теперь смотрим, расходные, кто его забрал?

Тоже интересная идея. После закрытия текущего вопроса, покумекаю над этим.

P.S. Что такое ПО?
ПО = приходный ордер

Зингер
Тоже интересная идея. После закрытия текущего вопроса, покумекаю над этим.

Так значит то что хотите сейчас это не то?

Вы ссылками кидаетесь.
Осмыслите, что хотите получить.
Как ссылка на Приходник, коррелируется с

Материалы.Ссылка = &Документ

Все же, даже для тренировки, надо задачу то четко обозначить.

Вы хотите, чего то слишком необычного)))


------------------




Исправлено: Аспид, 27.10.16 15:41
Ratings: 0 negative/0 positive

Re: Получить форму списка расходных накладных
Foxtrot

Сообщений: 3345
Откуда: Бишкек
Дата: 27.10.16 16:05:33ОтветитьЦитировать
Аспид
Вы хотите, чего то слишком необычного)))
любой продажник с тобой не согласится


------------------
P.S. будете проходить мимо, не стесняйтесь, проходите
Ratings: 0 negative/0 positive

Re: Получить форму списка расходных накладных
Зингер
Автор

Сообщений: 520
Откуда: Белгород
Дата: 27.10.16 16:16:34ОтветитьЦитировать
Аспид
Так значит то что хотите сейчас это не то?

Допустим, есть приходная накладная с тремя позициями
1)Холодильник
2)Кроссовки
3)Бутыль молока

Хочется получить список расходных накладных, где бы учавствовали эти 3 позиции.

И сейчас по "мягкому намеку" pasha_usue сел изучать как передавать параметры в управляемых формах.
Вопросы чувствую не за горами.
Ratings: 0 negative/0 positive

Re: Получить форму списка расходных накладных
Аспид

Сообщений: 3177
Откуда: Москва
Дата: 27.10.16 16:27:42ОтветитьЦитировать
Foxtrot
Аспид
Вы хотите, чего то слишком необычного)))
любой продажник с тобой не согласится
А почему?
Не, после последнего объяснения ТС, я понял идею, раньше я о ней по коду догадывался.
Ну тогда его выборка вообще не о том)

Если он как параметр получает ссылку, то дальше, ему надо ПолучитьОбъект()
Вот он у него, собрать видимо в массив, табл. часть. и подсунуть ее в запрос.

Вот так, я сегодня это понимаю)))
Вот уж не надо на мои знания ориентироваться)))
ОТвечаю, больше экзаменуя себя)))
Впечатление, что в самых азах, кое в чем разобрался)))


------------------
Ratings: 0 negative/0 positive

Re: Получить форму списка расходных накладных
Зингер
Автор

Сообщений: 520
Откуда: Белгород
Дата: 27.10.16 17:05:16ОтветитьЦитировать
Итак. Объединив прочитанное, можно сказать, что для отображения вышеупомянутой формы, нужно сделать:

1)В форме ПриходнаяНакладная на сервере создать запрос по номенклатуре табличной части документа и сформировать из него массив.
2)В этой же форме на клиенте вызвать форму РасходнаяНакладная и "подсунуть" туда массив из номенклатуры.
3)Создать новую форму списка для документа РасходнаяНакладная (напр. ФормаСпискаСОтбором), где на сервере в процедуре ПриСозданииНаСервере произвести отбор по массиву.

В правильном направлении я иду, товарищи?
Ratings: 0 negative/0 positive

Re: Получить форму списка расходных накладных
Аспид

Сообщений: 3177
Откуда: Москва
Дата: 27.10.16 18:05:05ОтветитьЦитировать
Если есть п.3, то зачем п.2?

Думаю можно так.
п.2 = п.3
п.3. В этой же форме на клиенте вызвать форму РасходнаяНакладная созданую форму и "подсунуть" туда массив из номенклатуры.

На самом деле, как я понимаю, можно форму и не создавать. А использовать отбор в имеющейся. Но так понятнее.
И кстати, для начала, я бы без формы. Как у тебя в начале было, просто вывел бы сообщения о всех найденых доках. Т.е. добиться работы выборки. А потом остальное проще.
(У меня вот не получается из табличной части выборкой вытащить что то (уже не помню что надо было) )


------------------
Ratings: 0 negative/0 positive

Re: Получить форму списка расходных накладных
Зингер
Автор

Сообщений: 520
Откуда: Белгород
Дата: 27.10.16 18:16:28ОтветитьЦитировать
to Аспид А как же тогда новая форма будет знать о параметрах? И о том что ей необходимо что то выбирать?

Аспид
И кстати, для начала, я бы без формы. Как у тебя в начале было, просто вывел бы сообщения о всех найденых доках. Т.е. добиться работы выборки. А потом остальное проще.
Да вот как то с запросами у меня попроще. Видимо наследие от SQL. А вот с тем что Вы называете попроще ... "бяда".
Привык к VFP.



Исправлено: Зингер, 27.10.16 18:18
Ratings: 0 negative/0 positive

Re: Получить форму списка расходных накладных
Аспид

Сообщений: 3177
Откуда: Москва
Дата: 27.10.16 18:40:26ОтветитьЦитировать
Зингер
Да вот как то с запросами у меня попроще. Видимо наследие от SQL.
3 ха-ха)))
И что ж вы понаписали в 1м запросе?
Это ни в SQL ни в 1С )))

Еще раз, сделайте, что полагаете просто. Запрос)))

А 1й вопрос про отбор?
Ну конечно, надо параметры для отбора передавать.
Я это... не могу объяснить. Тут по мне так все запутано(((
Почитай.
Все делается.

Да просто запомни, а пока делай как решил)
На остальное, 90% Паша подсказал уже. Там как раз все просто)


------------------
Ratings: 0 negative/0 positive

Re: Получить форму списка расходных накладных
Зингер
Автор

Сообщений: 520
Откуда: Белгород
Дата: 27.10.16 18:55:15ОтветитьЦитировать
Аспид
3 ха-ха)))
И что ж вы понаписали в 1м запросе?
Это ни в SQL ни в 1С )))

Еще раз, сделайте, что полагаете просто. Запрос)))

Запрос отрабатывает. И возвращает список расходных накладных.
Ratings: 0 negative/0 positive

Re: Получить форму списка расходных накладных
Зингер
Автор

Сообщений: 520
Откуда: Белгород
Дата: 27.10.16 19:03:19ОтветитьЦитировать
Теперь поэтапно.
1) В Предполагаемой форме списка (назвал ФормаСпискаСПараметром) определил параметр Ссылка, тип ДокументСсылка
2) В настройке объекта список, в свойстве "Нстройка списка" прописал запрос:
  
  ВЫБРАТЬ  
  	ДокументОказаниеУслуги.Ссылка,  
  	ДокументОказаниеУслуги.ПометкаУдаления,  
  	ДокументОказаниеУслуги.Номер,  
  	ДокументОказаниеУслуги.Дата,  
  	ДокументОказаниеУслуги.Проведен,  
  	ДокументОказаниеУслуги.Склад,  
  	ДокументОказаниеУслуги.Клиент,  
  	ДокументОказаниеУслуги.Мастер,  
  	ДокументОказаниеУслуги.ОбъектОснование,  
  	ДокументОказаниеУслуги.ПереченьНоменклатуры,  
  	ДокументОказаниеУслуги.МоментВремени  
  ИЗ  
  	Документ.ОказаниеУслуги КАК ДокументОказаниеУслуги  
  ГДЕ  
  	ДокументОказаниеУслуги.ПереченьНоменклатуры.Номенклатура В  
  		(ВЫБРАТЬ  
  	    	Материалы.Материал  
  	        ИЗ  
  	        Документ.ПриходнаяНакладная.Материалы КАК Материалы  
  	        ГДЕ  
  	        Материалы.Ссылка=&Ссылка)
3)В исходном документе (Приходная накладная) пытаюсь вызвать эту форму
  
  &НаКлиенте  
  Процедура РасходныеНакладные(Команда)  
  	ФормаОбработки=ПолучитьФорму("Документ.ОказаниеУслуги.Форма.ФормаСпискаСПараметром",Объект.Ссылка,ЭтаФорма);  
  	ФормаОбработки.Открыть();  
  КонецПроцедуры

Получаю ошибку:
Несоответствие типов (параметр номер '2')

Что сделал не так?
Ratings: 0 negative/0 positive

Re: Получить форму списка расходных накладных
Аспид

Сообщений: 3177
Откуда: Москва
Дата: 27.10.16 19:10:55ОтветитьЦитировать
Увы, параметры в форму передаются не так.
Почитайте, Паша все описал.

Но судя по описанию задачи, вы выбрали чепуху.
И она хоть в анси сиквел, хоть в 1с, остается таковой.
Что вам надо получить?
Список материалов? (Если я верно понял задачу)
И где он в выборке?
Зачем вам ПометкаУдаления и пр. реквизиты шапки?
Сергей же сразу спросил, у вас как связаны приходник и расходник. Вы ответили - нет.

В общем перечитайте все. Что вам написали.
И четко для себя сформулируйте задачу.
Напишите запрос на анси сиквеле, попробуйте его в 1С запрос перевести.

Ну вот еще заметил. У вас в условиях? материал=приходник.
В каком SQL это сработает?


------------------




Исправлено: Аспид, 27.10.16 19:13
Ratings: 0 negative/0 positive



Извините, только зарегистрированные пользователи могут писать в этом форуме.

On-line: 32 and Guests: 32


© 2000-2018 Fox Club 
Яндекс.Метрика