1с 8 создать новый документ.
Ввод на основании в 1С программно
Рассмотрим простой пример программного ввода документа в 1С на основании. Допустим необходимо после проведения приходного документа «Приход» создать расходный документ «Расход» на основании данных полученных из приходного документа.
Простое создание на основании стандартным способом платформы 1С
В документе «Расход» или «Приход» нужно настроить связь на вкладке «Ввод на основании»:
Где указать с кем он связан:
Должна получиться следующая картина:
Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания – попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>
Далее в модуле документа «Расход» нужно создать процедуру «Обработка заполнения» с помощью клика в верхнем меню:
Если в документе уже существуют данная процедура — нужно не создавать новую, а добавлять код в существующую процедуру.И прописать программный код заполнения. Пример кода:
//Код из модуля объекта документа “Расход”. Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) Если ТипЗнч(ДанныеЗаполнения) = Тип(“ДокументСсылка.Приход”) Тогда Склад = ДанныеЗаполнения.Склад; Для Каждого ТекСтрокаТовары Из ДанныеЗаполнения.Товары Цикл НоваяСтрока = Товары.Добавить(); НоваяСтрока.Номенклатура = ТекСтрокаТовары.Номенклатура; //… заполняем другие реквизиты табличной части КонецЦикла; КонецЕсли; КонецПроцедуры
Программный код можно также создать автоматически для этого нужно воспользоваться «Конструктором ввода на основания».
Конструктор ввода на основании
Чтобы в 1С автоматически создать процедуру, нужно нажать на кнопку «Конструктор ввода на основании»:
Где с помощью функции «Заполнить выражения» можно автоматически сопоставить название реквизитов:
Если реквизиты различаются по названию, их можно сопоставить вручную. Например, в одной табличной части у вас реквизит «Номенклатура», а в другой «Товар».
После нажатия на «Ок», 1С сама сформирует готовый программный код:
Внимание! Конструктор нельзя использовать, если процедура заполнения уже существует — вы потеряете существующий программный код.
Создание документа после записи первого документа с последующей записью созданного
Для реализации такой задачи можно использовать метод объекта Заполнить(), в параметры которого необходимо будет передать данные заполнения из документа прихода. Метод инициирует событие ОбработкаЗаполнения() и вызов процедуры-обработчика в модуле объекта документа «Расход».
Пример кода:
//Код из модуля формы документа “Приход”. &НаСервере Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) //Создаём новый документ НовДокумент = Документы.Расход.СоздатьДокумент(); //Заполняем созданный документ (реквизиты документа заполняются значениями, которые совпадают по именам реквизитов) НовДокумент.Заполнить(ТекущийОбъект.Ссылка); //Записываем созданный документ НовДокумент.Записать(РежимЗаписиДокумента.Проведение,РежимПроведенияДокумента.Оперативный); КонецПроцедуры //Код из модуля объекта документа “Расход”. Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) Если ТипЗнч(ДанныеЗаполнения) = Тип(“ДокументСсылка.Приход”) Тогда Склад = ДанныеЗаполнения.Склад; Для Каждого ТекСтрокаТовары Из ДанныеЗаполнения.Товары Цикл НоваяСтрока = Товары.Добавить(); НоваяСтрока.Номенклатура = ТекСтрокаТовары.Номенклатура; //… заполняем другие реквизиты табличной части КонецЦикла; КонецЕсли; КонецПроцедуры
Создание объекта после записи с открытием управляемой формы
Для программного создания документа в 1С с открытием управляемой формы пользователю можно использовать функцию ОткрытьФорму(), в параметры которой можно передавать данные для заполнения.
Пример кода:
//Код из модуля формы документа “Приход”. &НаКлиенте Процедура ПослеЗаписи(ПараметрыЗаписи) //Создаём структуру для передачи в виде параметра при открытии формы. ПараметрыФормы = Новый Структура(“Основание”, Объект.Ссылка); //Открываем форму документа расход с передачей данных для заполнения ОткрытьФорму(“Документ.Расход.ФормаОбъекта”, ПараметрыФормы); КонецПроцедуры //Код из модуля объекта документа “Расход”. Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) Если ТипЗнч(ДанныеЗаполнения) = Тип(“ДокументСсылка.Приход”) Тогда Склад = ДанныеЗаполнения.Склад; Для Каждого ТекСтрокаТовары Из ДанныеЗаполнения.Товары Цикл НоваяСтрока = Товары.Добавить(); НоваяСтрока.Номенклатура = ТекСтрокаТовары.Номенклатура; // … заполняем другие реквизиты табличной части КонецЦикла; КонецЕсли; КонецПроцедуры
К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.
Источник: https://programmist1s.ru/sozdat-na-osnovanii-programmno/
Работа с двоичными данными и потоками в 1С
Начиная с версии технологической платформы 8.3.9 средства для работы с двоичными данными претерпели существенные изменения. В этой статье я постараюсь рассказать как о старых, так и о новых инструментах для работы с двоичными данными. При написании статьи использовалась версия технологической платформы 8.3.12
Если раньше, до версии технологической платформы 8.3.9, мы располагали только объектом ДвоичныеДанные, то к настоящему времени у нас имеется целый набор объектов, которые серьезно расширяют наши возможности по манипуляциям с двоичными данными. Рассмотрим все эти объекты чуточку подробнее.
Двоичные данные
Экземпляры объекта ДвоичныеДанные содержат двоичные данные, которые считываются из файла. При это объект ДвоичныеДанные является достаточно многофункциональным — мы можем:
- читать двоичные данные из файла и записывать их в файл;
- передавать их между клиентом и сервером при помощи временного хранилища;
- передавать и получать их по сети;
- хранить их базе данных в реквизитах вида ХранилищеЗначения;
- превратить двоичные данные в объект вида Картинка (при определенных условиях конечно);
- хранить двоичные данные в макетах;
- шифровать и расшифровывать, подписывать и проверять подписи;
Наверняка я что-то пропустил, но главное должно быть понятно — несмотря на значительное развитие средств работы с двоичными данными, объект ДвоичныеДанные остается ключевым.
Потоки
Это группа объектов назначение которых заключается в работе с потоками данных.
Поток — этот объект представляет собой поток данных из которого можно читать и/или записывать в него данные. Данный объект не имеет конструктора, а получить экземпляр объекта можно при помощи различных методов других объектов.
ФайловыйПоток — специализированный вариант объекта Поток, предназначенный для работы с данными находящимися в файлах на диске.
ПотокВПамяти — специализированный вариант объекта Поток, предназначенный для работы с данными находящимися в оперативной памяти.
МенеджерФайловыхПотоков — этот объект предоставляет типовые методы для работы с файлами (открытие и создание). Создать экземпляр этого объекта нельзя — имеется объект глобального контекста ФайловыеПотоки который и предоставляет доступ к методам менеджера.
Чтение и запись
ЧтениеДанных — этот объект предназначен для чтения различных типов данных из различных источников (потоки, файлы, двоичные данные).
РезультатЧтенияДанных — этот объект содержит описание результата чтения данных из потока. Объект не имеет конструктора, получить экземпляр объекта можно при помощи методов других объектов.
БуферДвоичныхДанных — этот объект представляет собой коллекцию байтов фиксированного размера, имеется возможность произвольного доступа и изменения по месту.
ЗаписьДанных — этот объект предназначен для записи различных типов данных в приемник.
Практическая часть
Итак, у нас достаточно много различных объектов, которые, в свою очередь, имеют много разных свойств и методов. Разобраться во всем этом более подробно помогут практические примеры, к ним и перейдем.
Многие объекты — ДвоичныеДанные, Поток, ФайловыйПоток, ПотокВПамяти, ЧтениеДанных, ЗаписьДанных, РезультатЧтенияДанных имеют пары синхронных и асинхронных методов, например: Записать — НачатьЗапись, Закрыть — НачатьЗакрытие. Асинхронные методы нужны для обеспечения возможности одинаковой работы и в тонком клиенте, и в веб-клиенте.
Подробнее про синхронные и асинхронные методы можно прочесть в этой статье.