Базовый курс. Занятие №10

Начинаем третий блок базового курса.
Представляем первое занятие по нему.

Необходимо изучить следующие главы.
Глава 1. Основные понятия бухгалтерского учета.
Глава 2. План счетов.
Глава 3. Регистр бухгалтерии.
Глава 4. Программная работа с регистром бухгалтерии.
Глава 5. Автоматизация аналитического учета.

Также нужно выполнить домашнее задание, текст которого доступен на странице.

Задание необходимо выполнять в ИБ после предыдущего ДЗ.

В этой же теме необходимо написать отчет о выполнении задания.

ps. Участники курса без доступа в мастер-группу отчитываться по домашним заданиям не могут.

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

Если не активировали токен — посмотрите видео-инструкцию (видео N5)

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

комментария 72 на “Базовый курс. Занятие №10”

  1. Опять начинаю отставать, но доучиться надо.
    Итак ДЗ10
    До свёртки всё как в уроках.
    Свёртка. Модуль объекта док-та Операция. Процедура  ПередЗаписью
    Набор = ЭтотОбъект.Движения.РегистрУправленческий;
    Таб = Набор.Выгрузить();
    Таб.Свернуть(“СчетДт,ВидСубконтоДт1, СубконтоДт1, СчетКт, ВидСубконтоКт1, СубконтоКт1″,”Сумма”);
    Набор.Загрузить(Таб);
    В модуле набора записей рег. бух. добавляю период.
    Проверка на групповой счет.
    Как-то “неказисто” получилось.
    При начале работы системы (модуль упр приложения) через ОбщиеФункцииСервер
    запрещаю групповые счета(реквизит счета запрет)
    вот такой запрос
    “ВЫБРАТЬ РАЗЛИЧНЫЕ
    Управленческий.Ссылка
    ИЗ
    ПланСчетов.Управленческий КАК Управленческий
    ГДЕ
    Управленческий.Родитель <> ЗНАЧЕНИЕ(Плансчетов.Управленческий.ПустаяСсылка)”;
    и такой обход
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
      
     СчетГруппа = ВыборкаДетальныеЗаписи.ссылка.Родитель.ПолучитьОбъект();
     СчетГруппа.Запрет = Истина;
     СчетГруппа.Записать();
      
    КонецЦикла;

    В модуле НЗ  рег. бух.
    ПередЗаписью
     Для каждого Проводка Из ЭтотОбъект Цикл
      
      Если Проводка.СчетДт.Запрет ИЛИ Проводка.СчетКт.Запрет Тогда
       Сообщить(“выбран групповой счет”);
       Отказ = Истина;
      КонецЕсли;
      
     КонецЦикла;

    Неказисто, т.к. родитель в общем модуле повторяется, а я ему снова запрет в истину.
    Наверное можно что-то додумать, но и так далеко отстал. “Бегу” дальше.

  2. Елена 22.06.2011 в 16:06

    ДЗ 10 Задание выполнено

    План счетов, ПВХ, Регистр Бухгалтерии, Проведения документов- реализовала- вопросов не возникло.
    Для свертки дублей, использовала метод «свернуть()»
    Для контроля использования счета-группы добавлен реквизит – «ЗапретИспользования»
    В МодулеНабора – контроль его использование
    Процедура ПриЗаписи(Отказ, РежимЗаписи)
    Запрос = Новый Запрос;
    Запрос.Текст =
    “ВЫБРАТЬ
    | РегистрБухгалтерии.СчетДт как Счет
    |ИЗ
    | РегистрБухгалтерии.РегистрБухгалтерии КАК РегистрБухгалтерии
    |ГДЕ
    | РегистрБухгалтерии.Регистратор = &Регистратор
    | И РегистрБухгалтерии.СчетДт. ЗапретИспользования
    |
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |ВЫБРАТЬ
    | РегистрБухгалтерии.СчетКт как Счет
     
    |ИЗ
    | РегистрБухгалтерии.РегистрБухгалтерии КАК РегистрБухгалтерии
    |ГДЕ
    | РегистрБухгалтерии.Регистратор = &Регистратор
    | И РегистрБухгалтерии.СчетКт. ЗапретИспользования “;
     
    Запрос.УстановитьПараметр(“Регистратор”, отбор.Регистратор.Значение);
     
    Результат = Запрос.Выполнить();
     
    ВыборкаДетальныеЗаписи = Результат.Выбрать();
    если не результат.Пустой() тогда
    отказ =Истина;
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = “Счет “+ВыборкаДетальныеЗаписи.Счет+” нельзя использовать”;
    Сообщение.Сообщить();
    КонецЦикла;
    конецесли;
    КонецПроцедуры

  3. Надежда 11.06.2011 в 02:57

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

    • >Логически не поняла для чего при сворачивании пришлось указывать еще и поле Период
      Период это обязательное свойство записи регистра. Если его не указать в методе Свернуть, то таблица значений будет без этой колонке. То есть таблица не будет соответствовать формату набора записей регистра.

  4.  

    1) Создал план счетов «Бухгалтерский». В МО плана счетов «Бухгалтерский» реализовал программное заполнение реквизита «Порядок счета».

    <code>

    Процедура ПередЗаписью(Отказ)

    Порядок = ПолучитьПорядокКода();

    Если ЗначениеЗаполнено(Родитель) Тогда

    ЗнчРодВид = Родитель.ПолучитьОбъект().Вид;

    Если ЗначениеЗаполнено(Вид) Тогда

    Если НЕ Вид = ЗнчРодВид Тогда

    Сообщить(“Вид счета приводится к виду счета родителя”);

    Вид = ЗнчРодВид;

    КонецЕсли;

    Иначе

    Вид = ЗнчРодВид;

    КонецЕсли;

    КонецЕсли;

    КонецПроцедуры
    </code>
    Заполнил план счетов.
    2) Все остальное сделал как в уроках. 3)Для выполнения требования уникальности проводок в документе Операция добавил в МО
    <code>

    Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)

    Если ПометкаУдаления<>Ссылка.ПометкаУдаления Тогда

    Набор = Движения.РегистрБухгалтерии;

    Набор.Прочитать();

    Набор.УстановитьАктивность(НЕ ПометкаУдаления);

    Набор.Записать();

    Иначе

    Набор = Движения.РегистрБухгалтерии;

    ТабЧасть = Набор.Выгрузить();

    КоличествоДо=ТабЧасть.Количество();

    ТабЧасть.Свернуть(“СчетДт,СубконтоДт1,ВидСубконтоДт1,СчетКт,СубконтоКт1,ВидСубконтоКт1″,”Сумма”);

    КоличествоПосле=ТабЧасть.Количество();

    Если Не КоличествоДо = КоличествоПосле Тогда

    Набор.Загрузить(ТабЧасть);

    КонецЕсли;

    КонецЕсли;

    КонецПроцедуры
    </code> 4)Для механизма, который не будет позволять использовать в проводках счета-группы хотел использовать форму выбора в ПланСчетов.Бухгалтерский. Не получилось. Возник вопрос — А почему если добавить в ПланСчетов.Бухгалтерский форму выбора и в ней попытаться написать код в МФ Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора), то при выборе из документа операция в этот код система не заходит?(возможно ответ уже есть в ответе или в МГ — посмотрю). По другому варианту реализовал в МФ документа «Операция»
    <code>

     

    &НаКлиенте

    Процедура ДвиженияРегистрБухгалтерииСчетДтПриИзменении(Элемент)

    //внимание – это не ТЧ это регистр и надо с ним как с регистром

    СчетДебет = Элементы.ДвиженияРегистрБухгалтерии.ТекущиеДанные.СчетДт;

    НомерСтроки = Элементы.ДвиженияРегистрБухгалтерии.ТекущаяСтрока;

    ФлагСчетГруппа = ПроверкаНаПотомков(СчетДебет, НомерСтроки, “Дт”);

    Если НЕ ФлагСчетГруппа Тогда

    Сообщить(“Этот счет выбрать нельзя, это счет-группа”);

    //ЭтаФорма.ОбновитьОтображениеДанных() – не обновляет отображение текущей ячейки

    //только когда ухожу с ячейки – тогда обновится – надо посмотреть как обновить

    ЭтаФорма.ОбновитьОтображениеДанных();

    Конецесли;

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

     

    &НаСервере

    Функция ПроверкаНаПотомков(СчетДтКт, НомерСтроки, ПризнакДтКт)

    Запрос = Новый Запрос;

    Запрос.Текст =

    “ВЫБРАТЬ ПЕРВЫЕ 1

    | Бухгалтерский.Ссылка

    |ИЗ

    | ПланСчетов.Бухгалтерский КАК Бухгалтерский

    |ГДЕ

    | Бухгалтерский.Родитель = &Родитель”;

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

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

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

    КолЗап=ВыборкаДетальныеЗаписи.Количество();

    Если КолЗап > 0 Тогда

    НаборФорма = Объект.Движения.РегистрБухгалтерии;

    //вообще работает и без ДанныеФормыВЗначение

    Набор = ДанныеФормыВЗначение(НаборФорма, Тип(“РегистрБухгалтерииНаборЗаписей.РегистрБухгалтерии”));

    Если СчетДтКт=”Дт” Тогда

    Набор[НомерСтроки].СчетДт = ПланыСчетов.Бухгалтерский.ПустаяСсылка();

    Иначе

    Набор[НомерСтроки].СчетКт = ПланыСчетов.Бухгалтерский.ПустаяСсылка();

    КонецЕсли;

    //вообще работает и без ЗначениеВДанныеФормы

    ЗначениеВДанныеФормы(Набор, НаборФорма);

    Возврат Ложь;

    Иначе

    Возврат Истина;

    КонецЕсли

    КонецФункции

     

     

    &НаКлиенте

    Процедура ДвиженияРегистрБухгалтерииСчетКтПриИзменении(Элемент)

    //внимание – это не ТЧ это регистр и надо с ним как с регистром

    СчетКредит = Элементы.ДвиженияРегистрБухгалтерии.ТекущиеДанные.СчетКт;

    НомерСтроки = Элементы.ДвиженияРегистрБухгалтерии.ТекущаяСтрока;

    ФлагСчетГруппа = ПроверкаНаПотомков(СчетКредит, НомерСтроки, “Кт”);

    Если НЕ ФлагСчетГруппа Тогда

    Сообщить(“Этот счет выбрать нельзя, это счет-группа”);

    //ЭтаФорма.ОбновитьОтображениеДанных() – не обновляет отображение текущей ячейки

    //только когда ухожу с ячейки – тогда обновится – надо посмотреть как обновить

    ЭтаФорма.ОбновитьОтображениеДанных();

    Конецесли;

    КонецПроцедуры
    </code>