1С 8.3 Документы
Данные > Примеры кода 1С > 1С 8.3 Документы
Документы в 1С 8.3 - это прикладные объекты конфигурации и метаданных, которые фиксируют хозяйственные операции предприятия и используются для хранения данных об их событиях. Например: приказы о приеме на работу, документы поступления товаров, платежные поручения, выписки, отгрузки товаров, и тому подобные. Каждому документу в 1С автоматически присваивается номер, дата и время создания документа. Благодаря этим характеристикам можно увидеть, какой из документов был сделан раньше либо позднее.
К скачиванию доступны:
- Обработка которая показывает список и количество всех документов в БД.
- Обработка-журнал всех документов Бухгалтерии 3.0 с отборами по дате.
Оглавление:
Создание и изменение документов в 1С 8.3:
&НаСервере
Процедура СозданиеИИзменениеДокументов()
// Cоздание нового документа Отгрузка товаров
Отгрузка = Документы.ОтгрузкаТоваров.СоздатьДокумент();
// Заполнение шапки документа
Отгрузка.Дата = ТекущаяДата();
Отгрузка.Покупатель = Справочники.Покупатели.НайтиПоНаименованию("ООО ""Виста-медиа-групп""");
Отгрузка.Склад = Справочники.Склады.НайтиПоНаименованию("Склад №98");
// Заполнение табличной части Номенклатура
НоваяСтрока = Отгрузка.Номенклатура.Добавить();
НоваяСтрока.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию("SSD Intel Optane DC P4800X 1.5TB");
НоваяСтрока.Количество = 3;
НоваяСтрока.Сумма = 1926900;
// Запись документа
Отгрузка.Записать(РежимЗаписиДокумента.Запись);
// Проведение документа
Отгрузка.Записать(РежимЗаписиДокумента.Проведение);
// Отмена проведения документа
Отгрузка.Записать(РежимЗаписиДокумента.ОтменаПроведения);
// Внесение изменений в документ по ссылке (для этого вызываем метод ПолучитьОбъект)
СсылкаНаОтгрузку = Документы.ОтгрузкаТоваров.НайтиПоНомеру("МРБ-000123", '20200101'); // поиск по документам 2020 года
Если СсылкаНаОтгрузку.Пустая() Тогда
Сообщить("Документ не найден.");
Иначе
Отгрузка = СсылкаНаОтгрузку.ПолучитьОбъект(); // Получение самого документа, а не ссылки
Отгрузка.Склад = Справочники.Склады.НайтиПоНаименованию("Склад №23");
Отгрузка.Записать();
КонецЕсли;
// Получение пустой ссылки типа документ
ПустаяСсылка = Документы.ОтгрузкаТоваров.ПустаяСсылка();
Если ПустаяСсылка.Пустая() Тогда
// Истина
КонецЕсли;
// Копирование существующего документа
КопияПродажи = СсылкаНаОтгрузку.Скопировать();
КопияПродажи.Дата = ТекущаяДата();
// Запись и проведение документа
КопияПродажи.Записать(РежимЗаписиДокумента.Проведение);
// Блокировка документа перед изменениями
Отгрузка = СсылкаНаОтгрузку.ПолучитьОбъект();
Если Не Отгрузка.Заблокирован() Тогда
Отгрузка.Заблокировать();
Отгрузка.Склад = Справочники.Склады.НайтиПоНаименованию("Склад №51");
Отгрузка.Комментарий = "Документ изменён.";
Отгрузка.Записать();
Отгрузка.Разблокировать();
КонецЕсли;
// Создание нового документа на основании другого объекта
// (в модуле документа ОтгрузкаТоваров определена процедура ОбработкаЗаполнения)
СчетНаОсновании = Документы.ОтгрузкаТоваров.СоздатьДокумент();
СчетНаОсновании.Дата = ТекущаяДата();
СчетНаОсновании.Комментарий = "Документ введён на основании " + Строка(Отгрузка.Ссылка);
СчетНаОсновании.Заполнить(Отгрузка.Ссылка);
СчетНаОсновании.Записать(РежимЗаписиДокумента.Проведение);
// Пометка на удаление документа
СчетНаОсновании.УстановитьПометкуУдаления(Истина); // метод Записать не используется
КонецПроцедуры
Процедура СозданиеИИзменениеДокументов()
// Cоздание нового документа Отгрузка товаров
Отгрузка = Документы.ОтгрузкаТоваров.СоздатьДокумент();
// Заполнение шапки документа
Отгрузка.Дата = ТекущаяДата();
Отгрузка.Покупатель = Справочники.Покупатели.НайтиПоНаименованию("ООО ""Виста-медиа-групп""");
Отгрузка.Склад = Справочники.Склады.НайтиПоНаименованию("Склад №98");
// Заполнение табличной части Номенклатура
НоваяСтрока = Отгрузка.Номенклатура.Добавить();
НоваяСтрока.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию("SSD Intel Optane DC P4800X 1.5TB");
НоваяСтрока.Количество = 3;
НоваяСтрока.Сумма = 1926900;
// Запись документа
Отгрузка.Записать(РежимЗаписиДокумента.Запись);
// Проведение документа
Отгрузка.Записать(РежимЗаписиДокумента.Проведение);
// Отмена проведения документа
Отгрузка.Записать(РежимЗаписиДокумента.ОтменаПроведения);
// Внесение изменений в документ по ссылке (для этого вызываем метод ПолучитьОбъект)
СсылкаНаОтгрузку = Документы.ОтгрузкаТоваров.НайтиПоНомеру("МРБ-000123", '20200101'); // поиск по документам 2020 года
Если СсылкаНаОтгрузку.Пустая() Тогда
Сообщить("Документ не найден.");
Иначе
Отгрузка = СсылкаНаОтгрузку.ПолучитьОбъект(); // Получение самого документа, а не ссылки
Отгрузка.Склад = Справочники.Склады.НайтиПоНаименованию("Склад №23");
Отгрузка.Записать();
КонецЕсли;
// Получение пустой ссылки типа документ
ПустаяСсылка = Документы.ОтгрузкаТоваров.ПустаяСсылка();
Если ПустаяСсылка.Пустая() Тогда
// Истина
КонецЕсли;
// Копирование существующего документа
КопияПродажи = СсылкаНаОтгрузку.Скопировать();
КопияПродажи.Дата = ТекущаяДата();
// Запись и проведение документа
КопияПродажи.Записать(РежимЗаписиДокумента.Проведение);
// Блокировка документа перед изменениями
Отгрузка = СсылкаНаОтгрузку.ПолучитьОбъект();
Если Не Отгрузка.Заблокирован() Тогда
Отгрузка.Заблокировать();
Отгрузка.Склад = Справочники.Склады.НайтиПоНаименованию("Склад №51");
Отгрузка.Комментарий = "Документ изменён.";
Отгрузка.Записать();
Отгрузка.Разблокировать();
КонецЕсли;
// Создание нового документа на основании другого объекта
// (в модуле документа ОтгрузкаТоваров определена процедура ОбработкаЗаполнения)
СчетНаОсновании = Документы.ОтгрузкаТоваров.СоздатьДокумент();
СчетНаОсновании.Дата = ТекущаяДата();
СчетНаОсновании.Комментарий = "Документ введён на основании " + Строка(Отгрузка.Ссылка);
СчетНаОсновании.Заполнить(Отгрузка.Ссылка);
СчетНаОсновании.Записать(РежимЗаписиДокумента.Проведение);
// Пометка на удаление документа
СчетНаОсновании.УстановитьПометкуУдаления(Истина); // метод Записать не используется
КонецПроцедуры
Обход строк табличной части документа в 1С 8.3:
&НаСервере
Процедура ОбходСтрокТабличнойЧастиДокумента()
// У документа ОтгрузкаТоваров есть табличная часть: Номенклатура.
// У этой табличной части есть колонки: Номенклатура, Количество, Сумма.
ОтгрузкаСсылка = Документы.ОтгрузкаТоваров.НайтиПоНомеру("МРБ-000123", '20200430');
// Вариант №1: При помощи объектной техники
Для Каждого Строка Из ОтгрузкаСсылка.Номенклатура Цикл
Сообщить("отгружено: "+Строка.Номенклатура.Наименование + " на сумму " + Строка.Сумма + " руб.
( количество = " + Строка.Количество + ")");
КонецЦикла;
// Вариант №2: При помощи запроса
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОтгрузкаТоваров.Номенклатура,
| ОтгрузкаТоваров.Количество,
| ОтгрузкаТоваров.Сумма
|ИЗ
| Документ.ОтгрузкаТоваров.Номенклатура КАК ОтгрузкаТоваровТовар
|ГДЕ
| ОтгрузкаТоваровТовар.Ссылка = &ВыбОтгрузка";
Запрос.УстановитьПараметр("ВыбОтгрузка", ОтгрузкаСсылка);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Сообщить("отгружено: "+ВыборкаДетальныеЗаписи.Номенклатура.Наименование + " на сумму " +
ВыборкаДетальныеЗаписи.Сумма + " руб. ( количество = " + ВыборкаДетальныеЗаписи.Количество + ")");
КонецЦикла;
КонецПроцедуры
Процедура ОбходСтрокТабличнойЧастиДокумента()
// У документа ОтгрузкаТоваров есть табличная часть: Номенклатура.
// У этой табличной части есть колонки: Номенклатура, Количество, Сумма.
ОтгрузкаСсылка = Документы.ОтгрузкаТоваров.НайтиПоНомеру("МРБ-000123", '20200430');
// Вариант №1: При помощи объектной техники
Для Каждого Строка Из ОтгрузкаСсылка.Номенклатура Цикл
Сообщить("отгружено: "+Строка.Номенклатура.Наименование + " на сумму " + Строка.Сумма + " руб.
( количество = " + Строка.Количество + ")");
КонецЦикла;
// Вариант №2: При помощи запроса
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОтгрузкаТоваров.Номенклатура,
| ОтгрузкаТоваров.Количество,
| ОтгрузкаТоваров.Сумма
|ИЗ
| Документ.ОтгрузкаТоваров.Номенклатура КАК ОтгрузкаТоваровТовар
|ГДЕ
| ОтгрузкаТоваровТовар.Ссылка = &ВыбОтгрузка";
Запрос.УстановитьПараметр("ВыбОтгрузка", ОтгрузкаСсылка);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Сообщить("отгружено: "+ВыборкаДетальныеЗаписи.Номенклатура.Наименование + " на сумму " +
ВыборкаДетальныеЗаписи.Сумма + " руб. ( количество = " + ВыборкаДетальныеЗаписи.Количество + ")");
КонецЦикла;
КонецПроцедуры
Поиск документа по номеру в 1С 8.3:
&НаСервере
Процедура ПоискДокументаПоНомеру()
// Поиск документов Отгрузки товаров № МРБ-000123 за 2020 год
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Ссылка
|ИЗ
| Документ.ОтгрузкаТоваров КАК ОтгрузкаТоваров
|ГДЕ
| Дата МЕЖДУ &ДатаНач И &ДатаКон И
| Номер = &ВыбНомер";
Запрос.УстановитьПараметр("ДатаНач", '20200101');
Запрос.УстановитьПараметр("ДатаКон", '20201231');
Запрос.УстановитьПараметр("ВыбНомер", "МРБ-000123");
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДокументов = РезультатЗапроса.Выбрать();
Если ВыборкаДокументов.Следующий() Тогда
ТекДокСсылка=ВыборкаДокументов.Ссылка;
КонецЕсли;
КонецПроцедуры
Процедура ПоискДокументаПоНомеру()
// Поиск документов Отгрузки товаров № МРБ-000123 за 2020 год
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Ссылка
|ИЗ
| Документ.ОтгрузкаТоваров КАК ОтгрузкаТоваров
|ГДЕ
| Дата МЕЖДУ &ДатаНач И &ДатаКон И
| Номер = &ВыбНомер";
Запрос.УстановитьПараметр("ДатаНач", '20200101');
Запрос.УстановитьПараметр("ДатаКон", '20201231');
Запрос.УстановитьПараметр("ВыбНомер", "МРБ-000123");
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДокументов = РезультатЗапроса.Выбрать();
Если ВыборкаДокументов.Следующий() Тогда
ТекДокСсылка=ВыборкаДокументов.Ссылка;
КонецЕсли;
КонецПроцедуры
Поиск документа по реквизиту в 1С 8.3:
&НаСервере
Процедура ПоискДокументаПоРеквизиту()
// Поиск всех отгрузок покупателю ООО "Виста-медиа-групп"
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Ссылка,
| Покупатель
|ИЗ
| Документ.ОтгрузкаТоваров КАК ОтгрузкаТоваров
|ГДЕ
| Покупатель = &ВыбПокупатель
|УПОРЯДОЧИТЬ ПО
| Дата ВОЗР";
Запрос.УстановитьПараметр("ВыбПокупатель",Справочники.Покупатели.НайтиПоНаименованию("ООО ""Виста-медиа-групп"""));
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДокументов = РезультатЗапроса.Выбрать();
Пока ВыборкаДокументов.Следующий() Цикл
Сообщить(ВыборкаДокументов.Покупатель + " (" + Строка(ВыборкаДокументов.Ссылка) + ")");
КонецЦикла;
КонецПроцедуры
Процедура ПоискДокументаПоРеквизиту()
// Поиск всех отгрузок покупателю ООО "Виста-медиа-групп"
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Ссылка,
| Покупатель
|ИЗ
| Документ.ОтгрузкаТоваров КАК ОтгрузкаТоваров
|ГДЕ
| Покупатель = &ВыбПокупатель
|УПОРЯДОЧИТЬ ПО
| Дата ВОЗР";
Запрос.УстановитьПараметр("ВыбПокупатель",Справочники.Покупатели.НайтиПоНаименованию("ООО ""Виста-медиа-групп"""));
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДокументов = РезультатЗапроса.Выбрать();
Пока ВыборкаДокументов.Следующий() Цикл
Сообщить(ВыборкаДокументов.Покупатель + " (" + Строка(ВыборкаДокументов.Ссылка) + ")");
КонецЦикла;
КонецПроцедуры
Поиск подчиненных документов в 1С 8.3:
&НаСервере
Процедура ПоискПодчиненныхДокументов()
// Например: Документ Путевой Лист(является подчиненным) вводится на основании документа ОтгрузкаТоваров
// Вариант №1: Есть ссылка на путевой лист. Нужно найти родителей: Отгрузки товаров, на основании которых был введен Путевой лист.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ДокументОснование
|ИЗ
| Документ.ПутевойЛист.ДокументыОснования КАК
| ПутевойЛистДокументыОснования
|ГДЕ
| ПутевойЛистДокументыОснования.Ссылка = &ВыбПутевойЛист";
Запрос.УстановитьПараметр("ВыбПутевойЛист", Документы.ПутевойЛист.НайтиПоНомеру("ПЛ00007416", '20200430'));
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
РодительПутевогоЛиста = ВыборкаДетальныеЗаписи.ДокументОснование;
КонецЦикла;
// Вариант №2: Есть ссылка на отгрузку товаров. Нужно найти Путевые листы, которые были введены на основании этой отгрузки.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Ссылка
|ИЗ
| Документ.ПутевойЛист.ДокументыОснования КАК
| ПутевойЛистДокументыОснования
|ГДЕ
| ПутевойЛистДокументыОснования.ДокументОснование = &ВыбОтгрузкаТоваров";
Запрос.УстановитьПараметр("ВыбОтгрузкаТоваров", Документы.ОтгрузкаТоваров.НайтиПоНомеру("МРБ-000123", '20200430'));
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
ПодчиненныйПутевойЛист = ВыборкаДетальныеЗаписи.Ссылка;
КонецЦикла;
КонецПроцедуры
Процедура ПоискПодчиненныхДокументов()
// Например: Документ Путевой Лист(является подчиненным) вводится на основании документа ОтгрузкаТоваров
// Вариант №1: Есть ссылка на путевой лист. Нужно найти родителей: Отгрузки товаров, на основании которых был введен Путевой лист.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ДокументОснование
|ИЗ
| Документ.ПутевойЛист.ДокументыОснования КАК
| ПутевойЛистДокументыОснования
|ГДЕ
| ПутевойЛистДокументыОснования.Ссылка = &ВыбПутевойЛист";
Запрос.УстановитьПараметр("ВыбПутевойЛист", Документы.ПутевойЛист.НайтиПоНомеру("ПЛ00007416", '20200430'));
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
РодительПутевогоЛиста = ВыборкаДетальныеЗаписи.ДокументОснование;
КонецЦикла;
// Вариант №2: Есть ссылка на отгрузку товаров. Нужно найти Путевые листы, которые были введены на основании этой отгрузки.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Ссылка
|ИЗ
| Документ.ПутевойЛист.ДокументыОснования КАК
| ПутевойЛистДокументыОснования
|ГДЕ
| ПутевойЛистДокументыОснования.ДокументОснование = &ВыбОтгрузкаТоваров";
Запрос.УстановитьПараметр("ВыбОтгрузкаТоваров", Документы.ОтгрузкаТоваров.НайтиПоНомеру("МРБ-000123", '20200430'));
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
ПодчиненныйПутевойЛист = ВыборкаДетальныеЗаписи.Ссылка;
КонецЦикла;
КонецПроцедуры
Поиск и программное изменение движения документа по регистрам в 1С 8.3:
&НаСервере
Процедура ПоискИИзменениеДвиженияДокументаПоРегистрам()
ОтгрузкаСсылка = Документы.ОтгрузкаТоваров.НайтиПоНомеру("МРБ-000123", '20200430');
Отгрузка = ОтгрузкаСсылка.ПолучитьОбъект();
НаборЗаписей = Отгрузка.Движения.МестоХранения;
НаборЗаписей.Прочитать();
Для Каждого Запись Из НаборЗаписей Цикл
// Изменение записи, утроив количество
Запись.Количество = Запись.Количество * 3;
КонецЦикла;
// Добавление новой записи
НоваяЗапись = НаборЗаписей.ДобавитьПриход();
НоваяЗапись.Склад = Справочники.Склады.НайтиПоНаименованию("Склад №51");
НоваяЗапись.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию("SSD Huawei 02351SPX 1.92TB");
НоваяЗапись.Количество = 2;
НоваяЗапись.Период = ТекущаяДата();
НаборЗаписей.Записать(Истина); // Удаление старых движений и запись вместо них новых
// Если документ перепровести - проводки вернутся в свое первоначальное значение
КонецПроцедуры
Процедура ПоискИИзменениеДвиженияДокументаПоРегистрам()
ОтгрузкаСсылка = Документы.ОтгрузкаТоваров.НайтиПоНомеру("МРБ-000123", '20200430');
Отгрузка = ОтгрузкаСсылка.ПолучитьОбъект();
НаборЗаписей = Отгрузка.Движения.МестоХранения;
НаборЗаписей.Прочитать();
Для Каждого Запись Из НаборЗаписей Цикл
// Изменение записи, утроив количество
Запись.Количество = Запись.Количество * 3;
КонецЦикла;
// Добавление новой записи
НоваяЗапись = НаборЗаписей.ДобавитьПриход();
НоваяЗапись.Склад = Справочники.Склады.НайтиПоНаименованию("Склад №51");
НоваяЗапись.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию("SSD Huawei 02351SPX 1.92TB");
НоваяЗапись.Количество = 2;
НоваяЗапись.Период = ТекущаяДата();
НаборЗаписей.Записать(Истина); // Удаление старых движений и запись вместо них новых
// Если документ перепровести - проводки вернутся в свое первоначальное значение
КонецПроцедуры
Чтение запросом движения документа по регистрам (без возможности изменения) в 1С 8.3:
&НаСервере
Процедура ЧтениеДвиженияДокументаПоРегистрам()
ОтгрузкаСсылка = Документы.ОтгрузкаТоваров.НайтиПоНомеру("МРБ-000123", '20200430');
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| МестоХранения.НомерСтроки,
| МестоХранения.ВидДвижения,
| МестоХранения.Номенклатура,
| МестоХранения.Количество
|ИЗ
| РегистрНакопления.МестоХранения КАК МестоХранения
|ГДЕ
| МестоХранения.Регистратор = &ВыбРегистратор
|УПОРЯДОЧИТЬ ПО
| МестоХранения.НомерСтроки";
Запрос.УстановитьПараметр("ВыбРегистратор", ОтгрузкаСсылка);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Сообщить(ВыборкаДетальныеЗаписи.ВидДвижения + " (" + ВыборкаДетальныеЗаписи.Номенклатура
+ ") количество = " + ВыборкаДетальныеЗаписи.Количество);
КонецЦикла;
КонецПроцедуры
Процедура ЧтениеДвиженияДокументаПоРегистрам()
ОтгрузкаСсылка = Документы.ОтгрузкаТоваров.НайтиПоНомеру("МРБ-000123", '20200430');
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| МестоХранения.НомерСтроки,
| МестоХранения.ВидДвижения,
| МестоХранения.Номенклатура,
| МестоХранения.Количество
|ИЗ
| РегистрНакопления.МестоХранения КАК МестоХранения
|ГДЕ
| МестоХранения.Регистратор = &ВыбРегистратор
|УПОРЯДОЧИТЬ ПО
| МестоХранения.НомерСтроки";
Запрос.УстановитьПараметр("ВыбРегистратор", ОтгрузкаСсылка);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Сообщить(ВыборкаДетальныеЗаписи.ВидДвижения + " (" + ВыборкаДетальныеЗаписи.Номенклатура
+ ") количество = " + ВыборкаДетальныеЗаписи.Количество);
КонецЦикла;
КонецПроцедуры
Выбор и сортировка (упорядочивание) документов за период в 1С 8.3:
&НаСервере
Процедура ВыборИСортировкаУпорядочиваниеДокументовЗаПериод()
// Перебор всех документов ОтгрузкаТоваров за 2020 год и упорядочивание их по возрастанию даты
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Ссылка
|ИЗ
| Документ.ОтгрузкаТоваров КАК ОтгрузкаТоваров
|ГДЕ
| Дата МЕЖДУ &ДатаНач И &ДатаКон
|УПОРЯДОЧИТЬ ПО
| Дата ВОЗР";
Запрос.УстановитьПараметр("ДатаНач", '20200101');
Запрос.УстановитьПараметр("ДатаКон", '20201231');
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДокументов = РезультатЗапроса.Выбрать();
Пока ВыборкаДокументов.Следующий() Цикл
ТекДокСсылка=ВыборкаДокументов.Ссылка;
КонецЦикла;
КонецПроцедуры
Процедура ВыборИСортировкаУпорядочиваниеДокументовЗаПериод()
// Перебор всех документов ОтгрузкаТоваров за 2020 год и упорядочивание их по возрастанию даты
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Ссылка
|ИЗ
| Документ.ОтгрузкаТоваров КАК ОтгрузкаТоваров
|ГДЕ
| Дата МЕЖДУ &ДатаНач И &ДатаКон
|УПОРЯДОЧИТЬ ПО
| Дата ВОЗР";
Запрос.УстановитьПараметр("ДатаНач", '20200101');
Запрос.УстановитьПараметр("ДатаКон", '20201231');
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДокументов = РезультатЗапроса.Выбрать();
Пока ВыборкаДокументов.Следующий() Цикл
ТекДокСсылка=ВыборкаДокументов.Ссылка;
КонецЦикла;
КонецПроцедуры
Выборка всех документов, которые не проведены и не помечены на удаление в 1С 8.3:
&НаСервере
Процедура ВыборкаДокументовКоторыеНеПровИНеПомечНаУдаление()
// Поиск не проведенных и не помеченных на удаление документов отгрузок товаров
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Ссылка,
| Проведен,
| ПометкаУдаления
|ИЗ
| Документ.ОтгрузкаТоваров КАК ОтгрузкаТоваров
|ГДЕ
| Проведен = ЛОЖЬ И
| ПометкаУдаления = ЛОЖЬ
|УПОРЯДОЧИТЬ ПО
| Дата ВОЗР";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДокументов = РезультатЗапроса.Выбрать();
Пока ВыборкаДокументов.Следующий() Цикл
Сообщить("<"+ВыборкаДокументов.Проведен + ", " + ВыборкаДокументов.ПометкаУдаления + "> " + Строка(ВыборкаДокументов.Ссылка));
КонецЦикла;
КонецПроцедуры
Процедура ВыборкаДокументовКоторыеНеПровИНеПомечНаУдаление()
// Поиск не проведенных и не помеченных на удаление документов отгрузок товаров
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Ссылка,
| Проведен,
| ПометкаУдаления
|ИЗ
| Документ.ОтгрузкаТоваров КАК ОтгрузкаТоваров
|ГДЕ
| Проведен = ЛОЖЬ И
| ПометкаУдаления = ЛОЖЬ
|УПОРЯДОЧИТЬ ПО
| Дата ВОЗР";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДокументов = РезультатЗапроса.Выбрать();
Пока ВыборкаДокументов.Следующий() Цикл
Сообщить("<"+ВыборкаДокументов.Проведен + ", " + ВыборкаДокументов.ПометкаУдаления + "> " + Строка(ВыборкаДокументов.Ссылка));
КонецЦикла;
КонецПроцедуры
Изменение проведенного документа, без изменения его движения (проводок) в 1С 8.3:
&НаСервере
Процедура ИзменениеПроведенногоДокументаБезИзменения()
ОтгрузкаСсылка = Документы.ОтгрузкаТоваров.НайтиПоНомеру("МРБ-000123", '20200430');
// Изменим количество в табличной части на 4, но чтобы проводки (движения) остались прежними
Отгрузка = ОтгрузкаСсылка.ПолучитьОбъект();
Для Каждого СтрокаТЧ Из Отгрузка.Номенклатура Цикл
СтрокаТЧ.Количество = 4;
КонецЦикла;
Отгрузка.ОбменДанными.Загрузка = Истина; // Для того, чтобы документ не перепровелся
Отгрузка.Записать(); // Будет записан, но не перепроведен
КонецПроцедуры
Процедура ИзменениеПроведенногоДокументаБезИзменения()
ОтгрузкаСсылка = Документы.ОтгрузкаТоваров.НайтиПоНомеру("МРБ-000123", '20200430');
// Изменим количество в табличной части на 4, но чтобы проводки (движения) остались прежними
Отгрузка = ОтгрузкаСсылка.ПолучитьОбъект();
Для Каждого СтрокаТЧ Из Отгрузка.Номенклатура Цикл
СтрокаТЧ.Количество = 4;
КонецЦикла;
Отгрузка.ОбменДанными.Загрузка = Истина; // Для того, чтобы документ не перепровелся
Отгрузка.Записать(); // Будет записан, но не перепроведен
КонецПроцедуры
Открытие формы существующего документа по ссылке в 1С 8.3:
&НаКлиенте
Процедура ОткрытиеФормыСуществующегоДокумента(Команда)
СсылкаНаДок = ПолучитьДокПоНомеру("МРБ-000123", '20200101');
ПарамФормы = Новый Структура("Ключ", СсылкаНаДок);
//Параметры: Имя формы, параметры для формы
ОткрытьФорму("Документ.ОтгрузкаТоваров.ФормаОбъекта", ПарамФормы);
КонецПроцедуры
&НаСервере
Функция ПолучитьДокПоНомеру(НомерТекДок, ИнтервалДатГод)
Возврат Документы.ОтгрузкаТоваров.НайтиПоНомеру(НомерТекДок, ИнтервалДатГод);
КонецФункции
Процедура ОткрытиеФормыСуществующегоДокумента(Команда)
СсылкаНаДок = ПолучитьДокПоНомеру("МРБ-000123", '20200101');
ПарамФормы = Новый Структура("Ключ", СсылкаНаДок);
//Параметры: Имя формы, параметры для формы
ОткрытьФорму("Документ.ОтгрузкаТоваров.ФормаОбъекта", ПарамФормы);
КонецПроцедуры
&НаСервере
Функция ПолучитьДокПоНомеру(НомерТекДок, ИнтервалДатГод)
Возврат Документы.ОтгрузкаТоваров.НайтиПоНомеру(НомерТекДок, ИнтервалДатГод);
КонецФункции
Открытие формы выбора документа и отслеживание её закрытия в 1С 8.3:
&НаКлиенте
Процедура ОткрытиеФормыВыбораДокументаИОтслеживаниеЗакрытия(Команда)
ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПослеВыбораДокумента", ЭтотОбъект);
ОткрытьФорму("Документ.ОтгрузкаТоваров.ФормаВыбора",,,,,,ОповещениеОЗакрытии);
КонецПроцедуры
&НаКлиенте
Процедура ПослеВыбораДокумента(Рез, Пар) Экспорт
Если Рез <> Неопределено Тогда
Сообщить("Документ не был выбран " + Рез);
КонецЕсли;
КонецПроцедуры
Процедура ОткрытиеФормыВыбораДокументаИОтслеживаниеЗакрытия(Команда)
ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПослеВыбораДокумента", ЭтотОбъект);
ОткрытьФорму("Документ.ОтгрузкаТоваров.ФормаВыбора",,,,,,ОповещениеОЗакрытии);
КонецПроцедуры
&НаКлиенте
Процедура ПослеВыбораДокумента(Рез, Пар) Экспорт
Если Рез <> Неопределено Тогда
Сообщить("Документ не был выбран " + Рез);
КонецЕсли;
КонецПроцедуры
Открытие формы списка (журнала) документов с отбором по реквизиту в 1С 8.3:
&НаКлиенте
Процедура ОткрытиеФормыСпискаДокументовСОтбором(Команда)
// Продажи только для покупателя ООО "Виста-медиа-групп"
ОтборП = Новый Структура;
ОтборП.Вставить("Покупатель", ПоискПоИмени("ООО ""Виста-медиа-групп"""));
СтруктураП = Новый Структура;
СтруктураП.Вставить("Отбор", ОтборП);
ОткрытьФорму("Документ.ОтгрузкаТоваров.ФормаСписка", СтруктураП);
КонецПроцедуры
&НаСервере
Функция ПоискПоИмени(НаименованиеПокупателя)
Возврат Справочники.Покупатели.НайтиПоНаименованию(НаименованиеПокупателя);
КонецФункции
Процедура ОткрытиеФормыСпискаДокументовСОтбором(Команда)
// Продажи только для покупателя ООО "Виста-медиа-групп"
ОтборП = Новый Структура;
ОтборП.Вставить("Покупатель", ПоискПоИмени("ООО ""Виста-медиа-групп"""));
СтруктураП = Новый Структура;
СтруктураП.Вставить("Отбор", ОтборП);
ОткрытьФорму("Документ.ОтгрузкаТоваров.ФормаСписка", СтруктураП);
КонецПроцедуры
&НаСервере
Функция ПоискПоИмени(НаименованиеПокупателя)
Возврат Справочники.Покупатели.НайтиПоНаименованию(НаименованиеПокупателя);
КонецФункции
Открытие формы только что созданного, но ещё не записанного документа в 1С 8.3:
&НаКлиенте
Процедура ОткрытиеФормыНеЗаписанногоДокумента(Команда)
// Получение формы нового документа
ФормаНовДок = ПолучитьФорму("Документ.ОтгрузкаТоваров.ФормаОбъекта",, Истина);
// Копирование данных (напрямую менять нельзя)
КопияДанных = ФормаНовДок.Объект;
// Заполнение данных НаСервере
ЗаполнениеДанныхФормы(КопияДанных);
// Копирование данных в исходную форму
КопироватьДанныеФормы(КопияДанных, ФормаНовДок.Объект);
// Откроем пользователю форму нового (заполненного) документа
ФормаНовДок.Открыть();
КонецПроцедуры
&НаСервере
Процедура ЗаполнениеДанныхФормы(ДанныеКопииФормы)
// Преобразование в документ
Отгрузка = ДанныеФормыВЗначение(ДанныеКопииФормы, Тип("ДокументОбъект.ОтгрузкаТоваров"));
// Заполнение только табличной части
Строка = Отгрузка.Номенклатура.Добавить();
Строка.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию("SSD Intel Optane DC P4800X 1.5TB");
Строка.Количество = 5;
Строка.Сумма = 3211500;
// Преобразование обратно в форму
ЗначениеВДанныеФормы(Отгрузка, ДанныеКопииФормы);
КонецПроцедуры
Процедура ОткрытиеФормыНеЗаписанногоДокумента(Команда)
// Получение формы нового документа
ФормаНовДок = ПолучитьФорму("Документ.ОтгрузкаТоваров.ФормаОбъекта",, Истина);
// Копирование данных (напрямую менять нельзя)
КопияДанных = ФормаНовДок.Объект;
// Заполнение данных НаСервере
ЗаполнениеДанныхФормы(КопияДанных);
// Копирование данных в исходную форму
КопироватьДанныеФормы(КопияДанных, ФормаНовДок.Объект);
// Откроем пользователю форму нового (заполненного) документа
ФормаНовДок.Открыть();
КонецПроцедуры
&НаСервере
Процедура ЗаполнениеДанныхФормы(ДанныеКопииФормы)
// Преобразование в документ
Отгрузка = ДанныеФормыВЗначение(ДанныеКопииФормы, Тип("ДокументОбъект.ОтгрузкаТоваров"));
// Заполнение только табличной части
Строка = Отгрузка.Номенклатура.Добавить();
Строка.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию("SSD Intel Optane DC P4800X 1.5TB");
Строка.Количество = 5;
Строка.Сумма = 3211500;
// Преобразование обратно в форму
ЗначениеВДанныеФормы(Отгрузка, ДанныеКопииФормы);
КонецПроцедуры
💡 Шаблоны (готовые модели) кода 1С 8.3 с тегом #Документы:
📰 Актуальные новости с тегом #Документы:
- В версии 8.3.27 увеличено количество записей в табличных частях. В более ранних версиях можно было хранить до 99 999 записей. В ОбъектМетаданныхТабличнаяЧасть добавлено новое свойство – ДлинаНомераСтроки. Свойство может принимать целочисленное значение в диапазоне от 5 до 9 включительно, что позволяет хранить в табличной части до 999 999 999 записей.
- В версии 8.3.26 в менеджер объектов добавлен метод ВыбратьПоСсылкам.
- В версии 8.3.26 реализована поддержка журналов документов в расширениях.
0
комментарии
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник