Базовый курс. Занятие №11
Второе занятие 3-го блока.
Необходимо изучить следующие главы.
Глава 6. Автоматизация количественного учета.
Глава 7. Запросы. Чтение данных из регистра бухгалтерии запросом к базе данных.
Глава 8. Расчет стоимости при выбытии
Также нужно выполнить домашнее задание, текст которого доступен на странице.
Задание необходимо выполнять в ИБ после предыдущего ДЗ.
В этой же теме необходимо написать отчет о выполнении задания.
ps. Участники курса без доступа в мастер-группу отчитаться по домашним заданиям не получиться.
— залогиньтесь.
Если не активировали токен — посмотрите видео-инструкцию (видео N5)
Если вы залогинены, у Вас активирован токен доступа, но вы все равно видите эту запись —напишите нам на e-mail поддержки.
Задание выполнил. Сделал реквизиты БУ и НУ, в них поставил обработку проведения для соответствующих разделов учета, в реализации товаров и услуг сделал запрос, вычисляющий остаток по средней скользящей, и затем формирующий проводки по выручке и себестоимости. Сделал документ Выписка, в котором учел умееньшение\увеличение долга, сделал документ Акт сверки с печатной формой, сднлал обработку проведения по БУ документа Поступление товаров.
ДЗ выполнил.
Задание выполнил. Создал флаги в документах, закинул проведение по РН в “еслю” для УУ, проведение по РБ в “еслю” для БУ. Для услуг переделал счет на 26. Добавил Субконто “Контрагенты” на счета 60 и 62, Признак счета “Количественный”, количество как ресурс РБ. проведение Прихода поправил, учитывая эти изменения. Добавил проведение по РБ для реализации товаров. Собственно для расчета себестоимости и вводил Количество.
В Выписку в табличную часть добавил реквизит “СчетУчета”, вывел его на форме, согласно его выбору формирую счет в проводке. В вводе на основании использую запрос:
Запрос.Текст =
“ВЫБРАТЬ
| РегистрБухгалтерииОстатки.Счет,
| РегистрБухгалтерииОстатки.СуммаОстатокДт СуммаДт,
| РегистрБухгалтерииОстатки.СуммаОстатокКт СуммаКт
|ИЗ
| РегистрБухгалтерии.РегистрБухгалтерии.Остатки(, , , Субконто1 = &Контрагент) КАК РегистрБухгалтерииОстатки”;
Запрос.УстановитьПараметр(“Контрагент”, ДанныеЗаполнения);
Для получения данных по задолженностям. Затем в цикле заполняю табличную часть.
Заполнение акта сверки взаиморасчетов сделал через запрос по оборотам:
“ВЫБРАТЬ
| РегистрБухгалтерииОборотыДтКт.Регистратор Документ,
| РегистрБухгалтерииОборотыДтКт.СуммаОборот Сумма,
| РегистрБухгалтерииОборотыДтКт.СчетДт,
| РегистрБухгалтерииОборотыДтКт.СчетКт
|ИЗ
| РегистрБухгалтерии.РегистрБухгалтерии.ОборотыДтКт(
| &НачДата,
| &КонДата,
| Регистратор,
| ,
| ,
| ,
| ,
| СубконтоДт1 = &Контрагент
| ИЛИ СубконтоКт1 = &Контрагент) КАК РегистрБухгалтерииОборотыДтКт”;
В цикле проверяю, согласно условиям:
Если (ВыборкаДетальныеЗаписи.СчетДт = ПланыСчетов.ПланСчетов.Поставщики) или (ВыборкаДетальныеЗаписи.СчетКт = ПланыСчетов.ПланСчетов.Покупатели) Тогда
НовСтрока.СуммаУвеличенияДолга = ВыборкаДетальныеЗаписи.Сумма;
ИначеЕсли (ВыборкаДетальныеЗаписи.СчетКт = ПланыСчетов.ПланСчетов.Поставщики) или (ВыборкаДетальныеЗаписи.СчетДт = ПланыСчетов.ПланСчетов.Покупатели) Тогда
НовСтрока.СуммаУменьшенияДолга = ВыборкаДетальныеЗаписи.Сумма;
Иначе
КонецЕсли;
А так же в этой же процедуре вычисляю остаток на начало периода и на его окончание:
“ВЫБРАТЬ
| РегистрБухгалтерииОстатки.СуммаОстаток Сумма
|ИЗ
| РегистрБухгалтерии.РегистрБухгалтерии.Остатки(
| &ТекДата,
| Счет = ЗНАЧЕНИЕ(ПланСчетов.ПланСчетов.Покупатели)
| ИЛИ Счет = ЗНАЧЕНИЕ(ПланСчетов.ПланСчетов.Поставщики),
| ,
| Субконто1 = &Контрагент) КАК РегистрБухгалтерииОстатки”;
Подставляя разные значения ТекДата.
Печать документа полностью сделал через конструктор, красоту не наводил.
Задание выполнила, но с большим опозданием.((
Задание 11 выполнил.
Завел булевские реквизиты УУ и БУ для док-ов: ПоступлениеТоваров, АвансовыйОтчет, РеализацияТоваров, Выписка. Переработал процедуры общих модулей и модулей объектов. Привел их к более универсальному виду. В итоге если галка установлена, то движения есть, если нет, то нет. Учел и перепроведение док-та. Для учета услуг в поступлении доработал запрос в функции ПолучитьДанныеПоТМЦДокумента, добавил ОБЪЕДИНИТЬ и второй запрос с условием только услуги. Для ПВХ ВидыСубконто создал предопределенный вид характеристики Контрагенты и присвоил счетам 26, 60, 62 вид субконто Контрагенты. Доработал запрос на заполнение данных субконто. Для расчета себестоимости ввел признак учета Количественный и учитывать его на счетах ТМЦ. Переработал заполнение движений регистра бухгалтерии при проведении док-та Поступление. В документе Реализация алгоритм проведения сделал как в видеоуроках.
Добавил движения по рег. бух. в док-те Выписка. Если приход, то Дт Банк – Кт 60 или 61 (берется из таб. части), если расход то наоборот.
Для создания выписку на основании элемента спр. Контрагенты определил процедуру ОбработкаЗаполнения. В ней запросом по таблице остатки рег-ра бух-ии получаю остатки и вывожу в таб. часть документа.
Создал док. Акт сверки взаиморасчетов. В серверной процедуре модуля форму получаю данные из запроса по виртуальной таблице ОстаткиИобороты (Переодичность Регистратор, МетодДополнения – ДвиженияИГраницыПериода, условие Субконто1 = &Контрагент ).
Задание выполнила, и опять подсматривала в решение
1. Созданы реквизиты УУ и БУ для всех документов. Модифицированы обработки проведения этих документов: движения по регистрам накопления только при установленном флаге УУ, по регистрам бухгалтерии – БУ. На формах документов обрабатываю событие изменения состояния флажков: если состояние меняется, то делаю отмену проведения документа.
2. Добавил новый реквизит СчетРасчетаСКонтрагентом для документов ПоступлениеТоваров и РеализацияТоваров. Также, в табличные части Товары этих документов, добавил реквизит СчетУчета.
3. Модифицировал функцию ПолучитьДанныеПоТМЦДокумента общего модуля РаботаСДокументаСервер так, чтобы обеспечить проведение документа ПоступлениеТоваров по регистру бухгалтерии с учетом аналитики и счетов, указанных в документе(СчетРасчетаСКонтрагентом и СчетУчета в строке).
4. Добавил признак учета Количественный для плана счетов, а также ресурс Количество для регистра бухгалтерии. Настроил признак количественного учета для счетов ТМЦ.
При проведении документ РеализацияТоваров пакетным запросом формирую все проводки по себестоимости и проводку по взаиморасчетам с покупателем. При этом, себестоимость товара нахожу с помощью виртуальной таблицы РегистрБухгалтерии.РегистрБухгалтерииХозрасчетный.Остатки
5. В табличную часть Оплаты документа Выписка добавил реквизит СчетРасчетаСКонтрагентом. Обеспечил формирование проводок этим документом по регистру бухгалтерии. В процедуре ОбработкаЗаполнения модуля документа Выписка разместил код заполнения документа на основании элемента справочника Контрагенты.
6. Создал документ АктСверкиВзаиморасчетов. Для заполнения табличной части документа использую запрос к виртуальной таблице РегистрБухгалтерии.РегистрБухгалтерииХозрасчетный.ОстаткиИОбороты
с параметрами из реквизитов документа.
Задание выполнено. Пока главная проблема – это отставание)
Задание выполнено.
1. Созданы булевские реквизиты “УУ”, “БУ” для документов отгрузки, поступления, выписки, авансового отчета. Движения по регистрам накопления делаются при установленном флаге “УУ”, по регистру бухгалтерии – “БУ”. По умолчанию при создании нового документа оба флага установлены.
2. На счетах 60, 62 добавлен аналитический разрез по контрагентам. Реализованы проводки, указанные в задании для документов поступления, реализации, выписки, авансового отчета. При этом для номенклатуры с видом “Услуга” не делаются проводки по себестоимости и, следовательно, нет контроля остатков по счету 41.01 “Товары”.
3. В документе реализации реализовано списание себестоимости товаров по среднескользящей. Реализован контроль остатков на уровне модуля объекта документа, а также на уровне модуля набора записей регистра бухгалтерии (для документа “Операция”).
4. Реализован ввод выписки на основании контрагента. Долги по контрагенту определены с помощью виртуальной таблицы “Остатки” регистра бухгалтерии.
5. Создан документ “Акт сверки взаиморасчетов”. Для заполнения табличной части использовалась виртуальная таблица “Обороты” с отбором по счетам 60 и 62, выбранному контрагенту, за выбранный период, с периодичностью по регистратору. Доработана печатная форма, созданная конструктором печати, в части отображения начального и конечного сальдо по контрагенту.
Задание выполнено.
1. Созданы булевские реквизиты “УУ”, “БУ” для документов отгрузки, поступления, выписки, авансового отчета. Движения по регистрам накопления делаются при установленном флаге “УУ”, по регистру бухгалтерии – “БУ”. По умолчанию при создании нового документа оба флага установлены.
2. На счетах 60, 62 добавлен аналитический разрез по контрагентам. Реализованы проводки, указанные в задании для документов поступления, реализации, выписки, авансового отчета. При этом для номенклатуры с видом “Услуга” не делаются проводки по себестоимости и, следовательно, нет контроля остатков по счету 41.01 “Товары”.
3. В документе реализации реализовано списание себестоимости товаров по среднескользящей. Реализован контроль остатков на уровне модуля объекта документа, а также на уровне модуля набора записей регистра бухгалтерии (для документа “Операция”).
4. Реализован ввод выписки на основании контрагента. Долги по контрагенту определены с помощью виртуальной таблицы “Остатки” регистра бухгалтерии.
5. Создан документ “Акт сверки взаиморасчетов”. Для заполнения табличной части использовалась виртуальная таблица “Обороты” с отбором по счетам 60 и 62, выбранному контрагенту, за выбранный период, с периодичностью по регистратору. Доработана печатная форма, созданная конструктором печати, в части отображения начального и конечного сальдо по контрагенту.
Задание по созданию юридического слоя в учебной конфигурации выполнено, все получилось.
Выполнено.
1) В документах вставлены реквизиты булевского типа БУ и УУ. Обработку проведения каждого документа разбила на две части по условиям:
Если Товар.Количество() = 0 Тогда
Сообщить(“В документе нет ни одной строчки!!!”);
Отказ = Истина;
Возврат;
КонецЕсли;
Если НЕ (УУ ИЛИ БУ) Тогда
Отказ = Истина;
Сообщить(“Не указано ни одного вида учета!”);
Возврат;
КонецЕсли;
Если УУ Тогда
ПроведениеПоУУ();
КонецЕсли;
Если БУ Тогда
ПроведениеПоБУ();
КонецЕсли;
2) на 60 и 62 открыла Субконто = Контрагенты.
по документу поступления сделала соответствующие проводки в зависимости от ВидаНоменклатры, а также по взаиморасчетам.
написала вот так, просто так легче показалось
Запрос.Текст = ”
|ВЫБРАТЬ
| РеализацияТоваровТовар.Номенклатура,
| СУММА(РеализацияТоваровТовар.Количество * РеализацияТоваровТовар.Коэффициент) КАК Количество
|ПОМЕСТИТЬ НоменклатураДокумента
|ИЗ
| Документ.РеализацияТоваров.Товар КАК РеализацияТоваровТовар
|ГДЕ
| РеализацияТоваровТовар.Ссылка = &Ссылка
| И РеализацияТоваровТовар.Номенклатура.ВидНоменклатуры <> ЗНАЧЕНИЕ(Перечисление.ВидНоменклатуры.Услуга)
|
|СГРУППИРОВАТЬ ПО
| РеализацияТоваровТовар.Номенклатура
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| УправленческийОстатки.Субконто1 КАК Номенклатура,
| УправленческийОстатки.СуммаОстатокДт КАК Сумма,
| УправленческийОстатки.КоличествоОстатокДт КАК Количество
|ПОМЕСТИТЬ Себестоимость
|ИЗ
| РегистрБухгалтерии.Управленческий.Остатки(
| &Дата,
| Счет = &Счет,
| ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконто.Номенклатура),
| Субконто1 В
| (ВЫБРАТЬ РАЗЛИЧНЫЕ
| НоменклатураДокумента.Номенклатура
| ИЗ
| НоменклатураДокумента)) КАК УправленческийОстатки
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| НоменклатураДокумента.Номенклатура,
| НоменклатураДокумента.Количество,
| ВЫРАЗИТЬ(НоменклатураДокумента.Количество * Себестоимость.Сумма / Себестоимость.Количество КАК ЧИСЛО(15,2)) КАК СебестоимостьСумма
|ИЗ
| НоменклатураДокумента КАК НоменклатураДокумента
| ЛЕВОЕ СОЕДИНЕНИЕ Себестоимость КАК Себестоимость
| ПО НоменклатураДокумента.Номенклатура = Себестоимость.Номенклатура
|”;
3) поправила выписку по движениям бухгалтерии.
на основании Контрагента сделала заполнение Выписки в обработке ОбработкаЗаполнения
4) создан документ АктСверки, который заполняется по запросу на основе таблицы ОстаткиИОбороты с параметром ДвиженияИГраницыПериода.
создана коанда документа Печать и спомощью конструктора печати (с доработкой естественно) создана печатная форма документа.
Выполнил, с отставанием!
1. Флаги отражения операция.
Добавлены в документы поступления и отгрузки реквизит УпрУчет, БухУчет, тип “Булево”
В обработке проведения движение по регистрам проводится в зависимости от установленного флага. Если флаг не установлен, то движения по соответствующим регистрам очищается.
2. Обработка проведения “Реализация товара” по регистру бухгалтерии:
Движения.РегистрБухгалтерииХозрасчетный.Очистить();
Движения.РегистрБухгалтерииХозрасчетный.Записать();
Если БухУчет Тогда
Запрос = Новый Запрос;
Запрос.Текст =
“ВЫБРАТЬ
| ДокТовары.Номенклатура,
| СУММА(ДокТовары.Количество * ДокТовары.КоэффициентПересчета) КАК КолДок,
| СУММА(ДокТовары.Сумма) КАК СумДок,
| МИНИМУМ(ДокТовары.НомерСтроки) КАК НомерСтроки,
| ЕСТЬNULL(ОстаткиТоваров.СуммаОстатокДт, 0) КАК СумОст,
| ЕСТЬNULL(ОстаткиТоваров.КоличествоОстатокДт, 0) КАК КолОст
|ИЗ
| Документ.РеализацияТовара.Товары КАК ДокТовары
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.РегистрБухгалтерииХозрасчетный.Остатки(
| &МоментВремени,
| Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.Товары),
| ,
| Субконто1 В
| (ВЫБРАТЬ РАЗЛИЧНЫЕ
| РеализацияТовараТовары.Номенклатура
| ИЗ
| Документ.РеализацияТовара.Товары КАК РеализацияТовараТовары
| ГДЕ
| РеализацияТовараТовары.Ссылка = &Ссылка
| И РеализацияТовараТовары.Номенклатура.ВидНоменклатуры <> ЗНАЧЕНИЕ(Перечисление.ВидыНоменклатуры.Услуга))) КАК ОстаткиТоваров
| ПО ДокТовары.Номенклатура = ОстаткиТоваров.Субконто1
|ГДЕ
| ДокТовары.Ссылка = &Ссылка
| И ДокТовары.Номенклатура.ВидНоменклатуры <> ЗНАЧЕНИЕ(Перечисление.ВидыНоменклатуры.Услуга)
|
|СГРУППИРОВАТЬ ПО
| ДокТовары.Номенклатура,
| ЕСТЬNULL(ОстаткиТоваров.СуммаОстатокДт, 0),
| ЕСТЬNULL(ОстаткиТоваров.КоличествоОстатокДт, 0)”;
Запрос.УстановитьПараметр(“МоментВремени”, МоментВремени());
Запрос.УстановитьПараметр(“Ссылка”, Ссылка);
Результат = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Нехватка = ВыборкаДетальныеЗаписи.КолДок – ВыборкаДетальныеЗаписи.КолОст;
Если Нехватка > 0 Тогда
Отказ = Истина;
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = “Не хватает товара ” + ВыборкаДетальныеЗаписи.Номенклатура + ” в количестве ” + Нехватка ;
Сообщение.Поле = “Товары[” + (ВыборкаДетальныеЗаписи.НомерСтроки – 1) +”].Количество”;
Сообщение.УстановитьДанные(ЭтотОбъект);
Сообщение.Сообщить();
КонецЕсли;
Если Отказ Тогда
Продолжить;
КонецЕсли;
Проводка = Движения.РегистрБухгалтерииХозрасчетный.Добавить();
Проводка.Период = Дата;
Проводка.СчетДт = ПланыСчетов.Хозрасчетный.Себестоимость;
Проводка.СчетКт = ПланыСчетов.Хозрасчетный.Товары;
Проводка.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Товары] = ВыборкаДетальныеЗаписи.Номенклатура;
Проводка.Количество = ВыборкаДетальныеЗаписи.КолДок;
Если ВыборкаДетальныеЗаписи.КолОст = 0 Тогда
Себестоимость = 0;
Иначе
Себестоимость = ВыборкаДетальныеЗаписи.СумОст * ВыборкаДетальныеЗаписи.КолДок / ВыборкаДетальныеЗаписи.КолОст;
КонецЕсли;
Проводка.Сумма = Себестоимость;
КонецЦикла;
Если НЕ Отказ Тогда
Движения.РегистрБухгалтерииХозрасчетный.Записывать = Истина;
Проводка = Движения.РегистрБухгалтерииХозрасчетный.Добавить();
Проводка.Период = Дата;
Проводка.СчетДт = ПланыСчетов.Хозрасчетный.Покупатели;
Проводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Контрагенты] = Контрагент;
Проводка.СчетКт = ПланыСчетов.Хозрасчетный.Выручка;
Проводка.Сумма = Товары.Итог(“Сумма”);
КонецЕсли;
КонецЕсли;
3. Обработка проведения документа Выписка
Движения.РегистрБухгалтерииХозрасчетный.Записывать = Истина;
Если НЕ БухУчет Тогда
Движения.РегистрБухгалтерииХозрасчетный.Очистить();
Иначе
Для Каждого ТекСтрокаОплаты Из Оплаты Цикл
Если ТекСтрокаОплаты.Приход > 0 Тогда
Проводка = Движения.РегистрБухгалтерииХозрасчетный.Добавить();
Проводка.Период = Дата;
Проводка.СчетДт = ПланыСчетов.Хозрасчетный.Банк;
Проводка.СчетКт = ТекСтрокаОплаты.СчетПрихода;
Проводка.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Контрагенты] = ТекСтрокаОплаты.Контрагент;
Проводка.Сумма = ТекСтрокаОплаты.Приход;
КонецЕсли;
Если ТекСтрокаОплаты.Расход > 0 Тогда
Проводка = Движения.РегистрБухгалтерииХозрасчетный.Добавить();
Проводка.Период = Дата;
Проводка.СчетДт = ТекСтрокаОплаты.СчетРасхода;
Проводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Контрагенты] = ТекСтрокаОплаты.Контрагент;
Проводка.СчетКт = ПланыСчетов.Хозрасчетный.Банк;
Проводка.Сумма = ТекСтрокаОплаты.Расход;
КонецЕсли;
КонецЦикла;
КонецЕсли;
4. Ввод на основании контрагент документа “Выписка”. Заполнение документ в “Обработке заполнения реализовано так”.
Если ТипЗнч(ДанныеЗаполнения) = Тип(“СправочникСсылка.Контрагенты”) Тогда
Запрос = Новый Запрос;
Запрос.Текст =
“ВЫБРАТЬ
| РегистрБухгалтерииХозрасчетныйОстатки.Счет КАК СчетПрихода,
| 0 КАК СчетРасхода,
| РегистрБухгалтерииХозрасчетныйОстатки.Субконто1 КАК Контрагент,
| РегистрБухгалтерииХозрасчетныйОстатки.СуммаОстатокДт – РегистрБухгалтерииХозрасчетныйОстатки.СуммаОстатокКт КАК Приход,
| 0 КАК Расход
|ИЗ
| РегистрБухгалтерии.РегистрБухгалтерииХозрасчетный.Остатки(, Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.Покупатели), , Субконто1 = &Контрагент) КАК РегистрБухгалтерииХозрасчетныйОстатки
|ГДЕ
| РегистрБухгалтерииХозрасчетныйОстатки.СуммаОстатокДт – РегистрБухгалтерииХозрасчетныйОстатки.СуммаОстатокКт > 0
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| 0,
| РегистрБухгалтерииХозрасчетныйОстатки.Счет,
| РегистрБухгалтерииХозрасчетныйОстатки.Субконто1,
| 0,
| РегистрБухгалтерииХозрасчетныйОстатки.СуммаОстатокКт – РегистрБухгалтерииХозрасчетныйОстатки.СуммаОстатокДт КАК Расход
|ИЗ
| РегистрБухгалтерии.РегистрБухгалтерииХозрасчетный.Остатки(, Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.Поставщики), , Субконто1 = &Контрагент) КАК РегистрБухгалтерииХозрасчетныйОстатки
|ГДЕ
| РегистрБухгалтерииХозрасчетныйОстатки.СуммаОстатокКт – РегистрБухгалтерииХозрасчетныйОстатки.СуммаОстатокДт > 0”;
Запрос.УстановитьПараметр(“Контрагент”, ДанныеЗаполнения);
Результат = Запрос.Выполнить();
Оплаты.Загрузить(Результат.Выгрузить());
КонецЕсли;
5. Документ “Акт сверки взаиморасчетов”. Печать документа выполнена без учета долга на начало и конец периода. Заполнения документа реализовано так:
&НаСервере
Процедура ПолучитьСуммыДолга()
Запрос = Новый Запрос;
Запрос.Текст =
“ВЫБРАТЬ
| Обороты.Документ,
| СУММА(Обороты.УвеличениеДолга) КАК УвеличениеДолга,
| СУММА(Обороты.УменьшениеДолга) КАК УменьшениеДолга
|ИЗ
| (ВЫБРАТЬ
| ОборотыДтКт.Регистратор КАК Документ,
| ОборотыДтКт.СуммаОборот КАК УвеличениеДолга,
| 0 КАК УменьшениеДолга
| ИЗ
| РегистрБухгалтерии.РегистрБухгалтерииХозрасчетный.ОборотыДтКт(
| &НачалоПериода,
| &КонецПериода,
| Регистратор,
| СчетДт = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.Поставщики)
| ИЛИ СчетДт = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.Покупатели),
| ,
| ,
| ,
| СубконтоДт1 = &Контрагент) КАК ОборотыДтКт
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ОборотыДтКт.Регистратор,
| 0,
| ОборотыДтКт.СуммаОборот
| ИЗ
| РегистрБухгалтерии.РегистрБухгалтерииХозрасчетный.ОборотыДтКт(
| &НачалоПериода,
| &КонецПериода,
| Регистратор,
| ,
| ,
| СчетКт = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.Поставщики)
| ИЛИ СчетКт = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.Покупатели),
| ,
| СубконтоКт1 = &Контрагент) КАК ОборотыДтКт) КАК Обороты
|
|СГРУППИРОВАТЬ ПО
| Обороты.Документ”;
Док = РеквизитФормыВЗначение(“Объект”, Тип(“ДокументОбъект.АктСверкиВзаиморасчетов”));
Запрос.УстановитьПараметр(“КонецПериода”, Док.КонецПериода);
Запрос.УстановитьПараметр(“Контрагент”, Док.Контрагент);
Запрос.УстановитьПараметр(“НачалоПериода”, Док.НачалоПериода);
Результат = Запрос.Выполнить();
Док.Сверка.Загрузить(Результат.Выгрузить());
ЗначениеВРеквизитФормы(Док, “Объект”);
КонецПроцедуры // ПолучитьСуммыДолга()
Задание выполнил.
1.Создал два булевских флага и для удобства их использования, части кода из модуля обработки проведения документов, отвечающие за формирования движений по каждому виду учета вынес в соответствующие процедуры.
2.Для формирования проводки по услугам и ведения аналитического учета по контрагентам скорректировал запрос, получающий таблицу значений для загрузки в регистр бухгалтерии. Вид субконто Контрагенты был добавлен ранее.
<code>
Запрос.Текст =
“ВЫБРАТЬ
| &Период,
| ВЫБОР
| КОГДА ДокТовары.Номенклатура.ВидНоменклатуры <> ЗНАЧЕНИЕ(Перечисление.ВидНоменклатуры.Услуга)
| ТОГДА ЗНАЧЕНИЕ(ПланСчетов.Управленческий.Товары)
| ИНАЧЕ ЗНАЧЕНИЕ(ПланСчетов.Управленческий.Затраты)
| КОНЕЦ КАК СчетДт,
| ДокТовары.Номенклатура КАК СубконтоДт1,
| ВЫБОР
| КОГДА ДокТовары.Номенклатура.ВидНоменклатуры <> ЗНАЧЕНИЕ(Перечисление.ВидНоменклатуры.Услуга)
| ТОГДА ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконто.Номенклатура)
| ИНАЧЕ ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконто.ПустаяСсылка)
| КОНЕЦ КАК ВидСубконтоДт1,
| &КорСчет КАК СчетКт,
| &Контрагент КАК СубконтоКт1,
| ВЫБОР
| КОГДА &Контрагент = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
| ТОГДА ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконто.ПустаяСсылка)
| ИНАЧЕ ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконто.Контрагенты)
| КОНЕЦ КАК ВидСубконтоКт1,
| СУММА(ВЫБОР
| КОГДА ДокТовары.Номенклатура.ВидНоменклатуры <> ЗНАЧЕНИЕ(Перечисление.ВидНоменклатуры.Услуга)
| ТОГДА ДокТовары.Количество * ДокТовары.К
| ИНАЧЕ 0
| КОНЕЦ) КАК КоличествоДт,
| СУММА(ДокТовары.Сумма) КАК Сумма
|ИЗ
| &ДокументТовары КАК ДокТовары
|ГДЕ
| ДокТовары.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| ДокТовары.Номенклатура,
| ВЫБОР
| КОГДА ДокТовары.Номенклатура.ВидНоменклатуры <> ЗНАЧЕНИЕ(Перечисление.ВидНоменклатуры.Услуга)
| ТОГДА ЗНАЧЕНИЕ(ПланСчетов.Управленческий.Товары)
| ИНАЧЕ ЗНАЧЕНИЕ(ПланСчетов.Управленческий.Затраты)
| КОНЕЦ,
| ВЫБОР
| КОГДА ДокТовары.Номенклатура.ВидНоменклатуры <> ЗНАЧЕНИЕ(Перечисление.ВидНоменклатуры.Услуга)
| ТОГДА ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконто.Номенклатура)
| ИНАЧЕ ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконто.ПустаяСсылка)
| КОНЕЦ”;
</code>
3. Для определения себестоимости списания необходим количественный учет. В связи с эти, добавил регистр бухгалтерии не балансовый ресурс Количество и признак учета Количественный.
Реализацию данного алгоритма выполнил по аналогии с просмотренными уроками – Сначала очищаются записи в регистре, затем выполняется запрос для определения остатков и себестоимости, а затем в цикле по выборке обходится результат этого запроса.
4. В табличную часть документа Выписка добавил реквизит КорСчет и заполнил движения по регистру бухгалтерии.
Для ввода на основании в событии ОбработкаЗаполнения делаю запрос к ВТ регистра бухгалтерии Остатки.
<code>
Запрос.Текст =
“ВЫБРАТЬ
| РегистрУправленческийОстатки.Субконто1,
| РегистрУправленческийОстатки.СуммаОстатокДт,
| РегистрУправленческийОстатки.СуммаОстатокКт,
| РегистрУправленческийОстатки.Счет
|ИЗ
| РегистрБухгалтерии.РегистрУправленческий.Остатки(
| &Момент,
| Счет = ЗНАЧЕНИЕ(ПланСчетов.Управленческий.Покупатели)
| ИЛИ Счет = ЗНАЧЕНИЕ(ПланСчетов.Управленческий.Поставщики),
| ,
| Субконто1 = &Контрагент) КАК РегистрУправленческийОстатки”;
</code>
т.к. счета активно-пассивные, то для 62 счета долг покупателя будет определятся как остаток по дебету, а для 60 по кредиту. Исходя из этого, обходим выборку и заполняет ТЧ выписки.
5. Создал Акт сверки. Кроме указанных в задании реквизитов, добавил еще два, которые будут хранить Начальное и Конечное сальдо. Согласно заданию, увеличение долга контрагента происходит по Дебету счета взаиморасчетов, а уменьшения по Кредиту.
Для заполнения документа использую два запроса. Для заполнения ТЧ обращаюсь к ВТ Обороты,
<code>
Запрос.Текст =
“ВЫБРАТЬ
| РегистрУправленческийОбороты.Регистратор КАК Документ,
| РегистрУправленческийОбороты.СуммаОборотДт КАК СуммаУвеличенияДолга,
| РегистрУправленческийОбороты.СуммаОборотКт КАК СуммаУменьшенияДолга
|ИЗ
| РегистрБухгалтерии.РегистрУправленческий.Обороты(&ДатаНачала, &ДатаОкончания, Авто, , ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконто.Контрагенты), Субконто1 = &Контрагент, , ) КАК РегистрУправленческийОбороты
|
|УПОРЯДОЧИТЬ ПО
| Документ”;
</code>
а для получения сальдо к ВТ Остатки. Хотел наложить фильтр на параметр ВТ Субконто вместо Счет, однако забыл как это делать. Пришлось повторно просматривать соответствующий блок уроков.
Печатную форму создал через конструктор и внес корректировки в макет.
Об окончании выполнения задания №11 – теперь уже со следующим потоком.
Попробовал все-таки воспользоваться рекомендацией “накладывать условие не на СубконтоДт1 и СубконтоКт1, а просто на Субконто1”.
В результате условие “Субконто1 = &Контрагент” сработало.
Здесь есть вот какой ещё интересный момент. Вроде бы обычно отбор мы можем накладывать на поля таблицы. И в синтакс-помощнике читаем:
“В условии могут следующие поля таблицы: … СубконтоДт<НомерСубконто>,… СубконтоКт<НомерСубконто>…”.
Т.е. “Субконто1” как не являющееся полем этой таблицы среди допустимых не перечислено.
Тем не менее, в конструкторе для выражения условия в списке полей присутствуют и Субконто1, и ВидСубконто1, и КорСубконто1, и ВидКорСубконто1 – ну и убеждаемся, что действительно можно использовать в нашем случае Субконто1.
Выходит, что здесь имеет место некоторая недозадокументированность этой возможности.
Действительно в справке не описано это поле, даже в возможных выходных полях.
Недозадокументированность на лицо :)
1. Создал флаги УУ и БУ на документах поступление, реализация, Авансовый, выписка. В функциях заполнения регистров добавил параметр “ПризнакУчета” для регистров накопления передаю УУ, для бухгалтерских регистров передаю БУ, если ложь очищаю регистры. для услуг изменил запрос, добавил выбор в зависимоти от вида номенклатуры.
2. Добавил аналитический учёт на счет 60 ПВХ контрагенты в процедуре “ПолучитьДанныеПоТМЦДокумента” изменил запрос, а точнее во временной таблице добавил Ссылка.Контрагент и Номенклатура.ВидНоменклатуры и определил новые поля СубконтоКт1 и ВидСубконтоКт1)
3. Добавил признак Количественного учёта на плане счетов и в регистр бухгалтерии ресурс не балансовый. изменил запрос для Поступления и авансового отчёта КоличествоДт заполняю в зависимости от вида номенклатуры. для расчёта себестоимости в документе реализаии.
Авансовый тоже отражаю по регистру бухгалтерии, поскоьку делаю на основе вашего 10 ДЗ изменил в функции ПолучитьДанныеПоТМЦДокумента запрос, перед этим изменил имя реквизита в Авансовом отчёте с сотрудника на контрагент, в запросе использую выбор <code>ТИПЗНАЧЕНИЯ(ДокТовары.Ссылка.Контрагент) = ТИП(Справочник.Сотрудники)</code> и проставляю субконто необходимое.
4. Реализацию добавил как регистратор для регистра бухгалтерии. Создал функцию ПолучитьДанныеПоТМЦДокументаРеализfwbb где получаю проводки по товарам и по выручке обьединением запросов по товарам и по выручке.
5. Выписка, запросом отбираю приходы, расходы и объединяю, после заношу в регистр.
6. на основании создаю документ, запросом определяю актуальные остатки на текущую дату, в зависимости от долга компании или долга нам формируется результат который помещается в табличную часть документа. Добавил функцию в общем модуле Заполнение документов сервер ЗаполнитьПоКонтрагентуВыписку.
7. создал документ Акт сверки. функцией на сервере получаю данные по регистрам и заполняю данные формы. конструктором создал печать и исправил по заданию.
Задание выполнено
Задание выполнено.
Краткое резюме:
1. Создал булевские реквизиты ОтражатьВ..Учете во всех документах. Переписал обработки проведения для всех документов: движения по одному виду учета вынес в отдельные функции.
2. Проводку по услугам в “Поступлении товаров” добавил: сначала получаю запросов сумму оказываемых услуг, потом делаю проводку.
3. Добавил вид субконто “Контрагенты”. В “Поступлении товаров” в цикле по движениям добавляют нужную аналитику для счетов 60, 62.
4. Среднескользящую цену получаю не аккуратно. Сумму остатка получаю по данным бух. учета, а количество – по рег. нак “Остатки номенклатуры”. Думаю, нужно было реализовать количественный учет по рег. бух, но не сделал. С проводками проблем не возникло.
5. В “Выписке” добавил реквизит таб. части Счет и проводки по бух. учету.
6. 7. С вводом на основании и “Актом взаиморасчетов проблем не возникло”. Для получения данных использовал вирт. таблицы Остатки и Обороты по рег. бух.
Добавил булевские реквизиты ОтражатьВБухгалтерскомУчете и ОтражатьВУправленческомУчете во все документы. Добавил в модули обработки проведения условия на проверку этих реквизитов. Для документа поступление товаров добавил проведение услуг. Для счетов 60 и 62 добавил субконто Контрагенты. Добавил в обработку проведения документа ПоступлениеТоваров аналитический учет по контрагентам. Добавил контроль остатков и списание себестоимости как показано в видеоуроках. В ТЧ документа Выписка добавил новый реквизит Счет. Добавил ВводНаОсновании для спр-ка Контрагенты. Создал АктСверки с командой для заполнения, макет добавил через конструктор печати.
Задание выполнено.
Булевые флаги в документах созданы. Попытался минимизировать корректировки, связанные с флагами, поэтому где было можно, то в процедурах модуля ДвиженияПоРегистрамСервер добавил еще по параметру УУ или БУ в зависимости от движения.
Первой строчкой определил Движения.<ИмяРегистра>. Записывать=Истина, и если флаг учета не выставлен, то идет сразу возврат, иначе добавляются в набор записи.
Проводку Дт 26 Кт 60 для отражения заказанных услуг сформировал.
В плане счетов на счетах 60 и 62 добавил ВидСубконто “Контрагенты”. Также в плане счетов добавил Признак учета “Количественный” и включил его на счетах ТМЦ. В документе “Поступление товаров” сформировал по БУ движения с аналитикой и количеством.
Об этом не было сказано в задании, но для порядка добавил субконто Сотрудники на счете 71, чтобы проводка Авансового отчета выглядела завершенной.
В документе “РеализацияТоваров” добавил 2 требуемые проводки по выручке и себестоимости. Себестоимость расчитываю соединением таблицы документа Товары с таблицей регистра бухгалтерии остатки. При определении суммы списания в запросе проверяю списываемое количество и остаток товара по бух. регистру. Если оно равно, то списывается вся сумма на остатке, иначе происходит расчет средней цены и умножается на списываемое количество. Это сделано для списания “в ноль”, иначе на счетах ТМЦ могли бы зависать копейки после списания. Момент времени в запросе использован как Граница(МоментВремени()) – ВидГраницы.Исключая.
С выпиской проблем не возникло. Проводки сформировал. Ввод на основании сделал загрузкой в таблицу Оплаты результата запроса по остаткам бух. регистра. В запросе поставлен фильтр по счетам 60 и 62.
Создал документ “Акт сверки взаиморасчетов”. Запретил проведение. Заполнение документа провожу загрузкой в таблицу Взаиморасчеты результат запроса по таблице ОстаткиИОбороты. Из нее же беру сальдо на начало и на конец периода. На форме добавил Период (тип СтандартныйПериод) для удобства выбора и связал его с датой начала и окончания, которые скрыл. Печатную форму создал конструктором.
P.S. Два вопроса:
Первый:
Хотел узнать насколько целесообразно с точки зрения скорости выполнения использование в запросе длинных(с несколькими точками) конструкций вида:
<code>
ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконто.Товары)
ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.Товары)
</code>
и есть ли смысл выносить их в переменные запроса?
Второй:
Очень удобно при проведении загружать результаты запросов сразу в набор записей регистра. Но когда таких наборов загружается несколько подряд в один регистр, то при загрузке очередного результата запроса, добавленные ранее записи очищаются. Хотел узнать как решается данная проблема. Я делал через объединение временных таблиц в одну большую и потом ее в конце загружал в регистр. Но тут нужно соблюдать условие чтобы поля в таблицах были идентичны полностью. В одном запросе есть КоличествоКт, в другом нет, надо помнить и добавлять в другие запросы тоже КоличествоКт, но с нулевым значением. Может существует более оптимальное решение?
Сейчас пришло в голову что конечно можно сформировать все движения регистра одним большим запросом с объединением, но это как-то слишком громоздко и нечитабельно будет :(
1. Приведенные вами выражения использовать корректно. Функция значение будет обрабатываться до исполнения запроса.
Поэтому такой подход не хуже использования параметров, а может быть на доли процентов лучше.
Однако следует разделять обращения через точку.
Если написать так: Ссылка.Родитель.Ссылка.Родитель.Контрагент.ОсновнойМенеджер.Код, это приведет к соединению большого количества таблиц в запрос.
Поэтому если без такой конструкции можно обойтись, то лучше ее не использовать.
2. Все-таки нужно собирать данные в один запрос, как Вы и делаете.
Другой вопрос насколько это читаемо.
Вполне возможно применять такой подход: основной массив данных загрузить из запроса, другие перебором строк иных источников (результатов запроса).
Спасибо за ответ. Так и буду делать.
Еще мне кажется что забыли вписать главу 8, как необходимую для изучения, перед выполнением данного задания.
Спасибо за информацию, исправили.
В документы добавлены булевские реквизиты УУ и БУ.
В зависимости от флага выполняется проводка по регистрам накопления либо по регистру бухгалтерии.
Списание товаров реализовано примерно, так как показано в обучающем видео. Выборка с соединением из табличной части документа Реализация и виртуальной таблице регистра бухгалтерии Остатки. Выполняется проверка остатков и проводка либо отказ. Сообщение пользователю выводится с использованием объекта СообщениеПользователю.
Табличная часть документа выписка заполняется результатом полученным в результате запроса к виртуальной таблице остатки регистра бухгалтерии.
Создан документ “Акт сверки взаиморасчетов” согласно условию. Заполнение табличной части реализовано с помощью запроса к регистру накопления “Взаиморасчеты”. Запрос с соединением выполняется к двум таблицам, физической “Взаиморасчеты” и виртуальной “ВзаиморасчетыОбороты”, условиями выборки являются Регистратор, ВзаиморасчетыОбороты.СуммаПриход и ВзаиморасчетыОбороты.СуммаРасход, результат запроса выгружается в таблицу значений, а таблица значений в табличную часть документа. Печать реализована с помощью мастера и доработана в ручную
Задание готово.
Добавил во все документы флаги БУ и УУ типа булево. В зависимости от состояния флагов реализовал проведение в документах в РН и РБ соответственно. «Значение заполнения» по умолчанию для данных реквизитов в «Истина». Модуле объекта вынес проведение по разным регистрам в разные процедуры и вызываю их в зависимости от состояния флагов.
Для документа «Поступление» для услуг формируется проводка дт26 кт 60. Так же по счетам 60 и 62 добавил возможность вести учет в разрезе контрагентов, субконто «контрагенты».
Списание товаров в БУ реализовал по среднескользящей оценке стоимости. Использовал запрос к виртальной таблице «Остатки» с параметрами моментВремени() , и товарами указанными к таб. Части документа. Левым соединением произвел объединение таблицы документа товары и вирт. Таблицу «остатки». Расчет себестоимости для списания произвел в запросе полем образованным условным оператором case. Перебором выборки результата запроса произвожу запись в регистр бухгалтерии.
Добавил в документ «Выписка» реквизит счет взаиморасчетов. Обеспечил ввод на основании элемента справочника контрагенты. Заполнение по условию задачи реализовал в процедуре модуля объекта вызываемой при событии «Обработка заполнения».
Добавил в конфигурацию документ «Акт сверки». Документ не проводится и не является регистратором ни для одного регистра. Для заполнения табличной части использую запрос к виртуальной таблице «Остатки и обороты» с автоматической периодичностью . Метод дополнения «ДвиженияИГраницыПериода». Реализовал формирование печатной формы с начальным сальдо и конечным сальдо и данными из табличной части документа. Начальное и конечное сальдо получаю из этого же запроса по границам периода, если данных на период начала формирования в результате запроса нет указываю что начальное сальдо по взаиморасчетам равно 0.
Задание выполнено.
1.В документы «Поступление товаров», «Авансовый отчет», «Реализация товаров», «Выписка» добавлены флаги «Управленческий учет (УУ)», «Бухгалтерский учет (БУ)». По указанным документам доработано проведение. Если установлен флаг «УУ», то проведение по регистрам накопления, если флаг «УУ», то проведение по бух. регистру.
2.Для документа «Поступление товаров» добавлено проведение услуг по бух. учету.
3.Для счетов «Покупатели», «поставщик» добавлена аналитика «Контрагенты». Доработано проведение по бух. учету документа «поступление товаров».
4.Для плана счетов добавлен признак «Количественный». В рег. бухгалтерии добавлен ресурс «Количество» не балансовый и установлена связь с признаком «Количественный» для плана счетов. Для счета 41.01 (товары) установлен признак «Количественный». Доработано проведение документов по поступлению товаров.
5.При проведении документа «Реализация товаров» рассчитывается себестоимость реализованных товаров.
<code>
Запрос = Новый Запрос;
Запрос.Текст = “ВЫБРАТЬ
| РеализацияТоваровТовары.Номенклатура,
| СУММА(РеализацияТоваровТовары.Количество) КАК Количество,
| СУММА(РеализацияТоваровТовары.Сумма) КАК Сумма,
| МАКСИМУМ(РеализацияТоваровТовары.НомерСтроки) КАК НомерСтроки
|ПОМЕСТИТЬ втТовары
|ИЗ
| Документ.РеализацияТоваров.Товары КАК РеализацияТоваровТовары
|ГДЕ
| РеализацияТоваровТовары.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| РеализацияТоваровТовары.Номенклатура
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| втТовары.Номенклатура,
| втТовары.Количество КАК КолДок,
| втТовары.Сумма КАК СуммаДок,
| ЕстьNULL(БухгалтерскийОстатки.КоличествоОстатокДт,0) КАК КолОст,
| ЕстьNULL(БухгалтерскийОстатки.СуммаОстатокДт,0) КАК СуммаОст
|ИЗ
| втТовары КАК втТовары
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Бухгалтерский.Остатки(
| &Момент,
| Счет = ЗНАЧЕНИЕ(ПланСчетов.Основной.Товары),
| ,
| Субконто1 В
| (ВЫБРАТЬ РАЗЛИЧНЫЕ
| втТовары.Номенклатура
| ИЗ
| втТовары)) КАК БухгалтерскийОстатки
| ПО втТовары.Номенклатура = БухгалтерскийОстатки.Субконто1”;
Запрос.УстановитьПараметр(“Ссылка”, Ссылка);
Запрос.УстановитьПараметр(“Момент”, МоментВремени());
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() цикл
Проводка = Движения.Бухгалтерский.Добавить();
Проводка.Период = Дата;
Проводка.СчетДт = ПланыСчетов.Основной.Себестоимость;
Проводка.СчетКт = ПланыСчетов.Основной.Товары;
Проводка.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатура] = Выборка.Номенклатура;
Проводка.КоличествоКт = Выборка.КолДок;
Если Выборка.КолОст = 0 тогда
Проводка.Сумма = 0;
Иначе
Проводка.Сумма = Выборка.СуммаОст * Выборка.КолДок / Выборка.КолОст;
Конецесли;
КонецЦикла;
</code>
6.В табличной части документа «Выписка» добавлен реквизит «СчетРасчетов». Добавлена возможность ввода на основании справочника «Контрагенты». Если вводится на основании справочника «Контрагенты», то документ заполняется по остаткам на счетах 60 и 62.
7.Создна документ «Акт взаиморасчетов». Табличная часть заполняется по таблицы оборотов регистра бухгалтерии по счетам 60 и 62. Остаток на начало выбирается из таблицы остатков регистра бух-ии. Печатная форма добавлена с помощью конструктора.
Задание выполнено. В документах добавлены булевские реквизиты БухгалтескийУчет и Управленческий учет, в зависимости от которых выполняются соответствующие движения. Списание по среднескользящей оценке сделано так, как рекомендовано в соответствующих уроках. Модуль объекта документа Выписка теперь имеет вид:
<code>
Процедура ОбработкаПроведения(Отказ, Режим)
Если УправленческийУчет Тогда
Движения.Взаиморасчеты.Записывать = Истина;
ДвиженияУУ();
КонецЕсли;
Если БухгалтерскийУчет Тогда
Движения.Хозяйственный.Записывать = Истина;
ДвиженияБУ();
КонецЕсли;
КонецПроцедуры
Процедура ДвиженияУУ()
Для Каждого ТекСтрокаПриходРасход Из ПриходРасход Цикл
Если ТекСтрокаПриходРасход.Приход > 0 Тогда
Движение = Движения.Взаиморасчеты.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Контрагент = ТекСтрокаПриходРасход.Контрагент;
Движение.Сумма = ТекСтрокаПриходРасход.Приход;
Движение.ДатаРегистратора = Дата;
Движение.ДатаПлатежа = ТекСтрокаПриходРасход.ДатаПлатежа;
КонецЕсли;
Если ТекСтрокаПриходРасход.Расход > 0 Тогда
Движение = Движения.Взаиморасчеты.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Дата;
Движение.Контрагент = ТекСтрокаПриходРасход.Контрагент;
Движение.Сумма = ТекСтрокаПриходРасход.Расход;
Движение.ДатаРегистратора = Дата;
Движение.ДатаПлатежа = ТекСтрокаПриходРасход.ДатаПлатежа;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура ДвиженияБУ()
Для Каждого ТекСтрокаПриходРасход Из ПриходРасход Цикл
Если ТекСтрокаПриходРасход.Приход > 0 Тогда
Проводка = Движения.Хозяйственный.Добавить();
Проводка.Период = Дата;
Проводка.СчетДт = ПланыСчетов.Основной.Банк;
Проводка.СчетКт = ПланыСчетов.Основной.Покупатели;
Проводка.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Контрагенты] = ТекСтрокаПриходРасход.Контрагент;
Проводка.Сумма = ТекСтрокаПриходРасход.Приход;
КонецЕсли;
Если ТекСтрокаПриходРасход.Расход > 0 Тогда
Проводка = Движения.Хозяйственный.Добавить();
Проводка.Период = Дата;
Проводка.СчетКт = ПланыСчетов.Основной.Банк;
Проводка.СчетДт = ПланыСчетов.Основной.Поставщики;
Проводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Контрагенты] = ТекСтрокаПриходРасход.Контрагент;
Проводка.Сумма = ТекСтрокаПриходРасход.Расход;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
Если ТипЗнч(ДанныеЗаполнения) = Тип(“СправочникСсылка.Контрагенты”) Тогда
Запрос = Новый Запрос;
Запрос.Текст =
“ВЫБРАТЬ
| ХозяйственныйОстатки.Субконто1 КАК Контрагент,
| &ДатаПлатежа КАК ДатаПлатежа,
| ХозяйственныйОстатки.СуммаОстатокДт КАК Приход,
| ХозяйственныйОстатки.СуммаОстатокКт КАК Расход
|ИЗ
| РегистрБухгалтерии.Хозяйственный.Остатки(
| &Период,
| Счет = ЗНАЧЕНИЕ(ПланСчетов.Основной.Поставщики)
| ИЛИ Счет = ЗНАЧЕНИЕ(ПланСчетов.Основной.Покупатели),
| ,
| Субконто1 = &Контрагент) КАК ХозяйственныйОстатки”;
Запрос.УстановитьПараметр(“Контрагент”, ДанныеЗаполнения);
Граница = Новый Граница(ТекущаяДата(),ВидГраницы.Включая);
Запрос.УстановитьПараметр(“Период”, Граница);
Запрос.УстановитьПараметр(“ДатаПлатежа”, ТекущаяДата());
Результат = Запрос.Выполнить();
ПриходРасход.Загрузить(Результат.Выгрузить());
КонецЕсли;
КонецПроцедуры
</code>
В модуле формы документа АктСверкиВзаиморасчетов реализован следующий алгоритм заполнения:
<code>
Процедура ЗаполнитьНаСервере()
Запрос = Новый Запрос;
Запрос.Текст =
“ВЫБРАТЬ
| ХозяйственныйОстаткиИОбороты.Регистратор,
| ХозяйственныйОстаткиИОбороты.СуммаНачальныйОстатокДт КАК НачОстатокДт,
| ХозяйственныйОстаткиИОбороты.СуммаНачальныйОстатокКт КАК НачОстатокКт,
| ХозяйственныйОстаткиИОбороты.СуммаОборотДт КАК УвеличениеДолга,
| ХозяйственныйОстаткиИОбороты.СуммаОборотКт КАК УменьшениеДолга,
| ХозяйственныйОстаткиИОбороты.СуммаКонечныйОстатокДт КАК КонОстатокДт,
| ХозяйственныйОстаткиИОбороты.СуммаКонечныйОстатокКт КАК КонОстатокКт
|ИЗ
| РегистрБухгалтерии.Хозяйственный.ОстаткиИОбороты(
| &ДатаНачала,
| &ДатаОкончания,
| Регистратор,
| ,
| Счет = ЗНАЧЕНИЕ(ПланСчетов.Основной.Покупатели)
| ИЛИ Счет = ЗНАЧЕНИЕ(ПланСчетов.Основной.Поставщики),
| ,
| Субконто1 = &Контрагент) КАК ХозяйственныйОстаткиИОбороты
|ГДЕ
| (НЕ(ХозяйственныйОстаткиИОбороты.СуммаОборотДт = 0
| И ХозяйственныйОстаткиИОбороты.СуммаОборотКт = 0))
|
|УПОРЯДОЧИТЬ ПО
| ХозяйственныйОстаткиИОбороты.Регистратор.Дата”;
Запрос.УстановитьПараметр(“ДатаНачала”, Объект.ДатаНачала);
Запрос.УстановитьПараметр(“ДатаОкончания”, Объект.ДатаОкончания);
Запрос.УстановитьПараметр(“Контрагент”, Объект.Контрагент);
Результат = Запрос.Выполнить();
Выборка = Результат.Выгрузить();
Объект.ОстатокНачДт=Выборка[0].НачОстатокДт;
Объект.ОстатокНачКт=Выборка[0].НачОстатокКт;
Объект.ОстатокКонДт=Выборка[Выборка.Количество()-1].КонОстатокДт;
Объект.ОстатокКонКт=Выборка[Выборка.Количество()-1].КонОстатокКт;
Объект.Взаиморасчеты.Загрузить(Выборка);
Объект.Итого = Выборка.Итог(“УвеличениеДолга”) – Выборка.Итог(“УменьшениеДолга”) ;
КонецПроцедуры // ЗаполнитьНаСервере()
</code>
Печатная форма реализована с помощью конструктора.
Евгений Михайлович, предлагаю доработать конфигурацию для просмотра видеоуроков, включив в область полнотекстового поиска тексты из альбоов схем, куда польхователи могут вносить свои пометки, а затем искать уроки с соответствующими описаниями.
>предлагаю доработать конфигурацию для просмотра видеоуроков
Если я вас понял, то это уже реализовано.
Сейчас есть два поля: содержание слайда и произвольный комментарий.
Оба поля участвуют в полнотекстовом поиске.
Скачайте ред. 1.1 конфигурации.
Здравствуйте, Евгений Михайлович! Прошу прощения, я нашел конфигурацию для просмотра только версии 1.0.11.2. Подскажите, пожалуйста, ссылку на конфигурацию для просмотра видеоуроков версии 1.1. Заранее багодарю.
Доброго дня!
Скажите версию 1.0 вы скачали с сайта сейчас или нашли у себя на диске? Если первое, то скажите ссылку, где лежит старая версия, исправим.
Чтобы скачать новую версию нужно открыть страницу любого блока базового курса. В меню на сайте: Базовый курс – Материалы курса. Далее открываете любую запись, переходите на страницу, где будет ссылка на новую версию конфигурации.
Задание выполнено.
Больших сложностей с этим заданием не было. Но, решалось, почему-то долго :)
Самый сложный участок был там, где нужно списывать номенклатуру в документе реализации. Сложность в том, что по наборам у меня нигде не было количественного учета. Т.е. ни в одном регистре, поэтому было принято решение добавить количественный учет в регистр бухгалтерии. После этого посчитать среднюю цену не составило труда. Проведение по управленческому и бухгалтерскому учету реализовано вызовами соответствующих процедур из события обработки проведения. Все данные получаю запросами за исключением табличной части суммы по табличной части товары для проводки Дт62 Кт 90.01. Эту проводку добавляю к таблице значений, полученной запросом.
Задание выполнено.
В документах поступления/реализации товаров и в Выписке завел булевские флаги УУ и БУ. Переделал проведение с учетом флагов. Поступление услуг на счет 26 и аналитику по контрагентам сделал еще в прошлом задании.
Завел признак количественного учета, в регистре добавился небалансовый ресурс Количество.
При проведении реализации товаров выполняется запрос в котором таблица товаров документа (без услуг) соединяется с таблицей остатков регистра бухгалтерии на момент документа (кол-во и сумма), результат выгружается в табл. значений, после чего обходятся строки этой таблицы, рассчитывается себестоимость (если колич. остаток = 0, то себестоимость тоже = 0). Если обнаруживается ситуация, что остаток меньше списываемого кол-ва, то выдается сообщение и возможно отказ от проведения (зависит от параметров пользователя и режима проведения – с контролем или без).
В документ выписка в табл. часть добавил реквизит Счет, настроил проведение по БУ с учетом этого реквизита. Ввод выписки на основании контрагента проблем не составил, запросом получаются актуальные остатки по счетам 60, 62 после чего добавляются строки в табл. часть соответственно полученным суммам (может добавиться от 0 до 2 строк).
Создал док-т АктСверки, форму, команду формы для заполнения. Само заполнение происходит в контекстной серверной процедуре. В запросе выбираются движения за указанный период по счетам 60, 62 из виртуальной таблицы ДвиженияССубконто отдельно по стороне дебета и по стороне кредита, группируются по регистраторам, затем эти две таблицы объединяются и сортируются. Полученный результат загружается в табл. часть объекта формы.
Печать акта сверки сделал с помощью конструктора печати. В созданную процедуру добавил вывод начального и конечного сальдо (до и после табл. части соответственно). Остатки получал с помощью объектного чтения из регистра бухгалтерии, в структуре отбор по счетам устанавливал через массив.
ДЗ выполнил.
Сначала подумал, что с флагами УУ и БУ все просто: есть флажок – формируем движения, нет флага – нет движений.
Забыл, что при перепроведении документа с другими значениями флажков движения по ненужным регистрам не очищаются!
Пришлось в обработке проведения очищать их вручную в зависимости от установленных флагов.
Организовал возможность ведения количественного учета – добавил ресурс в РБ, обеспечил его заполнение при проведении Поступления. Для расчета себестомости при выбытии делаю левое соединение таб.части документа с таблицей остатков.
Честно говоря, сначала не понимал, почему в оперативном учете когда мы сначала записывали движения документа, а потом смотрели остатки, то чтобы учесть движения текущего документа мы использовали границу (“Граница(МоментВремени(), ВидГраницы.Включая)”), а здесь мы границу не используем – получаем остатки просто на МоментВремени, но движения текущего документа все равно присутсвуют(!!!???), и их надо принудительно очищать перед выполнением запроса.
Попроводил эксперименты, перепровел несколько документов разными датами и разобрался, почему там так, а здесь так!)))
Так что для меня это задание на данный момент одно из самых интересных и познавательных! (ну и задание с учетом наборов тоже – очень сложное и объемное, но очень интересное!!!)
Добавил формирование проводок в документ Выписка: Дт51Кт** – если приход от контрагента, и Дт**Кт51 – если выплата контрагенту. Кор.счет 60 или 62 указывается в таб. части.
При вводе Выписки на основании контрагента использую запрос:
ВЫБРАТЬ
ЕСТЬNULL(ВЗМ_Поставщики.Субконто1, ВЗМ_Покупатели.Субконто1) КАК Контрагент,
ЕСТЬNULL(ВЗМ_Покупатели.СуммаОстатокДт, 0) КАК ДолгПокупателя,
ЕСТЬNULL(ВЗМ_Поставщики.СуммаОстатокКт, 0) КАК ДолгПоставщику
ИЗ
РегистрБухгалтерии.Хозрасчетный.Остатки(, Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.Поставщики), , Субконто1 = &Контрагент) КАК ВЗМ_Поставщики
ПОЛНОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Остатки(, Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.Покупатели), , Субконто1 = &Контрагент) КАК ВЗМ_Покупатели
ПО ВЗМ_Поставщики.Субконто1 = ВЗМ_Покупатели.Субконто1
затем в ОбработкеЗаполнения добавляю строки в таб.часть Оплаты.
Запрос в документе АктСверкиВзаиморасчетов:
ВЫБРАТЬ
ХозрасчетныйОстаткиИОбороты.Регистратор,
ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстаток,
ХозрасчетныйОстаткиИОбороты.СуммаОборотДт КАК УвеличениеДолга,
ХозрасчетныйОстаткиИОбороты.СуммаОборотКт КАК УменьшениеДолга,
ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстаток
ИЗ
РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(
&НачДата,
&КонДата,
Регистратор,
,
Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.Поставщики)
ИЛИ Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.Покупатели),
,
Субконто1 = &Контрагент) КАК ХозрасчетныйОстаткиИОбороты
УПОРЯДОЧИТЬ ПО
ХозрасчетныйОстаткиИОбороты.Период,
ХозрасчетныйОстаткиИОбороты.Регистратор.МоментВремени
Честно говоря, сначала не понимал, почему в оперативном учете когда мы сначала записывали движения документа, а потом смотрели остатки, то чтобы учесть движения текущего документа мы использовали границу («Граница(МоментВремени(), ВидГраницы.Включая)»), а здесь мы границу не используем – получаем остатки просто на МоментВремени, но движения текущего документа все равно присутсвуют(!!!???), и их надо принудительно очищать перед выполнением запроса.
я на этом моменте тоже споткнулся, потом по времени в регистре все стало понятно. но наверное, в курсе будет нелишним вставить объяснение.
Пожелание записали.
Задание выполнено. Непонятный для меня момент, почему документ «Акт сверки взаиморасчетов» по заданию выступает именно как документ, когда он напрашивается быть отчетом.
Что такое акт сверки?
Документ, который подписывается обоими сторонами и имеет юридическую силу.
Теперь представим, что мы реализовали его с помощью отчета.
Печатная форма будет формироваться без проблем, номер тоже можно как-то присваивать.
Но отчет отображает текущее состояние ИБ. Это означает, если в базе изменились документы, картина взаиморасчетов может поменяться. То есть бумажный и подписанный документ не будет соответствовать тому что выдает ИБ в виде отчета. Это не правильно.
Поэтому лучше акт сверки хранить в ИБ, тогда он будет отображать картину взаиморасчетов именно на момент форматирования акта, а не на текущее время.
Кроме того, может потребоваться информация кто, когда, на каком компе сформировал такой-то акт сверки. Имея документ такая информация получается очень просто.
Задание выполнено
1. Для отражения операций в управленческом и/или бухгалтерском учете добавил в документы два реквизита типа Булево. В обработке проведения обрабатываю их след. образом. Проведение документа поступления :
<cod>
Процедура ОбработкаПроведения(Отказ, Режим)
Если УправленческийУчет Тогда
ПроведениеПоРегистрамНакопления();
КонецЕсли;
Если БухгалтерскийУчет Тогда
ПроведениеПоРегистрамБухгалтерии();
КонецЕсли;
КонецПроцедуры
Процедура ОбработкаПроведения(Отказ, Режим) Если УправленческийУчет Тогда ПроведениеПоРегистрамНакопления(); КонецЕсли; Если БухгалтерскийУчет Тогда ПроведениеПоРегистрамБухгалтерии(); КонецЕсли; КонецПроцедуры
</cod>
Код проведения по регистрам накопления я привел в прошлом ДЗ, приведу код проведения по Бухгалтерскому регистру:
<cod>
Процедура ПроведениеПоРегистрамБухгалтерии()
Движения.Управленческий.Записывать = Истина;
Для Каждого ТекСтрокаТовары Из Товары Цикл
Движение = Движения.Управленческий.Добавить();
Движение.Период = Дата;
Движение.СчетКт = ПланыСчетов.ОсновнойПланСчетов.Поставщики;
Движение.СубконтоКт.Контрагенты = Контрагент;
Движение.Сумма = ТекСтрокаТовары.Сумма;
Если ТекСтрокаТовары.Номенклатура.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Услуга Тогда
Движение.СчетДт = ПланыСчетов.ОсновнойПланСчетов.Затраты;
Иначе
Движение.СчетДт = ПланыСчетов.ОсновнойПланСчетов.Товары;
Движение.СубконтоДт.Номенклатура = ТекСтрокаТовары.Номенклатура;
Движение.КоличествоДт = ТекСтрокаТовары.Количество*ТекСтрокаТовары.ЕдиницаИзмерения.Коэффициент;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
</cod>
Аналитический учет организовал добавив субконто Контрагенты в соответ. счета.
2. Для организации списания добавил для регистра бухгалтерии еще один ресурс Количество типа Число и не балансовый. А также в плане счетов добавил ПризнакУчета – Количественный и у ресурса бухгалтерии Количество установил его в сооотв. свойстве.
Приведу код формирования проводок документом расход:
<cod>
Процедура ПроведениеПоРегистрамБухгалтерии(Отказ)
Движения.Управленческий.Очистить();
Движения.Управленческий.Записать();
Движения.Управленческий.Записывать = Истина;
Запрос = Новый Запрос;
Запрос.Текст = “ВЫБРАТЬ
| Товары.Номенклатура,
| Товары.НомерСтроки,
| Товары.Количество,
| Товары.Сумма,
| ЕСТЬNULL(УправленческийОстатки.СуммаОстатокДт, 0) КАК ОстДт,
| ЕСТЬNULL(УправленческийОстатки.КоличествоОстатокДт, 0) КАК КолОстДт
|ИЗ
| (ВЫБРАТЬ
| РеализацияТоваровТовары.Номенклатура КАК Номенклатура,
| МАКСИМУМ(РеализацияТоваровТовары.НомерСтроки) КАК НомерСтроки,
| СУММА(РеализацияТоваровТовары.Количество * РеализацияТоваровТовары.ЕдиницаИзмерения.Коэффициент) КАК Количество,
| СУММА(РеализацияТоваровТовары.Сумма) КАК Сумма
| ИЗ
| Документ.РеализацияТоваров.Товары КАК РеализацияТоваровТовары
| ГДЕ
| РеализацияТоваровТовары.Ссылка = &Ссылка
|
| СГРУППИРОВАТЬ ПО
| РеализацияТоваровТовары.Номенклатура) КАК Товары
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Управленческий.Остатки(
| &Момент,
| Счет = ЗНАЧЕНИЕ(ПланСчетов.ОсновнойПланСчетов.Товары),
| ,
| Субконто1 В
| (ВЫБРАТЬ РАЗЛИЧНЫЕ
| РеализацияТоваровТовары.Номенклатура
| ИЗ
| Документ.РеализацияТоваров.Товары КАК РеализацияТоваровТовары
| ГДЕ
| РеализацияТоваровТовары.Ссылка = &Ссылка)) КАК УправленческийОстатки
| ПО Товары.Номенклатура = УправленческийОстатки.Субконто1”;
Запрос.УстановитьПараметр(“Момент”, МоментВремени());
Запрос.УстановитьПараметр(“Ссылка”, Ссылка);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Нехватка = Выборка.Количество – Выборка.КолОстДт;
Если Нехватка > 0 Тогда
Отказ = Истина;
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = “Товара ” + Выборка.Номенклатура+ ” не хватает в количестве ” + Нехватка;
Сообщение.Поле = “Товары[“+(Выборка.НомерСтроки-1)+”].Количество”;
Сообщение.УстановитьДанные(ЭтотОбъект);
Сообщение.Сообщить();
КонецЕсли;
Если Отказ Тогда
Продолжить;
КонецЕсли;
Проводка = Движения.Управленческий.Добавить();
Проводка.Период = Дата;
Проводка.СчетКт = ПланыСчетов.ОсновнойПланСчетов.Товары;
Проводка.СубконтоКт.Номенклатура = Выборка.Номенклатура;
Проводка.КоличествоКт = Выборка.Количество;
Проводка.СчетДт = ПланыСчетов.ОсновнойПланСчетов.Себестоимость;
Если Выборка.КолОстДт<>0 Тогда
Проводка.Сумма = Выборка.Количество*Выборка.ОстДт/Выборка.КолОстДт;
Иначе
Проводка.Сумма = 0;
КонецЕсли;
КонецЦикла;
Проводка = Движения.Управленческий.Добавить();
Проводка.Период = Дата;
Проводка.СчетКт = ПланыСчетов.ОсновнойПланСчетов.Выручка;
Проводка.СчетДт = ПланыСчетов.ОсновнойПланСчетов.Покупатели;
Проводка.СубконтоДт.Контрагенты = Контрагент;
Проводка.Сумма = СуммаДокумента;
КонецПроцедуры
</cod>
Вначале мы очищаем регистр, потом запросом выбираем из таб. части номенклатуру с количеством и суммой и присоединяем к этим данным количественный и суммовой остаток по данной номенклатуре на дату документа. Далее обхожу полученную выборку и проверяю на наличие остатков, если достаточно, то заполняю записи регистра расчитывая попутно и стоимость.
3. Для документа Выписка описал след. обработку проведения для регистра бухгалтерии:
<cod>
Процедура ПроведениеПоРегистрамБухгалтерии()
Движения.Управленческий.Записывать = Истина;
Для каждого СтрокаТЧ Из Взаиморасчеты Цикл
Проводка = Движения.Управленческий.Добавить();
Проводка.Период = Дата;
Разность = СтрокаТЧ.СуммаПриход – СтрокаТЧ.СуммаРасход;
Проводка.Сумма = ?(Разность<0, -Разность, Разность);
Если СтрокаТЧ.Счет = ПланыСчетов.ОсновнойПланСчетов.Покупатели Тогда
Проводка.СчетДт = ПланыСчетов.ОсновнойПланСчетов.Банк;
Проводка.СчетКт = СтрокаТЧ.Счет;
Проводка.СубконтоКт.Контрагенты = СтрокаТЧ.Контрагент;
ИначеЕсли СтрокаТЧ.Счет = ПланыСчетов.ОсновнойПланСчетов.Поставщики Тогда
Проводка.СчетКт = ПланыСчетов.ОсновнойПланСчетов.Банк;
Проводка.СчетДт = СтрокаТЧ.Счет;
Проводка.СубконтоДт.Контрагенты = СтрокаТЧ.Контрагент;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
</cod>
Выписку я тоже сделал отмечаемой как управленческим и/или бухгалтерским учетом.
Обработку заполнения на основании Контрагента я выполнил след. образом:
<cod>
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
Если ТипЗнч(ДанныеЗаполнения) = Тип(“СправочникСсылка.Контрагенты”) Тогда
Запрос = Новый Запрос;
Запрос.Текст = “ВЫБРАТЬ
| УправленческийОстатки.Субконто1 КАК Контрагент,
| УправленческийОстатки.СуммаОстатокДт КАК СуммаПриход,
| УправленческийОстатки.СуммаОстатокКт КАК СуммаРасход,
| УправленческийОстатки.Счет
|ИЗ
| РегистрБухгалтерии.Управленческий.Остатки(, Счет В (&МассивСчетов), , Субконто1 = &Контрагент) КАК УправленческийОстатки”;
Запрос.УстановитьПараметр(“Контрагент”, ДанныеЗаполнения);
МассивСчетов = Новый Массив;
МассивСчетов.Добавить(ПланыСчетов.ОсновнойПланСчетов.Покупатели);
МассивСчетов.Добавить(ПланыСчетов.ОсновнойПланСчетов.Поставщики);
Запрос.УстановитьПараметр(“МассивСчетов”, МассивСчетов);
Взаиморасчеты.Загрузить(Запрос.Выполнить().Выгрузить());
КонецЕсли;
КонецПроцедуры
</cod>
Расчитываю остатки по счетам и в зависимости от долга отношу его на расход или приход долга. Полученный результат я загружаю в табличную часть документа.
4. Создал документ Акт сверки с заданными реквизитами. Обработчик кнопки Заполнить описал след. образом:
<cod>
&НаКлиенте
Процедура Заполнить(Команда)
ЗаполнитьСервер();
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьСервер()
Запрос = Новый Запрос;
Запрос.Текст =
“ВЫБРАТЬ
| УправленческийОбороты.Регистратор КАК Документ,
| УправленческийОбороты.СуммаОборотДт КАК УвеличениеДолга,
| УправленческийОбороты.СуммаОборотКт КАК УменьшениеДолга
|ИЗ
| РегистрБухгалтерии.Управленческий.Обороты(
| &ДатаНачала,
| &ДатаОкончания,
| Регистратор,
| Счет = ЗНАЧЕНИЕ(ПланСчетов.ОсновнойПланСчетов.Покупатели)
| ИЛИ Счет = ЗНАЧЕНИЕ(ПланСчетов.ОсновнойПланСчетов.Поставщики),
| ,
| Субконто1 = &Контрагент,
| ,
| ) КАК УправленческийОбороты
|
|УПОРЯДОЧИТЬ ПО
| УправленческийОбороты.Регистратор.Дата
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| УправленческийОстаткиИОбороты.СуммаНачальныйОстаток ДолгНаНачало,
| УправленческийОстаткиИОбороты.СуммаКонечныйОстаток ДолгНаКонец
|ИЗ
| РегистрБухгалтерии.Управленческий.ОстаткиИОбороты(
| &ДатаНачала,
| &ДатаОкончания,
| ,
| ДвиженияИГраницыПериода,
| Счет = ЗНАЧЕНИЕ(ПланСчетов.ОсновнойПланСчетов.Покупатели)
| ИЛИ Счет = ЗНАЧЕНИЕ(ПланСчетов.ОсновнойПланСчетов.Поставщики),
| ,
| Субконто1 = &Контрагент) КАК УправленческийОстаткиИОбороты”;
Запрос.УстановитьПараметр(“ДатаНачала”, НачалоДня(Объект.ДатаНачала));
Запрос.УстановитьПараметр(“ДатаОкончания”, КонецДня(Объект.ДатаОкончания));
Запрос.УстановитьПараметр(“Контрагент”, Объект.Контрагент);
Результат = Запрос.ВыполнитьПакет();
Объект.Взаимоасчеты.Загрузить(Результат[0].Выгрузить());
Выборка = Результат[1].Выбрать();
Если Выборка.Следующий() Тогда
Объект.ДолгНаНачало = Выборка.ДолгНаНачало;
Объект.ДолгНаКонец = Выборка.ДолгНаКонец;
Иначе
Объект.ДолгНаНачало = 0;
Объект.ДолгНаКонец = 0;
КонецЕсли;
КонецПроцедуры
</cod>
Выполняю пакет запроса, в первом беру обороты, во втором беру остатки (но из вирт. таблицы ост. и обороты, так как можно однойстрокой получить ост. на начало и на конец.) и заполняю реквизиты документа.
Создал печатную форму с помощью конструктора.
Задание выполнил. Трудности возникли с Заполнением выписки на основании справочника Контрагентов и Актом сверки, все остальное на занятиях было разобрано. При заполнении выписки не знал как передать в запрос отбор по сразу по 2м счетам 60 и 62, сделал через метод Остатки Бухгалтерского регистра, обратился дважды сначала по 60 потом по 62. При заполнении Акта сверки сделал запрос к регистру ОстаткиИОбороты, в таб.часть документа включил только обороты в разрезе дней и Регистратора, создал перечисление ВидДокумента (Оплата,Отгрузка,Поставка,Операция), при работе с детальными записями вставляю в строки АктаСверки вместо Регистратора соответствующее ему перечисление, сальдо начальные и конечные вынес в реквизиты документа, пришлось повозиться, отделяя уже при работе с детальными записями запроса сальдовки от оборотов, код получился наверняка не оптимальный но рабочий. Печатную форму изготовил конструктором, потом немного подправил.
>не знал как передать в запрос отбор по сразу по 2м счетам
В параметре виртуальной таблицы “Условие счета” можно было написать: Счет В (&МассивСчетов). Либо можно было использовать логический оператор ИЛИ, либо вложенный запрос. Есть и еще варианты :)
Задание выполнено на 70%. :) А вот правильность, наверное, на 50%. Почему так? Потому что я, кажется, запутался в проводках, что куда чего должно идти и куда подставляться. :) Если это не прописано конкретно в задании. :) Т.е. проводки-то прописаны, но вот правильно ли?…. Бух.учет всегда был для меня темным лесом.
Ну. собственно….. Флажки созданы в документах. При проведении проверяется установка нужного флажка и в зависимости о вида флажка выполняются движения. Хотя в задании не сказано, что нужно запрещать проведение, если не установлен ни один флажок, я у себя реализовал такую проверку. Какой смысл тогда в этом “проведенном” документе? Флажки сделал у поступления, реализации и авансового. Для остальных не имеет смысла.
Проводку по услугам сделал.
Аналитический учет взаиморасчетов реализовал, указав для 60 и 62 счета субконто “Контрагенты”
Со списанием не получилось, т.к. если я правильно понимаю, нужно организовать количественный учет для расчета себестоимости. Но вот здесь и началась путаница в голове. В УУ намного проще (как мне кажется).
Проводки по взаиморасчетам со счетом 51 сделаны (если я их правильно написал :) ) В документе выбор счета ограничил только счетами 62 и 60. Ввод на основании контрагента тоже сделал. Заполнение вроде правильное, но не уверен.
Акт сверки создан. Заполнение происходит. Опять же, не совсем уверен, правильно ли поставил суммы (в нужную ли колонку). Для документа запрещено проведение. Печатная форма сделана.
P.S. Как видно, основная путаница возникла в определении долг или нет, оплачено или нет, и т.п. Т.е. в определении места. Причем, я не совсем понимаю, в каком случае получается наш долг, в каком долг контрагента. Учитывая, что контрагент может переплатить нам или мы контрагенту. Если по регистру накопления видно, где приход, а где расход, и можно элементарно сложить и вычесть, то здесь у меня непонимание. Надеюсь, станет понятнее при просмотре решения.
Жеееесть!!! Я это сделал. Реальный вынос мозга. Пришлось после написания комментария поставить себе типовую чистую Бухгалтерию и смотреть уже на ней, какие проводки формируются и как. Вроде начало немного доходить, что и как.
Сейчас задание выполнено полностью на 100% :)))
Отлично! :)
Да, регистр бухгалтерии сложнее в терминологии и механике работы.
В отличие от регистров накопления нужно учитывать вид счета (активный, пассивный, активно-пассивный).
Ну а остаток можно получить из виртуальной таблицы Остатки.
В частности для 60 и 62 поле СуммаОстаток будет содержать положительную величину, если контрагент нам должен и отрицательную в противном случае.
Трудности возникли по пониманию системы дебета-кредита, по запросам к регистрам бухгалтерии, поэтому о них подробнее.
Получение остатков товаров для списания по реализации:
ВЫБРАТЬ
РеализацияТовары.Номенклатура,
СУММА(РеализацияТовары.Количество) КАК Количество,
СУММА(РегистрУправленческийОстатки.СуммаОстатокДт) КАК СуммаОстаток,
СУММА(РегистрУправленческийОстатки.КоличествоОстатокДт) КАК КоличествоОстаток
ИЗ
Документ.Реализация.Товары КАК РеализацияТовары
ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.РегистрУправленческий.Остатки(
&МоментВремени,
Счет = ЗНАЧЕНИЕ(ПланСчетов.Управленческий.Товары),
,
Субконто1 В
(ВЫБРАТЬ
РеализацияТовары.Номенклатура
ИЗ
Документ.Реализация.Товары КАК РеализацияТовары
ГДЕ
РеализацияТовары.Ссылка = &Ссылка
СГРУППИРОВАТЬ ПО
РеализацияТовары.Номенклатура)) КАК РегистрУправленческийОстатки
ПО РеализацияТовары.Номенклатура = РегистрУправленческийОстатки.Субконто1
ГДЕ
РеализацияТовары.Ссылка = &Ссылка
СГРУППИРОВАТЬ ПО
РеализацияТовары.Номенклатура
По документу “Выписка” при формировании движений по регистру бухгалтерии не сразу разобралась с дебетом-кредитом, надеюсь, так правильно:
Если ТекСтрокаОплата.СуммаПриход<>0 тогда
Движение.Сумма=ТекСтрокаОплата.СуммаПриход;
Движение.СчетДт=ПланыСчетов.Управленческий.Банк;
Движение.СчетКт=ТекСтрокаОплата.Счет;
Движение.СубконтоКт.Контрагенты=ТекСтрокаОплата.Контрагент;
Иначе
Движение.Сумма=ТекСтрокаОплата.СуммаРасход;
Движение.СчетКт=ПланыСчетов.Управленческий.Банк;
Движение.СчетДт=ТекСтрокаОплата.Счет;
Движение.СубконтоДт.Контрагенты=ТекСтрокаОплата.Контрагент;
КонецЕсли;
По вводу выписки на основании – я не совсем поняла, нужно ли рассчитывать долг отдельно по каждому счету (62 и 60) или все вместе, но раз уж это бухучет, то посчитала раздельно:
ВЫБРАТЬ
РегистрУправленческийОстатки.Субконто1 КАК Контрагент,
РегистрУправленческийОстатки.Счет,
0 КАК СуммаПриход,
РегистрУправленческийОстатки.СуммаОстатокКт КАК СуммаРасход
ИЗ
РегистрБухгалтерии.РегистрУправленческий.Остатки(&МоментВремени, Счет = ЗНАЧЕНИЕ(ПланСчетов.Управленческий.Поставщики), , Субконто1 = &Контрагент) КАК РегистрУправленческийОстатки
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
РегистрУправленческийОстатки.Субконто1,
РегистрУправленческийОстатки.Счет,
РегистрУправленческийОстатки.СуммаОстатокДт,
0
ИЗ
РегистрБухгалтерии.РегистрУправленческий.Остатки(&МоментВремени, Счет = ЗНАЧЕНИЕ(ПланСчетов.Управленческий.Покупатели), , Субконто1 = &Контрагент) КАК РегистрУправленческийОстатки
Запрос для заполнения табличной части «Акта сверки взаиморасчетов»:
ВЫБРАТЬ
РегистрУправленческийОбороты.Регистратор КАК Документ,
РегистрУправленческийОбороты.СуммаОборотДт КАК УвеличениеДолга,
РегистрУправленческийОбороты.СуммаОборотКт КАК УменьшениеДолга
ИЗ
РегистрБухгалтерии.РегистрУправленческий.Обороты(
&НачалоПериода,
&КонецПериода,
Регистратор,
,
ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконто.Контрагенты),
Субконто1 = &Контрагент
ИЛИ КорСубконто1 = &Контрагент,
,
) КАК РегистрУправленческийОбороты
При выводе печатной формы акта долги получаем после того, как получили данные выборки из документа:
ВЫБРАТЬ
ОстаткиНаНачалоПериода.СуммаОстаток КАК ДолгНаНачало,
ОстаткиНаКонецПериода.СуммаОстаток КАК ДолгНаКонец
ИЗ
РегистрБухгалтерии.РегистрУправленческий.Остатки(&НачалоПериода, , ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконто.Контрагенты), Субконто1 = &Контрагент) КАК ОстаткиНаНачалоПериода,
РегистрБухгалтерии.РегистрУправленческий.Остатки(&КонецПериода, , ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконто.Контрагенты), Субконто1 = &Контрагент) КАК ОстаткиНаКонецПериода
Параметры устанавливаем из выборки документа.
Задание выполнено. 90%
Возникли вопросы по последней части задания.
1 Для разделения Поставщиков и покупателей использовал ОборотДт, ОборотКт. Но думаю не учел других возможных ситуаций….
2 В том числе по формированию печатной форме
>Но думаю не учел других возможных ситуаций…
А ситуации могут быть такими: возврат товаров от покупателя или возврат товаров поставщику.