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

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

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

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

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

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

  1. Татьяна 16.01.2013 в 21:47

    Вот еще.

    http://www.forum.mista.ru/topic.php?id=647652
    http://www.1c-pro.ru/topic47935.html
    И я забыла представиться. Дозморова Татьяна, Томск, Программист Службы Информационного Обеспечения.

  2. Татьяна 16.01.2013 в 13:17

    ОБРАТНАЯ СВЯЗЬ

    Я больше года работаю на платформе 1С 8.1. На эти курсы пошла для того чтобы обновить, систематизировать свои знания и узнать больше о версии 8.2.
    Неожиданно для себя открыла очень много нового! Пересмотрела свои методы работы при написании кода, не пользовалась раньше ни шаблонами кода, ни форматной строкой, а также конструктором запроса с обработкой.
    Заполнила пробелы в регистрах бухгалтерии и накопления. Очень понравился блок о запросах.

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

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

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

    ПРАКТИЧЕСКОЕ ЗАДАНИЕ

    Выполнила проверку конфигурации на наличие ошибок.
    И вот , что удалось найти и исправить:

    Тонкий клиент:

    Документ “Поступление”:

    1. В свойствах стандартного реквизита Дата, по-умолчанию стоит значение заполнения равным 01.01.1980. Убрала. Иначе получается, что для новых документов устанавливается эта дата, это неправильно.
    Так в базе ведется учет животных, в регистры записывается в качестве периода Дата документа.

    2. Ошибка в МодулеФормы.

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

    При открытии любого документа, нового или сохраненного, перезаполняется реквизит ИсточникПоступления. Такое поведение не корректно.
    Я так понимаю, хотели решить задачу автоматического заполнения этого реквизита при созданиии нового документа.
    Решение:
    Перенесла этот код в МодульОбъекта в процедуру ОбработкаЗаполнения.

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

    В итоге ОбработкаЗаполнения в Поступлени выглядит так:

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

    Процедура ОбщегоМодуля РаботаСдокументами (сервер):

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

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

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

    Чтобы поля “ИсточникПоступления” И “НаправленияВыбития” заполнялись автоматом (Списание и Выбытие), добавила предопределенные элементы в соответствующие справочники.
    4. Поле ИсточникПоступление сделала обязательным для заполнения.

    Документ “ВыбытиеЖивотных”

    1. При открытии документа в тонком клиенте возникает ошибка в процедуре формы ПриОткрытии из-за попытки обращения с клиента к серверному объекту “Константы”.
    Перенесла код в МодульОбъекта в процедуру ОбработкаЗаполнения.

    2. Изменила ОбработкуЗаполнения также как и у Поступления. Непонятно зачем при создании нового документа дата фиксированно заполняется 1 января 1980 года.
    Я считаю это неправильное поведение, дата не должна быть фиксированной.

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

    3. Указала для реквизита Направление в свойствах выдавать ошибку, если это поле не заполнено. Оно должно быть обязательным, так как используется в качестве измерения в регистре и есть в отчете.

    4. В ОбработкеПроведения:

    1) По новому механизму проверки нужно сначала записать движения, потом проверить остаток.
    остаток животных хранится в регистре накопления РазмещениеЖивотных.

    Поэтому Строчку Движения.Записать() я заменила на Движения.РазмещениеЖивотных.Записать(), не нужно в этом месте записывать движения по регистру ВыбытиеЖивотных.

    2) Ошибка в запросе в ОбработкеПроведения:
    При устновке параметра для таблицы Остатки в подзапросе используется ВЫБРАТЬ из таблицы документа, лучше использовать ВЫБРАТЬ РАЗЛИЧНЫЕ, на случай дублирующих строк.

    3) Здесь же: список животных получается на дату документа, а не на МоментВремени документа. Из-за этого сделанные в процедуре движения для проверки остатка не будут учитываться.
    Нужно использовать исключающую границу. Заменила код:

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

    4) При нехватке товара сообщение для пользователя выводится в верхнем левом углу приложения. Нужно по идее его выводить рядом с табличным полем документа, колонкой количество, на соответствующей строке (НомерСтроки-1).

    Изменила строчку кода:

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

    Документ “ПеремещениеЖивотных”
    В ОбработкеПроведения:
    1. в запросе нет условия на сравнения остатка с 0.
    Добавила в запрос:

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

    2. Изменила вывод ошибки о нехватке. Получилось меньше строк. Причем здесь метод Выгрузить думаю будет лучше использовать, так как в результате запроса никогда не будет больше одной строки.
    Результат = Запрос.Выполнить().Выгрузить();

        Если Результат.Количество() > 0 Тогда
       
            Отказ = Истина;
            Сообщение = Новый СообщениеПользователю;
            Сообщение.Текст = "Недостаточно животного "+Животное+" в "+КлеткаОткуда+" в количестве " + Результат[0].Нехватка;
            Сообщение.Сообщить();
           
        КонецЕсли;

    Размещение Животных
    Параметр Период нужно брать на конец дня.

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

    Малюсенькая ПОМОЩЬ МИРУ

    http://www.1c-pro.ru/topic47919.html
    http://www.1c-pro.ru/topic47893.html

    • Dobrenko Oleg 17.01.2013 в 08:12

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

  3. Дмитрий Иванов 16.01.2013 в 07:23

    Здравствуйте!
    I.
    Отчет по финалу 14 потока. Иванов Дмитрий, программист 1С, работаю на 7.7 более 8 лет. До этого курса платформой 8.2 занимался только как администратор. Ваш курс очень понравился! Хорошо продумана система обучения. Можно заниматься в удобное время, варьировать нагрузку. В то же время стимулирует не расслабляться и сдавать ДЗ вовремя. В некоторых разделах времени только-только и хватало :) Рад, что узнал основы расчетов (ЗП), раньше это для меня был темный лес. Понравились управляемые формы, динамические списки и СКД, это вообще крутейший механизм. Вообще, большая часть информации была для меня новой. Теперь чувствую себя в конфигураторе довольно уверенно. Хотя масштабность типовой УТ 11 все еще удивляет, а особенно удивляет ее тормознутость даже на не очень слабых машинах. Так что придется идти на продвинутый курс, надеюсь, поможет разобраться и с этим :)

    II.
    Отчет по конфигурации Зоопарк.

    1. В модуле формы документа ВыбытиеЖивотных идет обращение к константе в клиентской процедуре. Менеджер констант недоступен на клиенте. Вариант исправления – поместить обращение к константе в серверную функцию:

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

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

    2. Регистр ВыбытияЖивотных реализован как регистр остатков, хотя смысла остатки выбытия животных не имеют. К тому же, регистр не будет выводиться в ноль. Необходимо установить вид регистра – Обороты. После этого сделать пересчет итогов по регистру.

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

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

    4. Далее там же, при выводе диагностического сообщения о нехватке ресурса, неправильно передается номер сроки для привязки сообщения, необходимо уменьшить передаваемый номер на 1:

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

    5. Там же, в тексте запроса, отсутствует условие на выборку номеров строк из табличной части документа:

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

    6. Там же, набор записей Движения.РазмещениеЖивотных записывается дважды = один раз принудительным вызовом, второй раз автоматически по завершении процедуры. Следует удалить первую строку “Движения.РазмещениеЖивотных.Записывать = Истина;”, а принудительную запись сделать так: “Движения.РазмещениеЖивотных.Записать();”

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

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

    8. В модуле формы документа ПоступлениеЖивотных, в процедуре ПриСозданииНаСервере происходит присваивание реквизиту ИсточникПоступления значения константы. По логике, данное присваивание должно происходить только в случае, если это форма нового, незаписанного документа:

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

    9. Заполнение реквизитов Направление и ИсточникПоступления, описанные в п. 1 и 8, было бы удобнее и логичнее проводить в модулях объектов, в процедурах ОбработкаЗаполнения().

    10. В отчете Размещение животных было бы логичнее стандартный параметр Период задать с сотавом даты только “Дата”, а в качестве выражения для этого параметра использовать следующее:

    ДобавитьКДате(КонецПериода(&Период, "День"), "Секунда", 1)

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

    III.
    Написал небольшую заметку по УФ и динамическим спискам для начинающих, опубликовал на инфостарте: http://infostart.ru/public/169368/

    Всем разработчикам и тренерам – спасибо! Отличный курс!

    • Dobrenko Oleg 16.01.2013 в 11:59

      Здравствуйте, Дмитрий!
      Благодарим за отзыв и поздравляем с успешным окончанием базового курса! Ждем на продвинутом :)

  4. Козловская Наталья Сергеевна, г. Калининград. Должность – программист 1С.
    Шаг 1:
    Я работаю программистом 1С с 2007 г. На версии 8.1 работаю с 2010 г. Курсы стала изучать, находясь в отпуске по уходу за ребенком для того, чтобы легче было выйти на работу, а, возможно, поменять место работы. Курсы, в целом, очень понравились. В каждом блоке я узнавала что – то новое, потому что все темы были полностью раскрыты и доступны для понимания. Больше всего нового я узнала о распределении программного кода между клиентом и сервером. Так же я с нуля узнала Бухгалтерию и Заработную плату и теперь не страшно будет взяться за задание в этой отрасли. Мне очень понравился формат обучения, потому что во 1-х можно выбирать удобное время для обучения, во 2-х очень грамотно и доходчиво преподают курсы, в 3-х в любое время можно прослушать заново теорию.
    Шаг №2:
    Регистры.
    1. Регистр «ВыбытияЖивотных» имеет вид «Остатки», при этом в нем производятся только накопления. Это грубая ошибка, т.к. база будет расти. Это должен быть регистр оборотный.
    2. Чтобы в документах можно было смотреть движения регистров, нужно установить соответствующие флажки на форме документов на закладке Командный интерфейс в разделе Перейти.
    Документ Поступление.
    3. Реквизит ИсточникПоступления должен заполнятся из соответствующей константы только для нового документа. Надо добавить условие:
    Если Объект.Ссылка.Пустая() Тогда.
    ИсточникПоступления = Константы.ОсновнойИсточник.Получить();
    КонецЕсли;
    4. Непонятно зачем задано значение заполнения для даты 01.01.1980.
    Документ ВыбытиеЖивотных.
    5. В модуле формы в клиентской процедуре ПриОткрытии идет обращение к константе, что в тонком клиенте допустимо только на сервере. Текст этой процедуры надо перенести в процедуру ПриСозданииНаСервере.
    6. В обработке проведения во вложенном запросе «ДанныеДокументы» нет условия отбора по ссылке на тек. документ.
    7. В обработке проведения для определения параметра «МоментВремени» надо использовать границу в случае неоперативного проведения:
    Если РежимПроведения = РежимПроведенияДокумента.Оперативный Тогда
    Запрос.УстановитьПараметр(“Момент”, Неопределено);
    Иначе
    Граница = Новый Граница(МоментВремени(), ВидГраницы.Включая);
    Запрос.УстановитьПараметр(“Момент”, Граница);
    КонецЕсли;

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

    Документ ПеремещениеЖивотных.
    9. В запросе определения остатков в процедуре ОбработкаПроведения необходимо добавить условие:
    РазмещениеЖивотныхОстатки.КоличествоОстаток < 0
    иначе документ не будет проводится как при отрицательных, так и при положительных остатках.
    Документ Инвентаризация.
    10. В модуле формы есть процедура «ЗаполнитьНаСервере()» в которой есть запрос без установки параметров виртуальной таблицы. Нужно установить параметр «Период».
    Отчет РазмещениеЖивотных.
    11.В СКД на закладке Параметры в поле выражение вставить
    ДобавитьКДате(КонецПериода(&Период, "День"), "Секунда", 1)

    • Dobrenko Oleg 16.01.2013 в 11:52

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

  5. VChervyakov 14.01.2013 в 21:00

    1 этап.
    Червяков Владимир Михайлович, г. Москва. Должность программист 1С.
    Работаю с программами 1С с 1997 года. Имел сертификаты по 7.0, 7.5 и 7.7.
    В 2004-2005 годах имел небольшой опыт работы с платформой 8.0 и получил сертификат специалиста по Управлению торговлей. Однако после этого по работе занимался исключительно «семеркой» и только теперь всерьез занялся изучением 8.2. Для меня очень многое оказалось новым, В частности распределение программного кода между сервером и клиентом.
    По формату обучения могу сказать следующее. Это гораздо эффективнее «очного» обучения, когда за 4-5 дней на тебя сваливается огромный объем информации. Большое спасибо авторам за то, что в начале каждого блока шла теория – это позволяло лучше «войти» в предметную область. Для меня перестало казаться чем-то непостижимым автоматизация сложных видов расчета. Очень порадовало создание отчетов с помощью СКД.
    Буду рад продолжить обучение в рамках продвинутого курса.

    2 этап. Ошибки конфигурации.
    Регистры.
    -Регистр ВыбытияЖивотных имеет вид Остатки и при этом в нем производятся только накопления и, нет списаний. Это грубая ошибка, т.к. база будет расти. Это должен быть регистр оборотный.
    -Чтобы в документах можно было смотреть движения регистров, я бы поставил соответствующие флажки на форме документов на закладке Командный интерфейс в разделе Перейти.
    Документ Поступление.
    -Реквизит ИсточникПоступления должен заполнятся из соответствующей константы только для нового документа. Надо добавить условие:
    Если Объект.Ссылка.Пустая() Тогда.
    ИсточникПоступления = Константы.ОсновнойИсточник.Получить();
    КонецЕсли;
    -Непонятно зачем задано значение заполнения для даты 01.01.1980.
    Документ ВыбытиеЖивотных.
    -В модуле формы в клиентской процедуре ПриОткрытии идет обращение к константе, что в тонком клиенте допустимо только на сервере. Текст этой процедуры надо перенести в процедуру ПриСозданииНаСервере.
    -В процедуре ОбработкаПроведения вместо двух операторов
    Движения.РазмещениеЖивотных.Записывать = Истина;
    и
    Движения.Записать();
    Надо использовать один
    Движения.РазмещениеЖивотных.Записать();
    -Там же, Для определения параметра «МоментВремени» надо использовать границу:
    Запрос.УстановитьПараметр(“МоментВремени”, Новый Граница(МоментВремени(),ВидГраницы.Включая));
    Иначе мы в запросе получаем остатки без учета движений самого документа.
    -Там же. При выдаче сообщения о нехватке для правильного позиционирования ошибки на нужную строку и поле надо вместо оператора
    Сообщение.Поле = “Животные[“+ВыборкаДетальныеЗаписи.НомерСтроки+”].Животное”;
    Использовать оператор
    Сообщение.Поле = “Животные[“+(ВыборкаДетальныеЗаписи.НомерСтроки-1)+”].Количество”;
    Документ ПеремещениеЖивотных.
    – В запросе определения остатков в процедуре ОбработкаПроведения необходимо добавить условие:
    РазмещениеЖивотныхОстатки.КоличествоОстаток < 0
    иначе документ не будет проводится как при отрицательных, так и при положительных остатках.
    Документ Инвентаризация.
    -При заполнении я бы добавил заполнение поля КоличествоФакт, равное количеству.
    -Свойство Проверка заполнения для реквизита КоличествоФакт я бы выставил в значение Не проверять.
    Отчет РазмещениеЖивотных.
    -В СКД на закладке Параметры в поле выражение вставить
    ДобавитьКДате(КонецПериода(&Период, "День"), "Секунда", 1)
    3 этап.
    а. Провел небольшой семинар для коллег по работе.
    Фотографии:
    1
    2

    б. http://www.1c-pro.ru/topic47567.html

    • Dobrenko Oleg 15.01.2013 в 06:19

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

  6. Игорь Игнатов 14.01.2013 в 20:49

    Здравствуйте!! Огромное спасибо за курс. Курс очень оказался полезен хотя я программирую уже 2 года сначала на 8.1 в меньшей степени с применением новых возможностей 8.2. Что очень понравилось в курсе.
    Ну первое это конечно это понимание клиент серверной работы платформы 8.2. Очень подробно и очень понятно все это описано у Вас в курсе.
    Второе – работа с новым интерфейсом и настройками.
    Третье – наконец-то только после Вашего курса понятно «новый алгоритм оперативного проведения» для оперативного учета.
    И конечно очень помогло разобраться в теме «сложные периодические расчеты»
    Можно было бы здесь описать чего не хватает в этом курсе но делать этого не буду потому что впереди у меня продвинутый курс и я надеюсь что все вопросы закрою там.
    СПАСИБО ОГРОМНОЕ ЗА ВАШУ РАБОТУ.
    Практическое задание
    1. В запросе в документе «Выбытие животных» в подзапросе «ДанныеДокументы» нет условия отбора по ссылке на тек. документ.
    2. Регистр накопления «ВыбытияЖивотных» вид регистра остатки, а в проведении документа «Выбытие животных» по этому регистру не указано системное перечисление «ВидДвижения».
    3. Да и вообще как мне кажется регистр накопления «Выбытие животных» по сути должен быть с видом регистра = «Обороты» так как у него только один документ регистратор.
    4. В документе «Перемещение животных» запрос делается на момент времени включая границу документа, а нигде не описано удаление движений текущего документа, значит все записи этого документа попадут в этот запрос что совершенно нас не устраивает.
    5. В модуле формы документа «Выбытие животных» в клиентской процедуре модуля формы описана следующая строка
    Объект.Направление = Константы.ОсновноеНаправление.Получить(); – это работать не будет на клиенте.
    6. В документах есть только управляемые формы которые в обычном приложении открываются только для просмотра. Для работы в обычном приложении нужно создать «обычные формы» документов. Прописать ее на закладке «Дополнительные» тогда при запуске обычного приложения будут по умолчанию открываться обычные формы.
    7. Что бы конфигурация заработала в обычном приложении нужно в конфигураторе через меню «Сервис» -> «Параметры» на первой закладке поставить настройку «Управляемое приложение и обычное приложение»
    8. В отчете «Размещение животных» используется виртуальная таблица «Остатки», а мы знаем что она выдает данные на начала дня. Поэтому для получения правильного отчета нужно период получения отчета приводить к концу дня и прибавлять секунду.
    9. В документе «Инвентаризация» в модуле формы есть процедура «ЗаполнитьНаСервере()» в которой есть запрос без установки параметров виртуальной таблицы. Нужно установить параметр «Период».
    10. В документе «Выбытие животных» в обработке проведения в запросе в параметрах виртуальной таблицы РегистрНакопления.РазмещениеЖивотных.Остатки есть запрос, по хорошему нужно на закладке «Дополнительно» поставить галку «Без повторяющихся» что бы виртуальная таблица не обрабатывала дубли документа.
    11. И еще пожалуй непосредственная запись в документе «Выбытие животных» перед выполнением запроса контроля остатков лишняя, так как у нас может быть отказ проведения, а у нас была уже запись то есть затрачено лишнее время. А в конце транзакции проведения у нас и так бы была запись в регистры.

    Фото мини-семинара:

    1
    2

    • Dobrenko Oleg 15.01.2013 в 06:08

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

  7. Бородина Наталья 13.01.2013 в 17:24

    Здравствуйте!
    Бородина Наталья, г.Нижний Новгород. Программист 1С.

    ШАГ 1. Программистом 1C работаю уже более 5 лет, с v.8.2 работаю полгода. Пройти Базовый курс посоветовал руководитель (за это ему огромное СПАСИБО).
    По работе постоянно приходится искать, учиться, читать… Но с помощью Вашего курса понимание вопроса приходит сразу. Буквально в каждом уроке есть куча интересных фактов, очень много нового и полезного, все разложено по полочкам. И формат курса, оказался очень удобен, и замечательная подача материала. Даже я, работающая мама троих детей, смогла почти уложиться :). Конечно, буду много раз возвращаться к пройденному материалу, и снова что-то новое открою для себя.
    В курсе новое для меня – это оазались темы о регистрах бухгалтерии и все об автоматизации учета зар.платы. Теперь я не боюсь программ, связанных с ними.
    Благодарю весь коллектив Spec8 за работу!

    ШАГ 2. Тестирование прикладного решения:
    1. Сразу бросается в глаза: не заведены ни пользователи, ни роли.
    2. Документ “ВыбытиеЖивотных”. Ошибка при синтаксическом контроле:
    {Документ.ВыбытиеЖивотных.Форма.ФормаДокумента.Форма(7,24)}: Переменная не определена (Константы) Объект.Направление = <>Константы.ОсновноеНаправление.Получить(); (Проверка: Тонкий клиент).
    Из-за попытки получить константу из клиентской процедуры.
    Переносим заполнение в модуль объекта в уже существующую там процедуру ОбработкаЗаполнения.
    3. Документ “Поступление”
    – Стандартный реквизит “Дата” значение заполнения 01/01/1980 00:00:00
    Очищаем.
    4. Документ “ВыбытиеЖивотных”. При создании нового документа реквизит дата автоматически заполняется значением 1980.01.01. 0:00:00. В процедуре ОбработкаЗаполнения нужно убрать строку с кодом “ДанныеЗаполнения.Вставить(“Дата”, ‘19800101’);”.
    5. Регистр накопления “ВыбытияЖивотных” лучше использовать с видом Обороты, иначе регистр будет неоправданно расти.
    6. Не верно проверяются остатки в документе “ВыбытиеЖивотных”. Запрос.УстановитьПараметр(«МоментВремени», МоментВремени());
    нужно заменить на:
    Запрос.УстановитьПараметр(«МоментВремени», Новый Граница (МоментВремени(), ВидГраницы.Включая));
    7. В документе “ВыбытиеЖивотных” сообщение об ошибке позиционируется на следующую строку табличной части. В строке: Сообщение.Поле = “Животные[“+ВыборкаДетальныеЗаписи.НомерСтроки+”].Животное” заменить “ВыборкаДетальныеЗаписи.НомерСтроки” на (ВыборкаДетальныеЗаписи.НомерСтроки-1)”.
    8. В отчете “РазмещениеЖивотных” на закладке «Параметры» задан параметр «Период», но не включен в текст запроса – необходимо его либо включить в параметры виртуальной таблицы, либо убрать с закладки «Параметры».
    9. Документ “ПеремещениеЖивотных”. В процедуре ОбработкаПроведения происходит удваивание движения по расходу. Нужно убрать строку “Движения.Записать();”.
    10.Документ “Поступление” поле “ИсточникПоступления” перезаписывается у уже созданного документа. В процедуре ПриСозданииНаСервере добавить условие на Объект.ИсточникПоступления.Пустая() и заполнять реквизит только в этом случае.
    11. Документу “Поступление” реквизиту “ИсточникПоступления” и документу “ВыбытиеЖивотного” реквизиту “Направление” добавить обязательную проверку заполнения.

    Шаг 3 и ДЗ по последнему блоку постараюсь:) выложить до 17 января.

  8. Михаил Мухачёв 13.01.2013 в 16:45

    Добрый день!

    Шаг 1.

    До курса опыт работы с платформой 1С Предприятие 8.1 – 8.2 был 1 год. В процессе прохождения курса узнал очень много нового. Мне стало понятно, что Вы имели под понятием “белые пятна” и важность их устранения. Очень понравилось что в курсе есть блоки посвященные бухгалтерскому учету, а также расчету заработной платы, причем данные блоки рассчитаны именно на новичков (начинается всё с элементарных определений и по нарастающей вплоть до физической/виртуальной структуры каждой таблицы в базе данных).

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

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

    Формат курса оказался очень удобен, т.к. нет желания сидеть на очных занятиях (тем более что на работе выделяют время для обучения и не надо никуда ехать). Заниматься можно в любое удобное для себя время. Ну и опять же самоконтроль – очень хорошая вещь.

    Подводя итог скажу что курс ОЧЕНЬ понравился, в процессе прохождения курса получил сертификат профессионала по платформе 8.2. После небольшого перерыва приступлю к продвинутому курсу. Спасибо Вам большое за проделанную работу!

    Мухачёв Михаил Михайлович, программист 1С, г. Красноярск.

    Шаг 2.

    1) В модуле формы «ФормаДокумента» документа «ВыбытиеЖивотных» идет обращение к константе с клиентской процедуры, такой вариант приемлем только для работы с толстым клиентом, для тонкого клиента необходимо создать серверную функцию возвращающую результат или использовать процедуру “ПриСозданииНаСервере”.

    2) Регистр накопления «ВыбытиеЖивотных» должен быть оборотным, а не остаточным. (т. к. расходов по нему нет, т.е. регистр не выводится в 0, что повлияет на размер информационной базы).

    3) В запросе контролирующем остатки по регистру «РазмещениеЖивотных» (модуль докумета “ВыбытиеЖивотных”) выбирается отрицательный остаток (неправильно т.к. минус на минус будет всегда давать плюс, т.е. виртуальная таблица и так возвращает отрицательную величину). Также в этом запросе во вложенном запросе необходимо указать условие на ссылку (при выборе табличной части), ведь физическая таблица в которой хранятся все табличные части документа одна (да и номенклатура для соединения тоже нужна по конкретно текущему документу). Также в параметр запроса «МоментВремени» передавать надо не момент времени документа, а границу (для включения данного документа в остатки):

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

    4) При выводе сообщения о нехватке остатков при проведении документа «ВыбытиеЖивотных» необходимо уменьшить номер строки на единицу, т.к. связь по полю идет с указанием индекса, должно быть так:

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

    5) Не очень удобно что для документа «Поступление» дата заполнения реквизита «Дата» стоит 01.01.1980 0:00:00.

    6) Неправильно реализован контроль остатков в документе перемещения (просто выбирается минус остаток по регистру). Минус из запроса в поле необходимо убрать, добавить условие <0 по количеству, тогда в результат запроса будет попадать корректное число нехватки.

    7) Не совсем понятно назначение ветки иначе в обработке проведения «ВыбытиеЖивотных», основанием может быть только инвентаризация, а иначе ничего делать не надо.

    Шаг 3.

    Не много, но лучше чем ничего:

    http://www.1c-pro.ru/topic47828.html
    http://forum-1c.ru/index.php?topic=24121.new#new
    http://forum-1c.ru/index.php?topic=24125.new#new
    http://www.1c-pro.ru/topic47707.html

    • Dobrenko Oleg 14.01.2013 в 05:06

      Здравствуйте, Михаил!
      >В первую очередь избавился от заблуждения, что я очень много знаю, и хорошо разбираюсь в платформе.
      : )))))))))
      Благодарим за отзыв по курсу. Шаги №2 и 3 приняты.
      Поздравляем с успешным окончанием базового курса. Ждем на продвинутом!

  9. Курс оказался действительно полезным, очень содержательным. Мой опыт работы по платформе 1С 8 более 5 лет. Для себя хотел проверить свои же знания, систематизировать их, больше узнать об управляемых формах. Думаю данный курс будет очень полезным новичкам, которые за короткий промежуток времени могут резко повысить свою квалификацию. Жалею, что таких материалов не было 5-6 лет назад:(

    Ошибка № 1.
    Отсутствуют подсистемы, отсутстуют пользователи в информационной базе.
    Решение № 1.
    Создать необходимые подсистемы и пользователей.

    Ошибка № 2.
    Отсутствуют роли, соответственно объекты можно удалять непосредственно, без всякого контроля.
    Решение № 2.
    Создать хотя бы одну роль, с административными правами, у которой снять право на непосредственное удаление.

    Ошибка № 3.
    Документ “Поступление”: реквизиту “ИсточникПоступления” всегда присваивается значение из константы “ОсновнойИсточник”, независимо от того новый ли это документ или уже существующий.
    Решение № 3.
    Проверять новый ли это документ, если да, тогда присваивать реквизиту “ИсточникПоступления” значение из константы “ОсновнойИсточник”.

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

    Ошибка № 5.
    В документе “ВыбытиеЖивотных” в запросе контроля остатков не установлен отбор по текущему документу.
    Решение № 5.
    Установить в тексте запроса параметр “Ссылка”

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

    Ошибка № 7.
    В документе “ПеремещениеЖивотных” при контроле остатков не контролируются отрицательные остатки.
    Решение № 7.
    Добавить проверку только по отрицательным остаткам.

    Ошибка № 8.
    В документе “Инвентаризация” при заполнении табличной части “Животные” не учитывается дата документа.
    Решение № 8.
    В текст запроса добавить условие получать остатки на дату документа.

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

    Ошибка № 10.
    Регистр накопления “ВыбытияЖивотных” фомирует движения только в приход.
    Решение № 10.
    Сделать регистр накопления “ВыбытияЖивотных” оборотным, т.к. контролировать остатки по этому регистру нет необходимости.

    • Dobrenko Oleg 14.01.2013 в 04:57

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

  10. Татьяна Осокина 12.01.2013 в 10:46

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

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

    Решение расчетных задач, работа с универсальными коллекциями и таблицами значений, работа с управляемыми формами, особенности платформы 8.2.

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

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

    Благодаря разделу по СКД мне удалось реализовать пожелания пользователей по настройке отчетов на СКД в УТ11 в пользовательском режиме.
    Научилась делать внешние печ. формы на платформе 8.2
    Написала несколько несложных внешних обработок

    • Если Вы пока не работаете реальных проектах по внедрению решений на
    «1С:Предприятии 8», то, что оказалось неожиданным из материалов курса?

    • Насколько удобен, оказался формат обучения в сравнении с очным форматом?
    намного удобнее очного, можно заниматься в любое время.

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

    1) РН остатков “Выбытие” не закрывается в ноль. Я бы использовала для регистрации выбытий оборотный регистр накопления.

    2) В тонком клиенте при создании на основании Инвентаризации документа “выбытие” – программная
    ошибка из-за недопустимого на клиенте обращения константам.

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

    Это обращение нужно вынести в серверную внеконтекстную процедуру:

    &НаСервереБезКонтекста


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

    Такая же ошибка при открытии документа выбытие в тонком клиенте.

    3) Выбытие животных проходит без контроля остатков. Это происходит потому, что запрос к остаткам делается без учета
    движений проводимого документа. Решение:

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

    4)Документ инвентаризации не допускает нулевые значения количеств, а такая ситуация может понадобиться. Отключить
    “проверку заполнения” для реквизитов “количествофакт” и “количество” табчасти документа инвентаризация.

    5) Реквизиты “количествофакт” и “количество” табчасти документа инвентаризация в текущей настройке могут быть отрицательными.
    На практике такого быть не может, как следствие искажение учетных данных.В настройках реквизитов нужно указать “неотрицательное”.

    6) при проведении документов “поступление” и “выбытие” при наличи нескольких строк с одинаковыми полями “животное” и “клетка”
    делается несколько движений. Сгруппировать строки перед записью движений.

    7) При заполнении документа Инвентаризация запрос к регистру накопления РазмещениеЖивотных делается без параметров.
    Если инв. задним числом делать, остатки будут получены неверно.
    Нужно передавать момент времени документа:

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

    8) Обработки заполнения на основании инвентаризации для Выбытия и Поступления отличаются незначительно. Чтобы избежать дублирования
    можно в общем модуле создать универсальную обработку заполнения, передавать кроме данных заполненния в качестве параметра тип документа (поступление или выбытие)
    и в зависимости от него менять запрос к документу инвентаризация с помощью СТРЗаменить.

    9) Выбытие животных, сообщение о нехватке, выдаваемое при проведении не привязано к строке.
    Строку

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

    Нужно заменить на

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

    10) в обработке проведения документа “Выбытие” в запросе связываются две таблицы: данныеДокумента и РазмещениеЖивотныхОстатки.
    ДанныеДокумента – это вложенный запрос. В нем не хватает отбора по ссылке на закладке “условия”

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

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

    11) В обработке проведения документа “Перемещение животных” в запросе к остаткам РН РазмещениеЖивотных нет условия на отрицательный
    остаток:

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

    Поэтому получается, что при остатке 2 перемещение с количеством 1 выдает ошибку о нехватке.

    3. Помощь миру

    http://devtrainingforum.v8.1c.ru/forum/thread.jsp?id=606210#606210

    http://devtrainingforum.v8.1c.ru/forum/thread.jsp?id=606206#606206

    • Dobrenko Oleg 14.01.2013 в 04:50

      Татьяна, благодарим за отзыв по курсу.
      Шаги №2 и 3 приняты. Поздравляем с успешным окончанием базового курса по программированию! Успехов в дальнейшем обучении!

  11. Добрый день!
    I. Отзыв о базовом курсе. Шамов Денис Сергеевич, г.Ясногорск.

    С конфигурированием и программированием до недавнего времени не был знаком. Начинал обучение с Версии по обучению программированию от 1с.
    После прочтения материалов и решений практических задач из книг понял что материал от 1с не в очень удобном для меня формате.
    Порекомендовали пройти у вас базовый курс по программированию и вот я оказался здесь:).

    Формат обучения оказался очень удобным, можно было учится не отрываясь от основной работы.
    Знаний предоставлено довольно много, довольно в удобной форме с хорошими примерами.
    После прохождения курса стало намного понятней как работает платформа, так же появились базовые знания по программированию (Материалы от 1с явно проигрывают).
    Понравился поиск по урокам, можно было всегда вернутся, а самое главное быстро найти интересующее занятие.
    Через какое то время думаю буду проходить продвинутый курс.
    Хотелось бы поблагодарить создателей курсов, Респект и Уважуха, продолжайте и дальше обогащать народ знаниями.

    II.Отчёт по решению практической задачи.

    1) Нумерация в справочнике Животные должна быть в пределах подчинения группе.
    2) В регистре Накопления ВыбытияЖивотных – Вид регистра необходимо установить на обороты.
    3) В Документе Выбытие животных в процедуре ПриОткрытии (Поскольку это клиентская процедура Метод получить() для константы не будет работать) Весь код перенесём в процедуру ПриСозданииНаСервере.
    4) В Документе Выбытие животных в процедуре ОбработкаПроведения(при установке параметров нужно добавлять 1 секунду к МоментуВремени() или Использовать Границу(ВидГраницы.Включая).
    5) В Документе Выбытие животных в процедуре ОбработкаПроведения(в сообщении о нехватке необходимо отнять 1 от номера строки что бы получить корректную привязку к полю).
    6) В Документе Выбытие животных в процедуре ОбработкаПроведения(В начале модуля устанавливается флаг Записывать в Истина, а далее идёт принудительная запись, получается что движения по документу записываются дважды).
    7) В Документе Выбытие животных в процедуре ОбработкаЗаполнения(Присутствует структура ДанныеЗаполенения с непонятной датой ‘19800101’, данная структура не нужна).
    8) В Документе инвентаризация остатки следует получать с учётом даты документа.
    9) в Документах Поступление и Выбытие Животных при записи в регистр желательно избавляться от возможных дублей строк.
    10)в Отчете Размещение Животных Параметр Период следует приводить к концу дня.

    III.Помощь миру.

    Темы с моим участием
    http://www.forum.mista.ru/topic.php?id=646326
    http://www.forum.mista.ru/topic.php?id=646332
    ник – Xatori

    http://forum.infostart.ru/forum26/topic77331/message824604/#message824604
    http://forum.infostart.ru/forum26/topic77063/message824060/#message824060
    http://forum.infostart.ru/forum26/topic77306/message824564/#message824564
    ник – Xatori111

    В процессе обучения создал небольшой красивый отчётик с картинками, вроде скачивают :)
    http://infostart.ru/public/168397/

    • Dobrenko Oleg 14.01.2013 в 04:46

      Здравствуйте, Денис!
      >Хотелось бы поблагодарить создателей курсов, Респект и Уважуха…
      Я передам Евгению :)
      >Через какое то время думаю буду проходить продвинутый курс.
      Ждем!
      Благодарим за отзыв по курсу. Практическое задание и шаг №3 принимаю.
      Поздравляем с успешным окончанием базового курса!

      • Хотелось бы узнать, будет ли какая то бумага что курсы успешно закончены?

        • Dobrenko Oleg 14.01.2013 в 08:13

          Будет рекомендательное письмо с подписями Гилева и Насипова.

          • Понимаю, конечно уже надоел глупыми вопросами:),
            но каким образом будет выслано письмо?

            • Lipinskiy Nikita 14.01.2013 в 09:40

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

              Рекомендательное письмо будет выслано заказным письмом. Вас оповестят об отправке и сообщат номер отправления, по которому можно будет отследить движение письма.