Версия для печати темы (https://pro1c.org.ua/index.php?s=05472741607f100c2cec003a165fdef9&showtopic=57946)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 7.7 _ Как создать документ из справочника контрагентов?

Автор: 4andriy 25.03.20, 16:24

1С 7.7 7.70.027 Предприятие

Есть журнал документов куда нужно зайти и создать документ, тогда выбрать контрагента из справочника и выписать документ.

Как бы реализовать процес наоборот? Зайти в справочник контрагентов и тогда создать для него документ.


 ! 

https://pro1c.org.ua/index.php?act=announce&id=2: 4
 

Автор: Prospero 25.03.20, 22:30

4andriy @ Сегодня, 17:24 * ,
А что мешает из модуля справочника создать документ программно? По кнопочке

Документ = СоздатьОбъект("Документ.Ваш_документ");
//...
//...
//...
Документ.Записать();

Автор: Sharzem 26.03.20, 10:29

Prospero @ Вчера, 22:30 * ,
Ні, не вірно. В Вашому прикладі будуть створюватися пусті документи які будуть нікому не потрібні.
По перше, в документі в процедурі ПриОткрытии() необхідно:

Процедура ПриОткрытии()
    Если ПустоеЗначение(Форма.Параметр) = 0 Тогда
        Если ТипЗначения(Форма.Параметр) = 11 Тогда
            Контрагент = Форма.Параметр;
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

По друге, визивати з модуля довідника потрібно наступним чином:
    Если ТекущийЭлемент().ЭтоГруппа() = 0 Тогда
        ОткрытьФорму("Документ.Ваш_документ",ТекущийЭлемент());
    КонецЕсли;

При такому розвитку, введення Нового документу можливо припинити, оскільки відсутній метод Документ.Записать().

Автор: 4andriy 26.03.20, 19:53

Sharzem @ Сегодня, 10:29 * ,
1. додав в ПриОткрытии код щоб дані виділеного контера переносились в новий документ:

Если ПустоеЗначение(ТекущийЭлемент()) = 0 Тогда
Если ТипЗначения(ТекущийЭлемент()) = 11 Тогда
Контрагент = ТекущийЭлемент();
КонецЕсли;
КонецЕсли;


2. знайшов номер документу який мені треба " 7140"

3. написав код:
Процедура накл();
Если ТекущийЭлемент().ЭтоГруппа() = 0 Тогда
ОткрытьФорму("Документ.Накладная.7140",ТекущийЭлемент());
КонецЕсли;
КонецПроцедуры


в результаті при виконанні процедури створюється документ накладна, але документ не заповнений і даних контрагенту немає

4andriy @ Сегодня, 19:41 * ,
тобто задача скопіювати вже створений перед тим заповнений документ і тоді тільки поправити

Автор: Prospero 26.03.20, 21:57

Sharzem, отчего ж он пустым то будет?
Нет, если создать и потом сразу записать, то будет, согласен smile.gif
Но ТС не указал какой конкретно ему нужно создать документ, а значит, неизвестны конкретные
реквизиты, которые ему нужно заполнять.
Как я понял, ему из справочника Контрагенты нужно создать док с уже заполненными реквизитами данного контрагента?
Так в чем сложность после создания документа программно заполнить реквизиты нужные?
Строки "//....." в моем примере и подразумевают часть кода, заполняющего документ данными из справочника...

Автор: Sharzem 27.03.20, 10:13

Цитата(4andriy @ 25.03.20, 16:24) *
выбрать контрагента из справочника и выписать документ

Цитата(4andriy @ 26.03.20, 19:53) *
задача скопіювати вже створений перед тим заповнений документ і тоді тільки поправити

Це все зовсім різне.
Цитата(4andriy @ 26.03.20, 19:53) *
додав в ПриОткрытии код щоб дані виділеного контера переносились

Реалізовано не вірно, оскільки ТекущийЭлемент() для документу в процедурі ПриОткрытии() не є напередвизначеним параметром, доступ до нього можливий лише через Форма.Параметр.
Цитата(4andriy @ 26.03.20, 19:53) *
ОткрытьФорму("Документ.Накладная.7140",ТекущийЭлемент());

Повна несінитниця...
Цитата(Prospero @ 26.03.20, 21:57) *
в моем примере и подразумевают часть кода, заполняющего документ данными из справочника...

Та Ви що.... 47067070.gif

4andriy @ 25.03.20, 16:24 * ,
Опишіть в чому полягає суть завдання. З того, що Ви нагородили вже нічого не зрозуміло.

Автор: 4andriy 27.03.20, 12:41

Sharzem @ Сегодня, 10:13 * ,
1. створити документ - заповнити табличну і інші реквізити
2. дізнатись номер документу через

номердок=ТекущийДокумент();

3. зайти в довідник контрагентів
4. виконати процедуру за якої створиться копія документу за номером і підставиться реквізит "Контрагент"

Автор: 4andriy 27.03.20, 17:45

код відкриває документ, але не його копію, де вибір накладної реалізований через форму вибору

ОткрытьФорму(Накладная,ТекущийЭлемент());


Автор: 4andriy 27.03.20, 23:35

4andriy @ Сегодня, 17:45 * ,
Отож,

В Довіднику Контрагенти
Додав Поле ввода з вибором - тип Документ.Накладна (тут можу вибрати в який документ треба підставляти дані контрагента)

В журналі документів є вже створена типова накладна. І щоб не набирати одне і те саме, але лише поправити треба процедуру яка:

Створює копію з документу, який вибраний в Полі ввода і підставляє значення контрагента (реквізит в накладній "Контрагент")

Далі скопіюйований документ можна поправити і при потребі зберегти.

4andriy @ Сегодня, 23:25 * ,
як варіант код який переносить з довідника контрагентів в журнал, а тоді виділяє потрібний документ і тоді копіює, але в цьому випадку не переносяться дані контрагента

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

WSHShell = СоздатьОбъект("WScript.Shell");
WSHShell.SendKeys("{F9}");

    КонецЕсли;
КонецФункции

Автор: 4andriy 29.03.20, 17:29

4andriy @ 27.03.20, 23:35 * ,
получився якийсь такий сирий код)

//добавил в форму справочника контрагентов поле ввода тип документ
//что-бы в форме в поле ввода выбрать документ который будем копировать
Процедура копир()
Если ПустоеЗначение(ТекущийЭлемент())=1 Тогда
Возврат;
КонецЕсли;  
Если ТекущийЭлемент().ЭтоГруппа()=1 Тогда
Возврат;
КонецЕсли;        
Элемент=СоздатьОбъект("Справочник.Контрагенты");
Элемент.найтиЭлемент(ТекущийЭлемент());
ОКПО=КодОКПО;
//открываем журнал всех документов    
ОткрытьФорму("Журнал.Общий");  
//в журнале выделить документ который выбран
АктивизироватьОбъект(копирдок);
//открываем документ
ОткрытьФорму(копирдок,ТекущийЭлемент());
//закрываем документ что-бы в журнале он оказался выделеный
Форма.Закрыть()
//копируем выделеный документ
WSHShell = СоздатьОбъект("WScript.Shell");
WSHShell.SendKeys("{F9}");
//поле контрагент в документе меняем на контрагента с кодом окпо который был выделен в справочнике
Контрагент=ОКПО;
//дальше как обычно правим форму и если надо сохраняем
КонецПроцедуры

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua