По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Если стоит формекс, то можно поступить вот так:
оСистема = СоздатьОбъект("Система");
Д = СоздатьОбъект("Документ.ГТД");
Пока Запрос.Группировка(1) = 1 Цикл
Д.НайтиДокумент(Запрос.ГТД);
ОткрытьФорму(Д.ТекущийДокумент(), Конт,0);
Конт.СуммаПеревозка = 0;
Сп = СоздатьОбъект("СписокЗначений");
Сп.ДобавитьЗначение(2);
Сервис.ВыполнитьПроцедуру(Конт, "ИзмСуммаУслуг", Сп);
оСистема.StartBatch(Конт);
Конт.Провести();
оСистема.EndBatch(Конт);
оСистема.ЗакрытьФорму(Конт);
КонецЦикла;
оСистема = СоздатьОбъект("Система");
Д = СоздатьОбъект("Документ.ГТД");
Пока Запрос.Группировка(1) = 1 Цикл
Д.НайтиДокумент(Запрос.ГТД);
ОткрытьФорму(Д.ТекущийДокумент(), Конт,0);
Конт.СуммаПеревозка = 0;
Сп = СоздатьОбъект("СписокЗначений");
Сп.ДобавитьЗначение(2);
Сервис.ВыполнитьПроцедуру(Конт, "ИзмСуммаУслуг", Сп);
оСистема.StartBatch(Конт);
Конт.Провести();
оСистема.EndBatch(Конт);
оСистема.ЗакрытьФорму(Конт);
КонецЦикла;
Если стоит формекс, то можно поступить вот так:
оСистема = СоздатьОбъект("Система");
Д = СоздатьОбъект("Документ.ГТД");
Пока Запрос.Группировка(1) = 1 Цикл
Д.НайтиДокумент(Запрос.ГТД);
ОткрытьФорму(Д.ТекущийДокумент(), Конт,0);
Конт.СуммаПеревозка = 0;
Сп = СоздатьОбъект("СписокЗначений");
Сп.ДобавитьЗначение(2);
Сервис.ВыполнитьПроцедуру(Конт, "ИзмСуммаУслуг", Сп);
оСистема.StartBatch(Конт);
Конт.Провести();
оСистема.EndBatch(Конт);
оСистема.ЗакрытьФорму(Конт);
КонецЦикла;
это что?
Почему не создается. Создается и сохраняется, и проводится. НовДок.Записать(РежимЗаписиДокументов.Проведение). А у документа вновь созданного есть и форма, и модуль, много процедур в модуле. Процедуру со словом "Экспорт". Можно ее со стороны вызвать или нет?
(4) создается объект "документ". А объект "форма документа" не создается. Это разные объекты. Документ вообще-то объект информационной базы - он информацию хранит, а форма всего лишь объект интерфейса, чтобы смотреть на данные удобнее было. У документа может быть произвольное количество форм, в том числе и ни одной...
В таком виде, у документа нет формы. она появляется когда вы ее открываете.
а до это есть только объект.
Объект.ВыполнитьДействияДокумента();
может быть вызвана процедура
ВыполнитьДействияДокумента() - если она находится в модуле объекта с флагом Экспорт.
а до это есть только объект.
Объект.ВыполнитьДействияДокумента();
может быть вызвана процедура
ВыполнитьДействияДокумента() - если она находится в модуле объекта с флагом Экспорт.
(11)
Напрямую из другого объекта нельзя обратится к процедурам модуля формы - этот вопрос был еще лет 6-7 назад в профессионале по платформе.
Однако, можно поступить как описано в (10) и (14), главное чтобы в самой процедуре не было обращения к элементам формы и т.п.
Напрямую из другого объекта нельзя обратится к процедурам модуля формы - этот вопрос был еще лет 6-7 назад в профессионале по платформе.
Однако, можно поступить как описано в (10) и (14), главное чтобы в самой процедуре не было обращения к элементам формы и т.п.
(15) главное чтобы в самой процедуре не было обращения к элементам формы и т.п.
интерес продолжился :), и я засунул код по созданию документа в обработку:
В документе в модуле формы пишу:
В итоге, выполняя обработку, получаю сообщения:
Номер из документа:000000007
Дата из документа: 20.01.2012 20:27:16
Дата из обработки: 20.01.2012 20:27:16
интерес продолжился :), и я засунул код по созданию документа в обработку:
Процедура КнопкаВыполнитьНажатие(Кнопка)
Док = Документы.Документ2.СоздатьДокумент();
Док.Дата = ТекущаяДата();
Док.Записать();
Форма = Док.Ссылка.ПолучитьФорму("ФормаДокумента");
Форма.Получить();
Сообщить("Дата из обработки: " + Форма.ЭлементыФормы.Дата.Значение);
КонецПроцедуры
ПоказатьВ документе в модуле формы пишу:
Процедура Получить() Экспорт
Сообщить("Номер из документа:" + Номер);
Сообщить("Дата из документа: " + ЭлементыФормы.Дата.Значение);
КонецПроцедуры
В итоге, выполняя обработку, получаю сообщения:
Номер из документа:000000007
Дата из документа: 20.01.2012 20:27:16
Дата из обработки: 20.01.2012 20:27:16
Ради интереса создал новый документ, в форме списка добавил кнопку, в ней прописал:
в форме документа написал:
Нажимая на кнопку в форме списка, получаю сообщение с номером только что созданного документа: 000000001, 000000002 и т.д.
Док = Документы.Документ2.СоздатьДокумент();
Док.Дата = ТекущаяДата();
Док.Записать();
Форма = Док.Ссылка.ПолучитьФорму("ФормаДокумента");
Форма.ПолучитьНомер();
в форме документа написал:
Процедура ПолучитьНомер() Экспорт
сообщить(Номер);
КонецПроцедуры
Нажимая на кнопку в форме списка, получаю сообщение с номером только что созданного документа: 000000001, 000000002 и т.д.
И это не важно
Проверил, убедился, действительно так!
Заодно научился устанавливать ТекущиеДанные (через ТекущаяСтрока) на той форме, т.к. в процедуре модуля формы они иногда (по крайней мере в моем случае) задействованы.
ФормаДок = Объект.Ссылка.ПолучитьФорму("ФормаДокумента");
КоличествоСтрок = ФормаДок.Услуги.Количество();
ФормаДок.ЭлементыФормы.Услуги.ТекущаяСтрока = ФормаДок.Услуги[КоличествоСтрок-1];
ФормаДок.УслугиНоменклатураПриИзменении(СтрокаТЧ);
(25) Serge_ASB, Если на обычных формах, то код будет таким:
СсылкаНаОбъект - можно получить, например, как
Расшифровка = Новый Структура;
Расшифровка.Вставить("ВидПечатнойФормы", Перечисления.ВидыДополнительныхВнешнихОбработок.ПечатнаяФорма);
Расшифровка.Вставить("ДополнительныеПараметрыОбработки", Неопределено);
Расшифровка.Вставить("ЗаменяемаяПечатнаяФорма", Неопределено);
Расшифровка.Вставить("НомерСтроки", 1);
Расшифровка.Вставить("СсылкаНаВнешнююОбработку", СсылкаНаВнешнююОбработку);
УниверсальныеМеханизмы.НапечататьДокумент(УниверсальныеМеханизмы.НапечататьВнешнююФорму(СсылкаНаОбъект, Расшифровка), КолСтраниц, НаПринтер, СсылкаНаВнешнююОбработку.Наименование);
СсылкаНаОбъект - можно получить, например, как
ТекДанные = ЭлементыФормы.ДокументСписок.ТекущиеДанные;
Если ТекДанные = Неопределено Тогда
Возврат;
КонецЕсли;
СсылкаНаОбъект = ТекДанные.Ссылка;
(27) Alex_E, то есть, если при подключении обработки я указываю к какому документу она будет присоединена, то смогу вызвать ее через документ?
Типа
(26) Uncore, а ссылку на внешнюю обработку как получить?
Типа
Форма = Документы.ДокументПечати.ПолучитьФорму("ФормаДокумента");
Форма.ПолучитьвнешнююпечатнуюФорму("Внешняяформа");
..................
(26) Uncore, а ссылку на внешнюю обработку как получить?
(28) Serge_ASB, Если вы говорите про типовой вызов из формы документа или из формы списка - то читайте справку в справочнике Дополнительные отчеты и обработки - там всё написано. Я никак вопрос не пойму - если мы подключили ВПФ к документу, и поставили обе галки как на рисунке, то ВПФ доступна и там и там. Если нужно программно распечатать документ из списка, то тут надо получить ссылку на документ, а печать ВПФ сделать через менеджер этого документа.
Ответ на вопрос:
Ответ на вопрос:
Можно ли вызвать ее (печать) из формы списка документа (т.е. не заходя в документ, вызваьб печать его в нужной внешней форме)?
- да.
(28) Serge_ASB, для печати из списка Вам нужно 2 вещи:
1. Ссылка на текущий документ из строки, пример показан мною выше, как получить ссылку.
2. Ссылка на внешнюю печатную форму. Это обычная ссылка на справочник ВнешниеОбработки. Можете выбрать эту ссылку в какой-нибудь константе. Либо просто найти по коду, например так:
СсылкаНаВнешнююОбработку = Справочники.ВнешниеОбработки.НайтиПоКоду(<КодИзСправочника>);
КодИзСправочника посмотрите открыв список внешних печатных форм.
1. Ссылка на текущий документ из строки, пример показан мною выше, как получить ссылку.
2. Ссылка на внешнюю печатную форму. Это обычная ссылка на справочник ВнешниеОбработки. Можете выбрать эту ссылку в какой-нибудь константе. Либо просто найти по коду, например так:
СсылкаНаВнешнююОбработку = Справочники.ВнешниеОбработки.НайтиПоКоду(<КодИзСправочника>);
КодИзСправочника посмотрите открыв список внешних печатных форм.
(32) Uncore,
Именно так я и решил задачу.
Именно так я и решил задачу.
Док = ЭлементыФормы.Список.ТекущаяСтрока.Ссылка;
СсылкаНаВнешнююОбработку = Справочники.ВнешниеОбработки.НайтиПоНаименованию("РКО (ТМ)");
Расшифровка = Новый Структура;
Расшифровка.Вставить("ВидПечатнойФормы", Перечисления.ВидыДополнительныхВнешнихОбработок.ПечатнаяФорма);
Расшифровка.Вставить("ДополнительныеПараметрыОбработки", Неопределено);
Расшифровка.Вставить("ЗаменяемаяПечатнаяФорма", Неопределено);
Расшифровка.Вставить("НомерСтроки", 1);
Расшифровка.Вставить("СсылкаНаВнешнююОбработку", СсылкаНаВнешнююОбработку);
ТабДокумент = УниверсальныеМеханизмы.НапечататьВнешнююФорму(Док,Расшифровка);
ТабДокумент.Показать();
Показать
(33) Serge_ASB, только есть пара замечаний:
1. Нужно добавить проверку на выбранность строки, иначе будете получать ошибку.
ТекСтрока = ЭлементыФормы.Список.ТекущаяСтрока;
Если ТекСтрока = Неопределено Тогда
Предупреждение("Документ не выбран", 30);
Возврат;
КонецЕсли;
Док = ТекСтрока.Ссылка;
2. Лучше использовать поиск печатной формы по коду, обычно он защищен от изменения. А название печ. формы пользователь может в любой момент изменить.
(34) Alex_E, похоже автор использует обычные формы, если у него работает код "ЭлементыФормы", а в типовых конфигурациях такого развитого функционала как на управляемых похоже нет.
1. Нужно добавить проверку на выбранность строки, иначе будете получать ошибку.
ТекСтрока = ЭлементыФормы.Список.ТекущаяСтрока;
Если ТекСтрока = Неопределено Тогда
Предупреждение("Документ не выбран", 30);
Возврат;
КонецЕсли;
Док = ТекСтрока.Ссылка;
2. Лучше использовать поиск печатной формы по коду, обычно он защищен от изменения. А название печ. формы пользователь может в любой момент изменить.
(34) Alex_E, похоже автор использует обычные формы, если у него работает код "ЭлементыФормы", а в типовых конфигурациях такого развитого функционала как на управляемых похоже нет.
(37) Alex_E, Если есть такая возможность, то конечно код засовывать не надо. Тут согласен полностью. Проще выбрать тогда по умолчанию печ. форму. Либо еще вариант - использовать для этого групповую обработку справочников и документов, там тоже такая возможность есть.
(27) Alex_E,
У меня обработка "Печать РКО" добавлена не как дополнительная, а как внешняя печатная форма.
не совсем понимаю, как обратиться за вызовом к ней:
У меня обработка "Печать РКО" добавлена не как дополнительная, а как внешняя печатная форма.
не совсем понимаю, как обратиться за вызовом к ней:
Процедура РКОТМ(Кнопка)
// Вставить содержимое обработчика.
Док = ЭлементыФормы.Список.ТекущаяСтрока.Ссылка;
Форма = Документы.РасходныйКассовыйОрдер.ПолучитьФорму("ФормаДокумента");
КонецПроцедуры
(31) Serge_ASB,
ВПФ = Внешняя Печатная Форма.
Про какую кнопку Вы толкуете, Вы хотите в форме списка добавить кнопку для печати ВПФ? Зачем чего то писать, если всё уже написано?
В продолжении рисунка в (27) вызов ВПФ из формы списка и из формы документа:
"Печать РКО" добавлена не как дополнительная, а как внешняя печатная форма.
не понял, то такое "дополнительная", написал:
если мы подключили ВПФ к документу, и поставили обе галки как на рисунке, то ВПФ доступна и там и там
,
ВПФ = Внешняя Печатная Форма.
Про какую кнопку Вы толкуете, Вы хотите в форме списка добавить кнопку для печати ВПФ? Зачем чего то писать, если всё уже написано?
В продолжении рисунка в (27) вызов ВПФ из формы списка и из формы документа:
Прикрепленные файлы:
Если же ВПФ в форме списка надо вывести отдельной кнопкой (не в подменю печать), можно воспользоваться командой Изменить форму подменю Ещё формы списка, и вытащить нужную кнопку на командную панель:
Прикрепленные файлы:
(41) stupid01, да, тут подход немного неверный у Вас - из формы какую процедуру можно вызвать, передав в нее сам объект для заполнения, а записать данные объекта уже извне.
Например, перед записью документа можно вызвать процедуру из формы по заполнению счета или еще чего-нибудь
Например, перед записью документа можно вызвать процедуру из формы по заполнению счета или еще чего-нибудь
(42) Uncore,
Получается, что для решения задачи - создать программно документ и сделать рассчет, чтобы заполнить доп реквизиты(ЗУП 3 на УФ),
нужно выцепить все процедуры задействованные в этом расчете, т.к. они сделаны только для интерактивной работы и адаптировать код под свою обработку.
Либо - получить форму, выполнить процедуру расчета формы модуля и потом уже выскрести нужные данные из объекта формы и впихнуть в свой документ.
Так или еще есть варианты?
Получается, что для решения задачи - создать программно документ и сделать рассчет, чтобы заполнить доп реквизиты(ЗУП 3 на УФ),
нужно выцепить все процедуры задействованные в этом расчете, т.к. они сделаны только для интерактивной работы и адаптировать код под свою обработку.
Либо - получить форму, выполнить процедуру расчета формы модуля и потом уже выскрести нужные данные из объекта формы и впихнуть в свой документ.
Так или еще есть варианты?
Всем добрый день. Хочу опять вернуться к вопросу выполнения процедуры формы документа из внешней обработки.
На сервере получаю нужный мне документ, на клиент передаю ссылку документа, тут же на клиенте получаю форму документа:
ДД = ЗаполнитьДанные();//здесь получаю ссылку на нужный документ
СтруктураДок = Новый Структура("Ключ",ДД.СсылкаДок);
ФормаП = ПолучитьФорму("Документ.НачалоМесяца.ФормаОбъекта",СтруктураДок);//форму получает
//вот процедура которая находится в модуле формы, я к ней обращаюсь (она не экспортная).
ФормаП.ЗаполнитьТаблицуНаСервере();//Но при выполнении выдает ошибку,что метод объекта не обнаружен.
На сервере получаю нужный мне документ, на клиент передаю ссылку документа, тут же на клиенте получаю форму документа:
ДД = ЗаполнитьДанные();//здесь получаю ссылку на нужный документ
СтруктураДок = Новый Структура("Ключ",ДД.СсылкаДок);
ФормаП = ПолучитьФорму("Документ.НачалоМесяца.ФормаОбъекта",СтруктураДок);//форму получает
//вот процедура которая находится в модуле формы, я к ней обращаюсь (она не экспортная).
ФормаП.ЗаполнитьТаблицуНаСервере();//Но при выполнении выдает ошибку,что метод объекта не обнаружен.
(47) я обычно экспортные процедуры делаю в модуле менеджера документа, и обращаться к ним можно без формы, передавая ссылку, например
Если нужно именно из формы вызвать то вызываем клиентскую процедуру, которая вызовет уже нужную серверную.
Документы.НачалоМесяца.ЗаполнитьТаблицуНаСервере(СсылкаНаДокумент);
Если нужно именно из формы вызвать то вызываем клиентскую процедуру, которая вызовет уже нужную серверную.
Во внешней обработке НаКлиенте получаю форму документа НачалоМесяца, потом обращаюсь к экспортной процедуре и все выполняется, до момента выполнения процедуры "ПолеКалендаряПриВыводеПериода(Элемент, ОформлениеПериода)", т.к. там идет цветовое оформление:
Строка_ОформленияДаты.ЦветТекста = ЦветРабочий;// вот этот ЦветРабочий объявлена как глобальная переменная, заполнение ее в процедуре "ПриОткрытии", а так как мы к ней не обращаемся, то естественно цвета нет.
Короче какой то замкнутый круг!
так как база закрыта не могу вносить изменения в модули документа.
Строка_ОформленияДаты.ЦветТекста = ЦветРабочий;// вот этот ЦветРабочий объявлена как глобальная переменная, заполнение ее в процедуре "ПриОткрытии", а так как мы к ней не обращаемся, то естественно цвета нет.
Короче какой то замкнутый круг!
так как база закрыта не могу вносить изменения в модули документа.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот