Почему в лекции 1 "Основы организации бухгалтерской подсистемы" курса "Разработка прикладных решений для платформы 1С:Предприятие 8.2 в режиме "Управляемое приложение"" совершенно нет информации о том что нужно на вкладке данные в табличной части создать табличную часть "ВидыСубконто" и также нет информации о том какие нужно добавить реквизиты и какие у этих реквизитов должен быть тип? Считаю лекцию 1 в данном вопросе недоработанной. |
Бухгалтерская подсистема: расходные документы и переоценка валютных остатков
Прокомментируем этот код. Начнем с второстепенной функции ПолучитьКурсВалюты(). Функция принимает на входе параметр Отказ – если курс валюты не обнаружен, Отказ устанавливается в значение Истина, документ не проводится. Если курс не обнаружен, это не значит, что в документе нет других ошибок, поэтому данный факт не останавливает работу процедур, ответственных за проведение документа – при нахождении других ошибок пользователь будет оповещен о них.
В модифицированной процедуре ОбработкаПроведения() мы объявляем новую переменную – КурсВалюты. В эту переменную будет записано значение курса валюты, возвращенное функцией ПолучитьКурсВалюты() в том случае, если в документе будет установлен курс валюты. Если валюта не выбрана – он принимается равным 1 – это позволит процедуре проведения документа по регистрам накопления отработать правильно.
Далее, мы вызываем в процедуре ОбработкаПроведения() процедуру ОбработкаПроведенияПоБухучету(), передавая ей параметр Отказ. Установка его в значение Истина в данной процедуре приведет к отмене проведения документа.
В сравнении с исходным состоянием оставшегося кода процедуры проведения по регистрам накопления (ОбработкаПроведения()), мы модифицировали строку, задающую значение выручки в оборотном регистре Продажи. Теперь строка записи сведений о выручке выглядит так:
Движение.Выручка=ВыборкаДЗ.Выручка*КурсВалюты;
Если валюта в документе не задана, КурсВалюты будет равным 1 и не повлияет на значение, записываемое в регистр, если задана, что подразумевает указание данных в документе в указанной валюте, и курс найден – в ресурс Выручка регистра Продажи будет записана верная сумма. Если же, ранее, при вызове функции ПолучитьКурсВалюты() окажется, что курса нужной валюты нет в регистре сведений КурсыВалют – исполнение программы просто не дойдет до данной строчки, так как перед блоком формирования движений установлена проверка на значение параметра Отказ, поэтому неопределенное значение переменной КурсВалюты не повлияет на исполнение программы.
Когда исполнение программы переходит в процедуру ОбработкаПроведенияПоБухучету(), выполняется запрос, который мы сейчас рассмотрим.
В первую очередь в данном запросе мы получаем содержимое табличной части проводимого документа в составе полей Номенклатура, Количество и Выручка, сгруппированное по полю Номенклатура, и помещаем во временную таблицу ДокМТч.
Следующим шагом будет получение данных из таблицы остатков регистра бухгалтерии Хозрасчетный. Мы получаем следующие поля:
Субконто1 – в данном случае это субконто хранит ссылку на элемент справочника Номенклатура.
КоличествоОстаток – это поле получает значение количественного остатка материалов нужного вида в целом по счету ПрочиеМатериалы, без разделения его на отдельных ответственных лиц.
СуммаОстаток – здесь мы получаем значение суммового остатка так же в целом по номенклатурным позициям без разделения на отдельных ответственных лиц.
КоличествоЗаОтветственным – при формировании этого поля мы применили следующую конструкцию:
| СУММА(ВЫБОР | КОГДА ХозрасчетныйОстатки.Субконто2 = &Ответственный | ТОГДА ХозрасчетныйОстатки.КоличествоОстаток | КОНЕЦ) КАК КоличествоЗаОтветственным
Конструкция ВЫБОР КОГДА Условие ТОГДА позволяет, в данном случае, суммировать только те показатели КоличествоОстаток, которые числятся за ответственным лицом, ссылка на которое находится в Субконто2.
Мы параметризуем виртуальную таблицу РегистрБухгалтерии.Хозрасчетный.Остатки, задавая момент времени, счет, массив субконто и накладываем условие на принадлежность Субконто1 (номенклатурной позиции) к одной из номенклатурных позиций, которые находятся в поле Номенклатура полученной ранее временной таблицы ДокМТч.
Результаты выполнения запроса по таблице регистра бухгалтерии мы помещаем во временную таблицу ОстаткиПоСчету.
Третий шаг запроса заключается в соединении полученных временных таблиц ДокМТч и ОстаткиПоСчету. Здесь применяется левое соединение по условию ДокМТч.Номенклатура = ОстаткиПоСчету.Субконто1. Параметры запроса похожи на те, которые мы задавали для рассмотренного выше запроса, используемого при проведении документа ОтпускМатериаловМастеру.
Наш запрос, если просмотреть результаты его выполнения в отладчике (или в консоли запросов), выдает следующие данные ( рис. 3.5), с которыми мы работаем в оставшемся коде процедуры.
При входе в цикл перебора выборки мы сравниваем запрошенное количество материала (Количество) и количество, которое числится за ответственным лицом (КоличествоЗаОтветственным). Если запрошено больше, чем имеется, выдаем соответствующее сообщение об ошибке и отменяем проведение документа.
В противном случае переходим к формированию движений.
Документ формирует два движения, отражая в бухгалтерском учете две операции. Первая из них имеет вид
Дт Капитал Кт Материалы
Сущность этой проводки заключается в списании себестоимости материалов на счет учета капитала. Проводка, как и в случае с другими используемыми здесь записями, упрощенно отражает реальные процессы, происходящие в бухгалтерском учете.
Дт РасчетысПокупателями Кт Капитал
Она отражает, во-первых – на счете учета расчетов с покупателями, сумму их задолженности перед нами, во-вторых – сумму выручки на счете учета капитала.
Первая запись не зависит от выбранной валюты – она работает лишь с себестоимостью материалов, которая, напомним, в данном случае вычисляется исходя из средней себестоимости данного вида материалов, числящихся на счете ПрочиеМатериалы без учета средней стоимости, которая могла бы быть сформирована по отдельному ответственному.
Надо отметить, что благодаря отключению ведения суммового учета на счете ПрочиеМатериалы по субконто Сотрудники ( рис. 3.6), мы, списывая материалы по средней себестоимости, вычисленной в целом по счету, не инициируем ситуацию, в которой возможно, например, появление отрицательных или положительных суммовых остатков по различным субконто (по различным сотрудникам), связанных с различной себестоимостью принятых товаров.
Когда мы переходим ко второй записи, мы, в первую очередь, проверяем, была ли установлена валюта расчетов – если она не была установлена – мы будем формировать движения по счету РасчетыСПокупателямиВРублях, если была – по счету РасчетыСПокупателямиВВалюте с заполнением сведений о валютной сумме, о валюте, и с переводом выручки (для заполнения данных о сумме проводки, которая, в нашей конфигурации, всегда должна быть выражена в рублях) в рубли с помощью выражения:
Движение.Сумма=ВыборкаДЗ.Выручка*КурсВалюты;
На этом мы завершим работу над документом РеализацияМатериалов. Перейдем к еще одному документу – он будет использоваться для отражения в учете курсовых разниц при изменении курса валют.