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

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

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

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

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

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

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

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

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

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

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

  1. Задание выполнено. Проблем не было.

  2. Вот и моё время отчитываться :)  Догоняю группу. Пишу пока дочка спит :)))
    Создал ПланСчетов, ПВХ, РегистрБухгалтерии.  Программное заполнение реквизита в модуле объекте ПС «Порядок счета» в событии “ПередЗаписью”: <code>Порядок = ПолучитьПорядокКода();</code>
    Проведение документов “Поступление товаров”,”Авансовый” реализовано в отдельном обмем модуле:<code>
    Процедура ВыполнитьДвижения(Ссылка) Экспорт
    Если ТипЗНЧ(Ссылка) = Тип(“ДокументСсылка.ПоступлениеТоваров”) Тогда
    Документ = “Документ.ПоступлениеТоваров”;
    СчетКТ = “ПланСчетов.Хозрасчетный.Поставщики”;
    Иначе
    Документ = “Документ.АвансовыйОтчет”;
    СчетКТ = “ПланСчетов.Хозрасчетный.Сотрудники”;
    КонецЕсли;

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

    НаборБУ = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
    НаборБУ.Записывать = Истина;
    НаборБУ.Отбор.Регистратор.Значение = Ссылка;

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

    • Забыл добавить. Реквизит для проверки группы в счетах заполняется при запуске системы. <code>
      Процедура УстановитьПараметрыСчетов() Экспорт

      ВыборкаСчетов = ПланыСчетов.Хозрасчетный.ВыбратьИерархически();
      Пока ВыборкаСчетов.Следующий() Цикл
      Если НЕ ЗначениеЗаполнено(ВыборкаСчетов.Ссылка.Родитель) Тогда
      Продолжить;
      КонецЕсли;

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

  3. Светлана 05.06.2011 в 13:34

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

  4. Задание выполнил.
    Создал План счетов, ПВХ и регистр бухгалтерии с нужными характеристиками.
    В документе “Операция” сделал свертку табличной части, разбирался и не разобрался с ошибкой “Данные были изменены или удалены другим пользователем”.
    Для контроля использования счетов-групп в проводках использовал реквизит Плана счетов “СчетГруппа”.

  5. 10  и 11 ДЗ выполнил. Пришлось работу поставить на второй план временно. Отчет писать нету времени, устал.

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

  7. Андрей Красник 29.05.2011 в 18:30

    Задание выполнил. Проблем не возникло

  8. Задание выполнил. Все получилось довольно быстро. Кода не много, подробные комментарии излишни.

    Получившийся Модуль Набора Записей регистра БУ:

    Процедура ПередЗаписью(Отказ, РежимЗаписи)
        Ссылка=Отбор.Регистратор.Значение;
        Если ТипЗнч(Ссылка) = Тип("ДокументСсылка.Операция") Тогда
            ОбработатьНаборЗаписейОперации();
        КонецЕсли;
    КонецПроцедуры

    Процедура ОбработатьНаборЗаписейОперации()
        ТЗПроводок=Выгрузить();
        СтрСвертки="";
        Для каждого КолонкаТЗПроводок Из ТЗПроводок.Колонки Цикл
            ИмяКолонки=КолонкаТЗПроводок.Имя;
            Если (ИмяКолонки"Сумма") и (ИмяКолонки"НомерСтроки") и (ИмяКолонки"Регистратор") Тогда
                СтрСвертки=СтрСвертки+","+ИмяКолонки;
            КонецЕсли;
        КонецЦикла;
        СтрСвертки=Сред(СтрСвертки,2);
        ТЗПроводок.ЗаполнитьЗначения(Отбор.Регистратор.Значение.Дата,"Период");
        ТЗПроводок.Свернуть(СтрСвертки,"Сумма");
        Загрузить(ТЗПроводок);
    КонецПроцедуры

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

        Запрос.УстановитьПараметр("Регистратор", Отбор.Регистратор.Значение);

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

        Если не Результат.Пустой() Тогда
            Отказ=Истина;
            ВыборкаДетальныеЗаписи = Результат.Выбрать();
            Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
                Сообщение = Новый СообщениеПользователю;
                Сообщение.Текст = "ОШИБКА! в "+Отбор.Регистратор.Значение+" использован Групповой счет - "+ВыборкаДетальныеЗаписи.ГрупповойСчет;
                Сообщение.Сообщить();
            КонецЦикла;
        КонецЕсли;
    КонецПроцедуры

    В процедуре ПередНачаломРаботыСистемы() Модуля Упр. прил. вызываем функцию общего серверного модуля ПроставитьГруппыВСчетах(), где проверяем и исправляем правильность установки признака ГрупповойСчет у счетов:

    Процедура ПроставитьГруппыВСчетах() Экспорт
        Запрос = Новый Запрос;
        Запрос.Текст =
            "ВЫБРАТЬ РАЗЛИЧНЫЕ
            |   Управленческий.Родитель КАК НеправильныеСчета
            |ИЗ
            |   ПланСчетов.Управленческий КАК Управленческий
            |ГДЕ
            |   Управленческий.Родитель  ЗНАЧЕНИЕ(ПланСчетов.Управленческий.ПустаяСсылка)
            |   И Управленческий.Родитель.ГрупповойСчет = ЛОЖЬ
            |
            |ОБЪЕДИНИТЬ ВСЕ
            |
            |ВЫБРАТЬ РАЗЛИЧНЫЕ
            |   Управленческий.Ссылка
            |ИЗ
            |   ПланСчетов.Управленческий КАК Управленческий
            |ГДЕ
            |   Управленческий.ГрупповойСчет
            |   И (НЕ Управленческий.Ссылка В
            |               (ВЫБРАТЬ РАЗЛИЧНЫЕ
            |                   Управленческий.Родитель
            |               ИЗ
            |                   ПланСчетов.Управленческий КАК Управленческий))";

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

    Модуль Объекта ПланаСчетов :

    Процедура ПередЗаписью(Отказ)
        Порядок=ПолучитьПорядокКода();
       
        //Проверка СТАРОГО родителя, если новый счет
        Если ЗначениеЗаполнено(Ссылка) Тогда
            //Счет перезаписывается
            СтарРодитель=Ссылка.Родитель;
            Если СтарРодитель=Родитель Тогда
                //Родитель не изменился. Ничего не делаем
            Иначе
                Если ЗначениеЗаполнено(СтарРодитель) Тогда
                    //Если был заполненный старый родитель, то надо его проверить
                    ПроставитьГруппуУРодителя(СтарРодитель,Ссылка);
                КонецЕсли;
            КонецЕсли;
        КонецЕсли;
        //Проверка НОВОГО родителя
        Если (ЗначениеЗаполнено(Родитель) и Родитель.ГрупповойСчет=Ложь) Тогда
            //Если у нового заполненного родителя не стоял признак ГрупповойСчет. Проставляем.
            ОбъектРодитель=Родитель.ПолучитьОбъект();  
            ОбъектРодитель.ГрупповойСчет=Истина;
            ОбъектРодитель.Записать();
        КонецЕсли;
    КонецПроцедуры

    Процедура ПередУдалением(Отказ)
        ПроставитьГруппуУРодителя(Родитель,Ссылка);
    КонецПроцедуры

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

        Запрос.УстановитьПараметр("Родитель", Родитель);
        Запрос.УстановитьПараметр("ТекСчет", ТекСчет);

        Результат = Запрос.Выполнить();
        Если Результат.Пустой() Тогда
            //Подчиненных счетов нет
            Если Родитель.ГрупповойСчет Тогда
                Меняем=1;
            Иначе
                Меняем=0;
            КонецЕсли;
        Иначе 
            //Есть подчиненные счета
            Если Родитель.ГрупповойСчет Тогда
                Меняем=0;
            Иначе
                Меняем=1;
            КонецЕсли;
        КонецЕсли;
        Если Меняем=1 Тогда
            Сч_РодительОбъект=Родитель.ПолучитьОбъект();
            Сч_РодительОбъект.ГрупповойСчет=НЕ Сч_РодительОбъект.ГрупповойСчет;
            Сч_РодительОбъект.Записать();
            //Сообщить("У счета "+Сч_РодительОбъект.Код+" поменяли признак Групповой на "+Сч_РодительОбъект.ГрупповойСчет);
        КонецЕсли;
    КонецПроцедуры
  9. Создан план счетов «Хозрасчетный», содержащий все необходимые, согласно заданию, счета.
    Кроме описанных в задании, создал активно/пассивный счет «Продажи» с кодом 90, и подчинил ему описанные в задании счета 90.01 и 90.02.
    Понимаю, что, в принципе, 90.01 и 90.02 могут существовать и сами по себе, без подчинения счету 90. Но с 90-м счетом как-то привычнее. J
    Обеспечено программное заполнение реквизита «Порядок счета».

    Создан план видов характеристик «ВидыСубконтоХозрасчетные».
    Введен ВидСубконто = «Номенклатура».
    На счете 41 плана счетов «Хозрасчетный» и его Субсчетах (41.01 и 41.02) введен аналитический учет по номенклатуре.

    Создан регистр бухгалтерии «Хозрасчетный».

    Изменил процедуру «ОбработкаПроведения» модуля объекта документа «ПоступлениеТоваровУслуг» таким образом, чтобы данный документ делал проводку Дт41.01 -> Кт60.
    Примечание: На фрагменте кода все внесенные для этого изменения помечены текстом «// Для Регистра Бухгалтерии».
    http://paste.org.ru/?dr0zup – фрагмент кода

    Почему-то в моей конфигурации документ «Авансовый отчет» отсутствует. Где-то накосячил в предыдущих ТЗ?
    Создаю документ. По функциональности он похож на документ «ПоступлениеТоваровУслуг». Только в шапке документа вместо реквизита «Контрагент» – реквизит «Сотрудник», и нет табличной части «Услуги». Во всяком случае – пока. 
    После того, как документ создан, создаю процедуру «ОбработкаПроведения» в модуле объекта данного документа.
    Код процедуры:
    http://paste.org.ru/?4lz267

    Создан документ «ОперацияБух».
    Период записей регистра заполняется датой документа. Сложностей не возникло – все, как на лекции – в модуле набора записей регистра бухгалтерии «Хозрасчетный» написан код:
    http://paste.org.ru/?dz7mnh
    Свертка проводок в документе «Операция» обеспечена следующим кодом в модуле объекта данного документа:
    http://paste.org.ru/?tqfiz3
    Евгений, прошу обратить внимание на то, как я вычисляю максимальное количество субконто. Метод отрабатывает правильно, но, возможно, есть штатное определение данного реквизита? (Ваше решение, также как и решение сокурсников, до того, как не опубликую свое, по-честному не смотрю. Так что, если вы уже об этом говорили при разборе ДЗ – прошу прощения.)

    Контроль за использованием в проводках счетов-групп я возложил на функцию «СчетаНабораРазрешены», которую поместил в модуль набора записей регистра бухгалтерии «Хозрасчетный». Вызывается эта функция из процедуры «ПередЗаписью» модуля набора записей регистра:
    http://paste.org.ru/?m0kt6a

    • Максимальное количество субконто правильнее определить обращаясь к метаданным:

      Метаданные.ПланыСчетов.Хозрасчетный.МаксКоличествоСубконто

      .

      • О! Спасибо, поправлю!
        Это тем более актуально, что, в связи с вводом количественного учета, например, моя формула перестанет работать.

  10. Задание выполнил. Особо рассказывать нечего, все очень просто, и делается как описывалось на уроках, кроме странного глюка, над которым я бился часа два и решил только с помощью звонка приятелю – методом научного тыка сообща нашли, что платформа не понимает если тип значения для видов субконто в плане видов характеристик не составной.

    • Все верно, есть такая особенность платформы.

  11. Задание выполнила. 
    http://fotoifolder.ru/view_full_size/bzjzrwowxc8n

  12. Дмитрий 27.05.2011 в 01:16

    Не пойму что делаю не так. В документе “операция” все сворачивается, дата документа проставляется, но после записи форма остается с признаком модифицированности. При повторной попытки записи выдает “Данные были изменены или удалены другим пользователем”.
    Причем, если, как в уроках, сделать документ, задать вручную период, записать, и уже потом накручивать свертки и изменение активности при пометке удаления, то все работает.
    Неужели никто не столкнулся… :0\

    • Дмитрий 27.05.2011 в 01:22

      Коряво объяснил. Проблема возникает, только при записи новых документов.

    • С этой неприятностью столкнулись практически все. Рассмотрим этот момент в решении ДЗ.

    • Дмитрий 27.05.2011 в 10:45

      Смотрел отчеты коллег ночью, невнимательно. Пришлось подсмотреть в ДЗ ответ. Все остальное получилось.
      Создал регистр бухгалтерии “Управленческий”, план счетов “Основной” с реквизитом “ЭтоГруппа”, план видов характеристик “Виды субконто”.
      //Модуль плана счетов
      <code>

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

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

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

      &НаКлиенте
      Процедура ДвиженияУправленческийСчетДтОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)

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

      КонецПроцедуры
       
      &НаКлиенте
      Процедура ДвиженияУправленческийСчетКтОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)

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

      КонецПроцедуры
       
       
      &НаСервереБезКонтекста
      Функция ПроверитьВозможностьИспользованияСчетаВПроводках(Счет)

      Возврат НЕ Счет.ЭтоГруппа;

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

      </code>
      //Модуль документа
      <code>

      Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
       
      НаборЗаписей = Движения.Управленческий;

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

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

      </code>

  13. Извините, еще забыла . СОздан признакУчета в планеСчетов “НеИспользоватьВпроводках”. который анализируется в модулеОбъекта НабораЗначений ПередЗаписью().

  14. Задание выполнено.
    Создан план счетов с предопределенными занчениями. Программное заполнение порядкаСчета сделано в модулеОбъекта ПередЗаписью(). Добавлена аналитика на счетах учета ТМЦ. Создан регист бухгалтерии, сделаны проводки док-тов в этот регистр в ОбработкеПроведения() перебором записей ТЧ Товар
    Создан док-т Операция,  в модулеОбъекта ПередЗаписью() заполняется период всех записей перебором  и убираются дубли строк путем выгрузки в таблицу Значений ,  затем таблица.Свернуть() и Загрузить().

  15. Задание выполнил.
    1.Для исключения использования в проводках счета-группы в план счетов добавил реквизит “ЗапретитьИспользоватьВПроводках” и функцию общего модуля “СчетМожноИспользоватьВПроводках(Счет) Экспорт”
    2. Свертку дублей делаю в процедуре  ПередЗаписьюНаСервере модуля формы документа Операция, используя метод свернуть таблицы значений.

  16. S. Bashutin 26.05.2011 в 08:25

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

  17. Почти сделал.
    Сделал все, но решил сделать формирование проводок в Операции через проведение. Данные для проводок ввожу в табличную часть документа, движения делаются в регистр бухгалтерии корректно, но не смог реализовать контроль выбора нужного субконто, которое сделано как характеристика.
    Хотелось бы узнать, как правильнее надо делать движения через документ Операция- через ввод новых строк сразу в движения документа (как в уроках), или все-таки через проведение документа?

    • Правильнее делать через ввод новых строк в наборе записей (как в уроках).

      • А почему? Логичнее же сделать привычный документ, с признаком проведения. Получается сохранить документ, но не вводить его учет и т.п.?

        • Можно сделать и документ.
          Но, напрямую редактируя набор записей:
          – практически не требуется кодирования;
          – не создаются лишние таблицы в базе данных – табличная часть документа.

          В принципе при желании можно и в операции (при редактировани набора записей) сделать состояния:
          – записан;
          – проведен;
          – помечен на удаление.

          • Понятно. Я все-таки добил свой вариант с табличной частью. Кода не очень много получилось, но он есть. Корректно выбираются и изменяются субконто счета

  18. Готово. План счетов с поддержкой аналитики создан. Порядок присваивается и для предопределенных и для пользовательских счетов. Документы оприходования товаров делают соответствующие движения в созданный регистр бухгалтерии. Создан документ Операция. Дубли проводок убираются путем выгрузки набора записей в таблицу значений, ее свертки и выгрузки обратно. Период заполняется как в видеоуроках. В план счетов добавлен реквизит Запретить использование в проводках. Пока сделал его программное проставление: в случае, когда записывается подчиненный счет – у родителя ставится соответствующий признак. При записи набора записей регистра бухгалтерии проверяются счета движений на наличие этого признака.

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

    КонецФункции
    </code>
    В документе “Поступление”  при проведении обращаюсь к процедуре общего модуля:
    <code>ДвиженияПоРегистрамСервер.ДвиженияПоБух(Движения,Результат.Выгрузить(),ПланыСчетов.Основной.Поставщики);
    в  общем модуле:
    Процедура ДвиженияПоБух(Движения,Таблица, СчетКт) Экспорт
    Движения.Хозрасчетный.Записывать = Истина;
    Для каждого СтрокаТаблицы Из Таблица Цикл
    НоваяЗапись = Движения.Хозрасчетный.Добавить();
    НоваяЗапись.СчетДт = ПланыСчетов.Основной.Товары;
    НоваяЗапись.СчетКт = СчетКт;
    НоваяЗапись.Сумма = СтрокаТаблицы.Сумма;
    НоваяЗапись.КоличествоДт = СтрокаТаблицы.Количество;
    НоваяЗапись.СубконтоДт.Номенклатура = СтрокаТаблицы.Номенклатура;
    НоваяЗапись.Период = СтрокаТаблицы.Период;
    КонецЦикла;  
    КонецПроцедуры    
    </code>
    аналогично проведение в ав. отчете.
    с установкой порядка для плана счетов, заполнением периода в операции вопросов не возникало.
    В операции сворачивание сделала в модуле документа через таблицу значений.
    Евгений, при одновременном просмотре защищенного видео с диска и работе в 1с не работает отладчик и copy-past, что очень не удобно.
     
     

  20. Виталий Межаков 25.05.2011 в 23:20

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

  21. Задание выполнено. Особых сложностей не возникло. Для аналитики был создан ПланВидовХарактеристик   ВидыСубконто. Добавлен справочник ПроизвольноеСубконто для дополнительных значений характеристик плана. Проводки в документах формируются загрузкой таблицы значений полученной запросом. В запросе установлен отбор товаров и наборов. В документе Операция (создан как в занатиях) свертка происходит  в модуле объекта документа ПриЗаписи. Выгружаю движения в таблицу значений, сворачиваю и загружаю обратно. В  ПланСчетов добавлен реквизит СчетГруппа с типом булево. Проверку счета вставил в форму документа в процедуру ОбработкаВыбора для СчетДт и СчетКт .

  22. Мария 25.05.2011 в 20:24

    Создала все нужные объекты предусмотренные в задании. В документе поступления проводки формируются в обработке проведения при помощи коллекции движений.  Реализацию автоматического заполнения периода записей сделала как было показано в уроках. Записи регистра бухгалтерии в модуле документа операция сначала выгружаются в ТЗ, а затем сворачиваются и загружаются обратно в регистр.
     

  23. Все получилось.
    Свертку по регистру бухгалтерии сделал в модуле набора записей регистра бухгалтерии, в обработчике ПередЗаписью используя для светки таблицу значений

  24. Майор 25.05.2011 в 18:02

    Всем доброго времени суток.

    Представляю отчёт по десятому домашнему заданию.
    Создал план счетов Управленческий с единственным реквизитом ЗапретитьВИспользованииПроводок.
    Завёл предопределённые счета в соответствии с заданием, 41-й счёт ТМЦ – групповой, у него два подчинённых: Товары и Материалы. Выручка и Себестоимость – независимые счета.
    В модуле объекта плана счетов через ПолучитьПорядокКода() заполнил в процедуре ПередЗаписью реквизит “Порядок счета”.

    Создал план видов характеристик ВидыСубконто, а так же подчинённый этому плану справочник ПроизвольныеСубконто. Добавил в ПВХ предопределённое значение “Номенклатура” типа СправочникСсылка.Номенклатура. В плане счетов установил максимальное количество субконто = 3, в качестве видов субконто указал соответсвующий план видов харатеристик. У счетов 41.01 и 41.02 добавил вид субконто Номенклатура.

    Создал регистр бухгалтерии Управленческий с привязкой к соответствующему плану счетов. Поставил флаг Корреспонденция, добавил реквизит Сумма, в качестве регистраторов указал документы по движению NVW/

    Доработал процедуру проведения документа ПоступлениеТоваров привожу частичный листинг:
    (выполняется в цикле обхода табличной части, впоследующем набор записей явно записывается)
    <code>
    //Движение по регистру бухгалтерии Управленческий
    Проводка = Движения.Управленческий.Добавить();
    Проводка.Период = Дата;
    Проводка.СчетДт = ПланыСчетов.Управленческий.Товары;
    Проводка.СубконтоДт.Номенклатура = ТекСтрока.Номенклатура;
    Проводка.СчетКт = ПланыСчетов.Управленческий.Поставщики;
    Проводка.Сумма = ТекСтрока.Сумма;
    </code>

    Проведение по регистру бухгалтерии для АвансовогоОтчета аналогично, за исключением счёта кредита – Сотрудники.

    Создал документ Операция. Период записей регистра заполнил в модуле объекта в процедуре ПередЗаписью (первоначально сделал с проверкой на условие ЭтоНовый(), но в таком виде добавление строк в уже записанный документ невозможно, пришлось условие убирать и переприсваивать период при каждой записи документа), там же организовал удаление дублей строк. Привожу листинг модуля:
    <code>
    Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)

    Набор = Движения.Управленческий;

    Для каждого Проводка Из Набор Цикл
    Проводка.Период = Дата;    
    КонецЦикла;

    Если ПометкаУдаления <> Ссылка.ПометкаУдаления Тогда
    Набор.Прочитать();
    Набор.УстановитьАктивность(НЕ ПометкаУдаления);
    Набор.Записать();    
    КонецЕсли;

    Таблица = Набор.Выгрузить();
    НомераСтрок = Набор.ВыгрузитьКолонку(“НомерСтроки”);

    Для каждого Колонка Из Таблица.Колонки Цикл
    СписокКолонок = Строка(СписокКолонок) + Колонка.Имя + “, “;
    КонецЦикла;

    СписокКолонок = Лев(СписокКолонок, СтрДлина(СписокКолонок)-2);
    СписокКолонок = СтрЗаменить(СписокКолонок, “Сумма,”, “”);
    СписокКолонок = СтрЗаменить(СписокКолонок, “НомерСтроки,”, “”);

    Таблица.Свернуть(СписокКолонок, “Сумма”);
    Набор.Загрузить(Таблица);
    Набор.ЗагрузитьКолонку(НомераСтрок, “НомерСтроки”);
    Набор.Записать();

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

    Процедура ПриКопировании(ОбъектКопирования)

    Набор = ОбъектКопирования.Движения.Управленческий;
    Набор.Прочитать();

    НаборНовый = Движения.Управленческий;
    НаборНовый.Загрузить(Набор.Выгрузить());

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

    Для того, чтоб в проводках не использовались счета-группы, в процедуре ПередЗаписью модуля набора записей регистра бухгалтерии Управленческий организовал проверку:
    <code>
    Процедура ПередЗаписью(Отказ, РежимЗаписи)

    Запрос = Новый Запрос;
    Запрос.Текст =
    “ВЫБРАТЬ
    |    Управленческий.Наименование
    |ИЗ
    |    ПланСчетов.Управленческий КАК Управленческий
    |ГДЕ
    |    Управленческий.ЗапретитьВИспользованииПроводок = ИСТИНА”;

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

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

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

  25. Добрый день, выполнил задание.
    1.Создал необходимый план счетов и заполнение, сделал автоматическое заполнения “порядка счета”, при изменении кода счета
    2.Сформировал аналитический учет на счетах ТМЦ, создал документы “Поступление товаров” и “Операция” с соответствующими проводками + проверка на дубли.

  26. Юрий Торговцев 25.05.2011 в 17:07

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

    Механизм группировки состоит в выгрузке содержимого набора записей в таблицу значений, группировки и
    загрузки. Если такое поведение необходимо обеспечить только для документа Операция то
    соответствующие действия производим в обработчике события ПередЗаписью() модуля объекта документа Операция.
    Иначе в обработчике события ПередЗаписью() модуля набора записей регистра бухгалтерии.

    <code>
    Набор = Движения.ХозяйственныеОперации;
    Таблица = Набор.Выгрузить();
    Таблица.Свернуть(“Период, Регистратор, Активность, СчетДт, СчетКт, МоментВремени, ВидСубконтоДт1, СубконтоДт1 , ВидСубконтоКт1, СубконтоКт1”, “Сумма”);
    Набор.Загрузить(Таблица);
    </code>

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

  27. Yuri Golovko 25.05.2011 в 17:00

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

  28. Док. «Операция» все работает только на новом документе «Операция», при попытке что либо сделать  с уже записанным доком получаю ошибку -> «Данные были изменены или удалены другим пользователем». Открываю Операцию из списка записей Регистра бухгалтерии, в открывшемся документе не вижу половины значений (где СчетКт -нет, где Суммы), хотя в записи регистра имеется… Что я сделал не так?

    • В решении задания мы разберем описанную проблему. На самом деле это ошибка в платформе.

      • Юрий Торговцев 26.05.2011 в 08:33

        Так же столкнулся с этой проблемой. Решил созданием объектов присутствующих в механизме в строго определенной последовательности приведенной в видеоуроках(хотел скопировать их из базы в которой работаю при просмотре уроков).
        При попытке удалить связь с ВидыСубконто в ПланеСетов  платформа падала.

        • К сожалению, такие нюансы все еще присутствуют в платформе.

  29. Создал план счетов «Управленческий». Для установки порядка при вводе предопределенных элементом, поставил маску @@.@@ и взвел флаг «Автопорядок по коду». Для обычных элементов установил порядок в событии МО ПередЗаписью().
                Создал План видов характеристик «ВидыСубконто», тип характеристики – справочник Номенклатура, предопределенный элемент характеристика – Товары. Указал в плане счетов в свойстве Виды субконто и установил максимальное количество = 1.
                Создал регистр Бухгалтерии “РегистрУправленческий», ресурсы Сумма, свойства План счетов – «Управленческий», флаг Корреспонденция.
                В МО док. «Приходная накладная» и «Авансовый отчет» реализовал проведение по Бух. Регистру.
                Создал док. “Операция», проведение Запретить. В форме вывел набор записей РегистрБухгалтерии. Спрятал Период. В МО в событии ПередЗаписью() заполнил Период = Дата, выгрузил набор в ТЗ, свернул по всем колонкам, Сумма – колонка суммирования.
    Добавил реквизит СчетГруппа в план счетов и произвел проверку в событии ПередЗаписью().

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

    КонецЦикла;
    В модуле аванс отчета
    Движения.УчетХозОпер.Записывать = Истина;
    Для каждого ТекСтрока Из Товары Цикл
    Проводка = Движения.УчетХозОпер.Добавить();
    Проводка.Период=Дата;
    Проводка.СчетДт=ПланыСчетов.Бухгалтерский.Товары;
    Проводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Товары]=ТекСтрока.Номенклатура;
    Проводка.СчетКт=ПланыСчетов.Бухгалтерский.Сотрудники;
    Проводка.Сумма=ТекСтрока.Сумма;

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

    ЗаполнитьПериуд();    

    КонецЕсли;
    // Вставить содержимое обработчика.
    КонецПроцедуры
    Процедура ЗаполнитьПериуд()
    Дата=Отбор.Регистратор.Значение.Дата;
    Для каждого Проводка Из ЭтотОбъект Цикл

    Проводка.Период=Дата;

    КонецЦикла;

    КонецПроцедуры
    Модуль формы операции

    &НаКлиенте
    Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
    НаборНаСервере();
    КонецПроцедуры

    &НаСервере
    Процедура НаборНаСервере()

    НаборФ=Объект.Движения.УчетХозОпер;
    Набор=ДанныеФормыВЗначение(НаборФ,Тип(“РегистрБухгалтерииНаборЗаписей.УчетХозОпер”));
    Таб=Набор.Выгрузить();
    Для каждого Строка Из Таб Цикл
    Стр= Новый Структура(“СчетДт,СчетКт,СубконтоДт1,СубконтоКт1”);
    Стр.Вставить(“СчетДт”,Строка.СчетДт);
    Стр.Вставить(“СчетКт”,Строка.СчетКт);
    Стр.Вставить(“СубконтоДт1”,Строка.СубконтоДт1);
    Стр.Вставить(“СубконтоКт1”,Строка.СубконтоКт1);

    Строки=Таб.НайтиСтроки(Стр);
    Если Строки.Количество()>1 Тогда
    Сумма=0;Сч=0;
    Для каждого Зн1 Из Строки Цикл
    Сумма=Сумма+Зн1.Сумма;
    Сч=Сч+1;
    Если СЧ=1 Тогда
    НомерСтроки=Зн1.НомерСтроки-1;
    Иначе
    Таб.Удалить(Зн1.НомерСтроки-1);    

    КонецЕсли;

    КонецЦикла;
    Таб[НомерСтроки].Сумма=Сумма;

    КонецЕсли;     

    КонецЦикла;
    Набор.Загрузить(Таб);
    НаборФ.Загрузить(Таб);

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

    КонецПроцедуры // НаборНаСервере()

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

    &НаСервереБезКонтекста
    Функция ПроверкаСервер(Ссылка)

    Возврат Ссылка.НеИспользГруппы;

    КонецФункции // ПроверкаСервер()

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

  31. Андрей Кусанов 25.05.2011 в 15:17

    Задание выполнил.
    Создал ПС с маской, автопорядком по коду, убрал права на интерактивное удаление.
    ПВХ “ВидыСубконто” с доп. значениями характеристик в подч. спр. “ПользовательскиеСубконто”. Связал ПВХ с ПС.
    Выставил количество макс. кол. субк. 1.
    Добавил счета и субконто для них в конфигураторе.
    Регистр бухгалтерии “РегистрБухгалтерииРабочий” с привязкой к плану счетов.
    Добавил движения в документы прихода, у меня была одна общая процедура. Параметром “КоррСчет” передаю значение счета кредита.

    Фрагмент кода (сворачиваю таблицу движений):

    <code>//Бух. проводки
    РегистрБухгалтерииРабочий = Движения.РегистрБухгалтерииРабочий;
    РегистрБухгалтерииРабочий.Записывать = Истина;

    Если ЗначениеЗаполнено(КоррСчет) И ТипЗнч(КоррСчет) = Тип(“ПланСчетовСсылка.Рабочий”) Тогда
    СчетТовары = ПланыСчетов.Рабочий.Товары;
    ВидСубконтоТовары = ПланыВидовХарактеристик.ВидыСубконто.Номенклатура;
    ТабТовары = ТабДвижений.Скопировать(Новый Структура(“ИмяТЧ”, “Товары”), “Номенклатура, Сумма, Период”);
    ТабТовары.Свернуть(“Номенклатура,Период”, “Сумма”);
    Для каждого Строка Из ТабТовары Цикл
    Движение = РегистрБухгалтерииРабочий.Добавить();
    Движение.СчетДт = СчетТовары;
    //Движение.СубконтоДт.Номенклатура = Строка.Номенклатура;
    Движение.СубконтоДт[ВидСубконтоТовары] = Строка.Номенклатура;
    Движение.СчетКт = КоррСчет;
    Движение.Сумма = Строка.Сумма;
    Движение.Период = Строка.Период;
    КонецЦикла;

    КонецЕсли;</code>

    Документ “Операция” сделал как в уроках (в т.ч. пометка удаления, копирование, заполнение периода).
    Удаление дублей в модуле объекта док. “Операция”:

    <code>Перем ИзмененаПометкаУдаления;

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

    //свернем записи
    ДвиженияБУ = Движения.РегистрБухгалтерииРабочий;
    ДвиженияБУ.Записывать = Истина;
    //ДвиженияБУ.Прочитать();
    ТабДвижений = ДвиженияБУ.Выгрузить();
    КолонкиГруппировок = “”;

    Для каждого Колонка Из ТабДвижений.Колонки Цикл
    КолонкаИмя = Колонка.Имя;
    Если КолонкаИмя = “Сумма” Или КолонкаИмя = “НомерСтроки” Тогда
    Продолжить;
    КонецЕсли;
    КолонкиГруппировок = КолонкиГруппировок +?(КолонкиГруппировок = “”, “”, “, “)+ КолонкаИмя;
    КонецЦикла;

    ТабДвижений.Свернуть(КолонкиГруппировок,”Сумма”);
    ДвиженияБУ.Загрузить(ТабДвижений);

    Если ИзмененаПометкаУдаления Тогда
    ДвиженияБУ.УстановитьАктивность(НЕ ПометкаУдаления);
    КонецЕсли;

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

    Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
    ИзмененаПометкаУдаления = НЕ ПометкаУдаления = Ссылка.ПометкаУдаления;
    КонецПроцедуры</code>

    У плана счетов добавил булевский реквизит “НеИспользоватьВПроводках”.
    При записи счета признак устанавливается и снимается у старого и нового родителя
    при необходимости:

    <code>Перем ИзмененРодитель, СтарыйРодитель;

    Процедура ПередЗаписью(Отказ)
    Порядок = ПолучитьПорядокКода();
    СтарыйРодитель = Ссылка.Родитель;
    ИзмененРодитель = НЕ Родитель = СтарыйРодитель;
    КонецПроцедуры

    Процедура ПриЗаписи(Отказ)
    Если ИзмененРодитель Тогда
    Если НЕ Родитель.Пустая() И НЕ Родитель.НеИспользоватьВПроводках Тогда
    ОбъектРодитель = Родитель.ПолучитьОбъект();
    ОбъектРодитель.НеИспользоватьВПроводках = Истина;
    ОбъектРодитель.Записать();
    КонецЕсли;

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

    Запрос.УстановитьПараметр(“СтарыйРодитель”, СтарыйРодитель);
    НетПодчиненных = Запрос.Выполнить().Пустой();

    Если НетПодчиненных И СтарыйРодитель.НеИспользоватьВПроводках Тогда
    ОбъектРодитель = СтарыйРодитель.ПолучитьОбъект();
    ОбъектРодитель.НеИспользоватьВПроводках = Ложь;
    ОбъектРодитель.Записать();
    КонецЕсли;
    КонецЕсли;
    КонецПроцедуры</code>

    В модуле набора записей регистра бухгалтерии проверяю счета:

    <code>Процедура ПередЗаписью(Отказ, РежимЗаписи)
    Перем ТекстОшибки;

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

     

     

  32. Смотрю лекции модуля 3 напрямую с диска, через конфу просмотра не работает.  Файлы с окончанием в названии “intro” не запускаются (только 2 первых  Chapter00,Chapter01 запустились). вылезает ошибка “Отказано в доступе к указанному устройству,пути или файлу. Возможно,  у вас нет нужных прав доступа к этому объекту”.  И срабатывает антивирус Symantec.

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

  33. kuznetsovimail 25.05.2011 в 12:31

    <code>
    Процедура ПередЗаписью(Отказ)
    Порядок=ПолучитьПорядокКода();
    КонецПроцедуры
    </Code>
    ОбработкаПроведения Документа ПоступлениеТоваров
    <code>

    Набор=Движения.РегистрБухгалтерии1;
    Для Каждого Товар Из Товары Цикл
    Проводка  =Набор.Добавить();
    Проводка.Период=Дата;
    Проводка.СчетДт=ПланыСчетов.ПланСчетов1.Товары;
    Проводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатура]=Товар.Номенклатура;
    Проводка.СчетКт=ПланыСчетов.ПланСчетов1.Поставщики;
    Проводка.Сумма=Товар.Сумма;
    КонецЦикла;
    Набор.Записать();
    Набор=Движения.РегистрБухгалтерии1;Для Каждого Товар Из Товары Цикл Проводка  =Набор.Добавить(); Проводка.Период=Дата; Проводка.СчетДт=ПланыСчетов.ПланСчетов1.Товары; Проводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатура]=Товар.Номенклатура; Проводка.СчетКт=ПланыСчетов.ПланСчетов1.Поставщики; Проводка.Сумма=Товар.Сумма;КонецЦикла;    Набор.Записать();
    </code>
    МодульНабораЗаписей РигистрБухгалтерии1
    <code>

    Процедура ПередЗаписью(Отказ, РежимЗаписи)
    Если ТипЗнч(Отбор.Регистратор.Значение)=
    Тип(“ДокументСсылка.Операция”) тогда
    ЗаполнитьПериод();
    КонецЕсли;
    КонецПроцедуры
    &НаСервере
    Процедура ЗаполнитьПериод()
    Дата=Отбор.Регистратор.Значение.Дата;
    Для Каждого проводка из ЭтотОбъект цикл
    Проводка.Период=Дата;
    КонецЦикла;
    КонецПроцедуры
    </code>
    Документ Операция МодульОбъекта
    <code>

    Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
    ТаблицаПроводок=Таблица.Выгрузить();
    ТаблицаПроводок.Сортировать(“СчетДт,СчетКт,СубконтоДт1,СубконтКт1″);
    Колво=ТаблицаПроводок.Количество();
    Элемент=0;
    Пока Элемент<=Колво-1 Цикл
    Элемент2=Элемент+1;
    Пока Элемент2<= Колво-1 Цикл
    Если ТаблицаПроводок[Элемент].СчетДТ=ТаблицаПроводок[Элемент2].СчетДт И
    ТаблицаПроводок[Элемент].СчетКТ=ТаблицаПроводок[Элемент2].СчетКт И
    ТаблицаПроводок[Элемент].СубконтоДТ1=ТаблицаПроводок[Элемент2].СубконтоДт1 И
    ТаблицаПроводок[Элемент].СубконтоКТ1=ТаблицаПроводок[Элемент2].СубконтоКт1 Тогда
    ТаблицаПроводок[Элемент].Сумма=ТаблицаПроводок[Элемент].Сумма+
    ТаблицаПроводок[Элемент2].Сумма;
    ТаблицаПроводок.Удалить(Элемент2);
    Колво=ТаблицаПроводок.Количество();
    Элемент2=Элемент+1;
    Продолжить;
    КонецЕсли;
    Элемент2=Элемент2+1;
    КонецЦикла;
    Элемент=Элемент+1;
    КонецЦикла;
    Рег=РегистрыБухгалтерии.РегистрБухгалтерии1;
    Набор=Рег.СоздатьНаборЗаписей();
    Набор.Загрузить(ТаблицаПроводок);
    Набор.Отбор.Регистратор.Значение=Ссылка;
    Набор.Записать();
    КонецПроцедуры
    </code>
    Для запрета использования групп добавляем дополнительный реквизит типа булево в план счетов и в модуле набора записей процедура передзаписью() регистра бухгалтерии его проверяем.
    Для автоматического заполнения реквизита Запрет используем процедуру передзаписью модуля объекта плана счетов
    <code>
    Процедура ПередЗаписью(Отказ)
    Если Найти(Код,”.”)=0 тогда
    Запрет=Истина;
    КонецЕсли;
    КонецПроцедуры
    </code>

  34. У меня материалы 3 модуля не просматриваются в конфе для просмотра. Пишет:  ” не существует файла, проверьте настройки”. Настроено все нормально,  с диска. Первые материалы просматривались без проблем.

    • Если запускать уроки напрямую, то они стартуют нормально?

      • Если запускать уроки напрямую,то стартуют нормально.

        • А если попробовать удалить (лубо временно отключить) антивирус?

          • Отключала антивирус , не помогает. В конфе просмотра модуль 3 не просматирается.

            • С модулем 4 та же проблема?
              Проверьте, пожалуйста, работу конфигурации на другом компьютере.

              • С модулем 4 такая же история. Причем и на ноуте дома тоже самое, только еще с диска долго ехе-шник запускается.

                • Ситуация пока неясна.
                  В будущем в конфигурации сделаем интерфейс для учебных версий, возможно с его помощью уроки будут запускаться.
                  Пока можете скачать html файлы для запуска уроков.

  35. Выполнено.
    В модуле документа Операция в обработке ПередЗаписью() сделал сворачивание проводок (хотя мне такой метод не нравится, но другого пока не нашел…)
    …………………
    Набор.Записать();//предварительно запишим…
    //сворачиваем ОДНОТИПНЫЕ ПРОВОДКИ
    ТЗ = Набор.Выгрузить();
    ТЗ.Свернуть(“Регистратор,Период,СчетДт,ВидСубконтоДт1, СубконтоДт1,СчетКт,ВидСубконтоКт1, СубконтоКт1″,”Сумма”);
    Набор.Загрузить(ТЗ);
    Что касается проверки Счетов на группу, то реализовал так :
    В модуле ФОРМЫ документа Операция (ПередОкончаниемРедактированияСтроки)
    &НаСервереБезКонтекста
    Функция ПроверкаСчетаНаГруппу(Счет)  //Счет тип = ПланСчетовСсылка
    ВыборкаПоСчету = ПланыСчетов.Основной.Выбрать(Счет);
    Возврат ВыборкаПоСчету.Следующий();
    КонецФункции // ПроверкаСчетаНаГруппу()

    &НаКлиенте
    Процедура ДвиженияБухУчетПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ)

    Если НЕ ОтменаРедактирования Тогда  //при нажатии ESC должны выйти нормальной выйти

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

    КонецЕсли;

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

  36. Добрый вечер, Евгений!
    Прошу отсрочку по решению заданий до 1-го июня. У меня очень уважительная причина – родилась дочь! =) А там потом в отпуск, думаю догоню.

    • Добрый вечер!

      Дочь это здорово, поздравляю :) Считайте, что отсрочку Вы получили, но зафиналится нужно будет по графику.

  37. Готово. Проводки в документах выполняются только по товарам и наборам. Дубли  документа Операция сворачиваются  выгрузкой в тз , сверткой  и загрузкой обратно в модуле набора записей в процедуре ПередЗаписью. Для учета счетов-групп добавлен реквизит ЭтоГруппа.

  38. Елена 23.05.2011 в 22:04

    Здравствуйте, Евгений!
    Извините , что не в тему, я переставила ОС и теперь нуждаюсь в новом ключе. Вчера вечером отправила письмо, но так и не получила пока ответ. Чтобы ускорить процесс, вынуждена написать здесь.

    • Добрый день, Елена!

      Ответ от саппорта должен прийти в ближайшее время.

  39. Андрей Кусанов 23.05.2011 в 08:52

    У меня не читаются защищенные диски на ноутбуке. Попытаюсь на работе, но хотелось бы (особенно продвинутый) иметь под рукой.

    • Добрый день, Андрей!

      Сообщите о проблеме на саппорт: укажите какие диски какого курса не читаются, будем решать проблему.