|   |   | 
| 
 | Помогите передать через голбальную переменную ссылку на документ | ☑ | ||
|---|---|---|---|---|
| 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) Спасибо за ответ. я понял что сразу двигался не в том направлении. Переделаю по Вашему совету. Еще раз спасибо.     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |