Базовый курс. Домашнее задание №11

Второе задание 3-го блока.

Для выполнения рекомендуется изучить следующие главы 3-го блока.

Глава 5. Автоматизация аналитического учета.
Глава 6. Автоматизация количественного учета.
Глава 7. Запросы. Чтение данных из регистра бухгалтерии запросом к базе данных.

К сожалению, у Вас недостаточно прав для просмотра этой записи. Если Вы еще не залогинены на сайте — залогиньтесь. Если Вы оплачивали курс, у Вас активирован токен доступа, Вы залогинены, но Вы видите эту запись — напишите нам на e-mail поддержки.

комментарий 71 на “Базовый курс. Домашнее задание №11”

  1. Еще вдогонку за предыдущим комментарием (продолжил изыскания).

    Я попробовал выполнить подобные действия в базе типовой конфигурации, например УПП. Задал условие:
    <code>
    СубконтоДт3 = &Статья или СубконтоКт1 = &Статья
    </code>
    – где в параметр подставляется статья затрат. Все это для того, чтобы поймать тот случай, когда на счете 20 есть 3-е субконто, а на корсчете – нет. Оказалось – вернулись все проводки. Это означает, что мое предположение про возврат ЛОЖЬ в случае, когда встречается Null – неверно. Т.е. при попадании на выбранную статью работает так:
    СубконтоДт3 – возвращает Null,
    СубконтоДт3 = &Статья – возвращает ЛОЖЬ,
    СубконтоДт3 = &Статья или СубконтоКт1 = &Статья – возвращает ИСТИНА.

    Долго не мог понять, чем же этот случай (с УПП) отличается от случая с учебной базой. Наконец, попробовал ещё один вариант – организовал поиск проводки:
    Дт 94 Кт 10, &Материал
    – и вот в этом случае условие через ИЛИ не возвращает нужную проводку.

    Таким образом, обнаруживается, что при использовании условия через ИЛИ нужная проводка не возвращается только в том случае, когда у корсчета вообще отсутствует аналитика по субконто.
    Можно ли рационально объяснить такое поведение, или это скорее недочет платформы?

    • Отличное исследование. Спасибо.
      Очевидно – это недочет платформы.

  2. Вдогонку за предыдущим комментарием.
    Возникает желание вместо использования ОБЪЕДИНЕНИЕ воспользоваться в параметре “Условие” виртуальной таблицы функцией IsNull(), однако вот такой запрос:
     
    <code>
    ВЫБРАТЬ
    РегистрБУДвиженияССубконто.Регистратор КАК Документ,
    РегистрБУДвиженияССубконто.СчетДт,
    РегистрБУДвиженияССубконто.СчетКт,
    РегистрБУДвиженияССубконто.Сумма
    ИЗ
    РегистрБухгалтерии.РегистрБУ.ДвиженияССубконто(
    &ДатаНачала,
    &ДатаОкончания,
    Активность
    И (
    ЕСТЬNULL(СубконтоДт1, ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)) = &Контрагент
    ИЛИ
    ЕСТЬNULL(СубконтоКт1, ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)) = &Контрагент),
    ,
    ) КАК РегистрБУДвиженияССубконто

    </code>
     
    – точно так же не выбирает нужные проводки. Я пробовал проверять на Null также и ВидСубконтоДт (используя ВЫБОР) – все равно не берет. Причина такого поведения мне уже не ясна.
     
    Однако же если выполнить вот такой логически правильный запрос:
     
    <code>
    ВЫБРАТЬ
    РегистрБУДвиженияССубконто.Регистратор КАК Документ,
    РегистрБУДвиженияССубконто.СчетДт,
    РегистрБУДвиженияССубконто.СчетКт,
    РегистрБУДвиженияССубконто.Сумма
    ИЗ
    РегистрБухгалтерии.РегистрБУ.ДвиженияССубконто(&ДатаНачала, &ДатаОкончания, Активность, , ) КАК РегистрБУДвиженияССубконто
    ГДЕ
    (ЕСТЬNULL(РегистрБУДвиженияССубконто.СубконтоДт1, ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)) = &Контрагент
    ИЛИ ЕСТЬNULL(РегистрБУДвиженияССубконто.СубконтоКт1, ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)) = &Контрагент)
    </code>
     
    – то нужные проводки выбираются. К сожалению, понятно, что  использовать такой запрос неэффективно.
    Все-таки, есть ли возможность извлечь нужные проводки, не прибегая к объединению? Может я что-то не так написал в параметре “Условие” виртуальной таблицы, и есть вариант, который сработает?

    • Есть вариант накладывать условие не на СубконтоДт1 и СубконтоКт1, а просто на Субконто1. Должно сработать.

  3. В процессе выполнения задания попал на упомянутую особенность с условием в виртуальной таблице ДвиженияССубконто:

    <code>
    СубконтоДт1 = &Контрагент или СубконтоКт1 = &Контрагент
    </code>

    Долго пытался понять, в чем дело. Ведь оказалось, что в некоторых случаях подобное условие срабатывает нормально, а в других случаях (как в нашем ДЗ) – выдает пустой результат.
    Что интересно, если в списке регистра бухгалтерии (даже в пользовательском режиме) вызвать настройку списка и установить отбор с аналогичным условием, то результат получится такой же (чего вообще-то и следовало ожидать).

    Удалось несколько продвинуться в результате следующего наблюдения: смотрим движения по регистру бухгалтерии документа “Поступление товаров”, в котором в ТЧ есть также и услуги. Если устанавливаем отбор только по СубконтоКт1 = &Контрагент (где &Контрагент – контрагент документа), то видим все проводки. Если же добавляем вторую часть условия через ИЛИ, то проводка с услугами пропадает.

    Чем же отличается проводка с услугами от проводки по товарам? – А тем, что в проводке с услугами СчетДт – это затраты (26) – не имеет
    субконто. То же самое мы имели в проводках выписки со счетом 51.

    Дальше все объясняется просто. Если у счета нет субконто (в данном случае 1-го), то СубконтоДт1/СубконтоКт1 (то, которого нет) в запросе означает NULL, следовательно любая цепочка логических операторов вернет ЛОЖЬ.

    Таким образом, здесь мы имеем дело с правильным поведением платформы.

    • Спасибо за интересное расследование!

  4. Задание выполнил, трудностей не возникло за исключением непоняток с условием в виртуальной таблице ДвиженияССубконто(, &ДатаОкончания, СубконтоДт1 = &Контрагент или СубконтоКт1 = &Контрагент ) потом посмотрел Ваше решение и понял что такова особенность платформы.

  5. iporozhnyakov 19.01.2011 в 17:19

    Добавил виды учета в документах.
    Организовал проведение документов по видам учета.
    Расчет себестоимости реализовал по аналогии с примером из материала курса.

  6. Задание выполнено. Расчет себестоимости сделала по аналогии с видеоуроком. Заполнение выписки запросом к таблице остатков регистра бухгалтерии.
    Заполнение акта взаиморасчетов запросом к таблице остатки и обороты, в табличную часть документа добавила начальный и конечный остаток, чтобы упростить формирование печатной формы. Ее сделала конструктором.
    Оптимальное решение посмотрю :)
     

  7. Вопрос не по теме. Существует ли возможность обратиться напряму к sql, минуя платформу 1с? В 7-ке я эт легко делал, при этом запросы были к удаленным базам. 8-ка при сом соединении умирает на запуске платформы. Задача у меня забрать справочники контрагентов, договоров и расчетных счетов для казначейства управляющей компании. вот думаю как реализовать.

    • Можно использовать COM-объект ADODB.Connection, и выполнять запросы к любым базам MS SQL.

      • а парсеров нету?

        • Полагаю, что есть.
          Но что-то конкретное порекомендовать не могу. Можно поискать на infostart.

  8. Выполнил задание. Но не совсем понял почему акт сверки – документ, в 7-ке всегда вроде был отчет.

    • Акт сверки фиксирует состояние расчетов на момент времени. Недопустимо, чтобы он был подписан сторонами, а потом “самопроизвольно” поменялся.
      Такое возможно при использовании отчета, и при работе задним числом.

  9. Антон К. 10.01.2011 в 21:59

    Доброго времени суток, задание выполнил. Трудностей не возникло. Теперь буду смотреть опубликованное решение данного задания.

  10. MashkaRomashkina 09.01.2011 в 23:26

    Задание выполнила. Основное:
    В документы добавила флаги УУ и БУ, изменила процедуры проведения. В начале процедуры очищаю наборы записей.
    При проведении Приходной добавила проведение услуг. Запросом по табличной части определяю сумму Номенклатуры, у которой ВидНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ВидыНоменклатуры.Услуга).
    Для организации взаиморасчетов добавила вид субконто Контрагенты в ПВХ, эту характеристику добавила в виды субконто счетов взаиморасчетов, добавила проводку по этим счетам.
    Добавила количественный учет в признаки учета и в ресурс количество в регистре бухгалтерии.
    В документе реализации запросом получаю остатки номенклатуры на счете учета, определяю стоимость и делаю соответствующие проводки.
    Для заполнения Выписки указываю, что Выписка вводится на основании справочника Контрагенты и в процедуре ОбработкаЗаполения() запросом к виртуальной таблице Остатки регистра бухгалтерии получаю остатки по счетам взаиморасчетов по выбранному контрагенту, загружаю их в табличную часть документа.
    Добавила документ Акт сверки взаиморасчетов.
    Табличную часть заполняю с помощью запроса к виртуальной таблице ОстаткиИОбороты.
    Печатную форму создала конструктором.

  11. Здравствуйте:-) ДЗ №11 выполнила.

    При проведении документа “Поступление товаров” опробовала условные выражения в запросе –  с их помощью в зависимости от вида номенклатуры задавала счет и субконто.

    Списание себестоимости в документе “Реализация товаров” сделала как в уроках.

    При заполнении документа “Выписка” на основании контрагента в первый раз “осознанно” задала параметры в запросе – счета и субконто:-)

    Для заполнения табличной части документа “Акт сверки взаиморасчетов” использовала виртуальную таблицу ОстаткиИОбороты регистра Взаиморасчеты.

    Вот такие мои достижения:-)

    • Достижения хорошие :)
      >Для заполнения табличной части документа «Акт сверки взаиморасчетов» использовала виртуальную таблицу ОстаткиИОбороты
      Посмотрите решение, такой подход не является оптимальным.

      • >Посмотрите решение
        Обязательно смотрю! Просто сначала, даже если уже есть эталонное решение, решаю сама – чтобы потом в полной мере оценить оптимальный подход:-)

  12. Задание сделал.
    Сложностей в реализации не испытал. Единственный момент заставивший призадуматься – реализация документа Акт сверки взаиморасчетов. Пришлось пересмотреть главу 7 по использованию различных ВТ регистра бухгалтерии. В результате принял такое решение: все данные и по остаткам (потребуются для вывода печ. формы) и по оборотам необходимо получить одним запросом. Поэтому использовал ВТ ОстаткиИОбороты. Также создал реквизиты документа ДолгНаНачало и ДолгНаКонец, в которые записываю полученные запросом остатки, что в принципе необходимо для обеспечения устойчивости данных (вывод печатной формы должен опираться только на реквизиты документа). Процедура получилась такая:
    <code>
    &НаСервере
    Процедура ЗаполнитьТабличнуюЧастьСервер()

    Запрос = Новый Запрос;
    Запрос.Текст =
    “ВЫБРАТЬ
    | ХозрасчетныйОстаткиИОбороты.Регистратор КАК Документ,
    | ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстаток КАК НачальныйОстаток,
    | ХозрасчетныйОстаткиИОбороты.СуммаОборотДт КАК УвеличениеДолга,
    | ХозрасчетныйОстаткиИОбороты.СуммаОборотКт КАК УменьшениеДолга,
    | ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстаток КАК КонечныйОстаток
    |ИЗ
    | РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(
    | &НачалоПериода,
    | &КонецПериода,
    | Регистратор,
    | Движения,
    | Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.Поставщики)
    | ИЛИ Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.Покупатели),
    | ,
    | Субконто1 = &Контрагент) КАК ХозрасчетныйОстаткиИОбороты”;
    Запрос.УстановитьПараметр(“Контрагент”, Объект.Контрагент);
    Запрос.УстановитьПараметр(“НачалоПериода”, Объект.НачалоПериода);
    Запрос.УстановитьПараметр(“КонецПериода”, Объект.ОкончаниеПериода);

    Результат = Запрос.Выполнить();
    Если Результат.Пустой() Тогда
    Возврат;
    КонецЕсли;

    ТЧ = Результат.Выгрузить();

    Объект.ДолгНаНачало = ТЧ[0].НачальныйОстаток;
    Объект.ДолгНаКонец  = ТЧ[ТЧ.Количество() – 1].КонечныйОстаток;
    Объект.Сверка.Загрузить(ТЧ);
    КонецПроцедуры
    &НаСервереПроцедура ЗаполнитьТабличнуюЧастьСервер() Запрос = Новый Запрос; Запрос.Текст =  “ВЫБРАТЬ | ХозрасчетныйОстаткиИОбороты.Регистратор КАК Документ, | ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстаток КАК НачальныйОстаток, | ХозрасчетныйОстаткиИОбороты.СуммаОборотДт КАК УвеличениеДолга, | ХозрасчетныйОстаткиИОбороты.СуммаОборотКт КАК УменьшениеДолга, | ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстаток КАК КонечныйОстаток |ИЗ | РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты( | &НачалоПериода, | &КонецПериода, | Регистратор, | Движения, | Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.Поставщики) | ИЛИ Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.Покупатели), | , | Субконто1 = &Контрагент) КАК ХозрасчетныйОстаткиИОбороты”;
    Запрос.УстановитьПараметр(“Контрагент”, Объект.Контрагент); Запрос.УстановитьПараметр(“НачалоПериода”, Объект.НачалоПериода);    Запрос.УстановитьПараметр(“КонецПериода”, Объект.ОкончаниеПериода); Результат = Запрос.Выполнить();
    Если Результат.Пустой() Тогда Возврат; КонецЕсли; ТЧ = Результат.Выгрузить(); Объект.ДолгНаНачало = ТЧ[0].НачальныйОстаток; Объект.ДолгНаКонец  = ТЧ[ТЧ.Количество() – 1].КонечныйОстаток;
    Объект.Сверка.Загрузить(ТЧ);
    КонецПроцедуры</code>
    не исключаю что у этого решения есть свои недостатки, ваш вариант пока не смотрел. Печатная форма акта сверки создалась конструктором печати в пару кликов мышкой, опять же ввиду вышеуказанной реализации, т.к. все данные уже есть в документе.

  13. Задание выполнил. Акт сверки реализовал по аналогии акта в БП.

  14. Задание выполнил, помогло решение преподавателя.
    С запросами у меня проблемы. Стараюсь, будет лучше.
     

  15. comradeegor 05.01.2011 в 21:43

    Задание выполнено, принципиальных сложностей не было.
    Создал количественный признак учёта для плана счетов “Управленческий” и соответствующий ресурс для регистра бухгалтерии. Аналитический учёт для предопределённых счетов делал с помощью предопределённых субконто.
    Не понял как нужно посчитать себестоимость – вроде средневзвешенная и в течение месяца, но по описанию – средняя скользящая. Делал так же, как в уроках – считал остатки по сумме и по количеству на момент времени докумета, делил остаток по сумме на остаток по количеству и умножал на количество в документе. Не понимаю теперь, как такой метод называется – скользящий же (или всё-таки взвешенный)?

    С проведением выписки ничего вроде сложного.
    1. Покупатель должен нам: остаток по дт на 62 счете,
    2. мы должны поставщику: остаток по кт на 60 счете.

    1 закрывается проводкой 51/62
    2 закрывается проводкой 60/51

    В “АктеСверки” в шапке создал 2 реквизита – 
    ДолгНаНачало и ДолгНаКонец. ДолгНаНачало заполняется из виртуальной таблицы РБ Остатки по счетам 60 и 62. Из остатка по Дт вычитается остаток по Кт – эту сумму контрагент должен нам на начало периода.
    Увеличения/уменьшения долга беру из таблицы РБ Обороты с детализацией по регистратору. СуммаОборотДт – увеличение долга, СуммаОборотКт – уменьшение долга.
    ДолгНаКонец инициализируется ДолгомНаНачало, далее в цикле ДолгНаКонец = ДолгНаКонец +  СуммаОборотДт – СуммаОборотКт.
    Печатная форма сгенерировалась автоматически.

    • comradeegor 05.01.2011 в 21:50

      Не понимаю правда, почему вы в этом курсе не затронули временные таблицы. С ними проведение реализации писать гораздо проще и нагляднее. Табличная часть сворачивается во временную таблицу ТЧ. Потом для виртуальной таблицы регистра условие для субконто я вообще пишу от руки: Субконто1 В (ВЫБРАТЬ ТЧ.Номенклатура ИЗ ТЧ).
      Ну да вам виднее :)
      Я правда вообще не понимаю, как подобное без них писать, уже другие варианты как-то плохо воспринимаю.

      • Изучение в курсе идет последовательное.
        Вначале нужно научиться писать и читать вложенные запросы.
        Ну а в продвинутом мы говорим об оптимизации запросов, в том числе об использовании временных таблиц.

    • >средняя скользящая
      Все-таки, нужна средняя скользящая. Текст задания поправил.

  16. Задание выполнено. Возникли небольшие вопросы по реализации документа Акт сверки, но после просмотра решения все понятно.

  17. Извиняюсь заранее, вчера выкладывал ответ но почему то его нет.

    • А ведь вчерашний отчет прошел. См. комментарии к текущей записи.

  18. Задание выполнил. Создал флаги проведения по управленческому учету и по бухгалтерскому. Основная проблема которая встала передо мной была в документе реализации и заключалась в том, что я так и не понял как мне сделать получение данных для бухгалтерского и оперативного учета оптимальным. Строить бухгалтерские проводки на основании данных из регистров накопления я не могу так как возможно этих данных нет по бухгалтерскому учету. Строить “мегазапрос” который получал бы данные и по опер и по бухгалтерскому учету посчитал ненужным из-за его громоздкости , но может тут как раз и не прав). В результате сделал двойное обращение к базе данных (2 запроса). Если  оба флага установлены то сначала получаю данные из регистров накопления , а  затем из регистров бухгалтерии. Может и не правильно, буду ждать видео с решением данной задачи. Ну кроме этого доделал немного регистр бухгалтерии и план счетов, чтобы можно было бы вести количественный учет на выбранных счетах, а также добавил аналитику. Доделал модули проведения в документах мПоступленияТоваров, мРеализацияТоваров, Выписка. Создал документ АктСверки. Данный документ заполняю на основании РегистраБухгалтерии. В нем кстати также для получения остатков на начало и конец периода 2 раза использовал запрос к виртуальной таблице остатков,  вместо использования громоздкой таблицы ОстаткиИОбороты (тоже как то неправильно, буду ждать решение).
    Хотел бы спросить не по теме данного задания. Пытаюсь сделать документ сторно. Устанавливаю в нем реквизит ДокументСторно типа ДокументСсылка (т.е. не выбираю конкретные документы). В конфигурации в которой я делаю домашние задания я так же повторяю интересные для меня моменты освещенные в видеоуроках. В результате у меня дублируется куча регистров. Но суть в том , что при попытке обращения к видам движениям через точку, система выдаёт мне всего 4 вида регистров, хотя их у меня с учетом регистров бухгалтерии и сведений 14. Сбрасываю отметку в типе реквизита ДокументСторно с общего узла ДокументСсылка и отмечаю часть документов (не все), система начинает выдавть мне те регистры которые зарегестрированы в качестве движений у данных документов. Как только отмечаю все документы (уже не просто у корневого узла, а отмечаю каждый документ) опять только 4 регистра. Может это изза того что я использую 2 регистра бухгалтерии? Кстати пробую в форме документа Сторно установить пометку о показе движений  регистра бухгалтерии документа система сразу же закрывается. Хотя после этого создал новый документ, поставил галку что хочу смотреть движения регистра бухгалтерии Управленческий и он у меня нормально отработал. Использую платформу 8.2.12.96. Встречали Вы такую ошибку платформы?

    • >Может и не правильно, буду ждать видео с решением данной задачи.
      В рамках базового курса сделали правильно.
      Однако, наиболее оптимально, вначале получить общие данные (товарные позиции документа), положить их во временную таблицу, и после к ней неоднократно обращаться.
      И такой подход будет использовать в продвинутом.
      >При попытке обращения к видам движениям через точку
      Правильно я понимаю, что речь идет о модуле объекта, и обращение такого вида: ДокументСторно.Движения.
      И вот здесь выпадают не все доступные наборы записей.
      Скорее всего, это очередная особенность контекстной подсказки. Возможно в 14-м релизе ситуация будет лучше.
      Сложно сказать, с чем это связано.

      • Да речь именно о модуле объекта. Попробую обновится до последнего релиза платформы.

  19. Евгений Шилов 04.01.2011 в 00:40

    Задание выполнил.
    Интересным показался “Акт взаиморасчетов”. Для заполнения таб части использую запрос к ДвижениямССубконто, для вывода печатной формы- запрос к таблице остатков + данные документа.
    Зачем при реализации делать двойной контроль остатков? Ведь мы уже все проверили по данным управленческого учета.

    • >Зачем при реализации делать двойной контроль остатков?
      Данные БУ и УУ могут отличаться. Поэтому двойной контроль иногда требуется.

  20. Задание выполнил .Добавил условия в обработку проведения по флагам УУ БУ. Движение по документу Поступление Товаров. Для учета услуг добавил условие по виду услуг в цикле записи проводки. Движение по документу Реализация товаров. Учет себестоимости как описано в уроках.
    Движение в Документе Выписка. Делаю цикл по табличной части в цикле условие  если приход то движение по счетДт Банк счетКТ Покупатели СубконтоКт Контрагенты. Если  Расход то движение по СчетДт Поставщики СчетКт Банк СубконтоДт Контрагент.
    АктСверкиВзаиморасчетов. Заполнение ТЧ результатом  запроса к ВТ ДвиженияССубконто  с параметрами (&ДатаНач, &ДатаКон, Субконто1 = &контрагент, , ) Поле УвеличениеДолга вычисляемое, оно заполняется суммой от условия. Если ДвиженияССубконто.СчетДт= покупателю или поставщики Тогда Сумма. Иначе 0. Поле  УменьшениеДолга заполняется также только условие  Если ДвиженияССубконто.СчетКт= покупателю или поставщики Тогда Сумма. Иначе 0.  Результат Запроса загружаю в ТЧ документа.
    При печати отчета для получение долга на начала и конец периода делаю два запроса к  ВТ Остатки с паметрами Субконто1= контрагент, Период=Дата.

  21. Вячеслав Вязигин 27.12.2010 в 09:01

    Задание выполнено. Затруднений не возникло.

  22. ДЗ выполнил. Опять наибольшее затруднение вызвали запросы. Пришлось подсматривать в комментарии. Я думаю после разбора домашнего задания все встанет на свои места.

  23. Manase940N 24.12.2010 в 13:55

    Задание выполнил.
    Для реквизитов УУ и БУ в документах не хватало возможности создания общих реквизитов, как было в 7.7.  Для отражения в УУ и БУ сначала формируется строка кода вида Движения.[ИмяРегистра].Записывать = Истина, затем проверяется флаг на истинность, в результате либо выполняется код, либо идет возврат.
    Оказалось, что при вызове такого кода очищается набор записей соответствующего регистра. В уроках я что-то не припомню таких тонкостей)).
    Стоимость списания товаров в Реализации реализовал, присоединив в запросе к таблице документа остатки по БУ.
    С проведением и заполнением Выписки проблем не возникло.
    А вот по АктуВзаиморасчетов хотелось бы задать вопрос. В уроках Вы упоминали, что решение должно обладать устойчивостью. Я так понимаю, что в таком случае заполняться в документе должна не только табличная часть, но и остатки на начало и конец периода? Иначе при повторной печати сальдо на начало и конец периода могут измениться, в зависимости от вновь вводимых или изменяемых документов.
     

    • >Оказалось, что при вызове такого кода очищается набор записей соответствующего регистр
      На самом деле это логично. Набор записей пуст (даже для проведенного документа), можно это проверить наблюдая за количеством элементов в коллекции. Даже правильнее сказать, что набор не пуст, а изначально не прочитан из ИБ.
      Получается, вы даете системе указания заместить пустым набором, то что есть в регистре. Вот и получается, что движения пропадают.
      >в таком случае заполняться в документе должна не только табличная часть, но и остатки на начало и конец периода
      Все верно. Акт взаиморасчетов должен хранить свое состояние на момент его формирования.

  24. Задание выполнено.

    Самое интересное – Акт сверки взаиморасчетов.
    Заполнение долгов – реализовано с помощью таблицы оборотов
    развернутой по регистратору.
    Увеличение долга – ДО по счету 62, КО по счету 60
    Уменьшение долга – ДО по счету 60, КО по счету 62
    Долги на начало и окончание периода получены с помощью
    таблицы остатков.

  25. Задание выполнил.

    Формирование проводок при проведении документа «Реализация товаров» реализовал следующим образом:
    <code>
    Процедура ОбработкаПроведения(Отказ, РежимПроведения)
    Движения.ОстаткиНоменклатуры.Записывать = Истина;
    Движения.Продажи.Записывать = Истина;
    Движения.РегистрБухгалтерииУправленческий.Записывать = Истина;
    Движения.Взаиморасчеты.Записывать = Истина;

    Если УУ Тогда

    //ОПЕРАТИВНОЕ ПРОВЕДЕНИЕ
    КонеуЕсли;

    // ПРОВОДКИ
    Если (Не Отказ) И БУ Тогда

    Запрос = Новый Запрос;
    Запрос.Текст = 
    “ВЫБРАТЬ
    | ВложенныйЗапрос.Номенклатура,
    | ВложенныйЗапрос.ВидНоменклатуры,
    | ВложенныйЗапрос.КоличествоДок,
    | ВложенныйЗапрос.Сумма,
    | ЕСТЬNULL(РегистрБухгалтерииУправленческийОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток,
    | ЕСТЬNULL(РегистрБухгалтерииУправленческийОстатки.СуммаОстаток, 0) КАК СуммаОстаток
    |ИЗ
    | (ВЫБРАТЬ
    | РеализацияТоваровТовары.Номенклатура КАК Номенклатура,
    | РеализацияТоваровТовары.Номенклатура.ВидНоменклатуры КАК ВидНоменклатуры,
    | СУММА(РеализацияТоваровТовары.Количество * РеализацияТоваровТовары.К) КАК КоличествоДок,
    | СУММА(РеализацияТоваровТовары.Сумма) КАК Сумма
    | ИЗ
    | Документ.РеализацияТоваров.Товары КАК РеализацияТоваровТовары
    | ГДЕ
    | РеализацияТоваровТовары.Ссылка = &Ссылка

    | СГРУППИРОВАТЬ ПО
    | РеализацияТоваровТовары.Номенклатура,
    | РеализацияТоваровТовары.Номенклатура.ВидНоменклатуры) КАК ВложенныйЗапрос
    |  
    | ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.РегистрБухгалтерииУправленческий.Остатки(
    | &Период,
    | Счет = ЗНАЧЕНИЕ(ПланСчетов.ПланСчетовУправленческий.Товары),
    | ,
    | Субконто1 В
    | (ВЫБРАТЬ РАЗЛИЧНЫЕ
    | РеализацияТоваровТовары.Номенклатура
    | ИЗ
    | Документ.РеализацияТоваров.Товары КАК РеализацияТоваровТовары
    | ГДЕ
    | РеализацияТоваровТовары.Ссылка = &Ссылка)) КАК РегистрБухгалтерииУправленческийОстатки
    | ПО ВложенныйЗапрос.Номенклатура = РегистрБухгалтерииУправленческийОстатки.Субконто1”;

    Запрос.УстановитьПараметр(“Период”, МоментВремени());
    Запрос.УстановитьПараметр(“Ссылка”, Ссылка);

    Результат = Запрос.Выполнить();

    ВыборкаДетальныеЗаписи = Результат.Выбрать();

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    Если ВыборкаДетальныеЗаписи.ВидНоменклатуры <> Перечисления.ВидыНоменклатуры.Услуга Тогда
    Проводка = Движения.РегистрБухгалтерииУправленческий.Добавить();
    Проводка.Период = Дата;
    Проводка.СчетДт = ПланыСчетов.ПланСчетовУправленческий.Себестоимость;
    Проводка.СчетКт = ПланыСчетов.ПланСчетовУправленческий.Товары;
    Проводка.СубконтоКт.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
    Проводка.Сумма = Окр(ВыборкаДетальныеЗаписи.КоличествоДок * ВыборкаДетальныеЗаписи.СуммаОстаток / ВыборкаДетальныеЗаписи.КоличествоОстаток);
    Проводка.КоличествоКт = ВыборкаДетальныеЗаписи.КоличествоДок;
    КонецЕсли;
    КонецЦикла;

    Проводка = Движения.РегистрБухгалтерииУправленческий.Добавить();
    Проводка.Период = Дата;
    Проводка.СчетДт = ПланыСчетов.ПланСчетовУправленческий.Покупатели;
    Проводка.СчетКт = ПланыСчетов.ПланСчетовУправленческий.Выручка;
    Проводка.СубконтоДт.Контрагенты = Контрагент;
    Проводка.Сумма = СуммаДокумента;

    КонецЕсли;
    КонецПроцедуры
    </code>

    Заполнение документа «Выписка» на основании контрагента:

    </ode>
    Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
    Если ТипЗнч(ДанныеЗаполнения) = Тип(“СправочникСсылка.Контрагенты”) Тогда
    Запрос = Новый Запрос;
    Запрос.Текст = 
    “ВЫБРАТЬ
    | РегистрБухгалтерииУправленческийОстатки.Счет,
    | РегистрБухгалтерииУправленческийОстатки.СуммаОстаток
    |ИЗ
    | РегистрБухгалтерии.РегистрБухгалтерииУправленческий.Остатки(&Период, , &ВидСубконто, Субконто1 = &Контрагент) КАК РегистрБухгалтерииУправленческийОстатки
    |ГДЕ
    | РегистрБухгалтерииУправленческийОстатки.СуммаОстаток <> 0”;

    Запрос.УстановитьПараметр(“ВидСубконто”, ПланыВидовХарактеристик.ВидыСубконто.Контрагенты);
    Запрос.УстановитьПараметр(“Контрагент”, ДанныеЗаполнения);
    Запрос.УстановитьПараметр(“Период”, МоментВремени());

    Результат = Запрос.Выполнить();

    ВыборкаДетальныеЗаписи = Результат.Выбрать();

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    НоваяСтрока = Оплаты.Добавить();
    НоваяСтрока.Контрагент = ДанныеЗаполнения;
    НоваяСтрока.Счет = ВыборкаДетальныеЗаписи.Счет;
    Если ВыборкаДетальныеЗаписи.СуммаОстаток > 0 Тогда
    НоваяСтрока.Приход = ВыборкаДетальныеЗаписи.СуммаОстаток;
    Иначе
    НоваяСтрока.Расход = -ВыборкаДетальныеЗаписи.СуммаОстаток;
    КонецЕсли;
    КонецЦикла;
    КонецЕсли;
    КонецПроцедуры
    </code>

    В докумете «Акт сверки», помимо прочих, добавил реквизиты НачальныйОстаток и КонечныйОстаток. Для заполнения табличной части документа на форме документа создал кнопку «Заполнить». Обработчик заполнения в модуле формы, вызывает серверную процедуру:

    <code>
    &НаКлиенте
    Процедура Заполнить(Команда)

    Ответ = Вопрос(“Внимание! табличная часть будет заполнена новыми данными! Продолжить?”, РежимДиалогаВопрос.ДаНет, 5);

    Если Ответ = КодВозвратаДиалога.Да Тогда
    Объект.ТабличнаяЧасть.Очистить();
    ПолучитьДанныеПоКонтрагенту(Объект.Контрагент, Объект.НачалоПериода, Объект.КонецПериода);
    КонецЕсли;

    КонецПроцедуры

    &НаСервере
    Процедура ПолучитьДанныеПоКонтрагенту(Контрагент, НачалоПериода, КонецПериода)

    Запрос = Новый Запрос;
    Запрос.Текст = 
    “ВЫБРАТЬ
    | РегистрБухгалтерииУправленческийОстаткиИОбороты.Счет,
    | РегистрБухгалтерииУправленческийОстаткиИОбороты.Регистратор КАК Документ,
    | РегистрБухгалтерииУправленческийОстаткиИОбороты.СуммаНачальныйОстаток,
    | РегистрБухгалтерииУправленческийОстаткиИОбороты.СуммаОборотДт,
    | РегистрБухгалтерииУправленческийОстаткиИОбороты.СуммаОборотКт,
    | РегистрБухгалтерииУправленческийОстаткиИОбороты.СуммаКонечныйОстаток
    |ИЗ
    | РегистрБухгалтерии.РегистрБухгалтерииУправленческий.ОстаткиИОбороты(
    | &НачалоПериода,
    | &КонецПериода,
    | Регистратор,
    | ДвиженияИГраницыПериода,
    | Счет = ЗНАЧЕНИЕ(ПланСчетов.ПланСчетовУправленческий.Покупатели)
    | ИЛИ Счет = ЗНАЧЕНИЕ(ПланСчетов.ПланСчетовУправленческий.Поставщики),
    | &ВидСубконто,
    | Субконто1 = &Контрагент) КАК РегистрБухгалтерииУправленческийОстаткиИОбороты”;

    Запрос.УстановитьПараметр(“ВидСубконто”, ПланыВидовХарактеристик.ВидыСубконто.Контрагенты);
    Запрос.УстановитьПараметр(“КонецПериода”,КонецДня(КонецПериода));
    Запрос.УстановитьПараметр(“Контрагент”, Контрагент);
    Запрос.УстановитьПараметр(“НачалоПериода”, НачалоПериода);

    Результат = Запрос.Выполнить();

    Если НЕ Результат.Пустой() Тогда
    Таблица = Результат.Выгрузить();
    КоличествоСтрок = Таблица.Количество();
    Если (КоличествоСтрок > 0) Тогда
    Объект.НачальныйОстаток = Таблица[0].СуммаНачальныйОстаток;
    Объект.КонечныйОстаток = Таблица[КоличествоСтрок – 1].СуммаКонечныйОстаток;

    Для каждого ТекСтрока Из Таблица Цикл

    Если (ТекСтрока.СуммаОборотДт <> 0) ИЛИ (ТекСтрока.СуммаОборотКт <> 0) Тогда
    НоваяСтрока = Объект.ТабличнаяЧасть.Добавить();
    НоваяСтрока.Документ = ТекСтрока.Документ;
    НоваяСтрока.УвеличениеДолга = ТекСтрока.СуммаОборотДт;
    НоваяСтрока.УменьшениеДолга = ТекСтрока.СуммаОборотКт;
    КонецЕсли;

    КонецЦикла;
    ДокументОбъект = ДанныеФормыВЗначение(Объект, Тип(“ДокументОбъект.АктСверки”));
    ДокументОбъект.Записать();

    КонецЕсли;
    КонецЕсли;

    КонецПроцедуры // ПолучитьДанныеПоКонтрагенту()
    </code>

    Печать документа реализовал с помощью конструктора печати.

  26. Задание выполнил.
    Текс Запроса  в “РеализацияТовароУслу”:
    ВЫБРАТЬ
    ТабЧастьТовары.НомерСтроки,
    ТабЧастьТовары.Номенклатура,
    ТабЧастьТовары.Количество,
    ЕСТЬNULL(УправленческийОстатки.КоличествоОстатокДт, 0) КАК КоличествоОстаток,
    ЕСТЬNULL(УправленческийОстатки.СуммаОстатокДт, 0) КАК СуммаОстаток
    ИЗ
    (ВЫБРАТЬ
    РеализацияТоваровТовары.Номенклатура КАК Номенклатура,
    СУММА(РеализацияТоваровТовары.Количество * РеализацияТоваровТовары.К) КАК Количество,
    МИНИМУМ(РеализацияТоваровТовары.НомерСтроки) КАК НомерСтроки
    ИЗ
    Документ.РеализацияТоваров.Товары КАК РеализацияТоваровТовары
    ГДЕ
    РеализацияТоваровТовары.Ссылка = &Ссылка
    И РеализацияТоваровТовары.Номенклатура.ВидНоменклатуры <> ЗНАЧЕНИЕ(Перечисление.ВидыНоменклатуры.Услуга)

    СГРУППИРОВАТЬ ПО
    РеализацияТоваровТовары.Номенклатура) КАК ТабЧастьТовары
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Управленческий.Остатки(
    &Период,
    Счет = ЗНАЧЕНИЕ(ПланСчетов.Упраленческий.Товары),
    ,
    Субконто1 В
    (ВЫБРАТЬ РАЗЛИЧНЫЕ
    РеализацияТоваровТовары.Номенклатура
    ИЗ
    Документ.РеализацияТоваров.Товары КАК РеализацияТоваровТовары
    ГДЕ
    РеализацияТоваровТовары.Ссылка = &Ссылка
    И РеализацияТоваровТовары.Номенклатура.ВидНоменклатуры <> ЗНАЧЕНИЕ(Перечисление.ВидыНоменклатуры.Услуга))) КАК УправленческийОстатки
    ПО ТабЧастьТовары.Номенклатура = УправленческийОстатки.Субконто1

    В акте сверке :

    ВЫБРАТЬ
    УправленческийОбороты.Регистратор КАК Документ,
    УправленческийОбороты.СуммаОборотДт КАК УвеличениеДолга,
    УправленческийОбороты.СуммаОборотКт КАК УменьшениеДолга
    ИЗ
    РегистрБухгалтерии.Управленческий.Обороты(&НачПериода, &КонПериода, Регистратор, , ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконто.Контрагенты), Субконто1 = &Контрагент, , ) КАК УправленческийОбороты

    Начальное сальдо – реквизит с возможностью редактирования, получал методом Остатки. Конечное сальдо – расчетное.

    Очень интересно увидеть в Ваше решение улучшение юзабельности документа “АктСверки”, а именно реализация отбора по контрагенту при выборе документа в таб.часть интерактивно (для документов Поступление и Реализация проблем не возникло – структура отбора в параметры открываемой формы, для Выписки и Операции – сложнее – назначение произвольных запросов динамическому списку и установка параметров запросов). Наверняка есть более простое и  универсальное  решение.

    • >реализация отбора по контрагенту при выборе документа в таб.часть интерактивно
      Не совсем понял, что хотели бы увидеть. Поясните примером.

      • Если выбран контрагент в шапке документа, то при ручном заполнении табличной части акта сверки в списке выбора были видны только документы этого контрагента (с ПоступлениемТоваров и РеализациейТоваров проблем нет, а вот показать ручные операции  или Выписки где участвует  этот контрагент и не показывать к нему не относящиеся?). Т.е. определяем тип документа (напр. Выписка) и форма выбора содержит только выписки где есть этот контрагент.

        • Идея понятна.
          Постараюсь продемонстрировать при решении.

  27. ДЗ 11. Задание выполнила, основные моменты:
    – в поступлении товаров для учета услуг в БУ проверяю вид номенклатуры, для учета разреза контрагентов делаю проверку
    Если СчетКт.ВидыСубконто.Количество() <> 0 Тогда
    Если СчетКт.ВидыСубконто[0].ВидСубконто = ПланыВидовХарактеристик.ВидыСубконто.Контрагенты Тогда
    Проводка.СубконтоКт.Контрагенты = Строка.Контрагент;
    КонецЕсли;
    КонецЕсли;
    – Списание товаров по себестоимости: запросом стыкую номенклатуру из документа с остатками по регистру бухгалтерии, определяя себестоимость продукции, дальше цикл по выборке, если не услуга формирую проводку Дт90.02 Кт 41.01. Потом на всю сумму документа проводка Дт 62 Кт 90.01. По счету 41.01 ввела количественный учет.
    – Документ “Выписка”: добавила реквизит в табличную часть “СчетРасчета”, реализовала ввод на основании контрагента – документ заполняется по рез-ту запроса к регисту “Взаиморасчеты” в процедуре ОбработкаЗаполнения. Тут правда возникает вопрос а по какому виду учета система должна определить долг, ведь данные УУ и БУ могут отличаться? Можно конечно перед формированием документа сделать вопрос типа по какому виду учета рассчитывать долг и тогда уже брать остаток по регистру накопления или бухгалтерии.
    – Документ “Акт сверки взаиморасчетов”. Добавила реквизит ТипУчета, ДолгНачало и ДолгОкончание. Если УУ заполняю по регистру Взаиморасчеты, если БУ по регистру бухгалтерии. Сначала сделала через виртуальные таблицы оборотов, но потом решила получить сразу и остатки и хранить остатки в реквизитах документа, чтобы лишний раз не формировать запросов.
    Если Объект.ТипУчета = Перечисления.ТипУчета.Управленческий Тогда
    Запрос.Текст = “ВЫБРАТЬ
    | ВзаиморасчетыОстаткиИОбороты.Регистратор КАК Документ,
    | ВзаиморасчетыОстаткиИОбороты.СуммаПриход КАК СуммаУвеличенияДолга,
    | ВзаиморасчетыОстаткиИОбороты.СуммаРасход КАК СуммаУменьшенияДолга,
    | ВзаиморасчетыОстаткиИОбороты.СуммаНачальныйОстаток,
    | ВзаиморасчетыОстаткиИОбороты.СуммаКонечныйОстаток
    |ИЗ
    | РегистрНакопления.Взаиморасчеты.ОстаткиИОбороты(&ДатаНачала, &ДатаОкончания, Регистратор, ДвиженияИГраницыПериода, Контрагент = &Контрагент) КАК ВзаиморасчетыОстаткиИОбороты
    |
    |УПОРЯДОЧИТЬ ПО
    | ВзаиморасчетыОстаткиИОбороты.Период,
    | Документ”;
    Иначе
    Запрос.Текст = “ВЫБРАТЬ
    | ХозрасчетныйОстаткиИОбороты.Регистратор КАК Документ,
    | ХозрасчетныйОстаткиИОбороты.СуммаОборотДт КАК СуммаУвеличенияДолга,
    | ХозрасчетныйОстаткиИОбороты.СуммаОборотКт КАК СуммаУменьшенияДолга,
    | ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстаток,
    | ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстаток
    |ИЗ
    | РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&ДатаНачала, &ДатаОкончания, Регистратор, ДвиженияИГраницыПериода, , ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконто.Контрагенты), Субконто1 = &Контрагент) КАК ХозрасчетныйОстаткиИОбороты
    |
    |УПОРЯДОЧИТЬ ПО
    | ХозрасчетныйОстаткиИОбороты.Период,
    | ХозрасчетныйОстаткиИОбороты.Регистратор”;
    КонецЕсли;
    Далее результат выгружаю в табличную часть документа(Документ,СуммаУвеличенияДолга,СуммаУменьшенияДолга). Но есть проблема – в таблице оказывается строка с итогами оборотов, хотя в запросе нет итогов, как это можно обойти? Я решила некрасиво, удаляя ее из результирующей таблицы. В реквизит ДолгНачало беру СуммаНачальныйОстаток с первой строки, в ДолгОкончание – СуммаКонечныйОстаток с последней. Печатную форму документа сформировала через конструктор, куда добавила вывод нужных реквизитов.

    • >Тут правда возникает вопрос а по какому виду учета система должна определить долг, ведь данные УУ и БУ могут отличаться?
      На ваше усмотрение.
      Я буду делать по данным БУ.
      >хотя в запросе нет итогов, как это можно обойти?
      Появляются в запросе не итоговые записи, а записи на начало и конец периода. Чтобы их не было нужно установить 3-ий параметр ВТ в значение Движения (у вас установлено Движения и границы периода).

  28. С запозданием, но таки одолела это ДЗ,  хотя скорее всего использовала не самые оптимальные варианты ! :)
    1. Добавила признаки УУ и БУ в каждый документ, кроме Операции. В ОМ добавила процедуру ОчистистьДвижения(Движения, Взаиморасчет, Остатки, Закупка, Бух,Продажи) , в которой в зависимости от выбраных признаков очищаю соответствубщие регистры , кусочек кода привожу ниже:
    <code>
    Если Взаиморасчет = 1 Тогда
    Движения.Взаиморасчеты.Очистить();
    Движения.Взаиморасчеты.Записать();
    КонецЕсли;
    Если Остатки = 1 Тогда
    Движения.ОстаткиТовара.Очистить();;
    Движения.ОстаткиТовара.Записать();
    КонецЕсли;

    и т.д.
    </code>
    В каждом документе вызываю эту процедуру и отмечаю какие регистры нужно будет очистить.
    2. Добавила аналитику “Контрагенты” для Поставщиков и Покупателей.  Для отражения наборов, услуг, товаров в бух.регистре организовала экспортную процедуру в ОМ ПроводкиПриходТМЦ(Движения,Результат,СчетКт), в которую выгружаю запрос РезультатЗакупки (из предыдущего ДЗ) и  анализирую, если ВидТМЦ -Услуга то приходую на 26 счет, если СчетКт -Поставщики отношу на 60, если СчетКт – Сотрудники на 71 (для Авансового отчета).  Обращаюсь к этой процедуре из документов Поступление и Авансовый отчет.
    3. В документе “Реализация товаров” реализовала списание товаров по средневзвешенной оценке, как показывалось в уроке.
    Кстати, в задании проводка по реализации услуг Дт 62 Кт 90.01 лишняя , так как мы всю сумму по документу прописали в первой проводке Дт 62 кт 90.01! Иначе, получается, что к итоговой сумме по документу мы еще добавляем сумму услуг.
    4. Добавила поле “Счет ” и прописала проводки в документе “Выписка” . Реализовала ввод на основании контрагента.
    <code>
    Запрос = Новый Запрос;
    Запрос.Текст =
    “ВЫБРАТЬ
    |    РегистрБухгалтерииОстатки.Счет КАК СчетКонтр,
    |    СУММА(РегистрБухгалтерииОстатки.СуммаОстаток) КАК СуммаОстаток,
    |    РегистрБухгалтерииОстатки.Субконто1 КАК Контрагент
    |ИЗ
    |    РегистрБухгалтерии.РегистрБухгалтерии.Остатки(, Счет В (&МассивСчетов), , Субконто1 В (&Контрагент)) КАК РегистрБухгалтерииОстатки
    |
    |СГРУППИРОВАТЬ ПО
    |    РегистрБухгалтерииОстатки.Счет”
    ;

    Запрос.УстановитьПараметр(“Контрагент”, Контрагент);
    Запрос.УстановитьПараметр(“МассивСчетов”, МассивСчетов);

    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();
    Пока Выборка.Следующий() Цикл
    Если Выборка.СчетКонтр = ПланыСчетов.ПланСчетов.Покупатели Тогда
    Если Выборка.СуммаОстаток<0 Тогда
    //добавляем строку по 62 покупатели в Приход
    ТЧ =ТЧПриходРасход.Добавить();
    ТЧ.Контрагент= Контрагент;
    ТЧ.СчетКонтра= Выборка.СчетКонтр;
    ТЧ.Приход= -Выборка.СуммаОстаток;
    КонецЕсли;
    ИначеЕсли Выборка.СчетКонтр = ПланыСчетов.ПланСчетов.Поставщики Тогда
    Если Выборка.СуммаОстаток>0 Тогда
    //добавляем строку по 60 поставщики в Расход
    ТЧ = ТЧПриходРасход.Добавить();
    ТЧ.Контрагент= Контрагент;
    ТЧ.СчетКонтра= Выборка.СчетКонтр;
    ТЧ.Расход= Выборка.СуммаОстаток;
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
    </code>
    5. Создала документ АктСверкиВзаиморасчетов. Запретила его проведение.  Заполняю документ, через запрос:
    <code>
    &НаСервере
    Процедура ЗаполнитьНаСервере(Контрагент,ПериодС,ПериодПо)

    Запрос = Новый Запрос;
    Запрос.Текст =
    “ВЫБРАТЬ
    |    РегистрБухгалтерииДвиженияССубконто.Регистратор,
    |    РегистрБухгалтерииДвиженияССубконто.СчетДт,
    |    РегистрБухгалтерииДвиженияССубконто.СчетКт,
    |    СУММА(РегистрБухгалтерииДвиженияССубконто.Сумма) КАК Сумма
    |ИЗ
    |    РегистрБухгалтерии.РегистрБухгалтерии.ДвиженияССубконто(
    |            &ПериодС,
    |            &ПериодПо,
    |            Субконто1 = &Контрагент
    |                И (Счет = ЗНАЧЕНИЕ(ПланСчетов.ПланСчетов.Поставщики)
    |                    ИЛИ Счет = ЗНАЧЕНИЕ(ПланСчетов.ПланСчетов.Покупатели)
    |                    ИЛИ КорСчет = ЗНАЧЕНИЕ(ПланСчетов.ПланСчетов.Поставщики)
    |                    ИЛИ КорСчет = ЗНАЧЕНИЕ(ПланСчетов.ПланСчетов.Покупатели)),
    |            ,
    |            ) КАК РегистрБухгалтерииДвиженияССубконто
    |
    |СГРУППИРОВАТЬ ПО
    |    РегистрБухгалтерииДвиженияССубконто.Регистратор,
    |    РегистрБухгалтерииДвиженияССубконто.СчетДт,
    |    РегистрБухгалтерииДвиженияССубконто.СчетКт”;

    Запрос.УстановитьПараметр(“Контрагент”, Контрагент);
    Граница = Новый Граница(ПериодПо,ВидГраницы.Включая);
    Запрос.УстановитьПараметр(“ПериодПо”, Граница);
    Запрос.УстановитьПараметр(“ПериодС”, ПериодС);
    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();

    Пока Выборка.Следующий() Цикл
    ТЧ = Объект.Взаиморасчеты.Добавить();
    ТЧ.Документ = Выборка.Регистратор;    
    Если ((Выборка.СчетДт=ПланыСчетов.ПланСчетов.Поставщики)или(Выборка.СчетДт=ПланыСчетов.ПланСчетов.Покупатели)) Тогда
    ТЧ.СуммаПлюс = Выборка.Сумма;        
    КонецЕсли;
    Если ((Выборка.СчетКт=ПланыСчетов.ПланСчетов.Поставщики)или(Выборка.СчетКт=ПланыСчетов.ПланСчетов.Покупатели)) Тогда
    ТЧ.СуммаМинус = Выборка.Сумма;        
    КонецЕсли;
    КонецЦикла;

    КонецПроцедуры
    </code>
    Печатную форму сформировала через конструктор,  затем внесла изменения в  процедуру Печать, добавила запрос для вычисления начального остатка:
    <code>
    Запрос = Новый Запрос;
    Запрос.Текст =
    “ВЫБРАТЬ
    |    РегистрБухгалтерииОстатки.СуммаОстаток,
    |    РегистрБухгалтерииОстатки.СуммаОстатокДт,
    |    РегистрБухгалтерииОстатки.СуммаОстатокКт
    |ИЗ
    |    РегистрБухгалтерии.РегистрБухгалтерии.Остатки(
    |            &ПериодС,
    |            Счет = ЗНАЧЕНИЕ(ПланСчетов.ПланСчетов.Поставщики)
    |                ИЛИ Счет = ЗНАЧЕНИЕ(ПланСчетов.ПланСчетов.Покупатели),
    |            ,
    |            Субконто1 = &Контрагент) КАК РегистрБухгалтерииОстатки”;

    Запрос.УстановитьПараметр(“Контрагент”, Ссылка[0].Контрагент);
    Запрос.УстановитьПараметр(“ПериодС”, Ссылка[0].ПериодС);
    Результат = Запрос.Выполнить();

    ВыборкаДетальныеЗаписи = Результат.Выбрать();
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    ОстатокНач = ВыборкаДетальныеЗаписи.СуммаОстаток;
    КонецЦикла;
    </code>
    Конечный остаток вычисляю, отталкиваясь от начального+ итог по колонке “Увеличение долга” – итог по колонке “Уменьшение долга”, т.к. акт сделан документом, что подразумевает, что пользователь может удалить какие-то строки , что приведет к несовпадению данных в документе и регистре на конец периода. Подобные рассуждения привели, к мысли о том, что нет смысла выводить долг на конец из регистра, а нужно его вычислить.
     

    • >Кстати, в задании проводка по реализации услуг Дт 62 Кт 90.01 лишняя
      Да, конечно же.
      Имелось ввиду для товаров 2 вида проводок.
      А если в документе только услуги, то одна проводка.
      Текст задания подправил.

  29. Admin_Net_1C 21.12.2010 в 11:13

    Домашнее задание №11 выполнено.
    1) Добавлены реквизиты “УУ” и “БУ” (типа Булево) в документы ПоступлениеТоваров, Реализация, Выписка, Операция. На формах документов данные реквизиты добавлены в виде флагов.
    2) Добавлена проводка по услугам при проведении документа ПоступлениеТоваров.
    3) Для ведения аналитического учета по контрагентам на счета 60 и 62 добавлено субконто Контрагенты.
    4) Добавлен признак учета “Количественный” для плана счетов Управленческий и данный признак установлен для счетов группы 41.
    5) Для определения себестоимости списания ТМЦ в МО Реализация в методе ОбработкаПроведения выполняется запрос:
    ВЫБРАТЬ
    РеализацияТовары.Номенклатура.Ссылка КАК Номенклатура,
    РеализацияТовары.Количество * РеализацияТовары.Коэффициент КАК Количество,
    РеализацияТовары.Сумма КАК Выручка,
    ВЫБОР
    КОГДА ЕСТЬNULL(РегистрБухгалтерииУправленческийОстатки.КоличествоОстатокДт, 0) <> 0
    ТОГДА РеализацияТовары.Количество * РеализацияТовары.Коэффициент * ЕСТЬNULL(РегистрБухгалтерииУправленческийОстатки.СуммаОстатокДт, 0) / РегистрБухгалтерииУправленческийОстатки.КоличествоОстатокДт
    ИНАЧЕ 0
    КОНЕЦ КАК Себестоимость
    ИЗ
    Документ.Реализация.Товары КАК РеализацияТовары
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.РегистрБухгалтерииУправленческий.Остатки(
    &ДатаДок,
    Счет = ЗНАЧЕНИЕ(ПланСчетов.Управленческий.Товары),
    ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконто.Номенклатура),
    Субконто1.Ссылка В
    (ВЫБРАТЬ
    РеализацияТовары.Номенклатура
    ИЗ
    Документ.Реализация.Товары КАК РеализацияТовары
    ГДЕ
    РеализацияТовары.Номенклатура.Вид <> &ВидТовараУслуга
    И РеализацияТовары.Ссылка = &СсылкаДок
    СГРУППИРОВАТЬ ПО
    РеализацияТовары.Номенклатура)) КАК РегистрБухгалтерииУправленческийОстатки
    ПО РеализацияТовары.Номенклатура.Ссылка = РегистрБухгалтерииУправленческийОстатки.Субконто1.Ссылка
    ГДЕ
    РеализацияТовары.Ссылка = &СсылкаДок
    6) В документе Выписка в табличной части добавлен реквизит “КорСчет” для выбора корреспондирующего счета. Организован ввод данного вида документов на основании элемента справочника Контрагенты.
    7) Создан документ “АктСверкиВзаиморасчетов”. Табличная часть документа заполняется движениями с помощью запроса:
    ВЫБРАТЬ
    РегистрБухгалтерииУправленческийДвиженияССубконто.Регистратор КАК Документ,
    ВЫБОР
    КОГДА РегистрБухгалтерииУправленческийДвиженияССубконто.СчетДт = ЗНАЧЕНИЕ(ПланСчетов.Управленческий.Покупатели)
    ТОГДА РегистрБухгалтерииУправленческийДвиженияССубконто.Сумма
    КОГДА РегистрБухгалтерииУправленческийДвиженияССубконто.СчетДт = ЗНАЧЕНИЕ(ПланСчетов.Управленческий.Поставщики)
    ТОГДА РегистрБухгалтерииУправленческийДвиженияССубконто.Сумма
    ИНАЧЕ 0
    КОНЕЦ КАК УвеличениеДолга,
    ВЫБОР
    КОГДА РегистрБухгалтерииУправленческийДвиженияССубконто.СчетКт = ЗНАЧЕНИЕ(ПланСчетов.Управленческий.Поставщики)
    ТОГДА РегистрБухгалтерииУправленческийДвиженияССубконто.Сумма
    КОГДА РегистрБухгалтерииУправленческийДвиженияССубконто.СчетКт = ЗНАЧЕНИЕ(ПланСчетов.Управленческий.Покупатели)
    ТОГДА РегистрБухгалтерииУправленческийДвиженияССубконто.Сумма
    ИНАЧЕ 0
    КОНЕЦ КАК УменьшениеДолга,
    РегистрБухгалтерииУправленческийДвиженияССубконто.Регистратор.МоментВремени КАК РегистраторМоментВремени
    ИЗ
    РегистрБухгалтерии.РегистрБухгалтерииУправленческий.ДвиженияССубконто(
    &НачалоПериода,
    &КонецПериода,
    ВидСубконто1 = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконто.Контрагенты)
    И Субконто1 = &Контрагент,
    Регистратор.МоментВремени,
    ) КАК РегистрБухгалтерииУправленческийДвиженияССубконто
     
    УПОРЯДОЧИТЬ ПО
    РегистраторМоментВремени
     
    Начальное и конечное сальдо задолженности контрагента получаем с помощью запроса:
    ВЫБРАТЬ
    РегистрБухгалтерииУправленческийОстаткиИОбороты.СуммаНачальныйОстаток КАК СальдоНачальное,
    РегистрБухгалтерииУправленческийОстаткиИОбороты.СуммаКонечныйОстаток КАК СальдоКонечное
    ИЗ
    РегистрБухгалтерии.РегистрБухгалтерииУправленческий.ОстаткиИОбороты(
    &НачалоПериода,
    &КонецПериода,
    Период,
    ДвиженияИГраницыПериода,
    Счет = ЗНАЧЕНИЕ(ПланСчетов.Управленческий.Поставщики)
    ИЛИ Счет = ЗНАЧЕНИЕ(ПланСчетов.Управленческий.Покупатели),
    ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконто.Контрагенты),
    Субконто1 = &Контрагент) КАК РегистрБухгалтерииУправленческийОстаткиИОбороты
    Создана печатная форма для данного документа.

  30. Admin_Net_1C 20.12.2010 в 08:00

    Вопрос по домашнему заданию №11:
    Нужно ли в АктеСверкиВзаиморасчетов отражать изменение долга контрагента по проводке документа ПоступлениеТоваров (Дт 41.01 Кт 60). По логике эта операция уменьшения долга контрагента.
    Не в параметрах ВТ “Обороты” указать параметры таким образом чтобы выбирались данные по Дт счетов 60 (Выписка, Операция), 62 (Реализация) и Кт 60 (ПоступлениеТоваров). Если делаю запрос:
    ВЫБРАТЬ
    РегистрБухгалтерииУправленческийОбороты.Регистратор,
    ВЫБОР
    КОГДА РегистрБухгалтерииУправленческийОбороты.Счет = ЗНАЧЕНИЕ(ПланСчетов.Управленческий.Поставщики)
    ТОГДА РегистрБухгалтерииУправленческийОбороты.СуммаОборотДт
    ИНАЧЕ 0
    КОНЕЦ КАК УвеличениеДолга,
    ВЫБОР
    КОГДА РегистрБухгалтерииУправленческийОбороты.Счет = ЗНАЧЕНИЕ(ПланСчетов.Управленческий.Покупатели)
    ТОГДА РегистрБухгалтерииУправленческийОбороты.СуммаОборотДт
    ИНАЧЕ 0
    КОНЕЦ КАК УменьшениеДолга
    ИЗ
    РегистрБухгалтерии.РегистрБухгалтерииУправленческий.Обороты(
    &НачалоПериода,
    &КонецПериода,
    Регистратор,
    Счет = ЗНАЧЕНИЕ(ПланСчетов.Управленческий.Покупатели)
    ИЛИ Счет = ЗНАЧЕНИЕ(ПланСчетов.Управленческий.Поставщики),
    ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконто.Контрагенты),
    Субконто1 = &Контрагент
    ИЛИ КорСубконто1 = &Контрагент,
    //КорСчет = ЗНАЧЕНИЕ(ПланСчетов.Управленческий.Поставщики),
    //ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконто.Контрагенты)
    ) КАК РегистрБухгалтерииУправленческийОбороты
    то выбираются только документы Выписка, Операция, Реализация. Если убираю комментарии с последних двух параметров ВТ (т.е. хочу чтобы попадали еще и данные по проводкам документа ПоступлениеТоваров), то результат запроса получается пустой.

    • Условие на КорСубконто лишнее. Хотя, кажется, это не должно влиять на результат.
      У меня вот такой запрос выбирает все нужные данные:
      ВЫБРАТЬ
      РегистрУправленческийОбороты.Регистратор,
      РегистрУправленческийОбороты.Счет,
      РегистрУправленческийОбороты.Субконто1,
      РегистрУправленческийОбороты.СуммаОборотДт,
      РегистрУправленческийОбороты.СуммаОборотКт
      ИЗ
      РегистрБухгалтерии.РегистрУправленческий.Обороты(
      ,
      ,
      Регистратор,
      Счет = ЗНАЧЕНИЕ(ПланСчетов.Управленческий.Поставщики)
      ИЛИ Счет = ЗНАЧЕНИЕ(ПланСчетов.Управленческий.Покупатели),
      ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконто.Контрагенты),
      Субконто1 = &Субконто1,
      ,
      ) КАК РегистрУправленческийОбороты

      А у вас?

      • Admin_Net_1C 20.12.2010 в 12:14

        Документы по одному и тому же контрагенту (аналитика счетов 60 и 62) в моей ИБ:
        Поступление товаров Дт 41.01 Кт 60 400р.
        Операция Дт 60 Кт 51 300р.
        Выписка Дт 60 Кт 51 100
        Реализация Дт 62 Кт 90.01 2000р.

        Ваш запрос выдает результат:
        Поступление товаров 60 <Контрагент> <Null> 400р.
        Выписка 60 <Контрагент> 100р. <Null>
        Реализация 62 <Контрагент> 2000р. <Null>
        Операция 60 <Контрагент> 300р. <Null>

        А по логике задания должно быть:
        <Документ> <Счет> <Контрагент> <УвеличениеДолга> <УменьшениеДолга>
        Поступление товаров 60 <Контрагент> <Null> 400р.
        Операция 60 <Контрагент> <Null> 300р.
        Выписка 60 <Контрагент> <Null> 100р.
        Реализация 62 <Контрагент> 2000р.<Null>

        • Я дал лишь общую схему. Далее нужно сделать преобразование в зависимости от счета (как у вас сделано в исходном запросе).
          Сделать универсальное преобразование можно было бы привязавшись к виду счета.
          Но у нас счета активно-пассивные, поэтому сделать не удастся.
          В реале счета 60.02, 62.01 активные, а 60.01, 62.02 – пассивные.

  31. Задание выполнено.

    Во всех документах добавил булевские реквизиты УУ и БУ. В обработках проведения документов сначала вызывается метод Очистить() регистра.
    Далее, если флаги УУ, БУ выставлены, идет добавление движений в соответствующие регистры в общих серверных процедурах.
    После возврата в модуль объекта делается запись движений в регистр. Т.о. снимается вопрос об удалении движений в регистрах при снятии флага.

    Счетам ТМЦ добавил субконто Товары, Счетам 60 и 62 – субконто Контрагенты.
    Счетам ТМЦ поставил признак учета количественный, в регистр бухгалтерии ввел ресурс Количество с установленным признаком учета.
    При проведении документа ПоступлениеТоваров в проводке заполняются СчетДт в зависимости от Номенклатура.ВидНоменклатуры, СубконтоДТ – Товары,
    СчетКт – Поставщики,СубконтоКт – Контрагент. Если СчетДТ – количественный, то вычисляем КоличествоДт.

    Изменения в регистр бухгалтерии из документа РеализацияТоваров заносятся в 2 этапа:
    1-й – списание стоимости. С вычислением с/с не изобретал, сделал как в уроке, с условием на Номенклатура.видНоменклатуры<>Услуга.
    2-й – запись выручки. В цикле по ТЧ проводки заполняются СчетДт=62, СчетКт=90.01, СубконтоДт=Контрагент и суммой из строки ТЧ.

    Для документа Выписка добавил реквизит СчетРасчета (ПланСчетов).
    В зависимости от указанного счета расчета и заполненной колонки с суммой формируются соотв.проводки (Дт60 Кт51, Дт51 Кт62).
    Для ввода на основании контрагента в обработке заполнения документа Выписка вычисляется ДолгПокупателя через запрос в вирт.таблицу регистра Остатки
    с параметрами по счету Покупатели и Субконто = данныеЗаполнения. Аналогично вычисляется ДолгПоставщика.Если Долгпокупателя больше,
    тогда заполняется приход суммой разницы на счет Покупатели, иначе – расход на счет Поставщики.

    Создал документ АктСверкиВзаиморасчетов.Реквизит Документ – составного типа ДокументСсылка. При нажатии на кнопку в вирт.таблицу регистра Обороты
    делается запрос по суммаОборотДт(КТ) как СуммаУвеличения(Уменьшения)Долга. Счет = Значение(Поставщики) ИЛИ Покупатели, Субконто = Объект.Контрагент,
    дату окончания передаю в запрос как КонецДня(Объект.датаОконания), Период и группировка по регистратору. Результат выгружается в ТЧ документа.

    Печатную форму сделал через конструктор печати. Доработал процедуру Печать. Запросом из вирт.таблицы регистра Остатки по параметрам
    Период(&Начало – для первой ВТ, &Окончание – для второй ВТ) и субконто = &Контрагент получаю долг на начальную и конечную(включая) даты и вывожу их в шапке.

  32. Задание сделал почти в полном объёме, приделать БУ и УУ например к документу “Регистрация контактов” безсмыслено…  Остальное почти как в уроках.
    Есть один вопрос:  для заполнения докуменат “АктСверкиВзаиморасчётов” использовал запрос вида:
    ВЫБРАТЬ
    |    РегистрБухДвиженияССубконто.Регистратор КАК ДокДт,
    |    РегистрБухДвиженияССубконто.Сумма КАК СуммаДт,
    |    РегистрБухДвиженияССубконто1.Регистратор КАК ДокКт,
    |    РегистрБухДвиженияССубконто1.Сумма КАК СуммаКт
    |ИЗ
    |    РегистрБухгалтерии.РегистрБух.ДвиженияССубконто(&ПарамC, &ПарамПо, СубконтоДт1 = &ПарамКонтр, , ) КАК РегистрБухДвиженияССубконто
    |        ПОЛНОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.РегистрБух.ДвиженияССубконто(&ПарамC, &ПарамПо, СубконтоКт1 = &ПарамКонтр, , ) КАК РегистрБухДвиженияССубконто1
    |        ПО РегистрБухДвиженияССубконто.Регистратор = РегистрБухДвиженияССубконто1.Регистратор
    Неужели такой запрос с полным соединением идеологически правильнее (и самое главное эффективнее) чем 2 простых запроса ?
    Или мною использовано неоптимальное решение?

    • Представленный запрос мне не нравится.
      Для получения остатков нужно использовать таблицу остатков.
      Чтобы получить движения можно применить либо таблицу Обороты с периодичностью Регистратор. Либо использовать таблицу ДвиженияССубконто, и поставить следующее условие: (СубконтоКт1 = &Контрагент ИЛИ СубконтоДт1 = &Контрагент) И Активность

      • Понятно, потому и спрашивал что результат есть но как-то сомнения есть насчёт его получения… По остаткам (для отчёта) так и сделал.

  33. Задание выполнено.
    В документах ПоступлениеТоваров, РеализацияТоваров, Выписка создал реквизиты УУ и БУ (булево), изменил алгоритмы проведения. Признак записи движений (Записывать) вынес за условия “Если УУ… Если НУ…”. В обработке проведения документа ПоступлениеТоваров добавил проверку вида номенклатуры, услуги отнес на 26 счет.
    В ПВХ ВидыСубконто добавил предопределенный элемент Контрагенты и установил его на счетах 60, 62. Изменил обработку проведения ПоступлениеТоваров. Изменил форму и проведение документа БухОперация.
    Организовал количественный учет на счетах ТМЦ. Для этого в плане счетов добавил новый признак учета Количественный (булево). В регистре бухгалтерии создал небалансовый ресурс Количество, установил признак учета. В плане счетов для счетов учета ТМЦ установил признак учета Количественный. Изменил обработку проведения документа ПоступлениеТоваров. Изменил форму и проведение документа БухОперация.
    В документе РеализацияТоваров организовал списание по средневзвешенной цене. В обработку проведения в ветку “Если БУ…” добавил запрос, который выбирает данные по ТЧ документа, группирует их, затем к ним левым соединением по субконто1 (номенклатура) добавляется таблица остатков, откуда получаем количественные и суммовые остатки на момент времени документа. В параметрах ВТ фильтр по счетам В ИЕРАРХИИ счета 41. Результат запроса обрабатывается в выборке, где выполняется контроль остатков и рассчитывается средневзвешенная стоимость. Выручка идет в проводку одной строкой с общей суммой по ТЧ документа (учитывая и услуги), а себестоимость по каждой номенклатуре (данные с 41 субсчетов).
    Организовал ввод выписки на основании справочника Контрагенты. В обработку заполнения поместил запрос, который собирает остатки по счетам 60 и 62, в параметрах ВТ использовал фильтр по счетам и субконто1. Результат запроса выгружается в ТЧ документа.
    Создал документ АктСверкиВзаиморасчетов. По команде Заполнить выполняется запрос по таблице оборотов регистра бухгалтерии, фильтры по счетам и субконто1, период – регистратор. Запрос собирает увеличение/уменьшение долгов поставщиков/покупателей (СуммаОборотДт/СуммаОборотКт по 60/62 счетам соответственно), группирует по регистратору и упорядочивает по периоду возникновения. Результат запроса выгружается в ТЧ документа.
    Конструктором печати сформировал печатную форму. В процедуру Печать модуля менеджера добавил запрос (объединение двух запросов к таблице остатков регистра бухгалтерии на начало и конец период) по долгам поставщиков/покупателей на начало и конец периода. Долги вывел в виде параметров в шапку печатной формы.

  34. Добавил реквизиты УУ и БУ в документы, подумал, что не хватает общих реквизитов документов как было в 7.7 в 8-ке разработчики почему-то посчитали их лишними.  Проведение по управленческим или бухгалтерским регистрам в зависимости от этих флагов тривиальная задача.
    Но оказалось, что не такая уж тривиальная, если документ был проведен, а затем сняли флаг проведения по какому-то виду учета и провели заново, то старые движения все равно остались и их необходимо либо принудительно очищать в модуле документа или поменять свойство документа «Удаление движений» установив его в значение «Удалять автоматически» это на мой взгляд проще. Отсюда возник вопрос, зачем это свойство по умолчанию устанавливается «Удалять автоматически при отмене проведения», по моему логичнее «Удаление движений» и хотелось бы узнать, хорошо бы на примере, для решения каких задач лучше использовать это значение свойства по умолчанию. В одном из уроков вы говорите, что лучше прописывать удаление движений в коде не меняя значения этого свойства. Чем это лучше?
    Добавил субконто Контрагенты для счетов Покупатели и Поставщики.
    Отразил поступление услуг в документе Поступление если ВидНоменклатуры услуга. То проводка по счету 26 иначе по счету 41.01.
    Для реализации списания по средней цене организовал количественный учет по счетам ТМЦ.  Реализация списание себестоимость подробно рассмотрено в 8-ой главе блока и не составило труда. Единственно, что нужно было учесть это то, что в запросе по остаткам номенклатуры необходимо включать только товары или наборы и не включать услуги.
    Добавил в табличную часть Платежи документа Выписка реквизит СчетУчета и в случае если установлен флаг БУ добавляю этот реквизит к проверяемым реквизитам в процедуре ОбработкаПроверкиЗаполнения.
    Для реализации ввода на основании Контрагенты Выписки в процедуре ОбработкаЗаполнения модуля документа в одном запросе получал данные по долгам покупателя (СуммаОстатокДт) и долгам поставщикам (СуммаОстатокКт) объединяя данные двух запросов. Заполняя СуммуПрихода если есть долг покупателя и СуммуРасхода если есть долг поставщику.
    Для заполнения табличной части документа АктСверки использовал запрос к виртуальной таблице Обороты регистра бухгалтерии в качестве параметров виртуальной таблицы использовал фильтры для Счета (указывал два счета Покупатели и Поставщики) и фильтр на значение Субконто1 (Контрагент) пи этом СуммаОборотДт это Сумма уменьшения долга, ну и наоборот СуммаОборотКт это Сумма увеличения долга.
    Для получения остатков взаиморасчетов на начало и конец периода для вывода в печатной форме Акта сверки сначала реализовал определение остатка в виде функции и вызывал ее два раза для определения соответственно начального и конечного остатка. Затем подумал, что это не оптимально и получил остатки в том же запросе, в котором считывались данные документа. При этом помня, что виртуальная таблица ОстаткиИОбороты является тяжелой,  а  обороты не нужны, получение начального и конечного остатка реализовал с помощью двух левых соединений с ВТ Остатки первой при этом в качестве периода передавалась ДатаНачала из документа, а второй ДатаКонца.

    • >в 8-ке разработчики почему-то посчитали их лишними
      Это осознанное решение.
      Общие реквизиты в 7.7 хранились в одной таблице, что не очень хорошо сказывалось на быстродействии и масштабируемости.
      Кроме того, разработчики иногда необоснованно добавляли общие реквизиты.
      >В одном из уроков вы говорите, что лучше прописывать удаление движений в коде не меняя значения этого свойства. Чем это лучше?
      Рассмотрим документ “Поступление товаров”. До того как появились флаги УУ и БУ не было нужды удалять движения при проведении. Ведь наборы записей пишутся в режиме замещения. Важно понимать, что автоматическое удаление движений это запись в БД. То есть достаточно ресурсоемкая операция.
      С момента появления флагов УУ и БУ удаления движений также не требуется. Достаточно всегда взводить флаги Записывать для всех регистров по которым проводится текущий документ.
      Именно поэтому “Удалять автоматически при отмене проведения” наилучший вариант.
      Подробно этот вопрос мы рассматриваем в продвинутом.

      • >С момента появления флагов УУ и БУ удаления движений также не требуется. Достаточно всегда взводить флаги Записывать для всех регистров по которым проводится текущий документ.
        Правильно ли я понял, что если в ОбработкеПроведения я по всем регистрам установлю лаг Записывать и не буду ничего в регистры добавлять то при завершении транзакции наборы запишутся пустыми, т.е. заместят предыдущие возможно не пустые записи.

  35. Евгений, проясните пожалуйста неясность с актом взаиморасчетов.
    Итак, мы должны получить данные о долгах поставщиков/покупателей.
    1. Долг поставщика. Увеличивается, когда мы делаем предоплату (Выписка), уменьшается, когда он поставляет нам товар (ПоступлениеТоваров).
    2. Долг покупателя. Увеличивается, когда мы продаем ему товар (РеализацияТоваров), уменьшается, когда от покупателя поступает оплата (Выписка).
    Т.о. у нас в качестве регистраторов могут быть документы: ПоступлениеТоваров, РеализацияТоваров, Выписка, БухОперация. Но в условии перечислены только “оплата или отгрузка, либо “Операция”, т.е. это Выписка, РеализацияТоваров и БухОперация. Документа ПоступлениеТоваров нет. Я не уловил смысла задачи или в условии пропущен этот документ?

    • Документ закупки, конечно тоже должен встречаться.
      Указал это в тексте задания.

  36. А что такое средневзвешенная цена? Это обычное списание по средней цене, рассчитываемой на момент документа списания или что то другое?

    • Да, все верно. Средняя на момент документа.

  37. Евгений, просмотрел задание, появился вопрос. Для расчета средневзвешенной цены нужно организовывать количественный учет на счетах ТМЦ (прямо об этом в тексте задания не сказано) или количество брать из регистра ОстаткиТоваров?

    • Да, нужно организовать количественный учет на регистре бухгалтерии.