Имя: Пароль:
1C
1С v8
Помогите передать через голбальную переменную ссылку на документ
0 Yuriy78
 
13.12.11
16:56
Объявил модуле объекта(документ) глобальную переменную:
Перем докПланЗакупок Экспорт;
В форме документа при нажатии кнопки вызова обработки записал в эту переменную тип значения : "Документ ссылка: План закупок". Вот так:
докПланЗакупок = Документы.ПланЗакупок.ПолучитьСсылку();
А вот в обработке в процедуре ПриОткрытии() не находит эту переменную.
Как сделать, чтобы эта переменная была доступна в обработке?
1 YF
 
13.12.11
16:57
Документы.ПланЗакупок.ПолучитьСсылку() что это?
2 Джинн
 
13.12.11
16:57
Как-то через зад ты делаешь. Через параметры не передать ссылку?
3 Ненавижу 1С
 
гуру
13.12.11
16:57
а с чего ты решил, что она ГЛОБАЛЬНАЯ?
4 Yuriy78
 
13.12.11
16:59
(1) это получил тип значения ДокументСсылка
5 Yuriy78
 
13.12.11
17:00
(3) или правильней переменная для экспорта
6 hhhh
 
13.12.11
17:00
(4) пользуйся переменной Ссылка. Зачем тебе еще свою глобальную сюда приплюсовывать?
7 YF
 
13.12.11
17:01
(4) Зачем?
8 Yuriy78
 
13.12.11
17:02
(7)что бы передать в обработку и в дальнейшем с ним работать
9 hhhh
 
13.12.11
17:04
(8) Документы.ПланЗакупок.ПолучитьСсылку() - это ты получаешь совершенно произвольную, никому не известную ссылку.
10 Yuriy78
 
13.12.11
17:04
(6)А как?
11 GROOVY
 
13.12.11
17:04
(7) Ну он пустую ссылку получил...
Модули объекта и формы - это разные модуля, и видимость переменных у них разная. Ты попробуй наоборот в форме прочитать переменную модуля. Работает?
12 GROOVY
 
13.12.11
17:05
Вообще судя по контексту написанного ссылку да этот док надо бы в реквизитах документа сохранить.
13 GROOVY
 
13.12.11
17:05
да этот = на этот
14 J_B
 
13.12.11
17:05
(8) дык передать в реквизит обработки или параметром вызываемой функции этой обработки
15 Yuriy78
 
13.12.11
17:07
Я написал обработку которая изменяет количество номенклатуры в документе "План закупок" с учетом количества аналогов на складе. При этом в форме обработке имелось поле ввода из которого и бралось значение необходимого документа для изменения количества. ЭТО РАБОТАЕТ!!! НО...
Мне необходимо, чтобы из формы документа "План закупок", причем он только получен и не проведен, по нажатию кнопки(кнопку я уже добавил на форму документа) вызывалась моя обработка, изменяла количество в документе "План закупок".
Вот код моей рабочей обработки:
Код

Процедура КнопкаВыполнитьНажатие(Кнопка)
 
  докПланЗакупок = ЭлементыФормы.ПланЗакупок.Значение;
 
  Для Каждого ТекущаяСтрока Из докПланЗакупок.СоставПлана Цикл
     НаимНом = ТекущаяСтрока.Номенклатура;
     //Выбираем аналоги из регистра сведений "Аналоги номенклатуры"
     НаборЗаписей = РегистрыСведений.АналогиНоменклатуры.СоздатьНаборЗаписей();
     НаборЗаписей.Отбор.Номенклатура.Установить(НаимНом);
     НаборЗаписей.Прочитать();
     
           
        Для Каждого ЭлемЗапись Из НаборЗаписей Цикл
        // Чтение и сообщение данных полей записи.
        Если Не ПустаяСтрока(ЭлемЗапись) Тогда
           ЭлемНоменклатура = ЭлемЗапись.Номенклатура;
           ЭлемАналог = ЭлемЗапись.Аналог;
           НоваяСтрока = ТабПоле.Добавить();
           НоваяСтрока.Номенклатура = ЭлемНоменклатура;
           НоваяСтрока.АналогНоменклатуры = ЭлемАналог;
           Фильтр = Новый Структура;
            Фильтр.Вставить("Номенклатура",ЭлемАналог);
            Дата = ТекущаяДата();
            // Параметр "н" отражает наличие товара в регистре остатков
            н = 0;
            // получение остатков будет производиться специальной функцией Остатки
            // для регистра накопления – возвращается таблица значений
            ТаблицаОстатков = РегистрыНакопления.ТоварыНаСкладах.Остатки(Дата,Фильтр,,);
            Для каждого СтрокаТаблицы из ТаблицаОстатков цикл
               // Перебор строк
              Сообщить("Номенклатура " + Строка(ЭлемЗапись.Номенклатура) + " Имеет аналог  " + СтрокаТаблицы.Номенклатура + " с остатком на складе " + СтрокаТаблицы.Количество);
               н = 1;
              НоваяСтрока.ОстатокНаСкладе = СтрокаТаблицы.Количество;
            КонецЦикла;
            // Для товаров, отсутствующих в регистре остатков,
            // указываем остаток, равный 0
           Если н = 0 Тогда
              НоваяСтрока.ОстатокНаСкладе = н;
               Сообщить("Аналог " + ЭлемАналог + " С остаткам на складе: 0");
           КонецЕсли;
           
          Иначе
           Сообщить("Номенклатура " + Строка(ЭлемЗапись.Номенклатура) + " аналога не имеет!!! ");
        КонецЕсли;
        КонецЦикла;
     КонецЦикла;
       
      //Делаем обход занесенных данных в табличное поле обработки.
      //Производим вычитание остатков аналога номенклатуры.
      //Записываем результаты в документ и сохраняем его.
      Для Каждого ЭлемНомТабПоля Из ТабПоле Цикл
        ПерНом = ЭлемНомТабПоля.Номенклатура;
        ПерОстНаСкладе = ЭлемНомТабПоля.ОстатокНаСкладе;
        Сообщить("Номенклатура ТабПоля: "+ ПерНом + " с остатком " + ПерОстНаСкладе);
        Если Число(ПерОстНаСкладе) <> 0 Тогда
           ОбъектПланЗакупок = докПланЗакупок.ПолучитьОбъект();
           Для каждого СтрТабПоля из ОбъектПланЗакупок.СоставПлана Цикл
              ПерНомВДок = СтрТабПоля.Номенклатура;
              Сообщить("Это ПерНомВДок " + ПерНомВДок);
              ПерКолВДок = СтрТабПоля.Количество;
              Сообщить("Это ПерКолВДок " + ПерКолВДок);
              Если СокрЛП(ПерНомВДок) = СокрЛП(ПерНом)  Тогда
                 Сообщить(Строка(ПерКолВДок) + " Старое количество!!!!!!!!!!!!!!!!!!");
                 НовКол = Число(ПерКолВДок - ПерОстНаСкладе);
                 Сообщить("Рассчитано: " + Строка(НовКол));
                 Если НовКол < 0 тогда
                    ОбъектПланЗакупок.СоставПлана.Удалить(СтрТабПоля);
                    Сообщить("Номенклатура " +ПерНомВДок+ " удалена из плана закупок. Т.к. требуемое количество обеспечивают аналоги номенклатуры!!!");
                    Попытка
                        ОбъектПланЗакупок.Записать(РежимЗаписиДокумента.Проведение);
                    Исключение
                        Предупреждение("Невозможно провести документ.");
                    КонецПопытки;

                 Иначе
                    СтрТабПоля.Количество = НовКол;
                    Сообщить(Строка(НовКол) + " Новое количество!!!!!!!!!!!!!!!!!!");
                    Попытка
                       ОбъектПланЗакупок.Записать(РежимЗаписиДокумента.Проведение);
                    Исключение
                       Предупреждение("Невозможно провести документ.");
                    КонецПопытки;
                 КонецЕсли;
                   Иначе
                   Сообщить(ПерНом +" не найдена!!!");
              КонецЕсли;
           КонецЦикла;
        КонецЕсли;  
     КонецЦикла;
КонецПроцедуры
16 GROOVY
 
13.12.11
17:10
(15) Ну так и передавай ссылку на документ. Нафига переменные, получение пустой ссылки?

Обработка.МояПроцедуры(ссылка);
17 Buster007
 
13.12.11
17:15
в (15) что-то мало восклицательных знаков ))
18 J_B
 
13.12.11
17:16
(15) Если конфа типовая (или на базе типовой) смотри в сторону Внешних обработок заполнения ТЧ. И кнопки на форме не придется рисовать...

Процедура Инициализировать (Объект, ИмяТабличнойЧасти, ТабличноеПолеОбъекта) ЭКСПОРТ
    Для Каждого ТекущаяСтрока Из Объект[ИмяТабличнойЧасти] Цикл
     НаимНом = ТекущаяСтрока.Номенклатура;
// и далее по тексту с соответствующими поправками
КонецПроцедуры
19 Yuriy78
 
13.12.11
17:16
(16)Так я и не знаю как правильно передать ссылку на мой документ.
Куда этот код нужно записать? Обработка.МояПроцедуры(ссылка);
20 Defender aka LINN
 
13.12.11
17:18
Мда... Тяжелый случай полного поражения коры и древесины головного мозга...
21 Yuriy78
 
13.12.11
17:19
(18) Я только начинаю изучать 1с и про такую возможность узнал когда написал внешнюю обработку. И чтоб не переделывать хочу ее при стегнуть, Конфигурация типовая. кнопку уже добавил.
22 Yuriy78
 
13.12.11
17:20
(20)вместо флуда дали б дельный совет!
23 Defender aka LINN
 
13.12.11
17:22
(22) Трудно давать советы когда человеку нужно неизвестно что, что он пытается сделать непонятно как.
24 Yuriy78
 
13.12.11
17:28
(22)Мне известно что нужно и об этом я написал в (15). А как реализовать это я не знаю, поэтому я на форуме пытаюсь получить помощь. А вы наверное сразу программировали с рождения?
25 J_B
 
13.12.11
17:29
Меню: Сервис - Внешние печ. формы и обработки - Обработки заполнения табл. частей там по F1 можно почитать общие принципы создания такой обработки.
Код из (18) вставить в модуль обработки, а саму обработку подключить через пункты меню выше. Тогда на форме автоматом появится в подменю "Заполнить" пункт вызова созданной обработки.

Ссылку на только-что созданный и незаписанный док передать не получится т.к. ее еще не существует - надо работать непосредственно с объектом докПланЗакупок
26 Yuriy78
 
13.12.11
17:34
(25) Спасибо за ответ. я понял что сразу двигался не в том направлении. Переделаю по Вашему совету. Еще раз спасибо.