1С Режим Конфигуратор



         

Создание и проведение документа - часть 2


Сумма = ДокОсн.Сумма;

НДС = ДокОсн.НДС;

Всего = ДокОсн.Всего;

КонецЦикла;

КонецПроцедуры

При вызове процедуры происходит установка значений некоторых полей и флажков накладной значениями из счета. Сначала мы заполнили реквизиты шапки, а затем организовали цикл считывания строк табличной части счета операторами ВыбратьСтроки() и ПолучитьСтроку(). В этом же цикле на каждую строку основания вводится и заполняется новая строка накладной (команда НоваяСтрока()).

Доступ к реквизитам счета осуществляется через переменную ДокОсн, которая является параметром процедуры. Как мы помним (см. описание предопределенных процедур модуля формы документа), в неё передается контекст документа-основания.

4. Программный способ - для него в языке 1С предусмотрены специальные команды. Можно при записи расходной накладной сформировать документ СчетФактура:

СФ = СоздатьОбъект("Документ.СчетФактура");

СФ.Новый();

СФ.ВариантОтправки = 1;

СФ.НомерДок = НомерДок; // Счет-фактура будет с тем же номером и датой, что и

СФ.ДатаДок = ДатаДок; // накладная. Но так можно и не делать, есть же автонумерация

СФ.Контрагент=Контрагент;

СФ.Грузополучатель=Контрагент;

ВыбратьСтроки();

Пока ПолучитьСтроку()=1 Цикл

СФ.НоваяСтрока();

// Реквизит "Товар" док-та СчетФактура имеет неопределенный тип

СФ.НазначитьТип("Товар", "Справочник.Номенклатура");

СФ.Товар=Товар;

Если ПустоеЗначение(Товар.СтранаПроисхождения) = 0 Тогда

// а это обращение к реквизитам справочника "Номенклатура"

СФ.СтранаПроисхождения = Товар.СтранаПроисхождения;

Иначе

СФ.СтранаПроисхождения = "Россия";

КонецЕсли;

СФ.Количество=Количество;

СФ.Цена=Цена;

СФ.Сумма=Сумма;

СФ.НДС=НДС;

СФ.Всего=Сумма+НДС;

// Здесь накладная становится основанием счета-фактуры через специальный реквизит

СФ.ДокументОснование = ТекущийДокумент();

КонецЦикла;

СФ.Записать();

СФ.Провести(0, "Программно");

Обратите внимание, что сначала создается документ как объект, а затем вводится новый документ. Последующие действия похожи на действия при вводе на основании. Не забудьте, если вы создаете или изменяете документ программно, его необходимо записывать. И пожалуйста, не пытайтесь использовать метод Провести() в теле предопределенной процедуры ОбработкаПроведения() модуля документа!




Содержание  Назад  Вперед