Имя: Пароль:
1C
1С v8
УФ 8.2: как сделать, чтобы при открытии формы появился список складов с пометкам
,
0 Kleo
 
07.01.13
16:00
УФ 8.2: как сделать, чтобы при открытии формы появился список складов с пометками. затем пользователь сам устанавливает пометки, и затем выбранные склады передаются в модуль объекта. как сделать? вроде прсото, ноя  запуталась, обработка внешняя на УФ, для заполнения ТЧ документа
1 IamAlexy
 
07.01.13
16:00
взять и сделать..
2 Kleo
 
07.01.13
16:07
делаю в модуле объекта обработки:

Процедура ВыполнитьОтбор() Экспорт

   Запрос = Новый Запрос;
   
   Запрос.Текст = "ВЫБРАТЬ
                  |    0 КАК Пометка,
                  |    Склады.Ссылка
                  |ИЗ
                  |    Справочник.Склады КАК Склады
                  |ГДЕ
                  |    Склады.ЭтоГруппа = ЛОЖЬ
                  |    И Склады.ПометкаУдаления = ЛОЖЬ";
                 
           
   Список = Запрос.Выполнить().Выгрузить();

КонецПроцедуры


затем в модуле формы:

&НаСервере
Процедура ВыполнитьОтбор()
   Обработка = ДанныеФормыВЗначение(Объект, Тип("ВнешняяОбработка.ЗаполнитьПеремещение"));
   Обработка.ВыполнитьОтбор();
   
   ЗначениеВДанныеФормы(Обработка, Объект);
КонецПроцедуры


&НаКлиенте
Процедура ПриОткрытии(Отказ)
   //Вставить содержимое обработчика
   ВыполнитьОтбор();
КонецПроцедуры


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

Обработка = ДанныеФормыВЗначение(Объект, Тип("ВнешняяОбработка.ЗаполнитьПеремещение"));
3 GROOVY
 
07.01.13
16:21
На какого процедуру описывать в модуле обработки?
4 Kleo
 
07.01.13
16:22
(3) чтобы запрос сделать? можно в модуле формы сделать?
5 GROOVY
 
07.01.13
16:24
(4) Можно в серверной процедуре.
6 Kleo
 
07.01.13
16:28
сделала вот так:

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

КонецПроцедуры


&НаКлиенте
Процедура ПриОткрытии(Отказ)
   //Вставить содержимое обработчика
   ВыполнитьОтбор();
   
КонецПроцедуры


при запуске формы пишет: "Нельзя изменять поле, содержащее объект данных формы". что не так?
7 Kleo
 
07.01.13
16:31
сделала фот так:


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

   Объект.Список.Очистить();
   Выборка = Справочники.Склады.Выбрать();
   Пока Выборка.Следующий() Цикл
       Если Выборка.ЭтоГруппа = Истина Тогда Продолжить;КонецЕсли;
       Если Выборка.ПометкаУдаления = Истина Тогда Продолжить; КонецЕсли;
       Сп = Объект.Список.Добавить();
       Сп.Пометка = ЛОжь;
       Сп.Склад = Выборка.Ссылка;
   КонецЦикла;    

КонецПроцедуры


&НаКлиенте
Процедура ПриОткрытии(Отказ)
   //Вставить содержимое обработчика
   ВыполнитьОтбор();
   
КонецПроцедуры


заработало.... странно...
8 Kleo
 
07.01.13
16:33
помогите дальше.... теперь мне нужно выбранные с пометками склады передать в модуль  объекта, чтобы по выбранным складам проверить остатки на складе... в модуле обработки уже написана процедура, она заполняет, но пока только по одному складу, заданному на форме документа, из которго вызывается внешняя обработка по заполнению ТЧ документа. Все заоплняется, только мне теперь нужно, чтобы в запросе делался отбор по тем складам, которые заданы в форме. как сделать?
9 MRAK
 
07.01.13
16:37
(8) а в чем сложность-то? Таблица - это ТЧ обработки?
10 kiruha
 
07.01.13
16:40
А зачем в модуль объекта ?
Чем модуль формы не не нравится ?
11 GROOVY
 
07.01.13
16:43
Объект.Список.Загрузить(Запрос.Выполнить().Выгрузить());
12 Kleo
 
07.01.13
16:49
(9) нет. Объект.Список - это ТЧ формы обработки  - которая состоит из списка складов, а вот нужно заполнить ТЧ уже документа, откуда вызывается данная обработка. мне нужно для запроса задать параметр (список) в  модуле объекта обработки
13 Kleo
 
07.01.13
16:50
(10) у меня процедура уже написана в модуле объекта обрабботки... я уже запуталась..
14 Kleo
 
07.01.13
16:54
у меня есть типовой документ в УТ "Заказ на перемещение". в нем я вызываю внешнюю обработку по заполнению ТЧ документа. при открытии обработки выбираю команду на клиенте  - открытие формы. на ней при открытии открывается список складов с пометками, пользователь выставляет нужные пометки сам. затем нужно нажать кнопку "ОК" на форме обработки и чтобы дальше выполнилась процедура в модуле объекта обработки
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения) Экспорт

как сделать и чтобы в эту процедуру передался список отобранных в форме обработки складов.
15 MRAK
 
07.01.13
17:01
(12) тогда (11)
16 Kleo
 
07.01.13
17:02
(15) у меня уже получилось загрузить список складов на форму обработки. теперь мне этотсписок складов нужно передать ф модуль объекта обработки, где происходит заполнение ТЧ документа Заказа на перемещение
17 kiruha
 
07.01.13
17:03
(13)
Перенеси процедуру в модуль формы или модуль менеджера

Для модуля объекта можно, но не очень тривиально
напр
v8: 1с 8.2 вызов процедуры в модуле формы
18 Kleo
 
07.01.13
17:05
(17) не я это придумала.... взяла типовой образец внешней обработки для заполнения ТЧ документов...
19 Kleo
 
07.01.13
17:05
обидно.... ведь там уже все написала... и осталось только передать список справочников...
20 kiruha
 
07.01.13
17:08
&НаСервере
Функция ПередатьСкладыВМодульОбъекта()
   НашОбъект = РеквизитФормыВЗначение("Объект");
   Возврат НашОбъект.ПроцедуркаВОбъекте(СписокСправочников);
КонецФункции
21 Kleo
 
07.01.13
17:12
(20) расшифруйте, что есть, что в этой обработке... у меня проблема. вот отркыла я форму выбора списка складов, выбраль пользователь. дальше нажимает на кнопку Выполнить в этой форме и что дальше? я уже замучалась... не получается у меня дальше передать направление на выполнение процеудры в модуле объекта обработки на заполнение ТЧ....
22 Kleo
 
07.01.13
17:15
мне нужно вот так в модуле формы обработки:


&НаСервере
Процедура ВыполнитьДействие()
   // здесь нужно прописать процедуру, чтобы вызвала процедуру из модуля объекта ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения)Экспорт
КонецПроцедуры


&НаКлиенте
Процедура НажмиМеня(Команда)
   //// Вставить содержимое обработчика.
   //Сообщение = Новый СообщениеПользователю;
   //Сообщение.Текст = "Hello Word (из формы обработки)";
   //Сообщение.Сообщить();
   //ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения);
   ВыполнитьДействие();
КонецПроцедуры


и вот в процедуре ВыполнитьДействие ругается на параметры процедуры..
23 Kleo
 
07.01.13
17:16
Форма.ФормаВыбора.Форма(75,20)}: Переменная не определена (ИдентификаторКоманды)
    ВыполнитьКоманду(<<?>>ИдентификаторКоманды, ОбъектыНазначения) (Проверка: Сервер)
{Форма.ФормаВыбора.Форма(75,42)}: Переменная не определена (ОбъектыНазначения)
    ВыполнитьКоманду(ИдентификаторКоманды, <<?>>ОбъектыНазначения) (Проверка: Сервер)
{Форма.ФормаВыбора.Форма(75,3)}: Процедура или функция с указанным именем не определена (ВыполнитьКоманду)
    <<?>>ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения) (Проверка: Сервер)
24 kiruha
 
07.01.13
17:18
Нужно почитать про передачу параметров
25 Kleo
 
07.01.13
17:20
(20) сделала процедуру... а дальше в модуле объекта, как мне получить таблицу этих складов?
26 Kleo
 
07.01.13
17:22
(24) дело в том, что это уже параметры, заданные по умолчанию... это как по принципу заразервированной процедуры "Инициализировать" для обычного режима... и тут также... я ничего не придумала, а взяла за основу пример заполнения ТЧ
27 Kleo
 
07.01.13
17:28
псих уже берет... уже в обычной форме давно бы сделала(((


простые вещи вроде: октрыть форму внешней обработки, задать склады, какие нужны для проверки остатков, а затем по этим складам в запросе сделать поиск остатокв и заполнить ТЧ документа, из которого запущена внешняя обработка по заполнению...
28 Kleo
 
07.01.13
17:39
перенесла содержание процедуры по заполнению ТЧ документа из модуля обработки в модуль формы и ругается:
"Нельзя изменять поле, содержащее объект данных формы"
29 Kleo
 
07.01.13
17:42
(28) поняла)) одинаково назывались переменные))) Объект и там и там, но разные совершенно объекты
30 Kleo
 
07.01.13
18:42
проблема.... уже туплю... необходимо в тексте запроса проверялось вхождение Ресурса регистра Склады в список значений складов... Склады в (&Склады) и Склады = (&Склады) не работают... из-за несовпадения типов...
31 Kleo
 
07.01.13
18:45
как в СписокЗначений передать тип значений?
32 Kleo
 
07.01.13
19:27
СЗ - это реквизит формы обработки, там нужно было установить ТипЗначения - Справочники.Склады. сдалала.


но почему в запросе не работает часть кода:

ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СвободныеОстатки.Остатки(&ДатаДок, Склад В (&Склады)) КАК СвободныеОстаткиОстатки


где
Запрос.УстановитьПараметр("Склады", СЗ); СЗ - реквизит формы обработки, его видит,все, он не пустой... но вот условие в параметрах виртуальной таблицы регистра не срабатывает(((
33 Kleo
 
07.01.13
19:48
получается все сделала... а самое главное вхождение складов в список складов не работает(((
34 Kleo
 
10.01.13
12:01
не работает вот эта функция:

&НаСервере
Функция ПередатьСкладыВМодульОбъекта()
   НашОбъект = РеквизитФормыВЗначение("Объект");
   Возврат НашОбъект.ПроцедуркаВОбъекте(СписокСправочников);
КонецФункции


потому что ПроцедураВОбъекте  - это процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения)

и если я ее подставляю, то ругается, что параметры ИдентификаторКоманды, ОбъектыНазначения неопределены.


что нкито не писал на УФ внешнюю обработку по заполнению ТЧ документа?
35 kiruha
 
10.01.13
13:29
Если вызываешь процедуру, ты обязана заполнить параметры.
Например если это
Процедура МояПроцедура(ИмяКоманды)

ты должна при вызове поместить один параметр, по смыслу совпадающий с тем, что происхдит в процедуре
//...
МояПроцедура("Выполнить")

в процедуре ИмяКоманды будет иметь значение "Выполнить"
36 Kleo
 
10.01.13
13:55
(35) это все понятно, это прописные истины. НО у меня есть внешняя обработка для заполнения ТЧ документа, в ней есть предопределенная процедура, в которой как раз прописан механизм заполнения - это стандартный образец обработки - ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения), так вот. если я ее буду прописывать ПередатьСкладыВМодульОбъекта(), то ругается на параметры. возьмите типовую обработку заполнения ТЧ для УФ 8.2! вся сложность в том, что мне перед заполнением документа сначала нужно открыть форму обработки, выбрать нужные мне склады, а затем передать список этих складов в эту обработку ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения)
37 Kleo
 
10.01.13
13:55
добавлять еще один параметр в процедуру ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения) я не могу - не будет работать заполнение