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

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

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

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

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

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

  1. Петр Савин 15.08.2013 в 04:15

    Шаг 1.
    1. Получил существенный объем систематизированной информации об основах работы в системе 1С 8.2. В частности, немало нового узнал о проведении документов, о системе компоновки данных, о работе с построителем запросов.
    2. Избавился от стремления работать в версии 8.2 как в 7.7, совершенно новая программа, функционально на порядок богаче прежней.
    3. Работаю. Несколько необычной оказалась для меня новая методика проведения документов.
    4. Формат обучения удобен. Бытовые обстоятельства не позволяют использовать вечернее или рабочее время для обучения, так что этот вариант учебы для меня оптимален. В плане – продвинутый курс.

    Шаг 2.
    Контролировать заполнение Серии можно, например, путем включения проверки заполнения реквизита документа.
    Ошибки в конфигурации обнаружил следующие:
    1. В документе “Покупка товаров” можно записать пустую строку, необходим запрет на запись при незаполненной строке табличной части.
    2. “Покупка товаров” – строковое значение реквизита “Количество” в табличной части необходимо исправить на числовое.
    2. “Покупка товаров” не делает движений по складам, несмотря на наличие флага движений по регистру и программного кода, так как в процедуре проведения нет оператора записи заполненного движения, который необходимо добавить.
    3. “Покупка товаров”при нажатии на “Заполнить товары” выдает “{Документ.ПокупкаТоваров.Форма.ФормаДокумента.Форма(11)}: Тип не определен (Документ.ПокупкаТоваров) ВвестиЗначение(Основание, “Выберите документ-основание”, Тип(“Документ.ПокупкаТоваров”));” Причина ошибки – попытка выбрать значение “Документ”, а не “ДокументСсылка”, необходимо исправление.
    4. “Покупка товаров” содержит процедуру ЗаполнитьКлиента(Команда)”, которая обращается к справочнику, но декларирована как выполняемая на клиенте. Это вызывает ошибку: “{Документ.ПокупкаТоваров.Форма.ФормаДокумента.Форма(4)}: Поле объекта не обнаружено (ОсновнойПокупатель) Объект.Клиент = Справочники.Клиенты.ОсновнойПокупатель;”,
    5. Но даже если эту ошибку исправить и выполнить заполнение на сервере, в процедуре “ЗаполнитьКлиента” делается попытка присвоить реквизиту Клиент значение несуществующего предопределенного элемента “ОсновнойПокупатель” (а не “ОсновнойПоставщик” почему-то), в результате значение реквизита остается пустым.
    6. При попытке проведения документа “Продажа товаров” ошибка: “Ошибка при выполнении обработчика – ‘ОбработкаПроведения’
    по причине: {Документ.ПродажаТоваров.МодульОбъекта(4)}: Поле объекта не обнаружено (ТоварыНаСкладе) Движения.ТоварыНаСкладе.Записывать = Истина;” Причина ошибки – отсутствие движения по регистру у документа ПродажаТоваров, движение не может быть сформировано, пока оно не будет разрешено в метаданных.
    7. “Продажа товаров” – что делает “ПроверкаДокумента(Команда)”, пользователю совершенно непонятно, никаких сообщений не выдается по нажатию кнопки. Судя по процедуре ПроверкаДокументовСервер.ПроверитьДокумент(Документ), ищется только отрицательное количествотовара в документе. И какой резон проверять количество, которое не может быть отрицательным? Проверка реализована в виде процедуры, а не функции, т.е. не возвращает значения и не позволяет предпринять какие-либо действия с документом. При записи проверка не производится, а значит, запись не может быть отменена при неправильном содержании документа. Гораздо правильнее было бы проверить наличие товара на остатках, чем выполнять такую проверку.
    8. “Продажа товаров” – сохраняется документ с незаполненной строкой, необходимо запретить запись такого документа.
    9. “Продажа товаров” – документ не делает движений по регистрам накопления, несмотря на наличие кода, так как не включены движения по регистру в документе. Если их включить, то можно продать больше, чем есть на складе, так как не делается запись каждого движения построчно. Необходимо либо свернуть табличную часть, а потом уже списывать, либо контролировать остатки при обработке каждой строки.
    10. По новой технологии проведения следовало бы вначале сделать движение, а затем уже проверить остатки.
    11. При проведении “Продажа товаров” в ходе проверки в случае обнаружении недостачи товара он все же списывается!
    12. Формула “Запись.Сумма = ВыборкаТовары.СумОст/ВыборкаТовары.КолОст*Запись.Количество;” неудачна, так как может привести к делению на ноль и ошибке.
    Вопросы единиц учета товаров, а также списания по партиям/по среднему (а также себестоимости и прибыли соответственно) не затрагиваю, хотя в представленной конфигурации эти моменты также вызывают большие сомнения.

    Шаг 3.
    Опыта в 8.2 у меня пока еще немного, поэтому еще мало чем могу помочь, кроме участия в работе форума:
    http://www.1c-pro.ru/topic52434.html/page__view__findpost__p__287735
    http://www.1c-pro.ru/topic52464.html/page__view__findpost__p__287820
    http://www.1c-pro.ru/topic52473.html/page__view__findpost__p__287918

  2. Быстров Алексей 20.02.2013 в 04:20

    Шаг1. Вопросы по курсу
    Быстров Алексей Сергеевич, город Москва
    Работаю водителем
    Новое для меня было абсолютно все. Все мои навыки программирования до этого курса – Basic в школе много лет назад. С 1с даже как пользователь не работал. Решил что-то в своей жизни поменять,попробовать новое. Вначале приходилось совсем туго, даже пришлось купить книгу Основы Программирования. Как говориться “весь Гугл истрепал”. Потом стал обращать внимание, что на синтаксис у меня все меньше и меньше времени уходит, а больше на задания. Сейчас, оглядываясь назад, даже трудно себе представить, что можно было сделать ТАКОЙ шаг вперед.
    Касательно того, насколько удобнее данный формат обучения – для меня ОЧЕНЬ удобный, т.к. мне, с моими знаниями, приходилось десятки раз пересматривать видео. Вряд ли при очном обучении мне предложили бы сколь-нибудь похожую альтернативу, не говоря уж о том, что обучение с 10-11 часов вечера(заканчиваю работать) еще поискать )))
    Обобщая, хочу поблагодарить за прекрасный курс и отдельно за терпение, при проверке моих ДЗ.

    Шаг2. Практическое задание
    1. В модуле формы документа ПокупкаТоваров, в процедуре ЗаполнитьКлиента – Объект.Клиент передаем в серверную процедуру и там заполняем(обращение к предопределенному эл-ту Справочника)
    2. В модуле формы документа ПокупкаТоваров, в процедуре ЗаполнитьКлиента(), вместо Справочники.Клиенты.ОсновнойПокупатель Справочники.Клиенты.ОсновнойПоставщик
    3. В модуле формы документа ПокупкаТоваров, в обработчике действий ЗаполнитьТовары, не верно указан тип(“Документ.ПокупкаТоваров”) надо тип(“ДокументСсылка.ПокупкаТоваров”)
    4. В модуле формы документа ПокупкаТоваров, в обработчике действий ЗаполнитьТовары заменить в условии НЕ Основание.Пустая() на НЕ Основание=Неопределено
    5. В модуле формы документа ПокупкаТоваров, в обработчике действий ЗапролнитьТовары
    -в вызове процедуры ЗаполнитьТоварыНаСервере(Объект.Ссылка, Основание) – Объект.Ссылка убираем из передаваемых параметров
    -для Процедуры ЗаполнитьТоварыНаСервере() меняем контекст с &НаСервереБезКонтекста на &НаСервере
    -в самой процедуре ЗаполнитьТоварыНаСервере() меняем содержимое

    Объект = ТекущийДокумент.ПолучитьОбъект();
    Объект.Товары.Загрузить(ДокументОснование.Товары);

    на

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

    6. Для движения по РегиструНакопления ТоварыНаСкладе в процедуре ОбработкаПроведения() необходимо установить флаг записи: Движения.ТоварыНаСкладе.Записывать=Истина;
    7. В свойствах РегистраНакопления ТоварыНаСкладе необходимо в Регистраторах поставить флаг для документа ПродажаТоваров
    8. Необходимо очищать движение по РегиструНакопления в самом начале процедуры ОбработкаПроведения() в модуле объекта документа ПродажаТоваров

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

    9. По запросу все в одном пункте
    – для таблицы ПродажаТоваровТовары лучше использовать вложенный запрос, для того, чтобы сгруппировать повторяющиеся в табличной части товары
    – в параметрах виртуальной таблицы ТоварыНаСкладахОстатки:
    — установить параметр &Момент в параметре Период. Я использовал Границу от Даты документа для заполнения этого параметра
    — в поле Условие, вместо Товар В (Выбрать….) – Товар В (ВЫБРАТЬ РАЗЛИЧНЫЕ…)
    – вместо ВНУТРЕННЕГО соединения ЛЕВОЕ соединение
    – выходные поля КолОст и СумОст привести с помощью ЕСТЬNULL к нулю
    10. Не правильно указано поле для привязки сообщения о нехватке. Необходимо в запросе добавить выходное поле Номер строки и поле заполнить так:

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

    11. После сообщения о нехватке товара надо установить Отказ=Истина;
    12. Для более точного расчета надо изменить формулу для Запись.Сумма с ВыборкаТовары.СумОст/ВыборкаТовары.КолОст*Запись.Количество на ВыборкаТовары.СумОст*Запись.Количество/ВыборкаТовары.КолОст
    13. Для ВыборкаТовары.КолОст необходимо сделать проверку деление на ноль
    14. После подсчета Запись.Сумма сделать проверку на себестоимость, и в случаи если сумма продажи меньше себестоимости выставить Отказ=Истина, предварительно в запросе добавить еще одно выходное поле СуммаДок

    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = "Продажная стоимость меньше себестоимости товара";
    Сообщение.Поле = "Товары["+(ВыборкаТовары.НомерСтроки-1)+"].Сумма";
    Сообщение.УстановитьДанные(ЭтотОбъект);
    Сообщение.Сообщить();
    Отказ=Истина;

    15. Флаг Записывать=Истина выставлять по условию Если НЕ Отказ Тогда (чтобы избежать лишнюю нагрузку на Сервер)
    16. Кнопка ПроверкаДокумента в документе ПродажаТоваров
    -в начале пошел поэтапно и обнаружил
    –для тонкого клиента необходимо в свойствах общего модуля ПроверкаДокументовСервер поставить флаг “ВызовСервера”
    –Предупреждение для тонкого клиента не сработает
    -потом я обратил внимание на саму процедуру общего модуля, она выполняет бессмысленное действие
    –в свойствах реквизита Количество табличной части документа ПродажаТовара стоит флаг “неотрицательное”(как и для суммы), поэтому данная проверка никогда не даст результата
    –проверку на себестоимость делаем в процедуре ОбработкаПроведения()
    –Серия не даст некорректно заполнится
    -единственное, что можно проверить(может я конечно и ошибаюсь), так это незаполненные поля до записи документа, но для этого не нужен общий модуль. Я реализовал так:

    &НаКлиенте
    Процедура ПроверкаДокумента(Команда)
         ПроверитьНаСервере();
    КонецПроцедуры

    &НаСервере
    Процедура ПроверитьНаСервере()
      НовОбъект=ДанныеФормыВЗначение(Объект,Тип("ДокументОбъект.ПродажаТоваров"));
      НовОбъект.ПроверитьЗаполнение();
    КонецПроцедуры // ПроверитьНаСервере()

    Еще раз повтарюсь, может я что-то не так понял
    17. Поле “Номер серии” обязательное для заполнения
    В модуле объекта Справочника Серии

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

    Финальное задание делал ночью после работы, поэтому может что-то не учел или забыл…

    Шаг3. Помощь ближним
    1) Семинар для клиентов/коллег был бы еще тот номер, учитывая кем я работаю )))
    2) Статью написать сложно. Пока собственных шишек не набил, других уберечь вряд ли получится. Да и те знания, что получил – надо еще разложить по полочкам, чтобы понять, чем владеешь.
    3) Небольшое участие в жизни форума(мой ник Aleks495):
    http://www.1c-pro.ru/topic48573.html
    http://www.1c-pro.ru/topic48518.html

    • Dobrenko Oleg 20.02.2013 в 10:43

      Алексей, благодарим за отзыв по курсу!
      Единицы найдут в себе смелость так кардинально изменить свою профессию. И лишь половина из этих единиц сможет запастись должным терпением и дисциплиной для того чтобы учиться по ночам. Жму Вам руку.
      >1) Семинар для клиентов/коллег был бы еще тот номер, учитывая кем я работаю )))
      Да, было бы интересно на это посмотреть :)
      Поздравляем, вы в списке финалистов!

  3. Воронцов Сергей 18.02.2013 в 14:19

    Здравствуйте!

    Шаг 1

    Воронцов Сергей Павлович, г. Иркутск
    ЗАО “СИА Интернейшнл Иркутск”, системный администратор

    1. В основном я занимаюсь администрированием, для меня в курсе все новое;
    2. Считал что научиться программировать в 1С несложно, достаточно иметь свободное время и желание обучаться. Но оказалось не все так просто, помимо вышеперечисленного, необходимо много работать, в основном над собой, суметь расставить приоритеты;
    3. Пока не работаю, зато получилось, осознано, переписать и модифиццировать отчет по коммандировкам из версии 1С77 на 1С8.2;
    4. Я являюсь, сторонником традиционной очной системы обучения. Обучаясь очно в коллективе, подсознательно настраиваешся на общую волну обучения, не отвлекаясь на посторонние вещи. Это тоже самое, что заниматься спортом в секции, или у себя дома.
    Данный курс приобрел из-за дефицита времени, у меня есть основная работа, плюс еще несколько организаций “администрю” удаленно и по вызову. Хлопот много, а отдачи – увы, поэтому и решил перейти на новый уровень.
    Огромный плюс курса, это конечно-же возможность пересматривать непонятные моменты столько раз, сколько нужно, это те-же лекции, только не на тетради, а на экране.
    Мне очень понравилось отношение, со стороны сотрудников Вашей компании, когда из-за болезни жены, я пропустил целый месяц обучения, они не только перевели меня на удобный мне поток, но даже восстановили мне пропущенные дни в мастер-группе.
    Большое СПАСИБО!

    Теперь о моих “хотелках”.
    Лично для меня была неудобна обратная связь, пока сформулируешь вопрос, пока его оформишь в письме, теряется время, а иногда и актуальность вопроса, аська в этом плане была-бы более предпочтительна, или чат.
    На начальном этапе обучения, не помешало бы что-то типа глоссария, так как преподаватель говорит специфическими терминами.
    Хотелось-бы более подробного изложения домашнего задания, побольше разбора практических задач, приближенных к домашнему заданию. Опытный человек, который занимается 1С профессионально, понимает что нужно делать в задании, а такого чайника как я, домашние задания приводили в тупик.

    Шаг 2

    Указал лишь те замечания, которые удалось отладить.
    Можно было создать подсистемы “Покупка” и “Продажа”, но раз клиента устраивает функционал, то это не ошибка.

    1. Клиенты
    создать новый реквизит “ОсновнойПокупатель” на форме справочника “Клиенты”, тип – булево, а в модуле добавить проверку установки признака только для одного клиента.
    создать новые реквизиты “Поставщики” и “Покупатели”на форме справочника “Клиенты”, тип – булево, они понадобятся для удобства выборки, при продаже или покупке;

    2. Товары
    2.1 короткое наименование товара, увеличить длину наименования

    3. Серии
    3.1 – желательно сделать номер серии строковым, чтобы можно было задать шаблон;
    3.2 -при создании серии не проверяется заполнение номера серии, нет уникальности кода,
    – стандартные реквизиты – код – проверка заполнения – Выдавать ошибку.
    – свойства – контроль уникальности
    3.3 – для товара у которого нет срока годности, добавить на форму реквизит “без срока годности”, если эта кнопка установлена, то прибавлять к текущ. дате например +100 лет

    4. Покупка товара:
    4.1 -при проведении не переводится товар на склад, в процедуру ОбработкаПроведения добавить Движения.ТоварыНаСкладе.Записывать = Истина;
    4.2 -количество имеет строковый тип, изменить на тип число, 15,0, неотрицательное
    !!!-имеет смысл ввести понятие кратности, упаковки и т. д. (рассматривалось в домашнем задании)
    4.3 – добавить в табл. часть документа, реквизит “Цена”
    4.4 -каманда заполнить товары (Тип не определен (Документ.ПокупкаТоваров)), изменить тип(“ДокументСсылка.ПокупкаТоваров”),
    -(Ошибка при вызове метода контекста (Загрузить)), изменить в процедуре “ЗаполнитьТоварыНаСервере” меняем контекст &НаСервере,
    -(Ошибка при установке значения атрибута контекста (Объект)), в в процедуре “ЗаполнитьТоварыНаСервере” правим на Объект.Товары.Загрузить(ДокументОснование.Товары.Выгрузить()),
    в процедуре “ЗаполнитьТовары”, меняем условие “Если НЕ Основание.Пустая() Тогда”, на “Если ВвестиЗначение(Основание, “Выберите документ-основание”, Тип(“ДокументСсылка.ПокупкаТоваров”)) Тогда”
    4.5 -команда заполнить клиента -(Поле объекта не обнаружено (ОсновнойПокупатель)), в процедуре “ЗаполнитьКлиента” делаем вызов функции с контекстом &на сервере, в которой возвращаем Справочники.Клиенты.ОсновнойПокупатель;
    4.6 -при выборе товара не подставляется серия, если она заведена (рассматривалось в домашнем задании)

    5. Продажа товара:
    5.1 -добавить в табл. часть документа, реквизит “Цена”
    5.2 -при проведении документа (Поле объекта не обнаружено (ТоварыНаСкладе)), – движения – отметить в регистрах накопления “ТоварыНаСкладе”
    5.3 -приводим количество к одинаковому типу, число, 15,0, неотрицательное
    5.4 -при заполнении нет привязки серии к товару, свойства – связи параметров выбора – Отбор.Владелец(Товары.Товар)

    Шаг 3.
    Так как наша бухгалтерия работает в 1С 8.2 давно, у каждой работницы спросил, что им непонятно или чтобы они хотели узнать нового.
    Вот перечень вопросов, которые я расскрыл в мини-семинаре:
    1. Вступление, общие сведения о платформе 1С 8.2;
    2. Работа в 1С 8.2 в web-клиенте;
    3. Налоговый учет, общие сведения, особенности работы нашей организации;
    4. Аналитический учет (правильное ведение “своих” счетов, закрепленных за работниками);
    5. Расчет премии, и начисление северного коэф.;
    6. Командировки.

    Если честно, то после этого мини-семинара, вопросов стало еще больше, пришлось пообещать еще одно выступление.
    Ссылка на фото: http://www.irkutsk.siaint.ru\files\DSC09194.JPG

    • Dobrenko Oleg 18.02.2013 в 14:44

      Здравствуйте, Сергей!
      Благодарим за отзыв по курсу.
      >Если честно, то после этого мини-семинара, вопросов стало еще больше, пришлось пообещать еще одно выступление.
      А вы отправляйте ваших бухгалтеров на наши курсы :)
      Поздравляем, вы в списке финалистов 15го потока базового курса!

  4. Виталий Трощенко 17.02.2013 в 22:27

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

    15. Также таблицу документа и таблицу с остатками связываем левым соединением, а не внутренним, иначе получим потерю строк, по которым нет остатка;
    16. Так как мы используем левое соединение, значения NULL в запросе нужно привести к 0;

    17. Чтобы правильно считалось количество нехватки, нужно очищать движения документа перед проведением;

    Шаг 3.
    Подготовил мини-семинар на тему “Базовый принцип программирования управляемой формы в 1С 8.2”.

    Ввиду того, что в компании, в которой я работаю, я являюсь самым молодым специалистом и времени, чтобы подготовить материал, который будет новым и интересным для моих более опытных коллег, не было, я решил провести семинар на тему “Базовый принцип программирования управляемой формы в 1С 8.2” для студентов 4-5 курсов Воронежского государственного технического университета специальности “Информационные системы”, которые в будущем планируют работать в сфере 1С. В рамках этой специальности, продукты 1С изучаются, но довольно поверхностно, поэтому я решил, что им будет интересно послушать о создании конфигураций на управляемых формах. И не прогадал. Ребята задавали вопросы, просили рассказать о некоторых моментах подробнее. В общем, все прошло хорошо)

    1
    2
    3

    • Dobrenko Oleg 18.02.2013 в 06:51

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

  5. ШАГ №1. Мучкаев Александр. г. Саранск.

    Работаю 2 года программистом 1С во франче. На эти курсы пошел для того чтобы обновить, систематизировать свои знания и узнать больше о версии 8.2. Так как, пока на практике очень редко приходится работать с УФ, а внедрение УТ 11 и бухгалтерии 3.0 уже не за горами))
    В основном новшество и сложность в понимании возникли при решении бухгалтерских и особенно расчетных задач. Связанно это скорее всего не с их сложностью, а с редким использованием мной этих механизмов. В дальнейшем планирую сдачу экзамена “Специалист” по платформе.

    Формат курсов понравился, хорошо, что есть возможность заново пересмотреть некоторые моменты. Немного сложновато было поддерживать темп курса, так как большая загрузка на работе, но ничего справился)) Хотелось бы, конечно, чтобы Вы вернули старую систему обратной связи с учениками и оставляли какой либо комментарий к отчету. Так как в связи с высоким темпом обучения не хватает времени сформулировать вопрос, ознакомиться с материалом и написать в мастер-группу, хотелось бы видеть ваш комментарий о правильности решения ДЗ…понятно, что можно посмотреть в эталоне, но это не совсем то.

    Отчет по шагу №2:
    1) Документ «ПокупкаТоваров» не давал движения из-за отстутствия флага Истина выбранного набора. Добавил строку:
    Движения.ТоварыНаСкладе.Записывать = Истина;

    2) У документа «ПокупкаТоваров» реквизит количество имел строчный тип, переопределен на число 15,3.

    3) У документа «ПокупкаТоваров» кнопка «заполнить клиента» не отрабатывала из-за неправильного использования контекста. На клиенте не доступны обращения к данным ИБ. Механизм был переписан следующим образом:
    &НаКлиенте
    Процедура ЗаполнитьКлиента(Команда)
    Объект.Клиент = ЗаполнитьКлиентаНаСервере();
    Модифицированность = Истина;
    КонецПроцедуры

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

    4) У документа «ПокупкаТоваров» кнопка «заполнить товары» не отрабатывала как следует по той же причине с контекстом и неверным указанием типа документа:
    &НаКлиенте
    Процедура ЗаполнитьТовары(Команда)
    Перем Основание;
    ВвестиЗначение(Основание, “Выберите документ-основание”, Тип(“ДокументСсылка.ПокупкаТоваров”));
    Если НЕ Основание.Пустая() Тогда
    ЗаполнитьТоварыНаСервере(Основание);
    КонецЕсли;
    КонецПроцедуры

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

    5) В документе «ПродажаТоваров» у реквизита Серии не было привязки к владельцу, в результате чего, при выборе выходил весь список серий. установлена связь параметров выбора у Серии – Отбор.Владелец(Товары.Товар).

    6) документ «ПродажаТоваров» не был указан регистратором у регистра накопления «ТоварыНаСкладах». Исправлено.

    7) В документе «ПродажаТоваров» реализована проверка на заполнение ТЧ отрицательным количеством товара, но такая ситуация в данной конфигурации не возможна, т.к. у реквизита ТЧ Количество настроено как неотрицательное.

    8) В обработке проведения документа «ПродажаТоваров» поправлен механизм формирования движений, а именно очищаем набор записей перед проведением. Данные получаем левым соединением документа к регистру. В параметрах виртуальной таблицы указываем МоментВремени документа и отбор по товару и сериям в регистре. При выводе сообщения о нехватке товара привязываем его к колонке количество:
    Процедура ОбработкаПроведения(Отказ, РежимПроведения)
    Движения.ТоварыНаСкладе.Записать();
    Движения.ТоварыНаСкладе.Записывать = Истина;

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

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

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

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

    Пока ВыборкаТовары.Следующий() Цикл

    Недостача = ВыборкаТовары.КолДок – ВыборкаТовары.КолОст;
    Если Недостача>0 Тогда
    Отказ = Истина;

    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = “Недостаточно товара “+ВыборкаТовары.Товар+” в количестве “+Недостача;
    Сообщение.Поле = “Товары[“+(ВыборкаТовары.НомерСтроки-1)+”].Количество”;
    Сообщение.УстановитьДанные(ЭтотОбъект);
    Сообщение.Сообщить();
    КонецЕсли;

    Если Отказ Тогда
    Продолжить;
    КонецЕсли;

    Запись = Движения.ТоварыНаСкладе.ДобавитьРасход();
    Запись.Период = Дата;
    Запись.Товар = ВыборкаТовары.Товар;
    Запись.Серия = ВыборкаТовары.Серия;
    Запись.Количество = ВыборкаТовары.КолДок;

    Запись.Сумма = ВыборкаТовары.СумОст * ВыборкаТовары.КолДок / ВыборкаТовары.КолОст;
    КонецЦикла;
    КонецПроцедуры

    Для решения проблемы заполненности «Номера серии» я использовал простейшую проверку заполнения у реквизита «Код», выставив его в значение «Выдавать ошибку».

    Шаг№3
    Предоставляю фото отчет о проведенном сегодня мини-семинаре на тему “Новая методика проведения документов в 8.2. Решение оперативной задачи”.

    Были разобраны теоретические аспекты новой и старой методик проведения документов, сравнение, плюсы/минусы, а также случаи, когда использование новой методики не возможно. Теория была закреплена практической задачей оперативного учета из сборника задач для подготовки к экзамену “Специалист”.

    1
    2
    3

    • Dobrenko Oleg 18.02.2013 в 07:17

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

  6. Шаг 1

    Узнал множество тонкостей работы системы, хоть и работаю с 1С каждый день узнал столько всего о чем даже не подозревал. Особенно были интересны тонкости работы системы внутренне, организация работы на уровне СУБД. Более четко вырисовалась технология проведения документов, и принципы клиент-серверного взаимодействия 1С. И разобрался с зарплатным блоком.
    При работе код стал более структурирован, типовые решения более понятны и использование вспомогательных функций о которых даже не подозревал раньше, очень помогло.
    Формат обучения оказался очень удобным, но есть замечания по поводу вашей системы безопасности. Система безопасности безусловно нужно, и она должна присутствовать, но в первую очередь СБ не должна мешать конечному пользователю работать. У меня допустим при работе с ней не работает 3G модем, отсутствие буфера обмена, так же создает дискомфорт, все это оставляет негативный след. А в остальном курс очень отличный и познавательный.

    Шаг 2.
    1. В документе покупка было указан реквизит количество с типом строка, исправил на число(15,3)
    2. Остатки в документе продажа берутся на текущую дату, переделал на дату документа
    3. Документ покупка не делает движения отсутствует строка
    Движения.ТоварыНаСкладе.Записывать = Истина;

    4. Запрос по остаткам, вместо внутреннего соединения, левое соединение.
    5. Заполнение клиента в документе покупка происходило на клиенте, переделал на сервер, так же перепутано название предопределенного элемента.
    6. При заполнении документа покупка(таб. части товаров) указан неверный тип, необходимо указать
    Тип(“ДокументССылка.ПокупкаТоваров”)

    7. Заполнение товаров заполняется неправильно, сделал следующий код
    ЭтотОбъект = РеквизитФормыВЗначение(“Объект”);
    Объект.Товары.Загрузить(ДокументОснование.Товары.Выгрузить());

    8. Для настройки проверки заполнения кода, в настройках предопределенного элемента указать проверка заполнения.

    Шаг№3

    Написал статью http://infostart.ru/public/174119/
    Но она пока на модерации.

    Бобрешов Роман Валерьевич, Воронеж

    • Dobrenko Oleg 18.02.2013 в 07:13

      Благодарим за обратную связь.
      Действительно, есть некоторые неудобства связанные с защитой контента, но пока от этого ни куда не уйти.
      Поздравляем с успешным окончанием базового курса!

  7. Шаг 1

    В базовом курсе для меня новым было абсолютно все, т.к. я решил заняться изучением 1С около 3 месяцев назад, в связи с поиском новой работы. Заблуждений никаких не было, потому что ранее с 1С нигде не сталкивался. Довольно неожиданным оказалось большое функциональное разнообразие встроенного языка, изучение интересных тем в Мастер-группе. Формат обучения очень удобный, т.к. я начал заниматься на две недели позже начала курса, постепенно догоняя время графика занятий.Сами видеоуроки сделаны очень хорошо, изложение доступное, трудные места возможно пересматривать до полного понимания. ДЗ довольно сложные, хотелось бы выполнять их согласно изложенным урокам.

    Рыжов Кирилл Александрович г.Нижний Тагил

    Шаг 2

    Процедуру команды ЗаполнитьКлиента следует вызывать с сервера, а так же ошибочно записано предопределенное значение ОсновнойПокупатель, когда для ПокупкиТовара правильно – ОсновнойПоставщик

    В процедуре команды ЗаполнитьТовары нужно изменить Тип на ДокументСсылка, затем изменить директиву компиляции с НаСервереБезКонтекста просто НаСервере, затем убрать ненужный параметр Объект.Ссылка, т.к. обращаемся напрямую,а потом дописать метод – Объект.Товары.Загрузить(ДокументОснование.Товары.Выгрузить())

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

    В ОбработкеПроведения документа ПокупкаТоваров отсутствует запись Движения.ТоварыНаСкладе.Записывать = Истина;

    У документа ПродажаТовара на закладке Движения был не включен регистр накопления ТоварыНаСкладе

    В документе ПокупкаТовара в табличной части в поле Количество был установлен тип Строка, исправлено на Число 15,3

    В регистр накопления ТоварыНаСкладе добавлен ресурс Себестоимость, в документе ПокупкаТовара он рассчитывается новой строкой в ОбработкеПроведения – Движение.Себестоимость = ТекСтрокаТовары.Сумма/ТекСтрокаТовары.Количество, а в ОбработкеПроведения ПродажаТовара – строка записи суммы исправлена на Запись.Сумма = ВыборкаТовары.Сумма, а также добавлена строка – Запись.Себестоимость = ВыборкаТовары.СумОст/ВыборкаТовары.КолОст

    В запросе модуля документа ПродажаТовара необходимо сделать вложенный запрос табличной части, затем связываем его внутренним соединением виртуальной таблицей ТоварыНаСкладе Остатки

    В виртуальной таблице остатков, в условии, осуществляем отбор не только по товару, но и по серии

    Добавляем в запросе поле НомерСтроки, оно понадобится для определения строки в Сообщение.Поле, только из-за того что индекс начинается с 0, необходимо указать НомерСтроки-1

    В запросе надо написать условие – КоличествоОстаток < 0, если данное условие выполняется необходимо параметр Отказ выставить в истину

    По просьбе Виолы Григорьевны сделал поле НомерСерии справочника Серии обязательным для заполнения: справочник Серии-Данные-СтандартныеРеквизиты-Код-Проверка заполнения-Выдавать ошибку

    Шаг 3

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

    Вот статья на модерации http://nashe1c.ru/materials-view.jsp?id=440

    • Dobrenko Oleg 18.02.2013 в 07:22

      Кирилл, благодарим за отзыв по курсу.
      >я решил заняться изучением 1С около 3 месяцев назад
      >начал заниматься на две недели позже начала курса
      И дошли до финала вовремя. Отличный результат!
      Поздравляем с успешным окончанием базового курса!

  8. Меня зовут Синяков Максим Николаевич, город Санкт Петербург. Работаю системным администратором, но так как часто приходится решать вопросы связанные с 1С, давно хотел пойти на курсы, но у меня банально не было на это времени, и как же я радовался когда обнаружил ваши видео уроки! Итак отчет по шагам:

    Шаг №1. Обратная Связь

    Мне проще пройтись по пунктам.
    1)Практически всё новое для меня. Структуру я немного понимал до этого, справочники, да документы, но не более того. Так же немного писал скрипты на vbs и python, поэтому с программированием был немного знаком, но на уровне «если а = б тогда с». Из курса я понял как работать почти со всеми объектами конфигурации, разобрался с событиями объектов и форм, научился записывать движения в регистры и понял что вообще такое регистры, разобрался с контекстом исполнения кода, понял разницу между тонким и толстым клиентами, немного вник в теорию БухУчета и Начисления ЗП.

    2)Избавился от заблуждения, что программировать на 1С безумно сложно, непонятно и вообще это ужас какой – то. Когда я раньше смотрел на код 1С, то я вообще ничего не понимал, сейчас же, простой код воспринимается сразу же, а сложные алгоритмы можно обойти отладчиком и понять, что и как работает. Но УТ11 – это конечно жар…запутано всё в такие клубки кода, что волосы шевелятся, поэтому планирую закончить еще продвинутый курс и потом взять курс по УТ.

    3)На реальных задачах пока не смог попрактиковаться. Только тестовые базы. Вот начали писать УТ под нашу организацию, сидим и пытаемся понять, что, куда и откуда берется.

    4)Неожиданным наверное ничего не оказалось, вся информация органично и постепенно подавалась, так что всё было понятно и ясно.

    5)О формате даже говорить нечего, это идеал. Занимаешься когда удобно, но нужно успевать сдавать ДЗ, поэтому стараешься не откладывать на потом, а всё делать вовремя. Для меня такой формат – это единственный возможный вариант обучения, но даже если бы у меня было больше свободного времени и т.д., я бы всё равно выбрал именно такой вариант получения материала.

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

    Документ ПокупкаТоваров
    1)Не делались движения в регистр ТоварыНаСкладе.
    Исправлено: Установлен флаг Записывать в Истину.
    Движения.ТоварыНаСкладе.Записывать = Истина;

    2)Реквизит Табличной части Количество был типа «Строка», изменил на «Число 15, 3»
    3)Кнопка Заполнить Клиента не работала. Эта процедура компилировалась на клиенте, поэтому обращения к БД было невозможно. Создал серверную функцию которая возвращала вначале предопределенный элемент «ОсновнойПоставщик», потом сделал константу КонтрагентПоУмолчанию и функция возвращала значение константы.
    После заполнения поля на форме, устанавливаю свойство модифицированность в Истину.
    4)Кнопка ЗаполнитьТовары на работала. Тут было много ошибок:
    А)Мы пытались обратится к типу («Документ.ПокупкаТоваров»), такого типа нету, и надо обращаться к типу («ДокументССылка.ПокупкаТоваров»).
    Б)В процедуре «ЗаполнитьТоварыНаСервере» мы пытались загрузить не тот тип данных, надо было вначале выгрузить ТЧ документа «основание» в ТЗ и потом загружать в нашу ТЧ.
    В)Процедура «ЗаполнитьТоварыНаСервере» была внеконтекстная и туда передавалась ссылка на документ, это некорректно отрабатывало, ведь нам нужно работать с формой, поэтому я поменял вызов на контекстный, и обращался непосредственно к данному объекту.
    Г)При выполнение этой процедуры устанавливалась модифицированность документа в Истину.
    Д)Если пользователь отказывался от выбора документа, выходила ошибка.
    Исправил это простым условием
    Если ВвестиЗначение(Основание, “Выберите документ-основание”, Тип(“ДокументСсылка.ПокупкаТоваров”)) Тогда

    Документ ПродажаТоваров
    1)При проведение документа выдавало ошибку про регистр, исправил, добавив нужный регистр(«ТоварыНаСкладе») на закладке движения.
    2)Исправлен запрос. Остатки получаем на определенный период(параметр Виртуальной таблицы). Этот Период равен Моменту времени документа. Параметр установил.
    3)Исправлен запрос. Необходимо делать ЛЕВОЕ СОЕДИНЕНИЕ, а не ВНУТРЕНЕЕ, что весь товар из накладной попадал в результат запроса.
    4)Исправлен запрос. КоличествоОстаток и СуммуОстаток проверяю на NULL.
    5)Если товара всё-таки не хватает выставляю Отказ в Истину.
    6)Очищаю движения документа вначале, что бы корректно отрабатывал перепровод документа.
    7)Перед вычислением себестоимости проверяю КолОст на ноль. Мало ли что.
    8)Исправлен запрос. Достаю еще и номер строки в документе.
    9)Изменил сообщение, теперь оно привязывается к конкретной строке ТЧ.
    Сообщение.Поле = “Товары[“+(ВыборкаТовары.НомерСтроки-1)+”].Количество”;

    10)Кнопка Проверить Документ не отрабатывала.
    Проставил ВызовСервера в общем модуле.
    Предупреждение не работает на сервере, изменил на Сообщение.
    Отрицательных значений быть в принципе не могло, изменил параметр количество реквизита ТЧ документа ПродажаТоваров , разрешив ему быть отрицательным.
    Эта проверка работает только на записанный документ, её бы вообще перенести в модуль формы и запускать там, но этого делать я не стал.
    11)В Табличной Части поле Серии было не связано с полем Товары, т.е. отображались все серии, независимо от владельца. Исправил это, добавив реквизиту Серии в параметр Связи Параметров Выбора отбор по владельцу.

    Справочник Серии
    Выставил проверку заполнения на стандартный реквизит Код в значение «Выдавать Ошибку».
    Интерактивно всё будет работать, а программную запись надо делать осторожнее или использовать функцию «ПроверитьЗаполнение()» . Можно было написать код проверки в событие «Перед Записью», тогда бы он отрабатывал всегда, но такого условия ГлавБух мне не ставила, а программисту я сообщил о такой особенности, и если будет надо, то я сделаю такую проверку.
    Например, что то вроде:
    Если НЕ ЗначениеЗаполнено(Код) Тогда

    Отказ = Истина;
    Сообщить(“Не заполнено значение Код”);
    КонецЕсли;

    Проверил, работает при программной записи.

    Унифицировал все реквизиты конфигурации во всех объектах:
    Сумма это число 15, 2, может быть отрицательным
    Количество это число 15, 3, может быть отрицательным

    Шаг №3. Помощь миру
    Написать статью с моими знаниями, которая реально кому-нибудь поможет еще рановато. Да и не знаю я еще, о чем хотят читать программисты, т.к. у меня не много практики.
    Проводить семинары у нас на работе как-то не принято =)
    Но я зарегистрировался на некоторых форумах, и читаю о том, что же интересует людей. Вот например тут я вроде бы пояснил человеку
    немного о его вопросе =)
    http://www.forum.mista.ru/topic.php?id=648701&all=1
    Так же я помогаю своему другу, он в данный момент пытается разобраться во всяких тонкостях работы 1С, объяснил ему разницу в тонком и толстом клиенте, пояснил что такое платформа и конфигурация.
    Объяснил ему как работают печатные формы, и помог ему поменять формат вывода пары строк в документ с помощью форматной строки))
    Сейчас вот буду дальше держать руку на пульсе форумов, может быть смогу еще кому-нибудь помочь.

    Вот еще удалось помочь человеку))
    http://forum-1c.ru/index.php?topic=26565.0

    • Dobrenko Oleg 18.02.2013 в 06:17

      Максим, финальное задание принято! Поздравляем с успешным окончание базового курса, ждем на продвинутом :)

  9. Дмитрий Прытков 12.02.2013 в 21:03

    Шаг 2
    1. Документ Покупка товаров не делает движений, поскольку для набора записей не инициализируется запись.
    Решение: перед добавлением данных в набор, установить флаг Записывать у НЗ.
    2. В ТЧ Товары документа Покупка товаров реквизит количество имеет зачем-то строковый тип данных, что не совсем понятно, ведь ресурсы-то у регистра накопления только числовые. Хотя система в обработке проведения и приводит строку к числу, лишняя операция нам ни к чему.
    3. При нажатии на кнопку Заполнить товары на форме документа Покупка товаров, возникает ошибка при вызове функции Тип(), параметром в которую передается неверное описание типа.
    Решение:

    Тип("ДокументСсылка.ПокупкаТоваров")

    4. Далее, при выборе документа для заполнения, программа останавливается на ошибке использования метода Загрузить() табличной части, по причине того, что ему на вход передается табличная часть, а не таблица значений.
    Решение:

    Объект.Товары.Загрузить(ДокументОснование.Товары.Выгрузить())

    5. Ок, поправили, но при выборе документа ко всему прочему “ничего не происходит”! Дело в том, что при вызове серверного внеконтекстного метода ЗаполнитьТоварыНаСервере получается другой экземпляр объекта как раз на сервере, и в него загружается табличная часть документа основания.
    Самый простой способ решения проблемы – добавить контекст формы к вызываемому методу и обращаться к Объекту как к основному реквизиту формы:

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

         //Объект = ТекущийДокумент.ПолучитьОбъект();
         Объект.Товары.Загрузить(ДокументОснование.Товары.Выгрузить());

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

    6. Если отказаться от выбора, опять же возникает ошибка. На этот раз из-за того, что при отказе от выбора, метод ВвестиЗначение помещает в переменную, переданную первым параметром, значение Неопределено, соответственно, система не может найти у этого значения метод Пустая().
    Решение:

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

    7. При попытке заполнить клиента приложение опять вываливается, ошибка связана с тем, что программа пытается получить на клиенте доступ к объекту СпарвочникиМенеджер, который доступен только на сервере.
    Решение: переносим процесс получения предопределенного клиента в серверную функцию. И поскольку требуемого предопределенного элемента в конфигурации нет, предполагаем, что по задумке должен выбираться ОсновнойПоставщик.
    8. Также, так как работаем с объектом через основной реквизит, то неплохо оповещать форму об изменениях объекта или выставлять модифицированность.
    9. Продажа товаров. Первая ошибка кроется в невозможности проведения документа по регистру ТоварыНаСкладе из-за того, что этот документ не был указан в качестве регистратора для него.
    10. Далее по обработке проведения:
    – остатки нужно получать на дату документа, используем МоментВремени();
    – таблицу документа и таблицу с остатками связываем левым соединением, а не внутренним, иначе те позиции, которые будут в документе и по которым не будет остатка, будут исключены из запроса;
    – неплохо было бы отказаться от проведения документа, если нашли строчку с превышением остатка;
    – чтобы верно считалось количество нехватки, нужно очищать движения документа перед проведением;
    – раз используем левое соединение, то значения NULL в запросе приводим к 0;
    – и раз у нас количество для расчета с/с может обнулиться, проверяем его, прежде чем делить на КолОст.
    11. Ну и последний, наверное, штрих – процедура проверки документа в общем модуле никогда не сообщит о некорректно введенном документе, поскольку система пытается найти в документе строки с реквизитом Количество < 0, у которого стоит свойство Неотрицательный.
    12. Поскольку заранее не было оговорено, что Виола Григорьевна собирается записывать серии с незаполненным реквизитом НомерСерии программно, то для решения ее проблемы просто у стандартного реквизита Код установим свойство ПроверкаЗаполнения в значение Выдавать ошибку.

  10. Дмитрий Прытков 12.02.2013 в 18:03

    Шаг 1
    1. Узнал массу нового, на самом деле, начиная от общей концепции работы системы, в частности, управляемого приложения, до конкретных особенностей работы с основными объектами конфигурации. Стартовал курс с начальными знаниями, позволяющими решать задачи управленческого учета, в ходе курса приобрел уже твердый навык по их использованию, научился работать с регистром бухгалтерии, усвоил общую концепцию в решении расчетных задач. И конечно СКД…
    2. Главное заблуждение, от которого избавился – исходный код типовых очень сложен и трудночитаем, чем браться дорабатывать типовой функционал, лучше дописать сверху свое. Оказалось, при грамотном использовании отладчика и общем понимании методологии решения типовых задач, все не так уж страшно:)
    3. Работаю в аутсорсинговой компании, результатом прохождения курса стали, во-первых, доступ на проекты клиентов класса ААА для нашей компании, во-вторых, сдельная часть з/п выросла где-то на 150%-200%, поскольку смог брать решение большего количества задач на себя. Конечно, это все не за три месяца заявленных сроков прохождения, курс затянулся на длительное время (отчасти, из-за перечисленных изменений на работе), но все же до финала добрался:)
    4. Про удобство формата можно говорить долго, с очкой не сравнить, конечно. Для меня он идеален.

    От себя:
    Курс отличный, с первых уроков нулевого блока чувствуется серьезный подход и по ходу “форма” не теряется, от урока к уроку все больше растет уверенность в том, что курс возымеет заявленный разработчиком эффект. Одного покупателя к вам привел:)

    • Dobrenko Oleg 18.02.2013 в 06:22

      Дмитрий, благодарим за обратную связь и поздравляем с успешным окончанием курса!
      >результатом прохождения курса стали, во-первых, доступ на проекты клиентов класса ААА для нашей компании, во-вторых, сдельная часть з/п выросла где-то на 150%-200%
      Отлично! Успехов в дальнейшем обучении!