Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
29 мар 2024, 01:15

Передача параметров из ячейки поля табличного документа в форму создания нового документа 1с 8.3

Автор Анна Баханович, 17 фев 2016, 10:19

0 Пользователей и 1 гость просматривают эту тему.

Анна Баханович

Всем привет!
Помогите, пожалуйста, кто может....
Есть схема, которая выводится на экран в ПолеТабличногоДокумента

...где ячейки за столом обрабатываются по нажатию ПроцедуройРасшифровки

//
&НаКлиенте
Процедура ТабДокОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
    Если ТипЗнч(Расшифровка) = Тип("ДокументСсылка.Питание_РегистрацияПитающихся") Тогда
       //Сообщить ("1 " + Расшифровка);     
    Иначе
       //Сообщить ("2 " + Расшифровка);
      СтандартнаяОбработка = ЛОЖЬ;
      Форма = ПолучитьФорму("Документ.Питание_РегистрацияПитающихся.Форма.ФормаДокумента");
                Форма.Открыть();
      
   КонецЕсли; 
КонецПроцедуры
//

... если место занято, выводится документ регистрации клиента, если нет то новый документ регистрации....


Как передать в форму создания нового документа данные из обрабатываемой ячейки ПоляТабличногоДокумента???
...может немножко запутано...ну вдруг кто поможет....







vitasw

Глобальный контекст (Global context)
ОткрытьФорму (OpenForm)
Вариант синтаксиса: По названию

Синтаксис:

ОткрытьФорму(<ИмяФормы>, <Параметры>, <Владелец>, <Уникальность>, <Окно>, <НавигационнаяСсылка>, <ОписаниеОповещенияОЗакрытии>, <РежимОткрытияОкна>)

через параметр передавайте что угодно

Анна Баханович

Спасибо, что отозвались!  ...это знаю... не получается создать автоматом при открытии формы нового документа запись в табличной части этого документа...именно туда нужно передать значения...:dfbsdfbsdf:

vitasw

Цитата: Анна Баханович от 17 фев 2016, 13:28не получается создать автоматом при открытии формы нового документа запись в табличной части этого документа.
Не очень информативное сообщение. Если вы что-то делали - то приведите код.
Ваши данные из отчета нужно запихнуть в вышеозначенную структуру. В самом документ в "ПриСозданииНаСервере" эти данные доставать из "Параметры".

Анна Баханович

...не получается... что-то упускаю...:dfbsdfbsdf:

..вот код...

//заполнение табличного поля с расшифровкой
   Для ИндексСтол = 1 По КолСтолов Цикл
      Для Каждого Элемент Из СписокСтолов Цикл
         Если Строка(Элемент.Значение) = Строка(ИндексСтол) Тогда
             МестЗаСтолом = Число(Элемент.Представление);
         КонецЕсли;         
      КонецЦикла;
      //официанты   
      ПараметрОф = Новый Структура;
      Для Каждого Элемент Из СписокОфициантов Цикл
         Если СокрЛП(Строка(Элемент.Значение)) = СокрЛП(Строка(ИндексСтол)) Тогда
             ОфСтол =  Элемент.Представление;
         КонецЕсли;      
        КонецЦикла;
      ПараметрОф.Вставить("Оф" + Строка(ИндексСтол), ОфСтол);
      Область.Параметры.Заполнить(ПараметрОф);
      Для ИндексМесто = 1 По 6 Цикл
         Если ИндексМесто = 1 Тогда
            ПараметрМесто = Новый Структура;
            ПараметрМесто.Вставить("Стол" + Строка(ИндексСтол) + "1", "1");
            Область.Параметры.Заполнить(ПараметрМесто);
            ПараметрРасшифровки = Новый Структура;
            ПараметрРасшифровки.Вставить("ПараметрРасшифровки" + Строка(ИндексСтол) + "1", "новый");
                Область.Параметры.Заполнить(ПараметрРасшифровки);
         КонецЕсли;
            Если ИндексМесто = 2 Тогда
            ПараметрМесто = Новый Структура;
            ПараметрМесто.Вставить("Стол" + Строка(ИндексСтол) + "2", "2");
            Область.Параметры.Заполнить(ПараметрМесто);
            ПараметрРасшифровки = Новый Структура;
            ПараметрРасшифровки.Вставить("ПараметрРасшифровки" + Строка(ИндексСтол) + "2", "новый");
                Область.Параметры.Заполнить(ПараметрРасшифровки);
         КонецЕсли;
            Если ИндексМесто = 3 Тогда
            ПараметрМесто = Новый Структура;
            ПараметрМесто.Вставить("Стол" + Строка(ИндексСтол) + "3", "3");
            Область.Параметры.Заполнить(ПараметрМесто);
            ПараметрРасшифровки = Новый Структура;
            ПараметрРасшифровки.Вставить("ПараметрРасшифровки" + Строка(ИндексСтол) + "3", "новый");
                Область.Параметры.Заполнить(ПараметрРасшифровки);
         КонецЕсли;
         Если ИндексМесто = 4 Тогда
            ПараметрМесто = Новый Структура;
            ПараметрМесто.Вставить("Стол" + Строка(ИндексСтол) + "4", "4");
            Область.Параметры.Заполнить(ПараметрМесто);
            ПараметрРасшифровки = Новый Структура;
            ПараметрРасшифровки.Вставить("ПараметрРасшифровки" + Строка(ИндексСтол) + "4", "новый");
                Область.Параметры.Заполнить(ПараметрРасшифровки);
         КонецЕсли;
         Если МестЗаСтолом > 4 Тогда
            Если ИндексМесто = 5 Тогда
               ПараметрМесто = Новый Структура;
               ПараметрМесто.Вставить("Стол" + Строка(ИндексСтол) + "5", "5");
               Область.Параметры.Заполнить(ПараметрМесто);
               ПараметрРасшифровки = Новый Структура;
               ПараметрРасшифровки.Вставить("ПараметрРасшифровки" + Строка(ИндексСтол) + "5", "новый");
               Область.Параметры.Заполнить(ПараметрРасшифровки);
            КонецЕсли;
            Если ИндексМесто = 6 Тогда
               ПараметрМесто = Новый Структура;
               ПараметрМесто.Вставить("Стол" + Строка(ИндексСтол) + "6", "6");
               Область.Параметры.Заполнить(ПараметрМесто);
               ПараметрРасшифровки = Новый Структура;
               ПараметрРасшифровки.Вставить("ПараметрРасшифровки" + Строка(ИндексСтол) + "6", "новый");
               Область.Параметры.Заполнить(ПараметрРасшифровки);
            КонецЕсли;
         КонецЕсли;
      КонецЦикла;
   КонецЦикла;
    //заполнение параметров по столам   
   Для Каждого Стр Из Таб Цикл
      ЦветДиеты = WebЦвета.Белый;
      Для Каждого Элемент Из СписокДиет Цикл
         Если СокрЛП(Стр.Рацион) = СокрЛП(Строка(Элемент.Представление)) Тогда
            Если Элемент.Значение = 1 тогда    ЦветДиеты = Цвет1; КонецЕсли;
            Если Элемент.Значение = 2 тогда    ЦветДиеты = Цвет2; КонецЕсли;
                Если Элемент.Значение = 3 тогда    ЦветДиеты = Цвет3; КонецЕсли;
                Если Элемент.Значение = 4 тогда    ЦветДиеты = Цвет4; КонецЕсли;
                Если Элемент.Значение = 5 тогда    ЦветДиеты = Цвет5; КонецЕсли;
                Если Элемент.Значение = 6 тогда    ЦветДиеты = Цвет6; КонецЕсли;
         КонецЕсли;
      КонецЦикла;
        ЗанятоеМесто = Стр.Пол + " - " + Формат(Стр.ДатаПо, "ДЛФ=Д");
      Расшифровка = Стр.Регистратор;
      Пит = Стр.Питающийся;
      Место = Строка(Стр.Стол) + Строка(Стр.Место);
      СписокПит.Вставить(Место, Пит);
      СписокЦветов.Вставить(Место, ЦветДиеты);
      ПараметрМесто = Новый Структура;
      ПараметрМесто.Вставить("Стол" + Место,ЗанятоеМесто);
      Область.Параметры.Заполнить(ПараметрМесто);
      ПараметрРасшифровки = Новый Структура;
      ПараметрРасшифровки.Вставить("ПараметрРасшифровки" + Строка(Место), Расшифровка);
        Область.Параметры.Заполнить(ПараметрРасшифровки);
   
   КонецЦикла;
   Для Каждого Элемент Из СписокПит Цикл
      Если Элемент.Значение = "" Тогда
         СписокПит.Вставить(Элемент.Значение, "свободно");
         Расшифровка = СокрЛП(Строка(Зал) + Строка(Элемент.Ключ));
         
      КонецЕсли;
   КонецЦикла;
    ТабДок.Вывести(Область);

...........процедура расшифровки....

&НаКлиенте
Процедура ТабДокОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
   
    Если ТипЗнч(Расшифровка) = Тип("ДокументСсылка.Питание_РегистрацияПитающихся") Тогда
       //Сообщить ("1 " + Расшифровка_занятых);     
   Иначе
       //Сообщить ("2 " + Расшифровка_свободных);
      СтандартнаяОбработка = ЛОЖЬ;
      ПараметрыФормы = Новый Структура("НомерСтола, НомерМеста, Зал");
      ПараметрыФормы.Зал = Лев(Расшифровка,СтрДлина(Расшифровка)-3);
      ПараметрыФормы.НомерСтола = Лев(Расшифровка,СтрДлина(Расшифровка)-1);
      ПараметрыФормы.НомерМеста = Прав(Расшифровка,1);
       Форма = ОткрытьФорму("Документ.Питание_РегистрацияПитающихся.Форма.ФормаДокумента", ПараметрыФормы, ЭтаФорма);
   
   КонецЕсли; 
КонецПроцедуры

......процедура при создании в модуле документа

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
   Если НЕ Питание_НаСервере.ПередОткрытиемФормыДокумента(ЭтаФорма) Тогда
      Отказ = Истина;
      Возврат;
   КонецЕсли;
   
   Если Не Параметры.НомерСтола.Пустая() Тогда

      ЗаполнитьЗначенияСвойств(ЭтаФорма, Параметры, "НомерСтола, НомерМеста, Зал");
       ЭтаФорма.ЗакрыватьПриЗакрытииВладельца = Истина;
       Объект.Питающиеся.Добавить();
      Элементы.ПитающиесяЗал = Параметры.Зал;
      Элементы.ПитающиесяНомерСтола = Параметры.НомерСтола;
      Элементы.ПитающиесяНомерМеста = Параметры.НомерМеста;
         
   КонецЕсли;
КонецПроцедуры

....параметры остаются пустыми.....
:dfbsdfbsdf:

   

Kironten

Цитата: Анна Баханович от 17 фев 2016, 17:18
...не получается... что-то упускаю...:dfbsdfbsdf:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
   Если НЕ Питание_НаСервере.ПередОткрытиемФормыДокумента(ЭтаФорма) Тогда
      Отказ = Истина;
      Возврат;
   КонецЕсли;
   
   Если Не Параметры.НомерСтола.Пустая() Тогда

      ЗаполнитьЗначенияСвойств(ЭтаФорма, Параметры, "НомерСтола, НомерМеста, Зал");
       ЭтаФорма.ЗакрыватьПриЗакрытииВладельца = Истина;
       Объект.Питающиеся.Добавить();
      Элементы.ПитающиесяЗал = Параметры.Зал;
      Элементы.ПитающиесяНомерСтола = Параметры.НомерСтола;
      Элементы.ПитающиесяНомерМеста = Параметры.НомерМеста;
         
   КонецЕсли;
КонецПроцедуры

....параметры остаются пустыми.....
:dfbsdfbsdf:

Вы на сервере. Какие элементы? К объекту обращайтесь.

vitasw

А отладчиком воспользоваться?
Цитата: Анна Баханович от 17 фев 2016, 17:18ПараметрыФормы.НомерСтола = Лев(Расшифровка,СтрДлина(Расшифровка)-1);

явно строка

Цитата: Анна Баханович от 17 фев 2016, 17:18Если Не Параметры.НомерСтола.Пустая() Тогда
Это что вдруг за ноу-хау?

Анна Баханович

...называется "как придумала"....:D
...всё...утро вечера мудренее.... до завтра....:btbzdb:


Добавлено: 18 фев 2016, 12:34


...немножко переделала...

//передаем параметры в форму документа
      СтандартнаяОбработка = ЛОЖЬ;
      ПараметрыФормы = Новый Структура("ПризнакСвободно, Зал, НомерСтола, НомерМеста");
      ПараметрыФормы.Зал = ЗалСсылка;
      ПараметрыФормы.НомерСтола = НомерСтола;
      ПараметрыФормы.НомерМеста = НомерМеста;
      ПараметрыФормы.ПризнакСвободно = ИСТИНА;
      Форма = ОткрытьФорму("Документ.Питание_РегистрацияПитающихся.Форма.ФормаДокумента", ПараметрыФормы, ЭтаФорма);

....процедура при создании в модуле документа

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
   Если НЕ Питание_НаСервере.ПередОткрытиемФормыДокумента(ЭтаФорма) Тогда
      Отказ = Истина;
      Возврат;
   КонецЕсли;
   
   Если  Параметры.ПризнакСвободно = ИСТИНА Тогда
      ЭтаФорма.ЗакрыватьПриЗакрытииВладельца = Истина;
               Объект.Питающиеся.Добавить();
      Элементы.ПитающиесяЗал = Параметры.Зал;
      Элементы.ПитающиесяНомерСтола = Параметры.НомерСтола;
      Элементы.ПитающиесяНомерМеста = Параметры.НомерМеста;
   КонецЕсли;
КонецПроцедуры

При нажатии говорит поле объекта ПитающийсяЗал  недоступно для записи...
Питающийся это ТабличнаяЧасть документа...


:(

Kironten

ЦитироватьОбъект.Питающиеся.Добавить();
      Элементы.ПитающиесяЗал = Параметры.Зал;
      Элементы.ПитающиесяНомерСтола = Параметры.НомерСтола;
      Элементы.ПитающиесяНомерМеста = Параметры.НомерМеста;
   КонецЕсли;
КонецПроцедуры

Стр = Объект.Питающиеся.Добавить();
      Стр.ПитающиесяЗал = Параметры.Зал;
      Стр.ПитающиесяНомерСтола = Параметры.НомерСтола;
      Стр.ПитающиесяНомерМеста = Параметры.НомерМеста;

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск