Базовый курс. Финальное задание 25-го потока

Объявляем начало финала 25-го потока базового курса по программированию.

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

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

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

комментариев 14 на “Базовый курс. Финальное задание 25-го потока”

  1. TurskySergey 06.03.2014 в 13:10

    Базовый курс
    Решение Финального домашнего задания

    Шаг 1. Обратная связь по курсу

    Турский Сергей Николаевич
    Работаю в ГК ПромИнфоКонсалт
    Должность: Ведущий аналитик
    г. Самара

    Курс дал мне очень много нового материала, особенно практики программирования в 1С (спасибо за домашние задания).
    Основное заблуждение, с которым пришлось расстаться – это то, что я считал Платформу 1С8 весьма простым инструментом, которым легко овладеть, зная предметную область. Это не так – продукт оказался весьма сложным и требует достаточно много сил на его изучение.
    Навыки программирования, полученные на курсе, уже применяю в повседневной работе. Задачи пока решаю несложные – для сложных нужно пройти как минимум Продвинутый курс.
    Моя работа полностью связана с проектами по внедрению решений 1С:Предприятии 8, поэтому практически все материалы курса были мне привычны и понятны.
    Формат обучения Ваших курсов очень удобен, гораздо лучше очных курсов (все плюсы я думаю, Вам и так известны, не буду их перечислять). Я считаю большой удачей, то что мне удалось этот курс найти и приобрести.

    Шаг 2. Практическое задание

    Найденные ошибки и пути их исправления:

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

    Исправление:
    • Процедуру ПриСозданииНаСервере в модуле формы удалить;
    • В модуль объекта документа Поступление в процедуру ОбработкаЗаполнения в начале модуля добавить следующее:

        ИсточникПоступления = Константы.ОсновнойИсточник.Получить();

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

    Исправление:
    • Процедуру ПриОткрытии в модуле формы удалить;
    • В модуль объекта документа ВыбытиеЖивотных в процедуру ОбработкаЗаполнения в начале модуля добавить следующее:

        Направление = Константы.ОсновноеНаправление.Получить();

    3. Регистр ВыбытияЖивотных настроен как регистр остатков
    Исправление:
    Установить Вид регистра: Обороты. После этого выполнить пересчет итогов.

    4. В документе ВыбытиеЖивотных в модуле объекта в процедуре ОбработкаПроведения во вложенном запросе ДанныеДокумента не установлено условие выборки по текущему документу (в итоге выбираются все документы ВыбытиеЖивотных, которые присутствуют в базе).
    Исправление:
    Во вложенном запросе добавить:

    | ГДЕ
    |   ВыбытиеЖивотныхЖивотные.Ссылка = &Ссылка

    5. В документе ВыбытиеЖивотных в модуле объекта в процедуре ОбработкаПроведения при установке параметров запроса НЕ учтена граница момента времени.

    Исправление:
    вместо кода:

    Запрос.УстановитьПараметр("МоментВремени", МоментВремени());

    должен быть код:

    Граница = Новый Граница (МоментВремени(), ВидГраницы.Включая);
    Запрос.УстановитьПараметр("МоментВремени", Граница);

    6. В документе ВыбытиеЖивотных в модуле объекта в процедуре ОбработкаПроведения при выводе сообщения пользователю о недостаточности количества животных НЕ правильно определяется номер строки.

    Исправление:
    вместо кода:

    Сообщение.Поле = "Животные["+ВыборкаДетальныеЗаписи.НомерСтроки+"].Животное";

    должен быть код:

    Сообщение.Поле = "Животные["+(ВыборкаДетальныеЗаписи.НомерСтроки-1)+"].Животное";

    7. В документе ПеремещениеЖивотных в модуле объекта в процедуре ОбработкаПроведения в вложенном запросе не установлено условие на отрицательные остатки (в итоге выбираются все остатки по животному в КлеткаОткуда).

    Исправление:
    Во вложенном запросе добавить:

    | ГДЕ
    |   РазмещениеЖивотныхОстатки.КоличествоОстаток < 0

    8. В документе Инвентаризация в реквизите КоличествоФакт настроено свойство Проверка заполнения: Выдавать ошибку. В итоге при инвентаризации невозможно зафиксировать нулевой остаток животных в клетке. Кроме того возможен ввод отрицательных чисел в данный реквизит

    Исправление:
    Установить свойство Проверка заполнения: Не проверять.
    Установить свойство Неотрицательное = Истина.

    9. В документе ВыбытиеЖивотных в модуле формы в процедуре ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) необходимо удалить следующий код:

        Иначе
           
            ДанныеЗаполнения = Новый Структура;
            ДанныеЗаполнения.Вставить("Дата", '19800101');

    10. В документе Инвентаризация в модуле формы в процедуре ЗаполнитьНаСервере() необходимо учитывать дату документа и заполнять остатками на конец дня этой даты.

    Исправление:
    В процедуре ЗаполнитьНаСервере() реализовать следующий код:

    &НаСервере
    Процедура ЗаполнитьНаСервере()

        Запрос = Новый Запрос;
        Запрос.Текст =
            "ВЫБРАТЬ
            |   РазмещениеЖивотныхОстатки.Животное,
            |   РазмещениеЖивотныхОстатки.Клетка,
            |   РазмещениеЖивотныхОстатки.КоличествоОстаток КАК Количество
            |ИЗ
            |   РегистрНакопления.РазмещениеЖивотных.Остатки(&Дата, ) КАК РазмещениеЖивотныхОстатки";
           
        Граница = Новый Граница (КонецДня(Объект.Дата), ВидГраницы.Включая);
        Запрос.УстановитьПараметр("Дата", Граница);

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

        Объект.Животные.Загрузить(Результат.Выгрузить());

    КонецПроцедуры // ЗаполнитьНаСервере()

    Шаг 3. Помощь миру

    Ссылка на обсуждение (мой ответ) на форуме по 1С: http://devtrainingforum.v8.1c.ru/forum/thread.jsp?id=624673

    • Dobrenko Oleg 11.03.2014 в 08:26

      Сергей, благодарим вас за развернутый отзыв!
      Финальное задание принято, поздравляем с успешным окончанием базового курса по программированию!

  2. Шаг 1
    1 – Весь материал оказался новым опытом, так как, до этого с программированием вообще не сталкивался. Также изучил азы бух учета и увидел каким образом программа позволяет решать бухгалтерские задачи.
    2 – Само изучение платформы оказалось полностью новым, поэтому как таковых заблуждений не было. С каждой новой главой понимал, насколько много возможностей содержит платформа, и насколько глубокая настройка различных объектов.
    3 – На практике осуществил проводку документов приходная и расходная накладные, с подстановкой цены из регистра накопления цены на номенклатуру. Создал контроль средств посредством документа выписка, где реализовал связь долги клиентов \долги поставщиков \выплаты \ оплаты. Реализовал автоматический пересчет цены в зависимости от количества в документах. Создал несколько отчетов, ОСВ, рейтинг поставщиков,рейтинг менеджеров, рейтинг товаров, остатки товаров. Реализовал полнотекстовый поиск в данных. Настроил связь между филиалами посредством плана обмена, а также настроил видимость объектов в зависимости от ролей. И другое…
    4 – В целом, формат обучения отличный, но чувствуется недостаток личного общения с тренером, так как много вопросов возникает во время обучения, а общаться через электронную почту не очень удобно из-за долгого ответа, да и вопросов слишком много. Но подача материала, а также качество и количество информации просто отличное. Также отличным моментом было то, что некоторые вопросы тренер повторял на протяжении всего курса, что дало более уверенное усваивание материала.
    Лобатый Роман Васильевич, Украина, г.Луганск, ул 4я Донецкая 88а, 91053.

    Шаг 2
    1- Включаю видимость регистров в документах форм документов, через форму документа, командный интерфейс, важное. Для документа перемещение животных создаю форму документа, где также включаю видимость регистра.
    2- В документе Выбытие животных изменил программный код таким образом

    &НаКлиенте
    Процедура ПриОткрытии(Отказ)
        Если Объект.Ссылка.Пустая() Тогда
            Объект.Направление = НаправлениеСервер()
        КонецЕсли;
    КонецПроцедуры


    &НаСервере
    Функция НаправлениеСервер()
        Возврат Константы.ОсновноеНаправление.Получить();
    КонецФункции

    3- Включаю видимость регистров через командный интерфейс рабочего стола.
    4- Регистр накопления выбытие животных меняю его вид с остатков на обороты, так регистр делает движения только в одну сторону на выбытие, нет движения на приход и расход.
    5- Документ Выбытие животных, в обработке заполнения нет смысла в программном коде

    Иначе
            ДанныеЗаполнения = Новый Структура;
            ДанныеЗаполнения.Вставить("Дата", '19800101');,

    Удаляю его.
    6- Также в документе Выбытие животных в обработке проведения, изменяю строку с сообщением о поле на

     Сообщение.Поле = "Животные["+(ВыборкаДетальныеЗаписи.НомерСтроки-1)+"].Количество";

    7- После смены вида регистра выбытия животных пришлось в настройках отчета Анализ выбытия заменить виртуальную таблицу на физическую в запросе для правильной работы отчета.
    8- В документе инвентаризация я добавил возможность устанавливать дату, для чего в запросе в настройках пришлось установить параметр Период, и указать его также в программном коде

     |  РегистрНакопления.РазмещениеЖивотных.Остатки(&Период, ) КАК РазмещениеЖивотныхОстатки";
        Запрос.УстановитьПараметр("Период", Объект.Дата);

    9- Также в документе Инвентаризация пришлось отключить проверку заполнения для поля табличной части КоличествоФакт для возможности указания нулевых остатков.
    10- В документе Выбытие животных вместо Момента времени более правильно использовать метод ГраницаВключая.
    Шаг – 3
    Провел инструктаж по работе c основными объектами в 1С Предприятии 8.2 среди сотрудников фирмы по продаже автомобильных запчастей, фотографии выслал на почту mg@spec8.ru

    • Dobrenko Oleg 25.02.2014 в 06:09

      Роман, благодарим за отзыв!
      Поздравляем с успешным окончанием базового курса!

  3. На протяжении обучения базового курса всегда находил для себя что-то новое
    в понимании управляемых форм платформы. Хоть уже имею некоторый опыт
    программирования на 1С, в каждом блоке всегда находились какие-либо тонкости,
    которые не узнаешь при чтении литературы, всегда узнавал более оптимальные
    решения задач, которые в последствии применял на практике.
    Очень понравился формат видео обучения, т.к. при чтении литературы нет возможности посмотреть, как выполняют другие,
    особенно это ярко было выражено при визуальном конструировании форм, консоли запросов, отчетов на СКД.
    Удобство для обучения является еще то, что обучаться можно в любое удобное время,
    и самое главное, что все материалы остаются, и в любой момент можно вернуться к непонятой или забытой главе и пересмотреть ее.
    Хотелось бы выразить огромную благодарность авторам курса и всем, кто принимал участие в создании данного курса.

    Пищита Иван Валерьевич, г. Минск

    1. Документ “Покупка товаров”
    – изменил обработчик кнопки “ЗаполнитьКлиента”

    Объект.Клиент = ПредопределенноеЗначение("Справочник.Клиенты.ОсновнойПоставщик");

    – в табличной части Товары реквизит количество изменил на Число(15, 3)
    – в регистре накопления “ТоварыНаСкладе” реквизит количество так же изменил на Число(15, 3)
    – в процедуре “ОбработкаПроведения” добавил строку

    Движения.ТоварыНаСкладе.Записывать = Истина;

    – изменил обработчики кнопки “ЗаполнитьТовары”

    &НаКлиенте
    Процедура ЗаполнитьТовары(Команда)
        Перем Основание;
        ВвестиЗначение(Основание, "Выберите документ-основание", Тип("ДокументСсылка.ПокупкаТоваров"));
        Если Основание <> НЕОПРЕДЕЛЕНО И НЕ Основание.Пустая() Тогда
            ЗаполнитьТоварыНаСервере(Основание);
            Модифицированность = Истина;
        КонецЕсли;    
    КонецПроцедуры

    &НаСервере
    Процедура ЗаполнитьТоварыНаСервере(ДокументОснование)

        ТекОбъект = РеквизитФормыВЗначение("Объект");
        ТекОбъект.Товары.Загрузить(ДокументОснование.Товары.Выгрузить() );
        ЗначениеВРеквизитФормы(ТекОбъект, "Объект");

    КонецПроцедуры // ЗаполнитьТоварыНаСервере()

    2. Документ “ПродажаТоваров”
    – в реквизите “Серия” изменил свойство “Связи параметров выбора” на Отбор.Владелец(Товары.Товар)
    – На закладке “Движения” добавлил возможность формирования движений по регистру накопления “ТоварыНаСкладе”
    – Изменил код процедуре “ОбработкаПроведения”

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

           
        Запрос.УстановитьПараметр("НаДату", МоментВремени() );
        Запрос.УстановитьПараметр("Ссылка", Ссылка);   
        Результат = Запрос.Выполнить();

        ВыборкаТовары = Результат.Выбрать();

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

    В справочнике “Серии” на закладке данные в стандартных реквизитах, для реквизита код свойство проверка заполнения установил в “Выдавать ошибку”

    • Dobrenko Oleg 24.02.2014 в 06:40

      Иван, благодарим за отзыв!
      Практическая часть принята, ждем от вас отчета по шагу №3.

  4. Ханевич Василий Семёнович
    г. Калининград
    Ведущий специалист Департамента проектных работ Группы компаний ДРВ

    Шаг 1. Обратная связь по курсу

    Это уже не первый изучаемый курс от этих авторов. Главный плюс дистанционных курсов – занимайся, когда есть время. Не нужно 8 часов в день сидеть за партой и слушать лектора. Проходил этот курс для того, чтобы закрыть пробелы в знаниях. Для закрепления материала нужно будет где-то через месяц повторно пройти некоторые темы, а затем и продвинутый курс. Интересными были моменты с демонстрацией различных вариантов создания движений в регистрах, структура физических таблиц базы, виртуальные таблицы регистров бухгалтерии и расчета.

    Курс покупался еще в самый первый заход, поэтому он идет на CD-дисках. Это неудобно – видео открывается небыстро, привод гремит,
    периодически ошибки об отсутствии диска и т.п. На флешках (как вы теперь и выпускаете) – лучше. Ожидал новых актуальных материалов
    в рамках мастер-группы, с 2010 года много чего нового появилось. Понравились домашние задания – достаточно объемные, к тому же нужно подумать.
    Огромное спасибо авторам за проделанную работу!

    Шаг 2. Практическое задание

    1. Вид регистра накопления ВыбытияЖивотных меняем на Оборотный (поскольку движения по нему делает только документ ВыбытиеЖивотных,
    остатки никогда не выйдут в ноль).
    2. На формах документов добавлены ссылки для просмотра движений по регистрам.
    3. В модуле объекта документа ВыбытиеЖивотных в процедуре ОбработкаЗаполнения удалил строки

            ДанныеЗаполнения = Новый Структура;
            ДанныеЗаполнения.Вставить("Дата", '19800101');

    4. В документе Инвентаризация на форме колонку Количество (учетное) сделал недоступной для редактирования, а для реквизита КоличествоФакт убрал проверку заполнения (по факту животного может не быть). В процедуре заполнения документа сделал получение остатков на дату документа (проставил параметр в запросе к виртуальной таблице РегистрНакопления.РазмещениеЖивотных.Остатки).
    5. Документ ВыбытиеЖивотных форма документа: Переменная не определена (Константы)
    Ошибка воспроизводится если запускать в тонком клиенте.
    Переписываем:

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

    &НаСервереБезКонтекста
    Функция ПолучитьОсновноеНаправление()
        Возврат Константы.ОсновноеНаправление.Получить();
    КонецФункции

    6. В документе ВыбытиеЖивотных (модуль объекта) в тексте запроса пропущено условие:

    ГДЕ ВыбытиеЖивотныхЖивотные.Ссылка = &Ссылка

    7. В документе ВыбытиеЖивотных (модуль объекта) при выводе сообщения:

    Сообщение.Поле = "Животные[" + (ВыборкаДетальныеЗаписи.НомерСтроки - 1) + "].Животное";

    8. В документе ПеремещениеЖивотных в обработке проведения в запросе следует выбирать только те записи, где КоличествоОстаток<0.
    9. При открытии формы записанного документа Поступление происходит присваивание реквизиту ИсточникПоступления значения из константы. Следует добавить проверку, новый ли это объект.
    10. В документе ВыбытиеЖивотных поменял значение устанавливаемого параметра МоментВремени на тип Граница.

    Шаг 3. Помощь миру

    Был проведен семинар для студентов Калининградского государственного технического университета (КГТУ) на тему "Разработка мобильного приложения на платформе 1С:Предприятие 8.3". Фотографии с этого мероприятия отправлены на адрес mg@spec8.ru.

    • Dobrenko Oleg 24.02.2014 в 06:38

      Василий, благодарим за отзыв!
      Фото получили, поздравляем с успешным окончанием базового курса!

  5. Дмитрий К. 20.02.2014 в 17:50

    Шаг1. Обратная связь по пройденному курсу.
    1. Как это не смешно, но узнал что в 1с есть справка (помимо синтакс-помошника) и в неё есть что почитать. Раньше параметры командной строки искал в yandex

    2. Избавился от заблуждения что можно просто перейти от обычных форм к управляемому интерфейсу методом “полного погружения”. При переходе от 7.7 на 8.0 и далее на 8.2 этот метод ещё более менее работает пока работаешь с обычными формами. С управляемыми формами как будто изучаешь новый язык и заново учишься программировать в 1с. Похоже на раздвоение личности. В обычном интерфейсе можно писать все подряд и это сразу заработает (возможно неоптимально и медленно). В упр интерфейсе мозг нужно заставлять раздваиваться, все что раньше можно было писать в 1 строку в 1-й процедуре формы приходится заставлять себя разделять на серверный и клиентский код.

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

    4. Очно никогда 1с не обучался, сравнить формат с очным не могу не могу.
    Обучался заочно в УЦ 1с по курсу 1с77 Зарплата и кадры. Что было там удобнее так это количество общения с преподавателем и время его реакции.
    У видеообучения есть небольшое неудобство. При просмотре материалов с бумаги можно читать “по диагонали” и быстро перечитывать по новой сложные блоки. С видео чуть сложнее. Есть части которые уже знаешь, но вынужден просматривать их целиком чтобы не пропустить тонкостей. Есть сложные части (например расчет зарплаты). Где нужно пересматривать по несколько раз чтобы понять. Как уже писал в ответе к ДЗ15, нехватает бумажного носителя с блок схемой работы некоторых механизмов.

    Кузнецов Дмитрий Владимирович. Программист 1с и системный администратор в производственном предприятии. Воронеж

    Шаг 2. Практическое задание
    1. Делаем синтакс-контроль конфигурации. Ошибка в модуле формы документа “ВыбытиеЖивотных”. Попытка получить значение константы на клиенте.

    &НаКлиенте
    Процедура ПриОткрытии(Отказ)
         Если Объект.Ссылка.Пустая() Тогда
              //*** Объект.Направление = Константы.ОсновноеНаправление.Получить();
             Объект.Направление=ПолучитьНаправлениеНаСервере();
         КонецЕсли;
    КонецПроцедуры
    //***
    &НаСервереБезКонтекста
    Функция ПолучитьНаправлениеНаСервере()
         Возврат Константы.ОсновноеНаправление.Получить();
    КонецФункции

    2. Регистр “ВыбытияЖивотных”. Неверный вид регистра. Так как движения по нему делает только документ “ВыбытиеЖивотных” и в одну сторону то он не будет “закрываться”. Устанавливаем вид регистра “Обороты”.

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

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

    4. Ошибка в обработке проведения документа “ВыбытиеЖивотных”. Неправильно формируется путь к реквизиту формы для которого выводится сообщение.
    Правильный вариант:

           //***Сообщение.Поле = "Животные["+ВыборкаДетальныеЗаписи.НомерСтроки+"].Животное";
           Сообщение.Поле = "Животные["+(ВыборкаДетальныеЗаписи.НомерСтроки-1)+"].Количество";

    5. Непонятно зачем в обработке заполнения документа “ВыбытиеЖивотных” установливается дата “01.01.1980 0:00:00” для заполнения при вводе не на основании. Убираем этот код чтобы в документе автоматически устанавливалась корректная дата.

              //***
        //Иначе
              //ДанныеЗаполнения = Новый Структура;
              //ДанныеЗаполнения.Вставить("Дата", '19800101');

    6. Документ “ВыбытиеЖивотных”. Ошибка в тексте запроса контроля остатков. Пропущено условие при получении таблицы “ДанныеДокумента”. Может выдаваться неверный номер строки документа в котором нехватает живности для выбытия.

              ГДЕ
                   ВыбытиеЖивотныхЖивотные.Ссылка = &Ссылка

    7. Непонятно зачем в документе “Поступление” установлено значение заполнения реквизита “Дата” в “01.01.1980 0:00:00”. Очищаем значение заполнения чтобы в документе автоматически устанавливалась корректная дата.

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

    &НаСервере
    Процедура ЗаполнитьНаСервере()
         Запрос = Новый Запрос;
         Запрос.Текст =
              "ВЫБРАТЬ
              |     РазмещениеЖивотныхОстатки.Животное,
              |     РазмещениеЖивотныхОстатки.Клетка,
              |     РазмещениеЖивотныхОстатки.КоличествоОстаток КАК Количество
              |ИЗ
              |     РегистрНакопления.РазмещениеЖивотных.Остатки(&ДатаОстатков, ) КАК РазмещениеЖивотныхОстатки";

         Запрос.УстановитьПараметр("ДатаОстатков", Объект.Дата);    
         Результат = Запрос.Выполнить();
         Объект.Животные.Загрузить(Результат.Выгрузить());
    КонецПроцедуры // ЗаполнитьНаСервере()

    9. Документ “Инвентаризация”. Отключил проверку заполнения реквизита ТЧ “КоличествоФакт”. Иначе не получится указать 0 в ячейке.

    10. Документ “Перемещение”. Ошибка в запросе контроля остатков. Документ проведется только при переводе последнего животного в клетке.
    Добавил в запрос условие

              |ГДЕ
              |     РазмещениеЖивотныхОстатки.КоличествоОстаток < 0";

    Шаг 3. Помощь миру
    http://forum.infostart.ru/forum26/topic105038/
    http://forum.infostart.ru/forum26/topic99424/
    http://forum.infostart.ru/forum26/topic105026/ – пока писал ответ – меня опередили )
    Ник – SuhoffGV

    ps Странно что в момент добавления комментария мне видны чужие ответы. Но читать их до отправки своего не стал.

    • Dobrenko Oleg 21.02.2014 в 07:34

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

  6. Артем 18.02.2014 в 17:02

    Артемов Артем Владимирович, город Москва.
    Шаг 1.
    Что нового узнали?
    Некоторые тонкости арифметических и логических операций и некоторые сервисные средства по написанию кода.
    Различные варианты записи в регистры.
    Всевозможные приемы по построению запросов с использованием конструктора и варианты использования результатов этих запросов. Познакомился с динамическими запросами, текст которых меняется в зависимости от каких-либо условий.
    Приемы добавления новых видов расчетов с разными алгоритмами, как с использованием конфигуратора, так и в пользовательском режиме.

    От каких заблуждений избавились?
    Не понимал важности определения параметров виртуальных таблиц регистров, обходился, в основном, заданием условий в запросе.
    В конфигурации «Бухгалтерия» таблицу «ХозрасчетныйДвиженияССубконто» почему-то считал физической, а как оказалось, это сложная виртуальная таблица.
    Синтетический счет – это не тот счет, который является родителем для других счетов, а счет, который содержит аналитику по субконто.
    Раньше почти не сталкивался с конфигурацией ЗУП вплотную и имел ошибочное мнение, что любой реально востребованный вид расчета можно создать без вмешательства в конфигуратор.

    Что оказалось неожиданным в материалах курса?
    Обилие самих материалов и глубина их проработки. Уверен, что вместе с продвинутым курсом это два самых выстраданных курса и не только в рамках ваших проектов. Чувствуется, что ребята работали на износ во вред своему здоровью (если, конечно, они не умственные Гераклы). Это конечно не мое дело, тем не менее, во время подготовки требовалось еще на что-то существовать самим и содержать семью. Поэтому лично я оцениваю это как героизм. По меркам многих, на самом деле это не один курс – это несколько курсов, которые многие могли бы продаваться по отдельности. Неожиданно сложными и объемными оказались некоторые домашние задания. Но это неплохо. Затрагивались некоторые вопросы продвинутого курса. Это тоже хорошо, потом будет легче и понятнее воспринимать материалы курса продвинутого. Много тематических мастергрупп и даже есть доступ к материалам для подготовки к экзамену на «Специалиста» от Евгения Гилева. Не ожидал, что при обучении (решении задач) тренеру бывает так полезно «ошибаться». За каждой ошибкой тянется обучение дополнительным навыкам или всплывает более ярко то, что было ранее «не досказано». Материал подается легко, непринужденно и эмоционально окрашено. Общение преимущественно через почту, а не в комментариях несколько уменьшает эффект присутствия тренера и притупляет «чувство локтя» (что ты не один, рядом проходят обучение другие слушатели). Ждем курс по платформе 8.3.
    Шаг 2.
    1.Чтобы облегчить поиск ошибок, в параметрах запуска 1С:Предприятия из конфигуратора значение «Толстый клиент (управляемое приложение)» заменил на значение «Выбирать автоматически».
    2.В документе «Поступление» в свойствах стандартного реквизита «Дата» установлено значение «01.01.1980 0:00:00». Очистил значение. Оптимально, если в свойствах формы для свойства «Автовремя» определено «Текущее или последним».
    3.При открытии формы документа «Выбытие животных» выдается ошибка: «не определена переменная (Константы)», т.к. совершается попытка считать значение объекта из базы на Клиенте. Преобразовал код:

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

    &НаСервереБезКонтекста
    Функция ПолучитьОсновноеНаправление();
    Возврат Константы.ОсновноеНаправление.Получить();
    КонецФункции

    4.В документе «Выбытие животных» в модуле объекта в процедуре «Обработка заполнения» следует удалить строки:

    Иначе
        ДанныеЗаполнения = Новый Структура;
        ДанныеЗаполнения.Вставить("Дата", '19800101');

    5.В регистре накопления «Выбытие животных» движение производится в одну сторону (учет остатков не требуется, учитываются только обороты). Поэтому регистр накопления с видом «остатки» заменил на регистр накопления с видом «обороты».
    6.В процедуре «ОбработкаПроведения» документа «Выбытие животных» для виртуальной таблицы «РазмещениеЖивотныхОстатки» удалил параметр «МоментВремени», чтобы получать актуальные остатки.
    7.При неудачном проведении документа «Выбытие животных» в сообщении содержится лишняя буква «в»: Сообщение.Текст = “Недостаточно животного (в) “+ВыборкаДетальныеЗаписи.Животное+” в “+ВыборкаДетальныеЗаписи.Клетка+” в количестве “+ВыборкаДетальныеЗаписи.Недостача; очередную строчку можно просто зарезюмировать.
    8.В отчете «Анализ выбытия животных» пришлось переопределить группируемые и суммируемые поля в запросе.
    9.Пришлось также пересчитать итоги с помощью соответствующей обработки.
    10.Для документов, совершающих движения, сделал в поле навигации доступными команды для просмотра этих движений.
    11.В документе «Инвентаризация» а табличной части «Животные» свойство реквизита количество «Проверка заполнения» установил в значение «Не проверять». На текущий момент какого-то животного может и не быть.
    12.При открытии уже созданного документа «Поступление животных» изменяется значение «Источника поступления» на «ОсновнойИсточник». Поэтому в модуле формы документа в процедуре «ПриСозданииНаСервере» необходима проверка – открывается новый документ или уже созданный.
    13.В документе «Инвентаризация» данные заполняются на актуальный момент времени, а не на текущую дату документа. Это следует иметь в виду.
    14.При выборе суток отчет «Размещение животных» выводит данные на начало суток. Требуется дополнительная установка времени в конец суток с добавлением секунды.

    Шаг 3.
    Видеоурок. Доработка конфигурации УНФ под нужды Зоомагазина (на реальном примере, см. ссылку ниже):
    http://youtu.be/sgLGBG-qLK0
    Статья по мотивам 3 модуля базового курса по программированию:
    http://yadi.sk/d/4jfi4Xj1HrDgn
    Ответы на вопросы начинающих программистов на форуме 1С по платформе 8.2:
    http://devtrainingforum.v8.1c.ru/forum/thread.jsp?id=623659#623659
    http://devtrainingforum.v8.1c.ru/forum/thread.jsp?id=622597#622597
    http://devtrainingforum.v8.1c.ru/forum/thread.jsp?id=622584#622584

    • Dobrenko Oleg 19.02.2014 в 08:38

      Артем, благодарим за развернутый отзыв по курсу!
      Ваше решение принято, поздравляем, вы в списке финалистов!

  7. 1) Регистр сведений “Выбытия животных” изменяем вид регистра на “Оборотный”.
    2) В модуле формы документа “Выбытие животных” для получения константы необходимо сделать серверный внеконтекстный вызов, либо получать
    константу в обработчике “При создании на сервере”, а не “При открытии”
    3) В обработке проведения документа “Перемещение животных” в запросе не указано условие, что нужно выбирать только те записи, где количество остаток <0
    4) В докменте "Инвентаризация" В модуле формы в процедуре заполнения в запросе указываем параметр виртуальной таблицы &период,
    чтобы информация бралась из регистра на актуальную дату документа.
    5) В документе "ВыбытиеЖивотных" в процедуре проведения необходимо исправить параметр "МоментВремени" на "Границу".
    6) В документе "ВыбытиеЖивотных" необходимо исправить строку привязки сообщения об ошибке

    Сообщение.Поле = "Товары["+(Выборка.НомерСтроки-1)+"].Количество";

    7) В документе "Инвентаризация" Реквизит табличной части "КоличествоФакт" сделать необязательным для заполнения, чтобы, если все животные выбыли, можно было оставить в колонке нулевое значение.

    Что касается третьего задания, то так как у меня нет таланта ни к организации семинаров, ни к написанию статей, я выбрала помощь на форумах:
    http://www.1csp.ru/threads/Создание-товара-в-наменклатуре-и-поля-обязательные-для-заполнения.5432/
    http://www.1csp.ru/threads/Как-в-отчетах-Расчеты-с-покупателями-и-поставщиками-выставить-кол-во-десятичных-знаков-в-значении.2514/

    Обратная связь: После прохождения базового курса в новом для меня формате обучения мне вообще не хочется больше никаких очных курсов.
    Как же это удобно – учиться в любое свободное время, пересматривать материал, если что-то непонятно, и, самое главное, весь материал останется у меня навсегда. Теперь я буду ждать выхода курсов по платформе 8.3. Я никогда до этого не встречалась в работе с платформой 8.2, управляемыми формами, и мне казалось это очень сложным.
    После прохождения курсов все стало на свои места, понятно абсолютно все. Особенное спасибо хочу сказать за четвертый блок. Понравился также способ работы с домашними заданиями,что нет доступа к решению преподавателя и других участников, пока не появится свое решение. Это заставляет думать и все-таки решать задачу, а не просто посмотреть ответ и забыть потом.

    Худякова Евгения Александровна, Москва

    • Dobrenko Oleg 19.02.2014 в 08:42

      Евгения, благодарим за отзыв!
      Финальное задание принято, поздравляем с успешным окончанием базового курса по программированию!