Ранее в статье я описывал, как включить документ в основные подсистемы БСП на примере ERP, а также сделать формирование движений через механизмы ERP.
Но не затронул такой механизм, как формирование проводок через регистры сведений "Отражение документов в регламентированном учете" и регистре Хозрасчетный соответственно.
Есть разработанный документ, в моем случае "РасшСт_ДополнительныйРасходТоваров". Он уже делает движения по другим регистрам, поэтому мне не нужно для него прописывать процедуры формирования движений в модуле менеджера.
Напомню, что для этого используется подсистема формирования движений.
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
ПроведениеДокументов.ОбработкаПроведенияДокумента(ЭтотОбъект, Отказ);
КонецПроцедуры
1. Документ должен являться регистратором следующих регистров
Регистр сведений ОтражениеДокументовВРеглУчете
Регистр сведений ОтражениеДокументовВМеждународномУчете
Регистр бухгалтерии Хозрасчетный
Соответственно добавляем их в расширение и в документ "РасшСт_ДополнительныйРасходТоваров" добавляю движения по этим регистрам.
2. Добавляем в модуль регистра бухгалтерии Хозрасчетный дополнительное условие и ключ.
&Перед("ПередЗаписью")
Процедура РасшСт_ПередЗаписью(Отказ, Замещение)
Если ТипЗнч(Отбор.Регистратор.Значение) = Тип("ДокументСсылка.РасшСт_ДополнительныйРасходТоваров") Тогда
ДополнительныеСвойства.Вставить("НеОтражатьВБюджетировании", Истина);
КонецЕсли;
КонецПроцедуры
Это необходимо, чтобы отключить проведение документа по подсистеме бюджетирования. Есть более сложный вариант, путем добавления документа регистратором регистра накопления "ФактическиеДанныеБюджетирования" и еще кучей мелких доработок, но представленный выше вариант проще.
3. Добавляем в расширение обработку "ОтражениеДокументовВРеглУчете" и две её формы "ПроводкиРегламентированногоУчета" и "ПроводкиРегламентированногоУчетаЧтение".
Для корректной работы обработки необходимо в указанных выше формах обработки, добавить реквизит формы Документ в расширение и расширить его тип для нашего документа.
4. Добавить в форму документа команду формирования проводок
Описание команды | |
Имя | ПроводкиРеглУчета |
Заголовок | Проводки регламентированного учета |
Действие | ПроводкиРеглУчета |
Картинка | ЖурналПроводок (добавить в расширение из типовой конфигурации) |
И выводим эту команду в командную панель
В модуле формы добавляем обработчик команды
&НаКлиенте
Процедура ПроводкиРеглУчета(Команда)
Отбор = Новый Структура("Регистратор", Объект.Ссылка);
ПараметрыФормы = Новый Структура("Отбор", Отбор);
Если ЕстьПравоРучнойКорректировкиПроводок() Тогда
ИмяФормыПроводок = "Обработка.ОтражениеДокументовВРеглУчете.Форма.ПроводкиРегламентированногоУчета";
Иначе
ИмяФормыПроводок = "Обработка.ОтражениеДокументовВРеглУчете.Форма.ПроводкиРегламентированногоУчетаЧтение";
КонецЕсли;
ОткрытьФорму(ИмяФормыПроводок, ПараметрыФормы, ЭтотОбъект,,,,,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаСервере
Функция ЕстьПравоРучнойКорректировкиПроводок()
Возврат Пользователи.РолиДоступны("ПравоРучнойКорректировкиПроводок");
КонецФункции
5. Перейдем к модификации модуля менеджера документа.
5.1 В процедуру ЗарегистрироватьУчетныеМеханизмы добавить учетный механизм по регл. учету.
МеханизмыДокумента.Добавить("РегламентированныйУчет");
5.2 В модуле менеджера модифицируем процедуру "ДанныеДокументаДляПроведения".
необходимо добавить текст запроса для формирования таблицы отражения в регл. учете.
ТекстЗапросаТаблицаОтражениеДокументовВРеглУчете(ТекстыЗапроса, Регистры);
Процедура ТекстЗапросаТаблицаОтражениеДокументовВРеглУчете(ТекстыЗапроса, Регистры)
ИмяРегистра = "ОтражениеДокументовВРеглУчете";
ТекстЗапроса =
"ВЫБРАТЬ
| &Период КАК Период,
| &Организация КАК Организация,
| НАЧАЛОПЕРИОДА(&Период, ДЕНЬ) КАК ДатаОтражения";
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
КонецПроцедуры
Добавить процедуру формирования непосредственно проводок.
Функция ТекстОтраженияВРеглУчете() Экспорт
ТекстЗапроса = "
|ВЫБРАТЬ
|
| Операция.Ссылка КАК Ссылка,
| Операция.Дата КАК Период,
| Операция.Организация КАК Организация,
| НЕОПРЕДЕЛЕНО КАК ИдентификаторСтроки,
|
| ЕСТЬNULL(Суммы.СуммаБезНДСРегл, 0) КАК Сумма,
| 0 КАК СуммаУУ,
|
| НЕОПРЕДЕЛЕНО КАК ВидСчетаДт,
| НЕОПРЕДЕЛЕНО КАК АналитикаУчетаДт,
| НЕОПРЕДЕЛЕНО КАК МестоУчетаДт,
|
| ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка) КАК ВалютаДт,
| Операция.Подразделение КАК ПодразделениеДт,
| НЕОПРЕДЕЛЕНО КАК НаправлениеДеятельностиДт,
|
| ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ТМЦнаскладах) КАК СчетДт,
| Строки.Номенклатура КАК СубконтоДт1,
| НЕОПРЕДЕЛЕНО КАК СубконтоДт2,
| НЕОПРЕДЕЛЕНО КАК СубконтоДт3,
|
| 0 КАК ВалютнаяСуммаДт,
| Строки.Количество КАК КоличествоДт,
| 0 КАК СуммаНУДт,
| 0 КАК СуммаПРДт,
| 0 КАК СуммаВРДт,
|
| НЕОПРЕДЕЛЕНО КАК ВидСчетаКт,
| НЕОПРЕДЕЛЕНО КАК АналитикаУчетаКт,
| НЕОПРЕДЕЛЕНО КАК МестоУчетаКт,
|
| ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка) КАК ВалютаКт,
| Операция.Подразделение КАК ПодразделениеКт,
| НЕОПРЕДЕЛЕНО КАК НаправлениеДеятельностиКт,
|
| ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ПустаяСсылка) КАК СчетКт,
| НЕОПРЕДЕЛЕНО КАК СубконтоКт1,
| НЕОПРЕДЕЛЕНО КАК СубконтоКт2,
| НЕОПРЕДЕЛЕНО КАК СубконтоКт3,
|
| 0 КАК ВалютнаяСуммаКт,
| Строки.Количество КАК КоличествоКт,
| 0 КАК СуммаНУКт,
| 0 КАК СуммаПРКт,
| 0 КАК СуммаВРКт,
| ""Пример формирования проводки"" КАК Содержание
|
|ИЗ
| ДокументыКОтражению КАК ДокументыКОтражению
|
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ
| Документ.РасшСт_ДополнительныйРасходТоваров КАК Операция
| ПО
| ДокументыКОтражению.Ссылка = Операция.Ссылка
|
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ
| Документ.РасшСт_ДополнительныйРасходТоваров.Товары КАК Строки
| ПО
| (Строки.Ссылка = Операция.Ссылка)
|
| ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрСведений.СуммыДокументовВВалютахУчета КАК Суммы
| ПО
| Строки.Ссылка = Суммы.Регистратор
| И Суммы.СуммаБезНДСРегл <> 0
|";
ТекстыОтражения = Новый Массив;
ТекстыОтражения.Добавить(ТекстЗапроса);
Возврат СтрСоединить(ТекстыОтражения, ОбщегоНазначенияУТ.РазделительЗапросовВОбъединении());
КонецФункции
Собственно этих доработок достаточно, чтобы базово прописать для документа механизм формирования проводок.
Как это работает. Мы проводим документ. У нас регистрируется запись, что документ необходимо отразить в регл. учете.
Далее мы нажимаем "Отразить в регл. учете" и у нас формируются проводки.
Но тут уже работают типовые алгоритмы и подчиняются типовым правилам формирования проводок. В том смысле, что доступна ручная корректировка проводок или работает автоматическое формирование проводок.
В данном примере я использовал забалансовый счет 002.01. Прошу не судить строго, это просто пример, а не практическое пособие как правильно использовать забалансовые счета. Так же в моем документе есть только количество.
Как вы видите, в функции ТекстОтраженияВРеглУчете можно собрать произвольный запрос для формирования проводок на основе не только документа.
С каждый релизом платформы, в расширениях появляется все больше возможностей. Возможно в свежих версиях платформы (>=8.3.20), не обязательно добавлять команду формирования проводок в документ, а будет достаточно расширить тип типовой команды.
Писалось и тестировалось на релизе 1С:ERP Управление предприятием 2 (2.5.7.201), платформа 8.3.20.1613.