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

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

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

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

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

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

  1. alekswhite 03.03.2015 в 00:01

    ШАГ 1
    Здравствуйте!
    Мое знакомство с 1С произошло довольно спонтанно. Необходимо было помочь знакомому в решении контрольной работы по конфигурированию в 1С версии 7.7. На тот момент знания в этой области у меня были «нулевые». Я перелопатил много информации по этому вопросу и решил поставленную задачу. С этого момента я обзавелся новым хобби, с надеждой что когда-нибудь 1С будет широко использовать в нашей республике и эти знания мне пригодятся. На просторах сети я наткнулся на ссылку ваших курсов. Опробовал сначала бесплатные курсы, очень понравились. Участвовал во флэшмобе по мобильным приложениям, после приобрел полный курс. В процессе обучения понял или даже утвердился в мыслях о том, что пробел в моих знаниях огромный и их необходимо углублять. Приобрел Комплект Базовый+Продвинутый, прошел «Быстрый старт».
    В базовом курсе для меня было совершенно новой информация из 3 и 4 модуля. Хотя и из первых модулей я много для себя узнал нового, закрепил и углубил старые знания.
    Очень понравился форма обучения. Позволяет не привязываться ко времени и месту, что очень удобно. Материал излагается доступно и понятно, и то, что на первый взгляд может показаться недостаочной подготовкой преподавателя к занятию, на самом деле очень правильно, т.к. в процессе разработки всегда случаются ошибки (как и платформы, так и программиста), и приемы отладки очень подробно описаны и показаны.
    Пройденные курсы оставили отличное впечатление о себе и я с нетерпением жду продвинутого курса, разумеется после отдыха и повторения изученного.
    Белый Александр Николаевич, инженер по эксплуатации программного комплекса супермаркета «Шериф-11», г.Бендеры, ПМР, Молдова.

    ШАГ 2
    1. В документе «Поступление» реквизит «ИсточникПоступления» не обязателен для заполнения. Необходимо для свойства «Проверка заполнения» этого реквизита выставить значение «Выдавать ошибку».
    2. В форме документа «Поступление», в процедуре «ПриСозданииНаСервере» не верно устанавливается Источник поступления для нового документа, необходимо установить проверку на «новизну» документа:

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

    3. В документе «ВыбытиеЖивотных» реквизит «Направление» не обязателен для заполнения. Необходимо для свойства «Проверка заполнения» этого реквизита выставить значение «Выдавать ошибку».
    4. В документе «ВыбытиеЖивотных» не работает проверка на достаточное количество животных. Необходимо в качестве параметра «МоментВремени» передавать границу, а во вложенном запросе выбирать только данные текущего документа:

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

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

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

    5. В документе «ВыбытиеЖивотных» при роботе в тонком клиенте и создании документа система выдает ошибку, т.к. доступа к константам на клиенте нет. Можно вызвать серверную не контекстную процедуру, в которой получить требуемую константу:

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

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

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

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

    Или по аналогии с документом «Поступление», данное действие поместить в процедуру «ПриСозданииНаСервере», что не потребует дополнительного вызова сервера.
    6. В документе «Инвентаризация» в табличной части, в колонках «Количество» и «КоличествоФакт» нельзя проставить 0. Необходимо для этих реквизитов, свойства «Проверка заполнения» выставить значение «Не проверять».
    7. В документе «ПеремещениеЖивотных» не правильно работает проверка на достаточное количество животных. Необходимо исправить текст запроса:

    ВЫБРАТЬ
        РазмещениеЖивотныхОстатки.Животное,
        РазмещениеЖивотныхОстатки.Клетка,
        -РазмещениеЖивотныхОстатки.КоличествоОстаток КАК Нехватка
    ИЗ
        РегистрНакопления.РазмещениеЖивотных.Остатки(
                &МоментВремени,
                Животное = &Животное
                    И Клетка = &Клетка) КАК РазмещениеЖивотныхОстатки
    ГДЕ
        РазмещениеЖивотныхОстатки.КоличествоОстаток < 0

    8. В процедуре «ОбработкаЗаполнения» документа «ВыбытиеЖивотных», веточка «Иначе» лишняя.
    9. В документах «Поступление» и «ВыбытиеЖивотных» при вводе на основании документа «Инвентаризация», реквизиты «ИсточникПоступления» и «Направление» заполняются значениями по умолчанию, что не корректно. Поэтому предлагаю завести в справочниках предопределенные элементы «Излишки» и «Недостача» и заполнять ими соответствующие реквизиты.
    «ОбработкаЗаполнения» документа «Поступление»:

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

            Запрос.УстановитьПараметр("Ссылка", ДанныеЗаполнения);

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

            Животные.Загрузить(Результат.Выгрузить());
           
            ИсточникПоступления = Справочники.ИсточникиПоступления.Излишки;
           
        КонецЕсли;
       
    КонецПроцедуры

    «ОбработкаЗаполнения» документа «ВыбытиеЖивотных»:

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

            Запрос.УстановитьПараметр("Ссылка", ДанныеЗаполнения);

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

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

    10. В отчете «РазмещениеЖивотных» не учитываются движения на конец периода. Для исправления этого в СКД на закладке «Параметры», в колонке «Тип» указываем состав даты «Дата», в колонку «Выражение» вставляем «ДобавитьКДате(КонецПериода(&Период, “День”), “Секунда”, 1)»
    11. Регистр «ВыбытияЖивотных» должен быть оборотным. Для этого в свойствах этого регистра меняем вид регистра на «Оборотный».

    • Dobrenko Oleg 03.03.2015 в 10:24

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

  2. Ровнов Вадим Станиславович, г. Нижний Новгород, разработчик 1с.

    На очное прохождение подобного обучения фактически нет времени, поэтому выбор пал на этот курс, да и под скидки попал “вкусные” в сентябре 2014. Даже при таком виде обучения, плотность материала в момент времени значительна. Некоторые задания приходилось делать, сидя целыми выходными.

    Прохождение данного курса пару годами раньше значительно ускорило бы процесс работы в управляемых формах, на тот момент материала в сети почти не было. Знания нового механизма контроля остатков были, но смутные.

    А в общем, укрепилось _понимание_ и структурирование всего, что было нарыто методом самоучки. Материал изложен последовательно, внятно, есть теперь понимание, КАК делать, а не как в интернете подскажут (подскажут может и правильно, но не оптимально).

    Впереди еще продвинутый курс ;-).

    1. Документ “Поступление товаров” – реквизит “Источник поступления” заполняется в форме документа, значение перетирается при открытии документа.
    Решение: вынести код в обработку заполнения документа:

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

    2. Документ “Поступление товаров” – реквизит “Дата” – указано значение заполнения “01.01.1980 0:00:00”. Если это не странная “хотелка” заказчика, надо исправить, так как сильно отличается поведение системы при вводе новых документов от принятого для других решений на 1с.

    3. Это касается и документа “Выбытие”, убрать флаг “Заполнять из данных заполнения” у реквизита “Дата”, убрать код:

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

    4. Документ “Выбытие животных” – в форме документа в клиентском коде идет обращение к константе
    Исправление: вынести код в обработку заполнения документа:

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

    5. Документ “Выбытие животных” – не работает контроль остатков при проведении по регистру “РазмещениеЖивотных” – не правильно устанавливается параметр запроса “Момент”
    Решение:

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

    6. Не правильно позиционируется на строку документа при выводе сообщения об ошибке при нехватке.
    Решение: Сообщение.Поле = “Животные[“+(ВыборкаДетальныеЗаписи.НомерСтроки-1)+”].Животное”;

    7. Документ “ПеремещениеЖивотных” – можно оптимизировать код обработки проведения: делать движения приход в “Клетка куда” только после успешного контроля остатков.

    8. Документ “Инвентаризация ” – реквизит “КоличествоФакт” табличной части “Животные” установлен признак запрета не заполненных значений, по факту может быть количество равное нулю.

    9. Документ “Инвентаризация ” – Нет связи между документом “Инвентаризация” и подчиненных документов “Поступление” и “Выбытие”. Решение: создать у подчиненных документов реквизит “ДокументОснование” и заполнять его в момент заполнения.

    10. Документ “Инвентаризация ” – При создании подчиненных документов не мешало бы проверять, есть ли данные для заполнения соответствующих документов: нехватки для документа “Поступление” и излишков для документа “Выбытие”.

    11. Регистр “ВыбытияЖивотных” – имеет тип остатков, это должен быть регистр оборотов. Он ничем не “закрывается”. После смены типа регистра: перепроведение документов “ВыбытиеЖивотных”, пересчет итогов регистра, иначе не формируются данные в отчет “АнализВыбытийЖивотных”.

    12. Отчет “РазмещениеЖивотных” – убрать из периода секунды. Решение: тип у параметра установить, как “Дата”, а в выражение прописать:

        Выбор Когда &Период = ДатаВремя(1,1,1) Тогда ДатаВремя(1,1,1) Иначе ДобавитьКДате(КонецПериода(&Период, "День"), "Секунда", 1) Конец

    По поводу помощи миру…
    Помощь в основном приходится оказывать коллегам в фирме, отвечая на их вопросы, а на паблик помощь нет ни сил, ни времени.
    Вот нашел из группы Г+:
    https://plus.google.com/112475390216366295773/posts/634pYQsu9hw

    • Dobrenko Oleg 03.03.2015 в 10:23

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

  3. perepechayev 02.03.2015 в 10:43

    3. Помощь миру.
    Небольшая статья на тему “Ввод на основании”: http://infostart.ru/public/333200/

    • Dobrenko Oleg 03.03.2015 в 10:21

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

  4. Последним сделал задание по шагу 2:

    Найденные ошибки:
    1. При проверке на синтаксис – обращение к константе из клиентской процедуры “ПриОткрытии» формы документа «ВыбытиеЖивотных».
    2. Документ «Поступление» при вводе устанавливает фиксированную дату 01.01.1980 0:00:00. Она установлена в свойстве «Значение заполнения» стандартного реквизита «Дата».
    3. Документ «ВыбытиеЖивотных» при вводе станавливает фиксированную дату 01.01.1980 0:00:00. Данное поведение определяется кодом обработчика заполнения модуля объекта.
    4. При открытии любого документа «Поступление» происходит смена реквизита ИсточникПоступления на константу, при этом система не сигнализирует звездочкой о наличии изменений. Причина такого поведения — безусловное заполнение реквизита в форме документа (обработчик ПриСозданииНаСервере).
    5. Для регистра накопления «ВыбытияЖивотных» установлен вид регистра «Остатки», хотя по логике регистр оборотный.
    6. Документ «ВыбытиеЖивотных», обработка проведения. Запрос, проверяющий наличие отрицательных остатков, при обращении к табличной части документа не установлено условия выбора конкретного документа.
    7. Там же, в установке параметров, неверно установлен параметр «МоментВремени».
    8. Там же, в обработчике запроса, неверно установлено поле для вывода ошибки, оно должно быть меньше на 1, чем номер строки табличной части.
    9. Документ «ПеремещениеЖивотных», обработка проведения. В запросе на выборку строк с отрицательными остатками не установлено условие на отрицательный остаток, в результате система отказывает в проведении, если остаток после проведения не нулевой, в т.ч. положительный.
    10. Документ «Инвентаризация» – невозможно установить нулевое значение по столбцу «КоличествоФакт».
    11. После смены вида регистра по п.5 отчет «АнализВыбытийЖивотных» отрабытывает некорректно. Проверка показала, что также некорректно отрабатывает и запрос для СКД данного отчета.

    Рекомендуемые исправления:

    Не ошибка, для целей отладки – На имеющиеся формы документов поступления и выбытия добавлены ссылки на движения по регистрам
    В настройках командного интерфейса рабочего стола включена видимость регистров.

    1. Код перемещен в серверную процедуру ПриСозданииНаСервере:

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

    2. Свойство «Значение заполнения» стандартного реквизита «Дата» документа «Поступление» – очистка.
    3. Закомментированы строки:

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

    4. Создано условие на заполнение реквизита (проверка документа на новизну):

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

    5. Для регистра накопления «ВыбытияЖивотных» установлен вид регистра «Обороты».
    6. Добавлено условие в запрос: ГДЕ ВыбытиеЖивотныхЖивотные.Ссылка = &Ссылка
    7. Заменено на:

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

    8. Исправлено:

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

    9. Добавлено условие в запрос: ГДЕ РазмещениеЖивотныхОстатки.КоличествоОстаток < 0
    10. Отключена проверка заполнения реквизита табличной части, установлено свойство «Неотрицательное».
    11. Проблема решена при помощи «Тестирование и исправление информационной базы».

    • Dobrenko Oleg 03.03.2015 в 10:18

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

  5. Гаврилов Александр Сергеевич, г. Курган, 1С программист

    1 Шаг
    Программированием в 1с до начала изучения курсов только начал заниматься, поэтому здесь для меня практически все новое. По началу сложно было перестроиться к новым для меня объектам, таким как Планы Счетов, Планы Видов Характеристик, Регистры Бухгалтерии, Регистры Расчетов. Курсы для меня пришлись очень полезными, все объяснено доступным языком, последовательно, с повторениями важной информации.
    На очных курсах 1с не был, поэтому сравнить не с чем. По графику обучения не всегда успевал, т.к. не всегда была возможность уделить время изучению, приходилось дополнительно заниматься по выходным.
    Обязательно буду проходить и другие ваши курсы, такие как Продвинутый курс, Конвертация данных и Сертификация по платформе 1С.
    Уже эти полученные знания успешно применяю на предприятии в доработке конфигурации.

    2 Шаг

    1.Документ ВыбытиеЖивотных, Модуль формы.
    В модуле формы нельзя обращаться к константе с клиентской процедуры.
    Необходимо изменить:
    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Если Объект.Ссылка.Пустая() Тогда
    Объект.ИсточникПоступления = Константы.ОсновноеНаправление.Получить();
    КонецЕсли;
    КонецПроцедуры

    2.Документ ВыбытиеЖивотных, Модуль объекта, процедура ОбработкаПроведения.
    Вместо Запрос.УстановитьПараметр(“МоментВремени”, МоментВремени()) необходимо
    правильно прописать границу Запрос.УстановитьПараметр(«МоментВремени», Новый Граница(МоментВремени(), ВидГраницы.Включая));

    3.Документ ВыбытиеЖивотных, Модуль объекта, процедура ОбработкаПроведения.
    Неправильно указан индекс и неправильно указано количество в выводе сообщение пользователю.
    Было – Сообщение.Поле = “Животные[“+ВыборкаДетальныеЗаписи.НомерСтроки+”].Животное”;
    Нужно – Сообщение.Поле = «Животные[“+(ВыборкаДетальныеЗаписи.НомерСтроки-1)+”].Количество»;

    4.Документ ВыбытиеЖивотных, Модуль объекта, процедура ОбработкаПроведения.
    Ошибка в выдаваемом пользователю предложении (лишний предлог «В»).
    Было – Сообщение.Текст = «Недостаточно животного в «+ВыборкаДетальныеЗаписи.Животное+» в «+ВыборкаДетальныеЗаписи.Клетка+» в количестве «+ВыборкаДетальныеЗаписи.Нехватка;
    Нужно – Сообщение.Текст = «Недостаточно животного «+ВыборкаДетальныеЗаписи.Животное+» в «+ВыборкаДетальныеЗаписи.Клетка+» в количестве «+ВыборкаДетальныеЗаписи.Нехватка;

    5.Документ ВыбытиеЖивотных, Модуль объекта, процедура ОбработкаЗаполнения.
    Из модуля объекта необходимо убрать следующие строки:
    Иначе
    ДанныеЗаполнения = Новый Структура;
    ДанныеЗаполнения.Вставить(«Дата», ’19800101′);

    6.Документ ВыбытиеЖивотных, Модуль объекта, процедура ОбработкаПроведения.
    Необходимо доработать обработку проведения. Во вложенном запросе нужно добавить условие на текущий документ:
    | ГДЕ
    | ВыбытиеЖивотныхЖивотные.Ссылка = &Ссылка

    7.Документ Поступление, Стандартный реквизит Дата. При создании нового документа устанавливается дата 01.01.1980 0:00:00. Необходимо убрать дату. Система заполнит текущую дату автоматически.

    8.Документ Поступление, Форма документа.Процедура ПрисозданииНаСервере.
    При открытии документа реквизит ИсточникПоступления автоматически принимает значение константы ОсновнойИсточник. Это правильно для нового документа, и недопустимо для уже созданного.
    Было – Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Объект.ИсточникПоступления = Константы.ОсновнойИсточник.Получить();
    КонецПроцедуры
    Нужно – &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Если Объект.Ссылка.Пустая() Тогда
    Объект.ИсточникПоступления = Константы.ОсновнойИсточник.Получить();
    КонецЕсли;
    КонецПроцедуры

    9.Регистр Накопления ВыбытияЖивотных.
    Для правильного использования регистру накопления ВыбытияЖивотных, изменил его тип с Остатки на Обороты.

    10.Документ Инвентаризация, Табличная часть Животные, Реквизит КоличествоФакт.
    Невозможно установить нулевое фактическое количество животных, необходимо в свойствах
    реквизита “КоличествоФакт” проверку заполнения поставить в значение “Не проверять”.

    11.Документ ПеремещениеЖивотных, модуль объекта, процедура ОбработкаПроведения.
    В процедуре обработке проведения в запросе проверки отрицательных остатков нужно добавить условие РазмещениеЖивотныхОстатки.КоличествоОстаток < 0.

    Шаг 3
    http://www.forum.mista.ru/topic.php?id=735254

    • Dobrenko Oleg 28.02.2015 в 12:08

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

  6. По п.3 поработал с форумом Infostart. Вот этого будет достаточно (я под логином ryzig):
    http://forum.infostart.ru/forum86/topic126034/message1309904/?result=reply#message1309904
    http://forum.infostart.ru/forum86/topic125971/message1309018/#message1309018
    ?

  7. novikova1c 25.02.2015 в 13:58

    Новикова Светлана Геннадьевна
    г. Санкт-Петербург

    • Что нового Вы узнали из базового курса по программированию?

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

    • От каких заблуждений избавились?
    Самое главное заблуждение, что я умею программировать на 1с – Я только учусь!!!

    • Если Вы работаете на практике с платформой «1С:Предприятие 8», то, каким образом
    вам удалось применить новые навыки (какие результаты были достигнуты);
    Сейчас в основном на 8.2 обычное приложение но и при разработке запросов все равно многое
    уже использую.

    Это уже третий курс, который я у Вас покупаю. Мне нравится, что можно в процессе работы
    получать новые знания. Не нужно слушать, как преподаватель по полчаса объясняет кому-нибудь то, что
    ты уже знаешь, при этом теряется время.

    Спасибо!

    Практическое задание:
    Документ Поступление
    1. Стандартные реквизиты. Дата – убрала из резквизита значение заполнения дату 01.01.1980
    Дата документа стала заполняться текущей датой.
    2.В обработке заполнения загрузка табличной части делается
    всегда. Предлагаю делать только если результат не пустой.
    Если Не Результат.Пустой() Тогда
    Животные.Загрузить(Результат.Выгрузить());
    КонецЕсли;
    Документ ВыбытиеЖивотных
    3.Стандартные реквизиты. Дата – сняла флаг “из данных заполнения”.
    из обработки заполнения убираю вариант иначе, где формируется структура заполнения даты 01.01.1980
    Дата документа стала заполняться текущей датой.
    4.В процедуре ПриОткрытии используется получение константы. в тонком клиенте
    выдается ошибка.
    создаю функцию
    &НаСервереБезКонтекста
    Функция ПолучитьОсновноеНаправление()

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

    КонецФункции // ()
    и вызываю эту функцию в процедуре приОткрытии
    &НаКлиенте
    Процедура ПриОткрытии(Отказ)

    Если Объект.Ссылка.Пустая() Тогда

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

    КонецЕсли;

    КонецПроцедуры
    5.В модуле объекта в процедуре ОбработкаПроведения при нехватке животных в клетке выдается сообщение и должно
    привязываться к конкретной строке, но не работает.
    должно быть так:
    Сообщение.Поле = “Животные[“+(ВыборкаДетальныеЗаписи.НомерСтроки-1)+”].Животное”;

    6. При проведении документа проверяется количество животных в клетке. В запросе есть обращение к табличной части документа
    но нет отбора по документу.
    7.В том же запросе в настройках параметров регистра накопления размещение животных
    предлагаю выбирать только различные данные по Животному и клетке.

    в итоге п.6.и п.7 получается следующий запрос

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

    8.В документе ВыбытиеЖивотных предлагаю загружать тЧ на основании Инвентаризации только
    при если результат запроса не пустой
    Если Не Результат.Пустой() Тогда

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

    КонецЕсли;

    Документ ПеремещениеЖивотных

    9.При проведении документа перемещение животных выдается ошибка о
    недостаточности животного в клетке, так как в качестве нехватки выдается количество
    остатка в клетке со знаком "-".
    в запросе добавляю условие на остаток меньше нуля

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

    Документ Инвентаризация
    12.Документ Инвентаризация нумерацию ставлю в пределах года.
    13.Нет возможности поставить нуль в количество факт, если нужно
    оставить нулевое значение.
    В табличной части животные для реквизитов Количество и Количество факт меняю значение
    проверка заполнения с Выдавать ошибку на Не проверять.
    14.При заполнении загружать ТЧ только, если есть остатки.
    Если Не Результат.Пустой() Тогда
    Объект.Животные.Загрузить(Результат.Выгрузить());
    КонецЕсли;

    Регистр накопления ВыбытияЖивотных.
    15. Регистр должен быть оборотным.
    Меняю видРегистра на Обороты.

    Отчет АнализВыбытийЖивотных
    16. Переопределяю запрос к регистру.

    Отчет РазмещениеЖивотных
    17. период отчета сделала как дату без времени и привела значение к началу
    следующего дня, чтобы включались все остатки в отчет.
    ДобавитьКДате(КонецПериода(&Период,"День"),"Секунда",1)

    Помощь миру:
    В качестве третьей части провела мини-семинар.
    Основная тема семинара, это те моменты, которые для меня оказались новыми
    и которые помогут в работе.
    – Управляемые формы
    – Работа с запросами
    – блок расчетных задач.

    • Dobrenko Oleg 28.02.2015 в 12:02

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

  8. perepechayev 25.02.2015 в 00:10

    1. Обратная связь по базовому курсу.
    Меня зовут Сергей Перепечаев, на данный момент работаю программистом/постановщиком задач в организации, занимающейся разработкой программного обеспечения в городе Санкт-Петербург. Пользовательского опыта с 1С у меня нет, а опыт разработки на 1С заключался в частичном освоении книги для начинающих, написанной М. Радченко. Соответственно, профессионального опыта у меня пока нет.
    Полностью новыми для меня были материалы блоков «Автоматизация бухгалтерского учета» и «Автоматизация расчета заработной платы» (самый сложный блок). Очень полезным был «Знакомство с платформой», после краткого введение в эволюцию системы и обзора платформы получил ответ на вопросы типа «Что такое управляемый интерфейс».
    Главным заблуждением было представление, что платформа предоставляет очень ограниченный набор инструментов для разработки. Однако к моменту завершения блока управленческого учета мое мнение полностью поменялось. Неожиданным оказалось то, насколько быстро может создаваться конфигурация для решения прикладной задачи по сравнению с разработкой на неспециализированных языках.
    Достоинства и недостатки курса обучения.
    Достоинства:
    – материал курсов очень хорошо подобран и «подогнан», каждая последующая тема продолжает предыдущую.
    – авторы дают материал на основе практического опыта, т.е. то, что на практике вряд ли пригодится, в курсе, как я понял, отсутствует.
    – домашние задания. Я очень плохо запоминаю теорию, не подкрепленную практикой, поэтому польза от выполнения ДЗ несомненна.
    – разбор каждого домашнего задания. В результате имеем два решения: как можно сделать (то, как реализовал я) и как нужно сделать.
    – анализ решений и их оптимизация с точки зрения производительности. Очень полезными были ситуации, когда в примере возникала ошибка и тут же исправлялась с пояснениями и использованием отладчика.
    – эффективность восприятия. Видео+аудио значительно лучше запоминаются, чем, скажем книжный.
    – скорость. Такой же объем материала в книжном варианте растянулся бы, наверное, на год.
    – возможность вернуться к любому фрагменту курса и прокрутить его еще раз
    – жесткий график. Не дает расслабиться.

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

    2. Практическое задание
    Документ “Поступление”.
    1. При создании нового документа в поле “Дата” устанавливается и затем сохраняется значение “01.01.1980 0:00:00”, а не текущая дата/время. Вариант решения: удалить поле «Значение заполнения» для стандартного реквизита «Дата» в свойствах поля.
    2. При открытии сохраненного поле “Источник поступления” сбрасывается в значение “Рождение на территории зоопарка” независимо от того, с каким значением документ был сохранен. Вариант решения: вынести инициализацию источника поступления в процедуру обработки заполнения документа.
    3. Можно добавлять позиции с данными из справочника животных, помеченных на удаление. Вариант решения: проверять пометку удаления данных справочника при проведении документа.

    Документ «Выбытие»
    1. Невозможно работать с документом в режиме тонкого клиента, так как в процедуре ПриОткрытии() формы документа реализована попытка обращения к менеджеру констант, недоступном в клиентском контексте. Вариант решения: реализовать чтение константы в функции в контексте сервера и вызвать эту функцию.
    2. При создании нового документа в поле “Дата” устанавливается и затем сохраняется значение “01.01.1980 0:00:00”, а не текущая дата/время. Вариант решения: удалить строку инициализации поля даты

    ДанныеЗаполнения.Вставить("Дата", '19800101');

    из процедуры ОбработкаЗаполнения() документа.
    3. Неверно работает «контроль остатков» животных в клетках на конкретный момент временни. Вариант решения: при установке параметра момента времени запроса устанавливать границу дня, например как

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

    .
    4. Можно добавлять позиции с данными из справочника животных, помеченных на удаление. Вариант решения: проверять пометку удаления данных справочника при проведении документа. То же самое относится и к другим справочникам.
    5. Так как выбытие животных фиксируется в регистре «ВыбытияЖивотных» нарастающим итогом, возможно, вид регистра должен быть изменен на «Обороты».

    Документ «Перемещение животных»
    1. Несмотря на то, что контроль остатков выполняется, можно указать для «Клетка откуда» и «Клетка куда» одну и ту же клетку и провести документ. Кроме того, контроль остатков при этом не срабатывает. Вариант решения: в процедуре обработки проведения перед записью в регистры выполнить проверку заполнения полей «куда» и «откуда» на предмет выбора одной и той же клетки.
    2. Контроль остатков реализован неверно. Существующий запрос выбирает запись из регистра остатков без условия проверки отрицательных остатков. Вариант решения: добавить условие проверки отрицательного остатка.

    Документ «Инвентаризация»
    1. При добавлении позиций поле «Количество» должно заполняться значением остатка в выбранной клетке из регистра «РазмещениеЖивотных» на текущий момент времени и быть недоступным для изменения пользователем.
    2. Невозможно создать документ на основании «Выбытие» по той же причине, что указана в пункте 1 по документу «Выбытие».

    Отчет “Размещение животных”
    1. Отчет не выводит перемещение животных на период, включающий текущую дату. Вариант решения: приводить значение даты к концу дня при формировании условия запроса.

    Константы основных направлений
    1. Слово «Перезд» изменить на «Переезд» для констант переезда в Лондон и Чикаго.

    • Dobrenko Oleg 28.02.2015 в 11:59

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

  9. Обратная связь по пройденному курсу.
    Меня зовут Рыжов Игорь Михайлович. Я действующий главный бухгалтер умирающего производственно-торгового предприятия в Санкт-Петербурге. Я имею опыт работы около 10 лет с различными типовыми и доработанными конфигурациями 1С как пользователь, также имею опыт работы по постановке задач по доработкам. Цель моего обучения – вплотную подобраться к возможности смены профессии со стороны клиента/заказчика продуктов 1С на внедренца, т.к. по опыту работы понял, что это для меня самое интересное и перспективное направление. Данный курс в целом справился с задачей, однако для того, чтобы мне “перепрыгнуть” с одного места работы на другое, сохранив при этом приемлемый на начальном этапе заработок, мне очевидно придется учиться дальше и дальше, а также пробовать работать с реальными задачами.
    В курсе для меня полностью новым оказался блок расчет заработной платы, он также оказался и самым сложным. На начальном этапе возникали сложности с клиент-серверным взаимодействием, которые, как мне кажется, успешно преодолены к концу.
    Попытаюсь описать положительные и отрицательные стороны курса.
    Начну с того, что не понравилось, однако, возможно, это оправдано.
    – В домашних заданиях встречаются места, которые не упоминались в теории. Возможно, это нужно, чтобы настроить пользователя поискать что-то самому.
    – Время занятий – сложно спланировать, ориентироваться на время уроков нельзя. Лично у меня некоторые ДЗ заняли гораздо больше времени, чем теория, при том, что реализовал я их не до конца. Кроме того, затем, я подгонял свое решение под эталонное. Также абсолютно точно необходимо пересматривать некоторые моменты курса по несколько раз.
    – Защищенный формат. Очень жаль, что только для PC. Нельзя посмотреть теорию в дороге, в условиях дефицита времени это было бы весьма кстати. Можно смотреть решения ДЗ, но так как при этом под рукой нет платформы, толку от этого мало.
    Теперь о плюсах:
    1) Уровень детализации. Все очень подробно, без темных пятен. Курс, конечно, не охватывает все возможности платформы, но такая задача и не ставилась.
    2) Структурирование материала. Очень удачное разбиение по темам и блокам позволяет без труда обратиться к нужному материалу и позволит в дальнейшем на начальном этапе использовать теоретические материалы как справочник.
    3) Подача материала – осуществляется в режиме реального времени, с ошибками в коде, сложность циклически нарастает. Хоть это и занимает больше времени, у ученика формируются правильные навыки отладки и понимания оптимальности алгоритмов.
    4) Формат заочного обучения, возможно, кому-то не подойдет. Нужно иметь самомотивацию, способности к самостоятельному решению некоторых проблем и вопросов. Однако для меня он единственно возможный.
    В целом курсом я очень доволен, обязательно буду заниматься на продвинутом.

    • Dobrenko Oleg 24.02.2015 в 14:32

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