Имя: Пароль:
1C
 
Автоматическое заполнение реквизита при проведении
0 Natali15
 
07.07.22
14:24
конфигурация Комплексная Автоматизация 2.4

нужно, чтобы при проведении документа автоматически заполнялась форма "Платежно-расчетные документы" и попадало в реквизит Платежно-расчетные документы на форму документа https://ibb.co/pdfHwmm

что сделала:
добавила расширение, в расширение добавила процедуру ПровестиДокументПосле(Команда), туда прописала получение формы
Форма = ПолучитьФорму("Документ.СчетФактураВыданный.Форма.ФормаПлатежноРасчетныеДокументы");

в модуле формы "Платежно-расчетные документы" есть процедура, по ней и происходит заполнение

&НаСервере
Процедура ЗаполнитьПлатежноРасчетныеДокументыСервер()
    
    ТаблицаПлатежноРасчетныеДокументы = ПлатежноРасчетныеДокументы.Выгрузить();
    Документы.СчетФактураВыданный.ЗаполнитьПлатежноРасчетныеДокументы(
        ТаблицаПлатежноРасчетныеДокументы,
        СписокОснований.ВыгрузитьЗначения(),
        Организация);
    
    ПлатежноРасчетныеДокументы.Загрузить(ТаблицаПлатежноРасчетныеДокументы);
    
КонецПроцедуры


Как мне передать эту процедуру в расширение моей процедуры? https://ibb.co/80bMhHz
1 Natali15
 
07.07.22
14:26
начинающий программист, поэтому не понимаю пока как это реализовать
2 YFedor
 
07.07.22
14:26
Запполнять при проведении текущий документ - это не наш метод, заполнять нужно перед записью
3 Kassern
 
07.07.22
14:29
(0) "при проведении" вы объект не сможете модифицировать так как уже открыта транзакция на запись. Максимум вы можете перед записью что-то до заполнить.
4 Natali15
 
07.07.22
14:31
(2) (3) поняла, спасибо. а как вытянуть процедуру с формы документа в расширение?
5 Kassern
 
07.07.22
14:32
(4) вы собираетесь из модуля объекта дергать процедуры формы?)
6 Natali15
 
07.07.22
14:41
(5)  Нет, думаю что нужно написать так https://ibb.co/d51rvdK , но ругается, что обращаюсь к объекту на клиенте
7 Сергиус
 
07.07.22
14:52
(6)Можно вытащить в серверную функцию, но ИМХО не совсем понятно по коду, для чего это нужно.
8 Мимохожий Однако
 
07.07.22
14:55
(6) Ну так и обращайся  НаСервере
9 Natali15
 
07.07.22
15:04
(7) нужно, чтобы при проведении документа автоматически заполнялась форма "Платежно-расчетные документы" и попадало в реквизит Платежно-расчетные документы на форму документа https://ibb.co/pdfHwmm
в модуле формы "Платежно-расчетные документы" прописывается эта процедура по заполнению
&НаСервере
Процедура ЗаполнитьПлатежноРасчетныеДокументыСервер()
    
    ТаблицаПлатежноРасчетныеДокументы = ПлатежноРасчетныеДокументы.Выгрузить();
    Документы.СчетФактураВыданный.ЗаполнитьПлатежноРасчетныеДокументы(
        ТаблицаПлатежноРасчетныеДокументы,
        СписокОснований.ВыгрузитьЗначения(),
        Организация);
    
    ПлатежноРасчетныеДокументы.Загрузить(ТаблицаПлатежноРасчетныеДокументы);
    
КонецПроцедуры


я могу воспользоваться этим кодом в процедуре "ПередЗаписью" документа или вообще не в том направлении иду?
10 Мимохожий Однако
 
07.07.22
15:07
Да
11 Natali15
 
07.07.22
15:19
написала так

&НаКлиенте
Процедура ПРД_ПередЗаписьюПосле(Отказ, ПараметрыЗаписи)
     ПРД_ПередЗаписьюПослеСервер();
КонецПроцедуры

&НаСервере
Процедура ПРД_ПередЗаписьюПослеСервер()
    форма = Документы.СчетФактураВыданный.ПолучитьФорму("ФормаПлатежноРасчетныеДокументы");
    ТаблицаПлатежноРасчетныеДокументы = форма.ПлатежноРасчетныеДокументы.Выгрузить();
    Документы.СчетФактураВыданный.ЗаполнитьПлатежноРасчетныеДокументы(
        ТаблицаПлатежноРасчетныеДокументы,
        СписокОснований.ВыгрузитьЗначения(),
        форма.Организация);
    форма.ПлатежноРасчетныеДокументы.Загрузить(ТаблицаПлатежноРасчетныеДокументы);
КонецПроцедуры



выдает ошибку при проведении дока:
Интерактивные операции недоступны
{ЗаполнитьПРД Документ.СчетФактураВыданный.Форма.ФормаДокумента.Форма(9)}:форма = Документы.СчетФактураВыданный.ПолучитьФорму("ФормаПлатежноРасчетныеДокументы");
{ЗаполнитьПРД Документ.СчетФактураВыданный.Форма.ФормаДокумента.Форма(4)}:ПРД_ПередЗаписьюПослеСервер();
{ОбщийМодуль.ОбщегоНазначенияУТКлиент.Модуль(1472)}:Результат = Форма.Записать(ПараметрыЗаписи);
{ОбщийМодуль.ОбщегоНазначенияУТКлиент.Модуль(1425)}:ЗаписатьОбъект(Форма, ПараметрыЗаписи);
{Документ.СчетФактураВыданный.Форма.ФормаДокумента.Форма(537)}:ОбщегоНазначенияУТКлиент.Провести(ЭтаФорма);

по причине:
Интерактивные операции недоступны (10)
12 Мимохожий Однако
 
07.07.22
15:28
Форма - на клиенте, а объект и запись объекта - на сервере
13 Natali15
 
07.07.22
15:37
(12) &НаКлиенте
Процедура ПРД_ПередЗаписьюПосле(Отказ, ПараметрыЗаписи)
    Форма = ПолучитьФорму("Документ.СчетФактураВыданный.Форма.ФормаПлатежноРасчетныеДокументы");
    ПРД_ПередЗаписьюПослеСервер();
КонецПроцедуры

&НаСервере
Процедура ПРД_ПередЗаписьюПослеСервер()
    ТаблицаПлатежноРасчетныеДокументы = ПлатежноРасчетныеДокументы.Выгрузить();
    Документы.СчетФактураВыданный.ЗаполнитьПлатежноРасчетныеДокументы(
        ТаблицаПлатежноРасчетныеДокументы,
        СписокОснований.ВыгрузитьЗначения(),
        Организация);
        ПлатежноРасчетныеДокументы.Загрузить(ТаблицаПлатежноРасчетныеДокументы);
КонецПроцедуры

ПлатежноРасчетныеДокументы, Организация - переменные неопределены, так как они с другой формы этого документа
14 Kassern
 
07.07.22
15:41
(11) (13) " Форма = ПолучитьФорму("Документ.СчетФактураВыданный.Форма.ФормаПлатежноРасчетныеДокументы");" -  зачем вам вообще форма нужна?
ПлатежноРасчетныеДокументы, Организация - переменные неопределены - ну так откуда 1ска знает, что такое ПлатежноРасчетныеДокументы и как их можно .Выгрузить(); ?

Вместо Форма.ПлатежноРасчетныеДокументы.Выгрузить(); - вы можете сделать запрос и получить нужную таблицу.
Вместо "форма.Организация" - вы можете использовать ЭтотОъект.Организация (а если вы в модуле объекта, то просто Организация)
15 Natali15
 
07.07.22
16:45
(14) теперь с запросом беда

&НаКлиенте
Процедура ПРД_ПередЗаписьюПосле(Отказ, ПараметрыЗаписи)
    ПРД_ПередЗаписьюПослеСервер();
КонецПроцедуры

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

ошибка
Неверные параметры в операции сравнения. Нельзя сравнивать поля
неограниченной длины и поля несовместимых типов.
СчетФактураВыданныйПлатежноРасчетныеДокументы.Ссылка <<?>>= &Ссылка
16 Natali15
 
07.07.22
16:46
(14) какой параметр нужно передавать?
17 Kassern
 
07.07.22
16:52
(15) беда - это точно))
Попробую обрисовать вам ситуацию, что вы попытались в запросе сделать))
Приходите вы такая в больницу в регистратуру, чтобы получить там свою карточку медицинскую. Подходите в окошечку и говорите тетеньке, мол найдите мою мед карту, она у вас спрашивает, уточните, а кто вы, кого искать? А вы такая берете и суете ей свою мед карту, мол смотрите кто я)
    Запрос.Текст =
        "ВЫБРАТЬ
        |    СчетФактураВыданныйПлатежноРасчетныеДокументы.Ссылка КАК Ссылка
        |ИЗ
        |    Документ.СчетФактураВыданный.ПлатежноРасчетныеДокументы КАК СчетФактураВыданныйПлатежноРасчетныеДокументы
        |ГДЕ
        |    СчетФактураВыданныйПлатежноРасчетныеДокументы.Ссылка = &Ссылка";
18 Kassern
 
07.07.22
17:01
Проще наверное вам вот так ТЗ получить:
Док=Документы.СчетФактураВыданный.СоздатьДокумент();
ТаблицаПлатежноРасчетныеДокументы =Док.ПлатежноРасчетныеДокументы.Выгрузить();
19 Смотрящий
 
07.07.22
17:04
Не туды уехали.
КА нет под рукой, но судя по (0) ПлатежноРасчетныеДокументы - это табличная часть документа СчетФактураВыданный.
Заполняется она не в форме ФормаПлатежноРасчетныеДокументы а в процедуре ЗаполнитьПлатежноРасчетныеДокументы модуля документа СчетФактураВыданный

Значит перехватить надо призаписи (после) документа СчетФактураВыданный вкорячив в нее

    ТаблицаПлатежноРасчетныеДокументы = ПлатежноРасчетныеДокументы.Выгрузить();
    Документы.СчетФактураВыданный.ЗаполнитьПлатежноРасчетныеДокументы(
        ТаблицаПлатежноРасчетныеДокументы,
        СписокОснований.ВыгрузитьЗначения(),
        Организация);
    
    ПлатежноРасчетныеДокументы.Загрузить(ТаблицаПлатежноРасчетныеДокументы);
20 Natali15
 
07.07.22
21:32
(19) подскажите, что передать в список оснований?
21 Смотрящий
 
07.07.22
21:56
(20) Скорее всего СписокОснований реквизит формы ФормаПлатежноРасчетныеДокументы который заполняется при ее открытии из формы документа
Надо в отладчике походить и посмотреть что там
22 Natali15
 
07.07.22
22:09
(21) да, всё так
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    Если Параметры.Свойство("АвтоТест") Тогда
        Возврат;
    КонецЕсли;

    Параметры.Свойство("Организация", Организация);
    Параметры.Свойство("СписокОснований", СписокОснований);
    
    Если Параметры.Свойство("ДокументОснование") Тогда
        СписокОснований.Добавить(Параметры.ДокументОснование);
    КонецЕсли;
    
    Если Параметры.Свойство("АдресВХранилище") Тогда
        ПлатежноРасчетныеДокументы.Загрузить(ПолучитьИзВременногоХранилища(Параметры.АдресВХранилище));
    КонецЕсли;

    СобытияФорм.ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка);

КонецПроцедуры
23 Смотрящий
 
07.07.22
22:12
(22) Ну так и подсунь в список основанийчто он там получает в присозданиинасервере
24 Natali15
 
07.07.22
22:14
(23) получить документ основание?
25 Смотрящий
 
07.07.22
22:21
(24) Не играй в угадайку.
Параметры.Свойство("СписокОснований", СписокОснований); - тут заполняется список оснований из параметров переданный в форму.
Найти место где список оснований заполняется перед открытием формы.
26 Natali15
 
07.07.22
22:54
(25)он создан на форме с типом "СписокЗначений", в модуле формы не описано где этот список заполняется, не понимаю куда смотреть
27 Смотрящий
 
07.07.22
22:58
(26)  https://ibb.co/pdfHwmm
при нажатии на гиперссылку открывается окно. вот в процедуре обработчике и ищи заполнение
28 Natali15
 
07.07.22
23:16
при нажатии попадает на эту процедуру

&НаКлиенте
Процедура ПлатежноРасчетныеДокументыСтрокойНажатие(Элемент, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;
    
    ПараметрыФормы = Новый Структура;
    ПараметрыФормы.Вставить("Организация",     Объект.Организация);
    ПараметрыФормы.Вставить("СписокОснований", СписокОснований);
    ПараметрыФормы.Вставить("АдресВХранилище", ПоместитьПлатежноРасчетныеДокументыВХранилище());
    
    НовыйАдресВХранилище = Неопределено;
    
    ОткрытьФорму(
        "Документ.СчетФактураВыданный.Форма.ФормаПлатежноРасчетныеДокументы",
        ПараметрыФормы,,,,, Новый ОписаниеОповещения("ПлатежноРасчетныеДокументыСтрокойНажатиеЗавершение", ЭтотОбъект), РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
    
КонецПроцедуры (27)
29 Смотрящий
 
07.07.22
23:19
(28) ну вот он
ПараметрыФормы.Вставить("СписокОснований", СписокОснований);

В форме документа есть реквизит СписокОснований значит в перехватчике при записи ничего менять не надо
30 Natali15
 
07.07.22
23:27
(29) получается перехватчик делать процедуры "ПриЗаписи" у модуля формы документа? все это время делала перехват в модуле объекта
31 Смотрящий
 
07.07.22
23:30
(30) В первом случае обработчик будет работать только при интерактивной записи.
Во втором - при интерактивной и при программной.
Решай как надо
32 Natali15
 
07.07.22
23:36
(31) а как быть во втором случае со списком оснований?
33 Смотрящий
 
07.07.22
23:42
(32) Формировать его самостоятельно. Толькоу  тебя будет не список оснований а список значений.
Поройся в коде и структуре жддокумента счета фактуры - он где то формируется динамическеи, или сохраняется - от наркоманов, которые пилят типовые всего можно ожидать.
34 Natali15
 
07.07.22
23:44
(33) спасибо вам
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.