This commit is contained in:
wakadakawaka 2025-08-24 21:37:33 +05:00
parent 7fbeeecf42
commit 1cdfa246b3
10 changed files with 264 additions and 40 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

View File

@ -1,6 +1,6 @@
--- ---
title: Добавление команд заполнения title: Добавление команд заполнения
slug: общие-подключаемые-команды-команды-заполнения/добавление-команд-заполнения slug: общие-подключаемые-команды/добавление-команд-заполнения
--- ---
# Общий модуль ЗаполнениеОбъектовПереопределяемый # Общий модуль ЗаполнениеОбъектовПереопределяемый

View File

@ -1,6 +1,6 @@
--- ---
title: Добавление команд отчетов title: Добавление команд отчетов
slug: общие-подключаемые-команды-команды-отчетов/добавление-команд-отчетов slug: общие-подключаемые-команды/добавление-команд-отчетов
--- ---
# В общем модуле `ВариантыОтчетовПереопределяемый` добавляем свой объект # В общем модуле `ВариантыОтчетовПереопределяемый` добавляем свой объект

View File

@ -1,9 +1,13 @@
--- ---
title: Добавление команд создания на основании title: Добавление команд создания на основании
slug: общие-подключаемые-команды-команды-создания-на-основании/добавление-команд-создания-на-основании slug: общие-подключаемые-команды/добавление-команд-создания-на-основании
--- ---
# В общем модуле `CозданиеНаОснованииПереопределяемый` ## Подключаемые команды
Нужно подключить формы к подсистеме `Подключаемые команды`
## В общем модуле `CозданиеНаОснованииПереопределяемый`
В процедуру `ПриОпределенииОбъектовСКомандамиСозданияНаОсновании` добавляем менеджеры подключаемых объектов. Например: В процедуру `ПриОпределенииОбъектовСКомандамиСозданияНаОсновании` добавляем менеджеры подключаемых объектов. Например:
@ -20,18 +24,18 @@ slug: общие-подключаемые-команды-команды-созд
// Объекты.Добавить(Метаданные.Справочники.Организации); // Объекты.Добавить(Метаданные.Справочники.Организации);
// //
Процедура ПриОпределенииОбъектовСКомандамиСозданияНаОсновании(Объекты) Экспорт Процедура ПриОпределенииОбъектовСКомандамиСозданияНаОсновании(Объекты) Экспорт
// _Демо начало примера // _Демо начало примера
Объекты.Добавить(Метаданные.Документы._ДемоЗаказПокупателя); Объекты.Добавить(Метаданные.Документы._ДемоЗаказПокупателя);
Объекты.Добавить(Метаданные.Документы._ДемоПоступлениеТоваров); Объекты.Добавить(Метаданные.Документы._ДемоПоступлениеТоваров);
// _Демо конец примера // _Демо конец примера
КонецПроцедуры КонецПроцедуры
``` ```
# В модуле менеджера ## В модуле менеджера
## Добавление команд создания на основании ### Добавление команд создания на основании
Если необходимо создавать какие-то объекты на основании собственного, в первую очередь нужно вывести команды создания на основании на форму документа. Если необходимо создавать какие-то объекты на основании собственного, в первую очередь нужно вывести команды создания на основании на форму документа.
Для этого: Для этого:
@ -47,23 +51,23 @@ slug: общие-подключаемые-команды-команды-созд
// //
Процедура ДобавитьКомандыСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры) Экспорт Процедура ДобавитьКомандыСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры) Экспорт
Если ПравоДоступа("Добавление", Метаданные.Документы.ЗаказДавальца) Тогда Если ПравоДоступа("Добавление", Метаданные.Документы.ЗаказДавальца) Тогда
КомандаСоздатьНаОсновании = КомандыСозданияНаОсновании.Добавить(); КомандаСоздатьНаОсновании = КомандыСозданияНаОсновании.Добавить();
КомандаСоздатьНаОсновании.Менеджер = Метаданные.Документы.ЗаказДавальца.ПолноеИмя(); КомандаСоздатьНаОсновании.Менеджер = Метаданные.Документы.ЗаказДавальца.ПолноеИмя();
КомандаСоздатьНаОсновании.Представление = ОбщегоНазначенияУТ.ПредставлениеОбъекта(Метаданные.Документы.ЗаказДавальца); КомандаСоздатьНаОсновании.Представление = ОбщегоНазначенияУТ.ПредставлениеОбъекта(Метаданные.Документы.ЗаказДавальца);
КомандаСоздатьНаОсновании.РежимЗаписи = "Проводить"; КомандаСоздатьНаОсновании.РежимЗаписи = "Проводить";
КонецЕсли; КонецЕсли;
КонецПроцедуры КонецПроцедуры
``` ```
В этой процедуре определяется, какие документы будут создаваться на основании. Для многих типовых документов реализована экспортная процедура для добавления такой команды. Например, если нужно создавать только документы `ЗаказКлиента` и `ЗаказПоставщику` (для которых реализованы такие экспортные команды), то код может выглядеть так В этой процедуре определяется, какие документы будут создаваться на основании. Для многих типовых документов реализована экспортная процедура для добавления такой команды. Например, если нужно создавать только документы `ЗаказКлиента` и `ЗаказПоставщику` (для которых реализованы такие экспортные команды), то код может выглядеть так
```bsl ```bsl
Процедура ДобавитьКомандыСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры) Экспорт Процедура ДобавитьКомандыСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры) Экспорт
Документы.ЗаказКлиента.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании); Документы.ЗаказКлиента.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании);
Документы.ЗаказПоставщику.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании); Документы.ЗаказПоставщику.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании);
КонецПроцедуры КонецПроцедуры
``` ```
@ -71,11 +75,14 @@ slug: общие-подключаемые-команды-команды-созд
Если мы хотим дать возможность так же просто создавать команды создания на основании для своего документа, то нужно так же реализовать экспортную процедуру: Если мы хотим дать возможность так же просто создавать команды создания на основании для своего документа, то нужно так же реализовать экспортную процедуру:
```bsl ```bsl
// Добавляет команду создания документа // Для использования в процедуре ДобавитьКомандыСозданияНаОсновании других модулей менеджеров объектов.
// Добавляет в список команд создания на основании этот объект.
// //
// Параметры: // Параметры:
// КомандыСозданияНаОсновании - ТаблицаЗначений - Таблица с командами создания на основании. Для изменения. // КомандыСозданияНаОсновании - см. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании.КомандыСозданияНаОсновании
// См. описание 1 параметра процедуры СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании(). //
// Возвращаемое значение:
// СтрокаТаблицыЗначений, Неопределено - описание добавленной команды.
// //
Функция ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании) Экспорт Функция ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании) Экспорт
@ -85,20 +92,20 @@ slug: общие-подключаемые-команды-команды-созд
КомандаСоздатьНаОсновании.Менеджер = Метаданные.Документы.<МойДокумент>.ПолноеИмя(); КомандаСоздатьНаОсновании.Менеджер = Метаданные.Документы.<МойДокумент>.ПолноеИмя();
КомандаСоздатьНаОсновании.Представление = ОбщегоНазначенияУТ.ПредставлениеОбъекта(Метаданные.Документы.<МойДокумент>); КомандаСоздатьНаОсновании.Представление = ОбщегоНазначенияУТ.ПредставлениеОбъекта(Метаданные.Документы.<МойДокумент>);
КомандаСоздатьНаОсновании.РежимЗаписи = "Проводить"; КомандаСоздатьНаОсновании.РежимЗаписи = "Проводить";
Возврат КомандаСоздатьНаОсновании; Возврат КомандаСоздатьНаОсновании;
КонецЕсли; КонецЕсли;
Возврат Неопределено; Возврат Неопределено;
КонецФункции КонецФункции
``` ```
# Настройка формы # Настройка формы
Нужно создать группу в командной панели(скопируй из типового объекта) Нужно создать группу в командной панели(скопируй из типового объекта)
// * ПодменюСоздатьНаОсновании
// ** ПодменюСоздатьНаОснованииВажное
// ** ПодменюСоздатьНаОснованииОбычное
// ** ПодменюСоздатьНаОснованииСмТакже
Нужно подключить форму к подсистеме `Подключаемые команды` - ПодменюСоздатьНаОсновании
- ПодменюСоздатьНаОснованииВажное
- ПодменюСоздатьНаОснованииОбычное
- ПодменюСоздатьНаОснованииСмТакже

View File

@ -1,6 +0,0 @@
---
title: Добавление команд печати
slug: общие-подключаемые-команды-команды-печати/добавление-команд-печати
---
См. Подключение к подсистеме Печать

View File

@ -0,0 +1,161 @@
---
title: Проверка серий номенклатуры в ТЧ
slug: типовые-erp-обработка-тч-с-номенклатурой/проверка-серий-номенклатуры-в-тч
---
# НЕ ЗАКОНЧЕНО
> Использование серий в 1С:ERP определяется функциональной опцией НСИ и администрирование Настройка НСИ и разделов Номенклатура Разрезы учета Серии товаров.
> Далее серии указываются для каждого вида номенклатуры отдельно
[Подробнее про настройку серий в ERP](https://efsol.ru/manuals/serial-accounting-1c-erp/?ysclid=mepv3es1ej787928552)
## Настройка формы
Создаем таблицу (далее - `СписокНоменклатуры`) с обязательными колонками
|Имя|Тип|
|-|-|
|`Номенклатура`|`СправочникСсылка.Номенклатура`|
|`Характеристика`|`СправочникСсылка.ХарактеристикиНоменклатуры`|
|`Серия`|`СправочникСсылка.СерииНоменклатуры`|
|`СтатусУказанияСерий`|`Число (2,0)`|
|`Склад`|`СправочникСсылка.Склады`|
|`ХарактеристикиИспользуются`|`Булево`|
|`ТипНоменклатуры`|`ПеречислениеСсылка.ТипыНоменклатуры`|
Для поля `Серия` устанавливаем связи параметров выбора:
![Изображение](/erp/serii-nomenklatury/1.png)
Поле `Склад` обычно не выводится в таблицу, а устанавливается отдельно для всех строк ТЧ. Для этого создадим реквизит объекта `Склад` и разместим в шапке
Несмотря на то, что поле `СтатусУказанияСерий` служебное, его рекомендуется создавать на уровне **объекта**, а не **формы**. На форму выводится как `Поле картинки` с картинкой значений `СтатусыУказанияСерий`
![Изображение](/erp/serii-nomenklatury/2.png)
Поля `ХарактеристикиИспользуются` и `ТипНоменклатуры` - служебные, и их создаем на уровне **формы**, а не **объекта**
Создаем **реквизит формы** `ПараметрыУказанияСерий` с типом `Произвольный`
> Пример для случая, когда серии указываются в той же ТЧ, что и номенклатура
## ПриСозданииНаСервере
> Пример для случая, когда серии указываются в той же ТЧ, что и номенклатура
```bsl
// См. описание метода
// Для каждого документа параметры серии могут отличаться, поэтому устанавливаются в менеджере целевого объекта. В примере параметры из документа "ПриобретениеТоваровУслуг"
СтруктураПараметров = НоменклатураСервер.ПараметрыУказанияСерий(Объект, <Менеджер объекта>); // где реализован экспортный метод "ПараметрыУказанияСерий"
ПараметрыУказанияСерий = Новый ФиксированнаяСтруктура(СтруктураПараметров);
НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(Объект, ПараметрыУказанияСерий);
НоменклатураСервер.УстановитьУсловноеОформлениеСерийНоменклатуры(ЭтотОбъект,
"СерииВсегдаВТЧТовары",
"СписокНоменклатурыСерия",
"Объект.СписокНоменклатуры.СтатусУказанияСерий",
"Объект.СписокНоменклатуры.ТипНоменклатуры");
НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(Объект, ПараметрыУказанияСерий);
```
<details style="margin: 1em 0; padding: 0.5em; border: 1px solid #ccc; border-radius: 6px;">
<summary style="font-weight: bold; cursor: pointer;">Пример реализации параметров учета серий в документе "Приобретение товаров и услуг</summary>
```bsl
// Возвращает параметры указания серий для товаров, указанных в документе
//
// Параметры:
// Объект - Структура - структура значений реквизитов объекта, необходимых для заполнения параметров указания серий.
//
// Возвращаемое значение:
// Структура - см. НоменклатураКлиентСервер.ПараметрыУказанияСерий.
//
Функция ПараметрыУказанияСерий(Объект) Экспорт
ПараметрыУказанияСерий = НоменклатураКлиентСервер.ПараметрыУказанияСерий();
ПараметрыУказанияСерий.ПолноеИмяОбъекта = "Документ.ПриобретениеТоваровУслуг";
ПараметрыСерийСклада = СкладыСервер.ИспользованиеСерийНаСкладе(Объект.Склад, Истина);
ЗакупкаУПоставщикаПоРеглУчету = (Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ЗакупкаУПоставщикаРеглУчет);
Если ЗакупкаУПоставщикаПоРеглУчету Тогда
ПараметрыУказанияСерий.ИспользоватьСерииНоменклатуры = ПараметрыСерийСклада.УчитыватьСебестоимостьПоСериям;
ПараметрыУказанияСерий.УчитыватьСебестоимостьПоСериям = ПараметрыСерийСклада.УчитыватьСебестоимостьПоСериям;
ПараметрыУказанияСерий.ТолькоСерииДляСебестоимости = Истина;
Иначе
ПараметрыУказанияСерий.ИспользоватьСерииНоменклатуры =
(ПараметрыСерийСклада.ИспользоватьСерииНоменклатуры И Не СкладыСервер.ИспользоватьОрдернуюСхемуПриПоступлении(Объект.Склад, Объект.Дата, Истина))
Или ПараметрыСерийСклада.УчитыватьСебестоимостьПоСериям;
ПараметрыУказанияСерий.УчитыватьСебестоимостьПоСериям = ПараметрыСерийСклада.УчитыватьСебестоимостьПоСериям;
ПараметрыУказанияСерий.ТолькоСерииДляСебестоимости = Ложь;
ПараметрыУказанияСерий.СерииПриПланированииОтгрузкиУказываютсяВТЧСерии = Истина;
КонецЕсли;
ПараметрыУказанияСерий.СкладскиеОперации.Добавить(Перечисления.СкладскиеОперации.ПриемкаОтПоставщика);
ПараметрыУказанияСерий.ПоляСвязи.Добавить("Склад");
ПараметрыУказанияСерий.ПоляСвязи.Добавить("Назначение");
ПараметрыУказанияСерий.ЭтоНакладная = Истина;
ПараметрыУказанияСерий.Дата = Объект.Дата;
ПараметрыУказанияСерий.ИменаПолейСтатусУказанияСерий.Добавить("СтатусУказанияСерий");
ПараметрыУказанияСерий.ИменаПолейДляОпределенияРаспоряжения.Добавить("Ссылка");
ПараметрыУказанияСерий.ИменаПолейДляОпределенияРаспоряжения.Добавить("Соглашение");
ПараметрыУказанияСерий.ИменаПолейДляОпределенияРаспоряжения.Добавить("Договор");
ПараметрыУказанияСерий.ИменаПолейДляОпределенияРаспоряжения.Добавить("ПоступлениеПоЗаказам");
ПараметрыУказанияСерий.ИменаПолейДляОпределенияРаспоряжения.Добавить("Товары_ЗаказПоставщику");
ПараметрыУказанияСерий.ИменаПолейДляОпределенияРаспоряжения.Добавить("ВариантПриемкиТоваров");
ПараметрыУказанияСерий.ОперацияДокумента = Объект.ХозяйственнаяОперация;
ОперацииВПути = Новый Массив();
ОперацииВПути.Добавить(Перечисления.ХозяйственныеОперации.ЗакупкаУПоставщикаТоварыВПути);
ОперацииВПути.Добавить(Перечисления.ХозяйственныеОперации.ЗакупкаПоИмпортуТоварыВПути);
ОперацииВПути.Добавить(Перечисления.ХозяйственныеОперации.ЗакупкаВСтранахЕАЭСТоварыВПути);
ОперацииНеотфактуровки = Новый Массив();
ОперацииНеотфактуровки.Добавить(Перечисления.ХозяйственныеОперации.ЗакупкаУПоставщикаФактуровкаПоставки);
ОперацииНеотфактуровки.Добавить(Перечисления.ХозяйственныеОперации.ЗакупкаВСтранахЕАЭСФактуровкаПоставки);
ХозОперацияТоварыВПутиИНеотфактуровка = ОперацииВПути.Найти(Объект.ХозяйственнаяОперация) <> Неопределено
Или ОперацииНеотфактуровки.Найти(Объект.ХозяйственнаяОперация) <> Неопределено;
ЭтоТоварыВПути = ОперацииВПути.Найти(Объект.ХозяйственнаяОперация) <> Неопределено;
ПараметрыУказанияСерий.ПараметрыЗапроса.Вставить("ЭтоТоварыВПути", ЭтоТоварыВПути);
ПараметрыУказанияСерий.ПараметрыЗапроса.Вставить("ХозОперацияТоварыВПутиИНеотфактуровка", ХозОперацияТоварыВПутиИНеотфактуровка);
Возврат ПараметрыУказанияСерий;
КонецФункции
```
</details>
## При изменении номенклатуры
```bsl
&НаКлиенте
Процедура СписокНоменклатурыНоменклатураПриИзменении(Элемент)
ТекДанн = Элементы.СписокНоменклатуры.ТекущиеДанные;
// см. описание метода
ПараметрыЗаполненияСклада = ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияСкладаВСтрокеТЧ(Объект, Ложь, "Склад", "СкладНаФорме");
СтруктураДействий = Новый Структура;
// Проверяем характеристики
СтруктураДействий.Вставить("ПроверитьХарактеристикуПоВладельцу", ТекДанн.Характеристика);
// Заполняем склад в ТЧ из реквизита в шапке формы
СтруктураДействий.Вставить("ПроверитьЗаполнитьСклад", ПараметрыЗаполненияСклада);
// заполняем служебный реквизит "ТипНоменклатуры"
СтруктураДействий.Вставить("ЗаполнитьПризнакТипНоменклатуры", Новый Структура("Номенклатура", "ТипНоменклатуры"));
// Проверяем статус указания серий
СтруктураДействий.Вставить("ПроверитьСериюРассчитатьСтатус", Новый Структура("Склад, ПараметрыУказанияСерий", ТекДанн.Склад, ПараметрыУказанияСерий));
ОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекДанн, СтруктураДействий, КэшированныеЗначения);
КонецПроцедуры
```

View File

@ -0,0 +1,62 @@
---
title: Проверка характеристик номенклатуры в ТЧ
slug: типовые-erp-обработка-тч-с-номенклатурой/проверка-характеристик-номенклатуры-в-тч
---
## Описание таблицы
Создаем таблицу (далее - `СписокНоменклатуры`) с обязательными колонками
|Имя|Тип|
|-|-|
|`Номенклатура`|`СправочникСсылка.Номенклатура`|
|`Характеристика`|`СправочникСсылка.ХарактеристикиНоменклатуры`|
|`ХарактеристикиИспользуются`|`Булево`|
Поле `ХарактеристикиИспользуются` - служебное, поэтому создается **на форме** а не в объекте
![Изображение](/erp/harakteristiki-nomenklatury/1.png)
Для поля `Характеристика` устанавливаем связи параметров выбора:
![Изображение](/erp/harakteristiki-nomenklatury/2.png)
## КэшированныеЗначения
В модуле формы нужно объявить клиентскую переменную `КэшированныеЗначения`
```bsl
#Область ОписаниеПеременных
&НаКлиенте
Перем КэшированныеЗначения; //используется механизмом обработки изменения реквизитов ТЧ
#КонецОбласти
```
## ПриСозданииНаСервере
При создании формы устнавливаем условное оформление поля `Характеристика`
```bsl
// См. описание метода
НоменклатураСервер.УстановитьУсловноеОформлениеХарактеристикНоменклатуры(ЭтотОбъект,
"СписокНоменклатурыХарактеристика",
"Объект.СписокНоменклатуры.ХарактеристикиИспользуются");
РаботаСТабличнымиЧастями.ИнициализироватьКэшСтрок(Элементы.СписокНоменклатуры);
```
## При изменении номенклатуры
```bsl
&НаКлиенте
Процедура СписокНоменклатурыНоменклатураПриИзменении(Элемент)
ТекДанн = Элементы.СписокНоменклатуры.ТекущиеДанные;
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПроверитьХарактеристикуПоВладельцу", ТекДанн.Характеристика);
ОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекДанн, СтруктураДействий, КэшированныеЗначения);
КонецПроцедуры
```