Базовый курс. Финальное задание 10-го потока
Представляем финальное задание для 10-го потока базового курса по программированию.
К сожалению, у Вас недостаточно прав для просмотра этой записи. Если Вы еще не залогинены на сайте — залогиньтесь.
Если не активировали токен — посмотрите видео-инструкцию (видео N5)
Если вы залогинены, у Вас активирован токен доступа, но вы все равно видите эту запись — напишите нам на e-mail поддержки.
Шаг 3. Попытался помочь.
http://www.cyberforum.ru/1c/thread619060.html
http://forum-1c.ru/index.php?topic=15406.0
http://forum-1c.ru/index.php?topic=15410.0
Сергей, шаг №3 принят. Поздравляем вас с успешным окончанием базового курса по программированию!
Бауэр Сергей Владимирович
г. Томск.
Шаг 1. Обратная связь по пройденному курсу.
Курс хороший, большой объем информации для
усвоения. Формат обучения, дает возможность просматривать видео уроки на несколько
раз пока вопрос не будет разобран. Домашние задания добавляют нагрузки и заставляют
задуматься и разбираться с темой обучения.
Опыта в программировании 1С до освоения
курса практически не было, курс позволил разобраться и получить базовые знания
по инструментам и объектам программирования 1С 8.2. Надеюсь в дальнейшем использовать полученные
навыки.
Избавился от заблуждений, что расчет
заработной платы, бухгалтерский учет это очень сложно.
Данный курс был первым шагом в освоении 1С,
в будущем планирую продолжить свое обучение в программировании.
Шаг 2.
1. Не заданы пользователи имеющие право работать в
системе.
2. Опечатка в наименовании регистра накопления «ОстаткиИмущетсва».
3.Документ «ПокупкаИмущества», при вводе нового документа, статья расхода заполняется
элементами «Справочники.СтатьиРасходаДенежныхСредств.ПокупкаИмущества», но используется
клиентская процедура «ПриОткрытии». Объект метаданные «Справочники» доступен
только на сервере, поэтому необходим
серверный вызов процедуры.
<code>
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ОткрытьСтатьюРасхода();
КонецПроцедуры
&НаСервере
Процедура ОткрытьСтатьюРасхода()
Объект.СтатьяРасхода
= Справочники.СтатьиРасходаДенежныхСредств.ПокупкаИмущества;
КонецПроцедуры
</code>
Но при этом сохраняется проблема, при
открытии документа будет изменяться реквизит статья расхода. Вариант убрать
процедуру «ПриОткрытии» в модуле формы. Если необходимо заполнять значение по
умолчанию, то в реквизите объекта поставить галочку заполнять из данных
заполнения и установить значение для заполнения по умолчанию.
4. Документ «ПокупкаИмущества» при проведении
нового документа возникает ошибка «Поле сумма документа не заполнено», т.е. не
заполнен обязательный для заполнения реквизит «СуммаДокумента». Так как заполнение данного реквизита
определенно в процедуре перед записью, а «ОбработкаПроверкиЗаполнения» вызывается перед
процедурой «ПередЗаписью». Вариант убрать проверку заполнения реквизита
«СуммаДокумента», или добавить расчет СуммаДокумента = Имущество.Итог(“Сумма”),
в процедуру «ОбработкаПроверкиЗаполнения» модуля объекта.
5.Документ «ВыбытиеИмущества», в обработке проведения выходит ошибка «Преобразование
к значения к типу число не может быть выполнено». Добавил в запрос процедуры Общий
Модуль «ПолучитьОстатки» корректировку ЕСТЬNULL.
<code>
| ЕСТЬNULL(ОстаткиИмущетсваОстатки.КоличествоОстаток,
0) КАК КоличествоРегистрНакопления,
| ЕСТЬNULL(ОстаткиИмущетсваОстатки.СуммаОстаток,
0) КАК СуммаРегистрНакопления,
| ЕСТЬNULL(ФинансовыйРегистрОстатки.КоличествоОстатокДт,
0) КАК КоличествоРегистрБухгалтерии,
| ЕСТЬNULL(ФинансовыйРегистрОстатки.СуммаОстатокДт,
0) КАК СуммаРегистрБухгалтерии
</code>
6. Документ «ВыбытиеИмущества», для получения
корректных остатков в запрос нужно передавать момент времени вместо даты.
7. Документ «ВыбытиеИмущества», после определения
НехваткаБух в условии стоит проверка НехваткаУпр >0, должно быть НехваткаБух
> 0. Также в (Сообщение.Поле = “Имущество[“+ВыборкаИмущество.НомерСтроки+”].Имущество”)
, должно быть указание по индексу [“+(ВыборкаИмущество.НомерСтроки-1)+”].
8. Документ «ВыбытиеИмущества» в обработке
проведения, при расчете сумм по регистрам, нужно добавить проверку деление на 0
по ресурсу количество.
9. Документ «ПриходДенег», процедура «ПриСозданииНаСервере»,
для выбора значения по умолчанию из Константы.СтатьяПоступления.ПоУмолчанию,
необходимо использовать метод Получить(), но при этом при открытии документов «ПриходДенег»
будет происходить вызов этой процедуры и изменение статьи расхода. Для того что
бы реализовать заполнение статьи расхода по умолчанию, только для создаваемых
документов, убираем процедуру «ПриСозданииНаСервере», а в модуле объекта
создаем процедуру обработки заполнения.
<code>
Процедура
ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
ЭтотОбъект.СтатьяПрихода
= Константы.СтатьяПоступленияПоУмолчанию.Получить();
КонецПроцедуры
</code>
10. Регистр накопления «ОстаткиДенежныхСредств», неверно
задан тип для измерения «МестоХранения», необходимо задать «СправочникСсылка.МестаХраненияДенег».
11. Для регистров накопления «ПоступленияДенежныхСредств»,
«ПоступленияДенежныхСредств», установлен
Вид регистра «Остатки», нужно установить вид регистра «Обороты».
12. В плане счетов «Финансовый», для предопределенного
счета «Имущество» необходимо установить
признак количественного учета.
13. Для отчетов в схеме компоновки данных (параметры),
для установки периода на дату конца дня, установить выражение ДобавитьКДате(КонецПериода(&Период,”День”),
“Секунда”,1) в отчете «ОстаткиДенежныхСредств» и отчете «Баланс. В остальных
отчетах для параметра КонецПериода установить
выражение ДобавитьКДате(КонецПериода(&КонецПериода,”День”),
“Секунда”,1).
Сергей, шаг №1 и №2 приняты. Благодарим за обратную связь по курсу.
Ждем от вас шага №3.
Юдин Илья Викторович, г.Москва
ООО “МКСКОМ”, специалист
Шаг 1.
=====
Очень полезна была информация по темам бухгалтерии и расчетов. Темы сложные, наглядные уроки с примерами очень помогают. Задания помогают прочуствовать нюансы, которые на первый взгляд не видны. Очень полезное замечание было по поводу хранения данных для перепроведения. Пришлось серьезно переделывать свое решение, так как сначала этого не учел.
Из заблуждений – что у регистров расчета только настройки сложные. Оказалось, что отлаживать их тоже сложно. Были полезны практические навыки по работе в конфигураторе и отладке, которые были продемонстрированы в видео, вот это и применял, в основном.
Формат оказался очень удобен, даже при той нагрузке, которая у меня есть, все-таки удается дойти до конца. Конечно, опыт программирования, который у меня есть, очень помогает, но даже с ним уходило очень много времени на решение домашних заданий.
Шаг 2.
======
001. Документ ВыбытиеИмущества, оперативное проведение разрешено: В запрос передается дата вместо момента времени.
Это приводит к проблеме неверного получения остатков при совпадении времени поступления
и выбытия имущества с точностью до секунды.
Из:
Результат = ПроведениеДокументов.ПолучитьОстатки(Ссылка, Дата);
Сделать:
Результат = ПроведениеДокументов.ПолучитьОстатки(Ссылка, МоментВремени());
002. После получения НехваткаБух в условии стоит проверка НехваткаУпр, должно быть НехваткаБух.
003. Ниже, при выводе сообщения о нехватке по бухгалтерии, забыли вычесть 1 из номера строки.
Из:
Сообщение.Поле = “Имущество[“+ВыборкаИмущество.НомерСтроки+”].Имущество”;
Сделать:
Сообщение.Поле = “Имущество[“+(ВыборкаИмущество.НомерСтроки-1)+”].Имущество”;
004. Нет проверок деления на 0 при расчете сумм по регистрам, возможна потеря точности из-за порядка операций
Из:
Движение.Сумма = ВыборкаИмущество.СуммаРегистрНакопления/ВыборкаИмущество.КоличествоРегистрНакопления*ВыборкаИмущество.Количество;
Проводка.Сумма = ВыборкаИмущество.СуммаРегистрБухгалтерии/ВыборкаИмущество.КоличествоРегистрБухгалтерии*ВыборкаИмущество.Количество;
Сделать:
Движение.Сумма = ?(ВыборкаИмущество.КоличествоРегистрНакопления=0, 0,
ВыборкаИмущество.Количество*ВыборкаИмущество.СуммаРегистрНакопления/ВыборкаИмущество.КоличествоРегистрНакопления);
Проводка.Сумма = ?(ВыборкаИмущество.КоличествоРегистрБухгалтерии=0, 0,
ВыборкаИмущество.Количество*ВыборкаИмущество.СуммаРегистрБухгалтерии/ВыборкаИмущество.КоличествоРегистрБухгалтерии);
005. В запросе по получению остатков нет преобразования null в 0:
| ЕстьNull(ОстаткиИмущетсваОстатки.КоличествоОстаток, 0) КАК КоличествоРегистрНакопления,
| ЕстьNull(ОстаткиИмущетсваОстатки.СуммаОстаток, 0) КАК СуммаРегистрНакопления,
| ЕстьNull(ФинансовыйРегистрОстатки.КоличествоОстатокДт, 0) КАК КоличествоРегистрБухгалтерии,
| ЕстьNull(ФинансовыйРегистрОстатки.СуммаОстатокДт, 0) КАК СуммаРегистрБухгалтерии
006. Регистры накопления ПоступленияДенежныхСредств и СписанияДенежныхСредств, вид регистра – “остатки”.
Правильно указать “обороты”, так как остатки получать не требуется. Будет быстрее работать и меньше таблиц будет в базе.
007. Для документа ПокупкаИмущества нужно запретить оперативное проведение, так как при оперативном проведении
может сместиться время в течение дня, что может привести к
проблемам с получением остатков при перепроведении документов по выбытию имущества.
008. В форме документа ПокупкаИмущества в процедуре ПриОткрытии() идет обращение к предопределенному значению справочника, что недопустимо
в тонком клиенте:
Объект.СтатьяРасхода = Справочники.СтатьиРасходаДенежныхСредств.ПокупкаИмущества;
Этот код нужно перенести на сервер, или использовать функцию ПредопределенноеЗначение()
Но ошибка здесь еще в том, что при открытии существующего документа значение статьи будет переприсваиваться
Решение: удалить процедуру ПриОткрытии() в форме.
В реквизите объекта поставить галочку Заполнять из данных заполнения,
а предопределенное значение выбрать в свойстве Значение заполнения.
И еще поставить Проверка заполнения в Выдавать ошибку.
009. В отчете баланс анализ вида счета сделан не из счета, а по знаку суммы, хранящейся на дебете.
Если на счете будет отрицательная сумма, результат будет неправильный. Данное правило хорошо только для активно/пассивного счета.
Необходимо анализировать вид счета и в зависимости от этого относить сумму к дебету/кредиту.
010. В ОСВ не используется параметр виртуальной таблицы. При наложении отбора по счету, будут обрабатываться данные по всем счетам.
Предлагаю сделать так:
РегистрБухгалтерии.ФинансовыйРегистр.ОстаткиИОбороты(, , , , {(Счет В ИЕРАРХИИ (&Счет))}, , ) КАК ФинансовыйРегистрОстаткиИОбороты
011. В ведомости по имуществу лучше сгруппировывать вместе количество и сумму.
Вместо автополя для детальных записей, нужно создать группы, где и разместить поля количество и сумма одного вида.
012. В документе ПриходДенег для СтатьяПрихода желательно сделать обязательным заполнение поля.
013. В регистре накопления ОстаткиДенежныхСредств для измерения МестоХранения задан неверный тип (СправочникСсылка.Имущество).
Данные о месте хранения поэтому в регистре отсутствуют и в отчете “ведомость по денежным средствам”,
как следствие, тоже.
Должно быть СправочникСсылка.МестаХраненияДенег. Поменять тип реквизита и перепровести документы-регистраторы.
014. Для списков прихода и расхода денег хорошо бы отключить созданные формы списка, так как в них нет никаких дополнительных
настроек, а создаваемая по умолчанию форма более информативна. Если же у пользователя есть желание видеть дополнительные
колонки в этих формах на рабочем столе, тогда нужно добавить необходимые колонки в формы списка, учитывая зауженную ширину.
015. В отчетах Баланс и Поступления и выбытия по статьям в конце выводится итог в виде суммы
Предлагаю отключить вывод итогов:
Другие настройки – Расположение общих итогов по вертикали – нет.
016. В документе приход денег статья поступления из константы не заполняется, как было заявлено.
В модуле формы ошибка – не хватает вызова метода Получить()
Но вообще, размещение этого кода здесь – ошибка, так как
1) При программном создании документа статья также не будет заполняться, так как код размещен в модуле формы.
2) При открытии существующего документа значение статьи будет переприсваиваться из константы.
3) Форма, видимо, и была создана из необходимости присвоения значения реквизиту.
Исправление:
Форму можно удалить, а код по заполнению из константы разместить в модуле объекта, при этом в реквизите объекта СтатьяПрихода
установить флажок “заполнять из данных заполнения”, а Проверка заполнения – в “Выдавать ошибку”.
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
Если ДанныеЗаполнения = Неопределено Тогда
ДанныеЗаполнения = Новый Структура(“СтатьяПрихода”, Константы.СтатьяПоступленияПоУмолчанию.Получить());
КонецЕсли;
КонецПроцедуры
017. При изменении данных задним числом, могут быть проблемы с остатками и понадобится перепроведение.
Рекомендация – настроить последовательность для расходных документов.
Шаг 3 попозже.
ШАГ3.
Нашел один вопрос начинающего:
http://www.cyberforum.ru/1c/thread617904.html#post3231785
Можно было использовать МЕЖДУ, но так было ближе к его коду.
Илья, 3й шаг принят.
Поздравляем вас с успешным окончанием базового курса по программированию!
Здравствуйте, Илья!
Благодарим за обратную связь по курсу. Шаг №2 принят.
Ждем шаг №3.
I. Обратная связь по пройденному курсу
Березовский Михаил Георгиевич, г. Красноярск, руководитель отдела ИТ компании ООО “Покров” (www.pokrov.ru)
Курс помог, прежде, всего вспомнить многие моменты после длительного перерыва (около полутора лет работа с другой учетной системой – SAP ERP), систематизировать знания, а так же узнать новые способы и возможности работы (пробелы были, прежде всего, в расчетах з/п), акцентировать внимание на моментах, мимо которых проходил не один раз.
Работаю с 1С довольно давно … начиная с версии 6.0 (последние годы больше как постановщик задач).
Обучение, я предполагаю, только начинается … приступаю к изучению продвинутого курса.
Курс замечательный и жалею лишь об одном, что не начал заниматься им раньше, т.к. на практике полученные знания используются почти каждый день … в том числе и по исправлению ошибок в типовой конфигурации УПП (которых, к сожалению, оказалось достаточно много).
II Практическое Задание
Существуют в задаче недочеты в реализации интерфейса прикладного решения: не использованы возможности инструмента автоматизации, а именно:
1. В Управляемом приложении не использованы возможности подсистем при реализации решения, а в Обычном приложении не использованы возможности интерфейсов (Например, можно выделить подсистему Денежных средств и подсистему управление имуществом);
2. Не заданы пользователи, имеющие права работать в системе;
3. Форма списка документов “ПриходДенег” и “РасходДенег” не информативна (используются только поля “Дата” и “Номер”) … лучше “ДатаДокумента”, “НомерДокумента”, “Статья Прихода”, “МестоХранение”, “Сумма”; Формы списка были созданы, чтобы поместить их на рабочий стол.
4. Структура регистров “Не самая удачная”;
5. документы позволяют вводить отрицательные значение числовых реквизитов, в то время как признак “Сторно” не реализован.
6 В командном интерфейсе документов не установлена видимость регистров, по которым документ делает движения.
Теперь об ошибках
Общие:
Не реализован документ “Перемещение Денежных средств” с одного места хранения на другое (В задании сказано, что “Отрицательные остатки денежных средств не контролируются”, но появления таких остатков – ошибка заполнение), таким образом условие п.1 задачи не реализовано полностью;
Справочники:
1. Условия ведения учета денежных средств по статьям не выполнено, т.к. создано 2 справочника “СтатьиПоступленияДенежныхСредств” (указывается как тип в реквизите “СтатьяПрихода” документа “ПриходДенег”) и СтатьиРасходаДенежныхСредств”. Лучше было сделать один – “Статьи движения денежных средств” (указывается как тип в реквизите “СтатьяРасхода” документа “РасходДенег”).
Документы:
1. Приход Денег
1.1 “Конфигурация позволяет вести учет денежных средств в разрезе мест хранения и статей”… т.е. место хранение ДС и статья – не обязательные для заполнения???
Свойство “Проверка значения” реквизита “МестоХранения” установлено в значение “Выдавать ошибку”, в то время, как Свойство “Проверка значения” реквизита “СтатьяПрихода” установлено в значение “Не проверять”;
1.2. Не выполняется условие “При вводе НОВОГО документа “Приход денег” статья заполняется значением из константы” … как вариант нужно было в процедуре “ПриСозданииНаСервере”:
<code>
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
//Объект.СтатьяПрихода = Константы.СтатьяПоступленияПоУмолчанию; // ошибка
Если Объект.Номер = “” Тогда
СтатьяПрихода = Константы.СтатьяПоступленияПоУмолчанию.Получить();
Если СтатьяПрихода.Пустая() Тогда //проверяем на заполненность константы … в примере она не заполнена
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = “Не установлена константа”;
Сообщение.Сообщить();
Отказ = Истина; //форма не создастся … можно добавить .. возврат();
КонецЕсли;
Объект.СтатьяПрихода = Константы.СтатьяПоступленияПоУмолчанию.Получить();
КонецЕсли;
КонецПроцедуры
</code>
1.3. Документ делает движения по трем регистрам (РН “ОстаткиДенежныхСредств”, РН “ПоступлениеДенежныхСредств” и РБ “ФинансовыйРегистр”) … вместо двух лучше один регистр накопления остатков “Денежные средства” (Измерения: “Статья”, “МестоХранение”; Ресурс: “Сумма”)… ошибки при проведении:
1.3.1 Регистр Накопления “ОстаткиДенежныхСредств” (Измерения: “МестоХранения”, Ресурсы: “Сумма”): Измерение НЕ заполняется! У реквизита “МестоХранения” документа “ПриходДенег” тип – “СправочникСсылка.МестаХраненияДенег”, а у реквизита “МестоХранения” регистра “ОстаткиДенежныхСредств” тип – СправочникСсылка.Имущество. Таким образом получаем несоответствие типов в присвоении “Движение.МестоХранения = МестоХранения;” в модуле объекта документа “ПриходДенег” в процедуре “ОбработкаПроведения”
1.3.2 Регистр бухгалтерии “Финансовый регистр” – не записывается при проведении документы … необходимо добавить строку в модуль “ОбработкаПроведения”:
Движения.ФинансовыйРегистр.Записать();
2. Расход Денег
Документ делает движения по трем регистрам (РН “ОстаткиДенежныхСредств”, РН “СписаниеДенежныхСредств” и РБ “ФинансовыйРегистр”) …
ошибки при проведении:
2.1 аналогичная ошибка (см. п. 1.3.1). Регистр Накопления “ОстаткиДенежныхСредств” не заполняется У реквизита “МестоХранения” документа “РасходДенег” тип – “СправочникСсылка.МестаХраненияДенег”, а у реквизита “МестоХранения” регистра “ОстаткиДенежныхСредств” тип – СправочникСсылка.Имущество.
2.2 документ можно провести с нулевой суммой и без статьи расходов.
3. Покупка Имущества
3.1 “При вводе нового документа “ПокупкаИмущества” статья расхода заполняется предопределенным элементом справочника.” – данное задание реолизовано в модуле формы документа, но в отличие от документа “ПриходДенег”, использована клиентская процедура “ПриОткрытии”, соответственно строка –
“Объект.СтатьяРасхода = Справочники.СтатьиРасходаДенежныхСредств.ПокупкаИмущества;” – вызывает ошибку, т.к. объекты метаданных “Справочники” доступен только на сервере, таким образом понадобится либо серверный вызов, либо описать код в процедуре “ПриСозданииНаСервере” … например:
<code>
&НаКлиенте
Процедура ПриОткрытии(Отказ)
//Объект.СтатьяРасхода = Справочники.СтатьиРасходаДенежныхСредств.ПокупкаИмущества;
УстановитьСтатьюРасхода();
КонецПроцедуры
&НаСервере
Процедура УстановитьСтатьюРасхода()
Объект.СтатьяРасхода = Справочники.СтатьиРасходаДенежныхСредств.ПокупкаИмущества;
КонецПроцедуры
</code>
3.2. При проведении нового документа возникает ошибка – не заполнен обязательный для заполнения реквизит “СуммаДокумента” т.к. процедура МОДУЛЯ ФОРМЫ (несмотря на то, что в курсе на стр. 62 указано, что данный метод идет первым … проверялось на релизе 1с 8.2.15.310) “ОбработкаПроверкиЗаполнения” вызывается перед процедурой “ПередЗаписью” в которой заполняется реквизит. Самый простой способ убрать из свойств проверку заполнения реквизита “СуммаДокумента”;
3.3 Документ делает движения по четырем регистрам … (РН “ОстаткиДенежныхСредств”, РН “СписаниеДенежныхСредств”, “ОстаткиИмущетсва” и РБ “ФинансовыйРегистр”)
3.3.0 опечатка в РН “ОстаткиИмущеТСва”;
3.3.1 Регистр Накопления “ОстаткиДенежныхСредств” не заполняется … ошибка аналогисная пп. 1.3.1 и 2.1;
4. Выбытие Имущества
4.0 – нет реквизита для хранения причин выбытия имущества (порчи, передачи другому лицу … см. условие задания);
4.1 Необходимо дополнительно установить свойство “Проверка Заполнения” табличного поля “Имущество” в значение “Выдавать ошибку”, т.к. документ проводится с незаполненной ТЧ.
Документ делает движения по двум регистрам (РН “ОстаткиИмущества” и РБ “ФинансовыйРегистр”) …
4.2 В запросе контроля остатков допущена ошибка – не сделано условие ограничивающего имущество в табличной части текущего документа (ВыбытиеИмуществаИмущество.Имущество КАК Товары), а именно нет условия:
<code>
***
| ИЗ
| Документ.ВыбытиеИмущества.Имущество КАК ВыбытиеИмуществаИмущество
| ГДЕ
| ВыбытиеИмуществаИмущество.Ссылка = &Ссылка //ДОБАВЛЕНО данное условие!
***
</code>
4.3 В процедуре модуля объекта “ОбработкаПроведения” после очистки движений они не записываюся:
исправил:
<code>
Процедура ОбработкаПроведения(Отказ, Режим)
Движения.ФинансовыйРегистр.Очистить();
Движения.ОстаткиИмущетсва.Очистить();
Движения.Записать(); // добавлена строка, иначе исходя из условия (НехваткаУпр = ВыборкаИмущество.Количество – ВыборкаИмущество.КоличествоРегистрНакопления;) движения документа будут всегда учитываться.
Движения.ОстаткиИмущетсва.Записывать = Истина;
Движения.ФинансовыйРегистр.Записывать = Истина;
***
</code>
4.3 следует так же в регистре бухгалтерии добавить условие – ограничение на выборку из субконто данных только по “имуществу” из ТЧ текущего документа (такое же условие как в регистре накопления .. Имущество(Субконто1) В (ВЫБРАТЬ РАЗЛИЧНЫЕ ВыбытиеИмуществаИмущество.Имущество ИЗ …
4.4 В установке параметров необходимо передать “Ссылка.Дата” вместо “Дата” – Запрос.УстановитьПараметр(“Момент”, Ссылка.Дата); или, более правильно следует:
ДатаДок = Новый Граница(Ссылка.МоментВремени(), ВидГраницы.Исключая);
Запрос.УстановитьПараметр(“Момент”, ДатаДок);
Соответственно при вызове процедуры общего модуля “Результат = ПроведениеДокументов.ПолучитьОстатки(Ссылка);” параметр “Дата” передавать не нужно.
4.5 Проверка на нехватку по бухгалтерскому учету стоит условие на “Если НехваткаУпр>0 Тогда” … правильно: “Если НехваткаБух>0 Тогда” , так же при выводе сообщение при нехватке исправлен индекс номера строки Сообщение.Поле = “Имущество[“+(ВыборкаИмущество.НомерСтроки-1) +”].Имущество”;
Переписал функцию …
<code>
Функция ПолучитьОстатки(Ссылка, Дата) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
“ВЫБРАТЬ РАЗЛИЧНЫЕ
| ВыбытиеИмуществаИмущество.НомерСтроки,
| ВыбытиеИмуществаИмущество.Имущество,
| ВыбытиеИмуществаИмущество.Количество
|ПОМЕСТИТЬ ИмуществоТЧ
|ИЗ
| Документ.ВыбытиеИмущества.Имущество КАК ВыбытиеИмуществаИмущество
|ГДЕ
| ВыбытиеИмуществаИмущество.Ссылка = &Ссылка
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Товары.Имущество,
| Товары.НомерСтроки,
| Товары.Количество,
| ЕСТЬNULL(ОстаткиИмущетсваОстатки.КоличествоОстаток, 0) КАК КоличествоРегистрНакопления,
| ЕСТЬNULL(ОстаткиИмущетсваОстатки.СуммаОстаток, 0) КАК СуммаРегистрНакопления,
| ЕСТЬNULL(ФинансовыйРегистрОстатки.КоличествоОстатокДт, 0) КАК КоличествоРегистрБухгалтерии,
| ЕСТЬNULL(ФинансовыйРегистрОстатки.СуммаОстатокДт, 0) КАК СуммаРегистрБухгалтерии
|ИЗ
| ИмуществоТЧ КАК Товары
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.ФинансовыйРегистр.Остатки(
| &Момент,
| Счет = ЗНАЧЕНИЕ(ПланСчетов.Финансовый.Имущество),
| ,
| Субконто1 В
| (ВЫБРАТЬ
| ИмуществоТЧ.Имущество
| ИЗ
| ИмуществоТЧ КАК ИмуществоТЧ)) КАК ФинансовыйРегистрОстатки
| ПО Товары.Имущество.Ссылка = ФинансовыйРегистрОстатки.Субконто1.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиИмущетсва.Остатки(
| &Момент,
| Имущество В
| (ВЫБРАТЬ
| ИмуществоТЧ.Имущество
| ИЗ
| ИмуществоТЧ КАК ИмуществоТЧ)) КАК ОстаткиИмущетсваОстатки
| ПО Товары.Имущество.Ссылка = ОстаткиИмущетсваОстатки.Имущество.Ссылка”;
ДатаДок = Новый Граница(Ссылка.МоментВремени(), ВидГраницы.Исключая);
Запрос.УстановитьПараметр(“Момент”, ДатаДок);
Запрос.УстановитьПараметр(“Ссылка”, Ссылка);
Возврат Запрос.Выполнить();
КонецФункции // ()
</code>
Можно было бы в данном запросе проводить расчет на отрицательный остаток, но это реализовано в модуле документа.
Регистры:
– Регистры “ПоступлениеДенежныхСредств” и “СписанияДенежныхСредств” должны быть оборотными;
– Признак количественного учета в бухгалтерском регистре не используется (на счете “Имущество” его необходимо установить).
Отчеты:
1. В быстрые настройки необходимо вынести даты;
2. Остатки денежных средств, считаю, что отчет лишний, т.к. есть Ведомость по денежным средствам;
3. В отчетах не заданы параметры виртуальных таблиц (кроме отчета “Баланс” задано условие “НЕ Счет.Забалансовый”);
4. В границах отчетов “Конец периода” необходимо установить на конец дня.
Обычное Приложение:
1. Для запуска в обычном приложении необходимо изменения в параметрах (Запуск 1С Предприятия->Основные “Выбирать автоматически”) … в конфигураторе перевести основной режим запуска – “Обычное приложение” (для запуска), для запуска управляемых форм можно установить “Использовать управляемые формы в обычном приложении”
2. В документах (кроме документа Выбытие имущества) задваиваются движения при перепроведении … необходимо очищать регистры в обработке проведения, например:
Если ТекущийРежимЗапуска() = РежимЗапускаКлиентскогоПриложения.ОбычноеПриложение Тогда
Движения.ОстаткиДенежныхСредств.Очистить();
Движения.ФинансовыйРегистр.Очистить();
Движения.ОстаткиИмущетсва.Очистить();
Движения.СписанияДенежныхСредств.Очистить();
Движения.Записать();
КонецЕсли; ///код этот используется в документе “ВыбытиеИмущества”
3. Для заполнения полей форм необходимо создать неуправляемые формы документа и прописать обработчики событий.
III Помощь ближним
Здесь возникли “некоторые” сложности … в настоящее время нахожусь в жестком цейтноте, чтобы разобраться по настоящему интересные вопросы на форуме нужно время … и к сожалению его катастрофически нет (закрытие полугодие, выравнивание расчетов (наследие переписанной УПП)), поэтому очень прошу зачесть данный блок авансом, думаю на продвинутом курсе я исправлю это упущение, а пока могу выложить “несколько давние” ссылки которые нашел:
http://devtrainingforum.v8.1c.ru/forum/thread.jsp?id=561804#561804 (см. Michael)
http://devtrainingforum.v8.1c.ru/forum/thread.jsp?id=565395#565395.
На осень планируется запуск полностью модуля бюджетирования/планирования … там точно будут разбираться интересные и сложные задачи.
Что касается семинаров … проходят чуть ли не ежедневные совещания и запросы пользователей на тему “откуда этот отчет берет данные” и, пожалуй, основным подспорьем для быстрого решения вопросов и являются знания, полученные в данном курсе.
Михаил, благодарим за обратную связь по курсу!
Шаг №2:
1.2. Не лучшее решение использовать для этого модуль формы. Все подобные действия выполняются в обработке заполнения объекта.
1.3.> Документ делает движения по трем регистрам (РН «ОстаткиДенежныхСредств», РН «ПоступлениеДенежныхСредств» и РБ «ФинансовыйРегистр») … вместо двух лучше один регистр накопления остатков «Денежные средства»
Почему вы так считаете?
3.1 см. п 1.2
4.3 Вы проверяли работу данного алгоритма? На первый взгляд он отработает не верно.
>3. В отчетах не заданы параметры виртуальных таблиц (кроме отчета «Баланс» задано условие «НЕ Счет.Забалансовый»);
В отчетах не задаются параметры виртуальных таблиц!
Шаг №3 принят!
1. Олег, позвольте пока с Вами не согласится … я внимательно прочитал Ваш комментарий адресованный alexut и, конечно, мог бы просто привести это одно решение …
“Обратная связь по практическому заданию:
>Лучше сделать в модуле объекта через процедуру ОбработкаЗаполнения
Это единственный верный вариант.”
Почему он единственно верный? Достаточно многими способами можно вызвать заполнения данного поля вплоть до вызова через внешние объекты … в задании об этом ничего не сказано. За это на сертификации снижают балл?
Согласен, что решение возможно не лучшее … но почему для меня остается загадкой.
2. по п. 1.3 вместо двух лучше один регистр накопления остатков «Денежные средства» … Почему вы так считаете?
Я думаю избыточным держать 3 остаточных регистра накопления “ОстаткиДенежныхСредств”, “ПоступленияДенежныхСредств” и “СписанияДенежныхСредств” … и вместо данных регистров можно было бы создать один остаточный регистр накопления «Денежные средства» (Измерения: «Статья», «МестоХранение»; Ресурс: «Сумма»)… Исходя из задачи: “1. Конфигурация позволяет вести учет денежных средств в разрезе мест хранения и статей.”
… Возможно я не прав и в дальнейшем поменяю свою точку зрения.
3. “4.3 Вы проверяли работу данного алгоритма? На первый взгляд он отработает не верно.” – Обязательно проверяю все то, что написал, как и во всех выполненных домашних заданиях … могу выслать для проверки dt.
4. “В отчетах не задаются параметры виртуальных таблиц!” Извиняюсь и … переформулирую … для отчетов, созданных в СКД в регистрах накопления не использованы параметры виртуальных таблиц (например по периоду);
>Олег, позвольте пока с Вами не согласится
Чтож, как сказал Сократ, в споре рождается истина :)
Приступим:
>Почему он единственно верный?
>Согласен, что решение возможно не лучшее … но почему для меня остается загадкой.
Потому что существуют механизмы, у которых есть вполне конкреные предназначения. Обработка заполнения существует для заполнения полей ОБЪЕКТА. Аналогичные действия можно выполнить и на форме, однако предполагается что модуль формы создан для работы с КОНТЕКСТОМ ФОРМЫ. Если не соблюдать подобные правила рано или поздно в вашей конфигурации воцарит хаос и новый разработчик будет тратить драгоценное время на поиск алгоритма, который должен находиться на своем месте. Так же решение сделать заполнение реквизитов объекта в модуле формы расцениваю как “частично рабочее” потому, что при программном создании объекта оно не отработает вовсе.
>За это на сертификации снижают балл?
1) такого не встретится на сертификации
2) если предположить что встретилось бы, то думаю сняли бы ~ 0,2 балла.
2.
> Я думаю избыточным держать 3 остаточных регистра
> Возможно я не прав и в дальнейшем поменяю свою точку зрения.
Конечно 3 остаточных регистра это много. Именно поэтому 2 из них оборотных :)
К стати, как вы считаете, нужны ли нам здесь оборотные ригистры и зачем?
3.
> могу выслать для проверки dt.
Посмотрел в скользь, возможно ошибся, но попытаюсь отстоять свою версию :)
высылайте выгрузку на ящик мастер группы.
4.
>регистрах накопления не использованы параметры виртуальных таблиц (например по периоду);
Они и не должны там использоваться! Возможно не совсем правильно Вас понимаю, посмотрю в выгрузке.
Я тоже думал: зачем 2 регистра, по одному из которых только приход, а по другому только расход. Если они будут оборотные, нам же не надо будет выводить их в ноль? Можно было ведь совместить 2 регистра в один оборотный. Так?
Нужно именно 2 оборотных регистра. Например “Поступления” и “Продажи” (загляните в типовую УТ). В ноль оборотные регистры не выводятся, т.к. движение в них происходит только в одну сторону.
Не удовлетворен ответом “нужно”. Аргумент “так сделано в УТ” не объясняет почему так надо делать всегда. Понятно, что есть регистры Поступления и Продажи. Если дело в названии, давайте назовем регистр ОборотыТоваров. Почему плохо хранить поступления и продажи в одном регистре?
Как вы себе представляете хранить и поступления и продажи в одном оборотном регистре, если движение в нем происходит только в одну сторону?
Совсем забыла написать ФИО и город)
Русинова Анастасия Александровна, Хабаровск
Согласен … в споре рождается истина :)
отправил DT (специально сделал за пол часа на одном регистре накопления … там не все ошибки исправлены … только по пунктам “спора” :-) ) … если понадобится из дома уже отправлю полностью с исправленными ошибками.
Приступим:
1 “Обработка заполнения существует для заполнения полей ОБЪЕКТА” … полностью согласен.
2. “предполагается что модуль формы создан для работы с КОНТЕКСТОМ ФОРМЫ” … снова согласен.
3. ” …при программном создании объекта оно не отработает вовсе” … и опять согласен … НО в задании НЕТ указания на создания объектов программно и сама конфигурация (домашние финансы) … просто не рассчитана на это (при решении исходил из рекомендаций Павла Чистова – “не придумывайте того чего не требуется в задании”). Я исхожу из того, что для решения определенных задач нужен свой инструмент … если мы будем сваебойной машиной забивать гвозди то … и это я еще к тому, что при программном создании уж точно можно заполнить необходимые поля.
4. “Конечно 3 остаточных регистра это много. Именно поэтому 2 из них оборотных :)” … вот именно, что в задаче 3 остаточных регистра накоплений … переделал и послал на почту мастер-группы dt-файл где сделал на одном остаточном регистре “ДенежныеСредства”. (в ошибках я это упомянул)
5. по п. 4.3 в общем модуле можно посмотреть запрос и сравнить с оригиналом … но лучше все же использовать временную таблицу.
6. “Они и не должны там использоваться! Возможно не совсем правильно Вас понимаю, посмотрю в выгрузке.” … в файле переделал отчеты … с префиксом “М_”, которые выбирают данные из одного созданного регистра “ДенежныеСредства” и используют параметр виртуальной таблицы “Период”, “Начало/КонецПериода” … их использование в разы сокращает скорость получения данных, т.к. они присутствуют в запросе к SQL server (смотрел профайлером)
4. Соответствующие регистры просто нужно было сделать оборотными. Они понадобятся для ускорения работы отчетов.
5. Мой комментарий был относительно самого начала обработки проведения:
>4.3 В процедуре модуля объекта «ОбработкаПроведения» после очистки движений они не записываюся:
>исправил:
>Движения.ФинансовыйРегистр.Очистить();
>Движения.ОстаткиИмущетсва.Очистить();
>Движения.Записать();
Теперь я уже готов поспорить, что движения так и не очистятся, можете проверить :)
6. В отчете “Остатки денежных средств” (возмем его в качестве примера) задавать период в параметрах виртуальной таблицы (в самом запросе) без надобности.
Мало того, так делать даже не рекомендуется :)
К примеру убираем (в пользовательском режиме) в отчете галочку рядом с параметром “Период” = ошибка при выполнении отчета.
СКД имеет специальные, стандартные параметры, которые не вызовут ошибки если их не заполнить. ИМЕННО ИХ нужно использовать! Эта тема пронизывала весь курс.
>их использование в разы сокращает скорость получения данных
наличие этого параметра абсолютно не ускорит время выполнения отчета, так же как и если мы выберем в запросе ЛИШНИЕ ДАННЫЕ, но в настройке отчета выводить их не станем :)
У нас есть бесплатный курс ПО СКД, в самых первых его уроках освящается эта тема.
Михаил, вы согласны с замечаниями?
1. п.4 … согласен конечно о чем и написал в отчете 30-го числа
“Регистры:
– Регистры «ПоступлениеДенежныхСредств» и «СписанияДенежныхСредств» должны быть оборотными;”
2. … :-( проверил … Вы правы (п.4.3 я задвоил, поэтому не понял про что идет речь)
3. 6. В отчете «Остатки денежных средств» (возмем его в качестве примера) задавать период в параметрах виртуальной таблицы (в самом запросе) без надобности …. ну что ж … согласен буду внимательнее … :-)))
Михаил! Поздравляем с успешным окончании базового курса!
Успехов в дальнейшем обучении!
Олег, спасибо Вам и всему коллективу создателей курса … не прощаюсь, встретимся на продвинутом курсе.
Пожалуйста, от лица всего коллектива.
До встречи :)
Шаг 3. Пыталась помочь:
http://forum-1c.ru/index.php?topic=15185.msg58576#msg58576
http://forum-1c.ru/index.php?topic=15346.0
по времени что-то не очень сейчас…
Шаг №3 принят!
Шаг 2
1. Документ приход денег: при проведении не заполняется место хранения. Решение: в регистре накопления ОстаткиДенежныхСредств для измерения МестоХранения неверно задан Тип (СправочникСсылка.Имущество вместо СправочникСсылка.МестаХраненияДенег)
2. При открытии документа ПриходДенег значение статьи прихода очищается. Ошибка: в форме документа:
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Заполнение статьи для новых документов
Объект.СтатьяПрихода = Константы.СтатьяПоступленияПоУмолчанию;
КонецПроцедуры
Во-первых статья заполняется не только для новых документов, нет проверки на пустоту сслыки, во-вторых, значение константы не считывается из базы, следовательно Статье прихода присваивается пустая ссылка.
Решение:
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Заполнение статьи для новых документов
Если Объект.Ссылка.Пустая() Тогда
Объект.СтатьяПрихода = Константы.СтатьяПоступленияПоУмолчанию.Получить();
КонецЕсли;
КонецПроцедуры
3. Для документа ПокупкаИмущества также нет проверки на пустую ссылку. Следовательно значение заполняется для всех, а не только для новых. К тому же обращение к СправочникиМенеджер происходит на стороне клиента, что не допустимо. Решение:
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Объект.Ссылка.Пустая() Тогда
Объект.СтатьяРасхода = Справочники.СтатьиРасходаДенежныхСредств.ПокупкаИмущества;
КонецЕсли;
КонецПроцедуры
4. Не вижу смысла хранить остатки для регистров накопления списания и поступления денежных средств. Поэтому вид регистра ставлю обороты.
5. При формировании отчета ПоступленияИВыбытияПоСтатьям не выводятся все данные, с регистрами еще не совсем разобралась, но отчет работает, если снять галочки «использовать в итогах» для измерений в регистрах ПоступленияДенежныхСредств и СписанияДенежныхСредств.
6. В обработке проведения документа ПриходДенег не установлен флаг Записывать для финансового регистра. Решение: установить флаг в истину.
7. Для документа ПокупкаИмущества не вынесен на форму реквизит СуммаДокумента, при этом проверка заполнения стоит в значенрии выдавать ошибку. Решение: вынести на форму.
Больше ничего пока не нашла.
Обратная связь по практическому заданию:
2. Вспомните, какая процедура предназначена для данных целей?
3. Аналогично.
5. Рас уж коснулись отчетов, обратите внимание на параметры.
7. >Решение: вынести на форму.
а что от этого изменится?
2., 3. – обработка заполнения… делала поздно вечером… сказывается)
5. по поводу параметров можно создать стандартный период и заполнять начало и конец из периода, поставив ограничение доступности. и добавить период в быстрый доступ.
7. изменится то, что можно заполнять в ручную, или автоматизировать заполнение реквизита в модуле формы в процедуре пересчета суммы:
Объект.СуммаДокумента = Объект.Имущество.Итог(“Сумма”);
5. Скажите, а будет ли при этом в установленный период входить его последняя секунда?
7. На самом это не лучшие варианты. Вручную заполнять сумму не удобно, а производить автоматическое заполнение в модуле формы – тоже не самый хороший способ. Самое верное решение здесь – просто снять проверку на заполнение этого реквизита.
5. Последняя секунда будет входить, т.к. отчет в СКД.
7. Ясно.
>5. Последняя секунда будет входить, т.к. отчет в СКД.
Это не совсем верно. Последняя секунда будет входить для оборотного регистра. Если использовать стандартный период для остаточного регистра и брать значение ДатыОкончания (просто ради эксперимента), то последняя секунда не войдет, проверьте.
Ладно, Анастасия, думаю хватит вас мучать, будем считать практическое задание выполненным.
По 3му шагу вы отчитались, поэтому мои поздравления! Вы в списке финалистов 10го потока базового курса по программированию!
Спасибо!))
Шаг 1. Даже не верится, что я дошла до конца) Практически как диплом защитить) Хочу сказать огромное спасибо за такой материал! Очень понравилась подача материала, хорошая дикция и хорошая запись тоже очень понравились! Формат обучения … В общем все супер!!! А еще понравилось то, в каком виде вы отправляете материалы, переплет у книжки, коробочка… Все добротно и только от этого уже хочется заниматься)
Что узнала нового? Ну в описании к курсу было что базовый + продвинутый закроет все имеющиеся белые пятна… Так вот у меня этих пятен не было, у меня были маленькие пятнышки знаний, в пустоте) До базового проходила быстрый старт, но до конца так его и не изучила, а до быстрого старта, я знала что есть справочники, документы, отчет и регистры, и еще про внешние обработки знала, пыталась даже создавать, но не было никакого понимаю что я вообще делаю и зачем, сейчас я чувствую себя гораздо более уверенно, на работе дают задание посложнее, отношение тоже постепенно меняется. Работаю в сфере 1с программирования всего полгода, и без вашего курса я бы все это не освоила! Так что спасибо вам огромное за то, что делитесь знаниями! В общем, слов нет! Одни эмоции)
Анастасия, благодарим за обратную связь по курсу!
Добрый день. Краткий фотоотчет мини семинара.
Алексей! Поздравляю с успешным завершением базового курса по программированию!
Добрый день.
Утюпин Алексей Иванович г. Новосибирск
ОБРАТНАЯ СВЯЗЬ
Курс отличный.Преподаватель в видео уроках объяснял последовательно и понятно. Все вопросам было уделенно достаточное внимание. Методика отличная, мне понравилось.
Хорошо составленная программа обучения. Правильно распределенная нагрузка и, как следствие, высокая степень усвоения материала.
Узнал много нового :
– О работе в толстом и тонком клиенте, об управляемых формах.
– О новых механизмах проведения в управленческом учете.
– Получил практические навыки работы, узнал много нового в доступной и понятной форме о планах счетов, о регистрах бухгалтерии, о том какие данные в каких таблицах используются.
– Учет заработной платы казался чем то сложным. При нулевой подготовке всё было доступно объяснено. Научился работать с регистрами расчета, планами видов расчета
Наибольшее затруднение вызвало выполнение заданий по расчету ЗП. По нескольку раз просматривал видео уроки. Пытался увидеть какую то логику, потом просто пришло понимание…
_____________________________________________________________________________________________________________________________________________
ПРАКТИЧЕСКОЕ ЗАДАНИЕ
1.
Документ ПокупкаИмущества Форма документа:
<code>
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Объект.СтатьяРасхода = Справочники.СтатьиРасходаДенежныхСредств.ПокупкаИмущества;
КонецПроцедуры
</code>
Получение ссылок на объекты необходимо выполнять на сервере. Способ исправления:
<code>
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Объект.СтатьяРасхода = ПолучитьСтатьиРасходаПокупкаИмущества();
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьСтатьиРасходаПокупкаИмущества()
Возврат Справочники.СтатьиРасходаДенежныхСредств.ПокупкаИмущества;
КонецФункции
</code>
Лучше сделать в модуле объекта через процедуру ОбработкаЗаполнения, чтобы реквизит документа заполнялся один раз при создании документа, а не при каждом открытии.
2.
Документ ПокупкаИмущества
Реквизит “СуммаДокумента” установлен признак : “проверка заполнения” – выдавать ошибку.
Расчет Суммы документа присходит в модуле объекта перед записью. Для проведенных документов проверка заполненности происходит раньше записи. Возможна ситуация открыть проведенный документ с ненулевой итоговой суммой, обнулить сумму. Нажать кнопку провести. Проверка заполненности пройдет, так как пересчета суммы еще не было и сумма документа не нулевая. Документ проведется. После открытия этого же документа, при вносе корректных данных с ненулевой суммой и при записи и проведении получим отказ. Способ исправления:
– В модуле объекта убрать в процедуре ПриЗаписи убрать пересчет суммы документа;
– Перенести расчет реквизита суммы документа в процедуру расчета суммы по строке:
– Учесть, что строка документа может быть удалена
<code>
&НаКлиенте
Процедура ПересчитатьСуммуДокумента()
Объект.СуммаДокумента = Объект.Имущество.Итог(“Сумма”);
КонецПроцедуры
&НаКлиенте
Процедура ИмуществоПослеУдаления(Элемент)
ПересчитатьСуммуДокумента();
КонецПроцедуры
&НаКлиенте
Процедура ПересчитатьСумму()
ТекущиеДанные = Элементы.Имущество.ТекущиеДанные;
ТекущиеДанные.Сумма = ТекущиеДанные.Количество*ТекущиеДанные.Цена;
ПересчитатьСуммуДокумента();
КонецПроцедуры // ПересчитатьСумму()
</code>
3.
Регистр накопления ОстаткиДенежныхСредств Измерение МестоХранение имеет тип “СправочникСсылка.Имущество”. Должно быть : СправочникСсылка.МестоХранения.
4.
Регистры накопления ПоступленияДенежныхСредств и СписанияДенежныхСредств имеют вид регистра остатки. Фактически двигают регистры в одном направлении. Должны иметь вид оборотных регистров.
5.
Мне кажется излишним наполнять регистры накопления ОстаткиДенежныхСредств, ПоступленияДенежныхСредств, СписанияДенежныхСредств. Можно было в регистре накопления добавить измерение статья тип: составной тип данных:
– СправочникСсылка.СтатьиРасходаДенежныхСредств;
– СправочникСсылка.СтатьиПоступленияДенежныхСредств.
Регистры накопления ПоступленияДенежныхСредств, СписанияДенежныхСредств будут не нужны.
6.
При проведении нового документа ВыбытиеИмущества выскакивает ошибка преобразования типов, значения NULL в запросе надо преобразовать в 0.
Было общий модуль – ПроведениеДокументов функция ПолучитьОстатки:
Функция ПолучитьОстатки(Ссылка, Дата) Экспорт
<code>
Запрос = Новый Запрос;
Запрос.Текст =
“ВЫБРАТЬ
| Товары.Имущество,
| Товары.НомерСтроки,
| Товары.Количество,
| ОстаткиИмущетсваОстатки.КоличествоОстаток КАК КоличествоРегистрНакопления,
| ОстаткиИмущетсваОстатки.СуммаОстаток КАК СуммаРегистрНакопления,
| ФинансовыйРегистрОстатки.КоличествоОстатокДт КАК КоличествоРегистрБухгалтерии,
| ФинансовыйРегистрОстатки.СуммаОстатокДт КАК СуммаРегистрБухгалтерии
|ИЗ
| (ВЫБРАТЬ
| ВыбытиеИмуществаИмущество.Имущество КАК Имущество,
| МИНИМУМ(ВыбытиеИмуществаИмущество.НомерСтроки) КАК НомерСтроки,
| СУММА(ВыбытиеИмуществаИмущество.Количество) КАК Количество
| ИЗ
| Документ.ВыбытиеИмущества.Имущество КАК ВыбытиеИмуществаИмущество
|
| СГРУППИРОВАТЬ ПО
| ВыбытиеИмуществаИмущество.Имущество) КАК Товары
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиИмущетсва.Остатки(
| &Момент,
| Имущество В
| (ВЫБРАТЬ РАЗЛИЧНЫЕ
| ВыбытиеИмуществаИмущество.Имущество
| ИЗ
| Документ.ВыбытиеИмущества.Имущество КАК ВыбытиеИмуществаИмущество
| ГДЕ
| ВыбытиеИмуществаИмущество.Ссылка = &Ссылка)) КАК ОстаткиИмущетсваОстатки
| ПО Товары.Имущество = ОстаткиИмущетсваОстатки.Имущество
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.ФинансовыйРегистр.Остатки(&Момент, Счет = ЗНАЧЕНИЕ(ПланСчетов.Финансовый.Имущество), , ) КАК ФинансовыйРегистрОстатки
| ПО Товары.Имущество = ФинансовыйРегистрОстатки.Субконто1”;
</code>
Необходимо сделать:
<code>
……
| ЕСТЬNULL(ОстаткиИмущетсваОстатки.КоличествоОстаток, 0) КАК КоличествоРегистрНакопления,
| ЕСТЬNULL(ОстаткиИмущетсваОстатки.СуммаОстаток, 0) КАК СуммаРегистрНакопления,
| ЕСТЬNULL(ФинансовыйРегистрОстатки.КоличествоОстатокДт, 0) КАК КоличествоРегистрБухгалтерии,
| ЕСТЬNULL(ФинансовыйРегистрОстатки.СуммаОстатокДт, 0) КАК СуммаРегистрБухгалтерии
……
</code>
7.
В этой же функции для таблицы ВыбытиеИмуществаИмущество не указано условие, что необходимо ограничиваться табличной частью только текущего документа. Надо:
<code>
……
| ИЗ
| Документ.ВыбытиеИмущества.Имущество КАК ВыбытиеИмуществаИмущество
| ГДЕ
| ВыбытиеИмуществаИмущество.Ссылка = &Ссылка
……
</code>
8.
В этой же функции устанавливается параметр момент:
<code>
……
Запрос.УстановитьПараметр(“Момент”, Дата);
……
</code>
Если на оси времени будет проведенный документ ВыбытиеИмущества с таким же временем, возможно проведение с формированием отрицательных остатков. Правильнее было бы:
<code>
……
Запрос.УстановитьПараметр(“Момент”, Новый Граница(Ссылка.МоментВремени(),ВидГраницы.Исключая));
……
</code>
9.
Этот же запрос. Не ошибка, но если для счета Имущество, установлено одно субконто Имущество, то для быстродействия считаю стоит наложить параметр на таблицу ФинансовыйРегистрОстатки, ограничив выборку имуществом из данного документа
<code>
……
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.ФинансовыйРегистр.Остатки(
| &Момент,
| Счет = ЗНАЧЕНИЕ(ПланСчетов.Финансовый.Имущество),
| ,
| Субконто1 В
| (ВЫБРАТЬ РАЗЛИЧНЫЕ
| ВыбытиеИмуществаИмущество.Имущество
| ИЗ
| Документ.ВыбытиеИмущества.Имущество КАК ВыбытиеИмуществаИмущество
| ГДЕ
| ВыбытиеИмуществаИмущество.Ссылка = &Ссылка)) КАК ФинансовыйРегистрОстатки
| ПО Товары.Имущество = ФинансовыйРегистрОстатки.Субконто1″;
……
</code>
10.
Для счета Имущество необходимо установить признак количественного учета.
11.
Наверно опечатка : регистр накопления назван ОстаткиИмущетсва.
12.
Документ ПриходДенег форма документа
При открытии документа происходит замещение статьи расхода.
<code>
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Заполнение статьи для новых документов
Объект.СтатьяПрихода = Константы.СтатьяПоступленияПоУмолчанию;
КонецПроцедуры
</code>
Убираем из процедуры текст кода, в модуле объекта создаем процедуру:
<code>
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
СтатьяПрихода = Константы.СтатьяПоступленияПоУмолчанию.Получить();
КонецПроцедуры
</code>
13.
Документ приходДенег при отмене проведения и последующем проведении регистр бухгалтерского учета не наполняется
В модуле объекта не указан признак записи необходимо добавить:
Движения.ФинансовыйРегистр.Записывать=Истина;
_____________________________________________________________________________________________________________________________________________
ПОМОЩЬ БЛИЖНИМ
Будет проведен мини семинар с коллегами по работе. Фотографии мероприятия будут предоставлены.
Здравствуйте, Алексей!
Благодарим за обратную связь по курсу!
Обратная связь по практическому заданию:
>Лучше сделать в модуле объекта через процедуру ОбработкаЗаполнения
Это единственный верный вариант.
>2.Документ ПокупкаИмущества
А лучше просто убрать проверку реквизита “Сумма”
>Регистры накопления ПоступленияДенежныхСредств, СписанияДенежныхСредств будут не нужны.
Нужны для отчетов. Данные по оборотам получаются из остаточных регистров более медленно.
Шаг №2 принят, ждем фотографии с семинара.
3. Шаг. Помощь ближнему.
1. Немного поконсультировал:
– Re: Запуск дополнительной обработки по расписанию без внесения изменений в конфигурацию.
– Re: Макет active document excel
–Re: помогите из справочника Контрагенты выбрать в документ реквизиты
–Re: Запись документа из файла excel
2. Написал статью: http://infostart.ru/public/141483/
“В данной статье приводится пример использования скрипта AutoIT в качестве клиента для 1С-Automation сервера.
Что бы показать возможности такого решения, в приведенном примере, выполняются смешанные операции: соединение с 1С-Automation сервером, вызов процедур глобального контекста (в том числе из общего пользовательского модуля), запуск 1С-предприятия в командной строке (выгрузка БД в режиме конфигуратора).
Функциональность примера понятна из текста программы: мы производим выгрузку файловой базы данных (запуская 1С в пакетном режиме через RunWhite / RunAsWhite ), при этом, заносим информацию об этом событии в журнал регистрации БД и, через функцию общего модуля, дополнительную информации помещаем в независимый регистр сведений.”
3. В планах: мини-доклад для сотрудников “Большой скачёк на Платформу 8.2”. Но это позже.
Сергей, шаг №3 принят.
Шаг 2. Практическое задание.
Синтаксическая неточность (очень глаз резала :-) в интерфейсе)
——————————————-
имущетсва – имущества
Настройки объектов:
——————-
1. Регистр накопления. Остатки ДС. Место хранения – Справочник.Ссылка.Имущество – меняем на Справочник.Ссылка.МестаХраненияДенег
2. Регистр накопления. Получение ДС. Регистр остатков? (установил – Регистр накопления)
3. Регистр накопления. Списание ДС. Регистр остатков? (установил – Регистр накопления)
4. План счетов. Счет Имущество (1.2) – установлен количественный учет (по условию)
Документ: Приход денег.
———————–
1. При открытии старого документа: перезаписывается (очищается, если не назначена константа) статья прихода денег.
2. При создании нового статья прихода должна заполняется из константы (по условию):
Можно просто поправить код процедуры:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Заполнение статьи для новых документов
Если Объект.Ссылка.Пустая() Тогда
Объект.СтатьяПрихода = Константы.СтатьяПоступленияПоУмолчанию.Получить();
КонецЕсли;
КонецПроцедуры
Но тогда при создании документов копированием статья прихода перезаписывается из константы.
что бы избежать этого – можно заполнение статьи перенести из Процедуры ПриСозданииНаСервере()
в процедуры модуля:
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
// Заполнение статьи для новых документов
Если ЭтотОбъект.ЭтоНовый() Тогда
ЭтотОбъект.СтатьяПрихода = Константы.СтатьяПоступленияПоУмолчанию.Получить();
КонецЕсли;
КонецПроцедуры
Процедура ПриКопировании(ОбъектКопирования)
// Вставить содержимое обработчика.
ЭтотОбъект.СтатьяПрихода = ОбъектКопирования.СтатьяПрихода;
КонецПроцедуры
3. Отсутствовала запись движения финансового регистра корректируем:
Движения.ФинансовыйРегистр.Записывать = Истина;
Документ: Покупка имущества.
—————————-
1. Ошибка при открытии документа:
Инициализацию СтатьяРасходов из функции “ПриОткрытии” необходимо удалить,
так как будут затираться сохраненные ранее значения. Так как по условию новый документ
инициализируется предопределенным значением справочника, то можно установить свойство его
реквизита “значение заполнения” или программно, аналогично документу “ПриходДенег”.
2. Неверно определяется СуммаДокумента для новых документов фиксируется ошибка,
для записаных и потом проведенных документов старое значение. Так как проведение идет до записи:
Сумму при проведении можно вычислить например в процедуре проведения документа, в цикле обхода табличной части:
СуммаДокумента = СуммаДокумента + ТекСтрокаИмущество.Сумма;
Документ: Выбытие имущества.
—————————-
1. Ошибка при выполнении обработчика – ‘ОбработкаПроведения’
по причине:
{Документ.ВыбытиеИмущества.МодульОбъекта(15)}: Преобразование значения к типу Число не может быть выполнено
НехваткаУпр = ВыборкаИмущество.Количество
В запрос процедуры общего модуля введена коррекция на NULL:
….
| ЕСТЬNULL(ОстаткиИмуществаОстатки.КоличествоОстаток, 0) КАК КоличествоРегистрНакопления,
| ЕСТЬNULL(ОстаткиИмуществаОстатки.СуммаОстаток, 0) КАК СуммаРегистрНакопления,
| ЕСТЬNULL(ФинансовыйРегистрОстатки.КоличествоОстатокДт, 0) КАК КоличествоРегистрБухгалтерии,
| ЕСТЬNULL(ФинансовыйРегистрОстатки.СуммаОстатокДт, 0) КАК СуммаРегистрБухгалтерии
….
——————————————————————————–
2. Смещение (в левый верхний угол) сообщения об ошибке:
Сообщение.Поле = “Имущество[“+ВыборкаИмущество.НомерСтроки+”].Имущество”;
Заменил на:
Сообщение.Поле = “Имущество[“+(ВыборкаИмущество.НомерСтроки-1)+”].Имущество”;
3. В процедуру общего модуля, в запрос добавлено условие для таблицы Товары:
ВыбытиеИмуществаИмущество.Ссылка = &Ссылка
4. В виртуальной таблице “ФинансовыйРегистрОстатки” задействовал параметр “Субконто”
5. В процедуре ОбработкаПроведения() добавил строку кода:
Движения.ОстаткиИмущества.Очистить();
Движения.ОстаткиИмущества.Записать();
так как неверно перепроводились ранее проведенные документы.
Режим “Обычное приложение”.
——————————————
Если при запуске в режиме “Обычное приложение” документы открывается в режиме “Только чтение”.
Создаем новую форму для режима обычного приложения на вкладке формы документа: Дополнительно.
В отчетах вынес пользовательские настройки в интерфейс:
Отчет: “Баланс”.
—————-
1. “Период” – включил в пользовательские настройки
Отчет: “Ведомость по денежным средствам”.
—————————————–
1. “Начало периода” “Конец Периода”
Отчет: “ВедомостьПоИмуществу”
—————————-
1. “Начало периода” “Конец Периода”
Отчет: “ОстаткиДенежныхСредств”
——————————-
1. “Период”
Отчет: “Поступление и выбытие по статьям”
—————————————–
1. “Начало периода” “Конец Периода”
С утра на свежую голову подкорректировал запрос отчета:
Отчет: Баланс (поправил текст запроса)
————————————–
ВЫБРАТЬ
ВЫБОР
КОГДА ФинансовыйРегистрОстатки.СуммаОстатокДт <> 0
ТОГДА “Актив”
ИНАЧЕ “Пассив”
КОНЕЦ КАК ВидСредств,
ВЫБОР
КОГДА ФинансовыйРегистрОстатки.СуммаОстатокДт <> 0
ТОГДА ФинансовыйРегистрОстатки.СуммаОстатокДт
ИНАЧЕ ФинансовыйРегистрОстатки.СуммаОстатокКт
КОНЕЦ КАК Сумма,
ФинансовыйРегистрОстатки.Счет
ИЗ
РегистрБухгалтерии.ФинансовыйРегистр.Остатки(, (НЕ Счет.Забалансовый), , ) КАК ФинансовыйРегистрОстатки
>Справочник.Ссылка.МестаХраненияДенег
Такого типа данных существовать не может :)
>2. Регистр накопления. Получение ДС. Регистр остатков? (установил – Регистр накопления)
Не понял… поясните то что в скобках.
Ваша версия обработки заполнения для документа “Приход”
Лучше определять ввод нового сравнивая данные заполнения с “Неопределено”. Потому что при вводе на
основании, при вводе из формы списка с установленным отбором “ЭтоНовый()” даст истину и Объект заполнится
тем, чем не следует.
>ЭтотОбъект.СтатьяПрихода = Константы.СтатьяПоступленияПоУмолчанию.Получить();
Находитесь в контексте объекта. К реквизитам обращаемся на прямую.
>2. Неверно определяется СуммаДокумента
Сумма определяется верно, причем своевременно :)
Проверьте с помощью отладчика.
Ну и в отчетах не плохо было бы параметры приводить к концу дня, раз уж вы их затронули.
>2. Неверно определяется СуммаДокумента для новых документов
Прошу прощения, не обратил внимания что проверка заполнения для реквизита “сумма” установлена в значение “выдавать ошибку”. Наиболее правильное решение будет – не проверять данный реквизит.
Была такая мысль… тем более, что на форме СуммаДокумента не выводится…
Всё таки заполнять сумму на форме не стоит. Лучше отключить проверку.
Прошу прощения – писал уже поздно ночью и получилось несколько коряво.
1. Конечно, для регистра накопления. Остатки ДенежныхСредств. Место хранения – справочник был указан неверно – меняем на СправочникСсылка.МестаХраненияДенег (скопипастил, чтоб не ошибиться повторно :))
2. У регистров накопления: ПоступленияДенежныхСредств и СписанияДенежныхСредств меняем вид регистра с остатков на обороты.
3. С обработкой заполнения по документу “Приход” через проверку “неопределено” согласен – но посчитал, что по условию задачи для НОВЫХ документов – статья заполняется из константы. Конечно в реальной жизни – это глюк…
4.При проведении нового документа ПокупкаИмущества проверка СуммыДокумента происходит на форме документа раньше, чем выполнение функции модуля объекта ПередЗаписью() – проведения не происходит. Поэтому сумму документа надо вычислять еще на форме документа, при изменении количества и цены, например добавив в процедуру ПересчитатьСумму() строку кода:
Объект.СуммаДокумента = Объект.Имущество.Итог(“Сумма”)
5. Поправил границы для отчетов к концу дня:
На закладке Параметры в поле Выражение: КОНЕЦПЕРИОДА(&КонецПериода,”День”)
Ещё одна поправка:
>На закладке Параметры в поле Выражение: КОНЕЦПЕРИОДА(&КонецПериода,»День»)
ДобавитьКДате((КОНЕЦПЕРИОДА(&КонецПериода,»День»)),”Секунда”,1)
Согласны?
Да, конечно. Если не ошибаюсь, где-то в лекциях упоминался такой момент, именно по СКД.
Да, именно.
Сергей, поздравляем Вас с успешным окончанием базового курса!
Спасибо! Было приятно работать с Вами.
Успехов в дальнейшем обучении!
1. Обратная связь по курсу.
——————————————-
Меня зовут Сергей Маслов г. Бердск.
Расширенный обзор по курсам я привожу в своем блоге, так как хотелось сказать много: http://www.lexseich.ru/zaochnaya-shkola-1s.html
Здесь же хочу еще раз отметить высокий уровень предоставляемой на курсах информации, достаточно большую нагрузку (даже на базовом уровне) – особенно в последних двух блоках. Информация в мастер-группах так-же была полезна, но хотелось бы новых тем.
Надеюсь применять полученные знания на практике. Пока напрямую конфигурированием не занимаюсь, но для администрирования информации получил более чем достаточно.
Большой респект всей Вашей команде – Вы делаете доброе дело.
PS: Отдельное спасибо за “Быстрый старт”. Финала не было а жаль… :-)
Сергей, спасибо за обратную связь по курсу!
Чеснаков Олег Николаевич, г. Липецк
Разместил небольшую обработку, которая вычисляет количество дней, часов и минут http://infostart.ru/public/141170/ (Использовал функцию число прописью и с помощью запроса создал 3 вычисляемых поля, соответственно, количество дней, количество часов и количество минут)
Код данной обработки:
<code>
&НаКлиенте
Процедура Рассчитать(Команда)
ДоНГОсталось();
КонецПроцедуры
&НаСервере
Процедура ДоНГОсталось()
Запрос = Новый Запрос;
Запрос.УстановитьПараметр(“ТекущаяДата”, ТекущаяДата());
Запрос.Текст =
“ВЫБРАТЬ
| РАЗНОСТЬДАТ(&ТекущаяДата, КОНЕЦПЕРИОДА(&ТекущаяДата, ГОД), ДЕНЬ) КАК ДнейДоНГ,
| РАЗНОСТЬДАТ(&ТекущаяДата, КОНЕЦПЕРИОДА(&ТекущаяДата, ГОД), ЧАС) – РАЗНОСТЬДАТ(&ТекущаяДата, КОНЕЦПЕРИОДА(&ТекущаяДата, ГОД), ДЕНЬ) * 24 КАК ЧасовДоНГ,
| РАЗНОСТЬДАТ(&ТекущаяДата, КОНЕЦПЕРИОДА(&ТекущаяДата, ГОД), МИНУТА) – РАЗНОСТЬДАТ(&ТекущаяДата, КОНЕЦПЕРИОДА(&ТекущаяДата, ГОД), ДЕНЬ) * 1440 – (РАЗНОСТЬДАТ(&ТекущаяДата, КОНЕЦПЕРИОДА(&ТекущаяДата, ГОД), ЧАС) – РАЗНОСТЬДАТ(&ТекущаяДата, КОНЕЦПЕРИОДА(&ТекущаяДата, ГОД), ДЕНЬ) * 24) * 60 КАК МинутДоНГ”;
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Элементы.Дней.Заголовок = ВыделитьСлово(ЧислоПрописью(Выборка.ДнейДоНГ, “НД=Ложь”, “день, дня, дней, м”));
Элементы.Часов.Заголовок = ВыделитьСлово(ЧислоПрописью(Выборка.ЧасовДоНГ, , “час, часа, часов, м”));
Элементы.Минут.Заголовок = ВыделитьСлово(ЧислоПрописью(Выборка.МинутДоНГ, , “минута, минуты, минут, ж”));
ДнейДоНГ = Выборка.ДнейДоНГ;
ЧасовДоНГ = Выборка.ЧасовДоНГ;
МинутДоНГ = Выборка.МинутДоНГ;
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ВыделитьСлово(ЧислоПрописью) Экспорт
Слово = СокрЛП(Сред(ЧислоПрописью, 1, СтрДлина(ЧислоПрописью)-3));
ПозицияПослПробела = 0;
ДлинаСлова = СтрДлина(Слово);
Для Сч = 0 По ДлинаСлова – 1 Цикл
Символ = Сред(Слово, ДлинаСлова-Сч, 1);
Если Символ = ” ” Тогда
ПозицияПослПробела = ДлинаСлова-Сч;
Прервать;
КонецЕсли;
КонецЦикла;
Если ПозицияПослПробела = 0 Тогда
ЧислоПрописью = “”;
Возврат Слово;
КонецЕсли;
ВыделенноеСлово = СокрЛП(Прав(Слово, ДлинаСлова – ПозицияПослПробела));
Возврат ВыделенноеСлово;
КонецФункции
</code>
Достаточно? Или нужно что-то ещё сделать?
Олег, можно было, конечно, написать и что-нибудь по-серьезней.. )) Сильно уж похоже на 3е задание нулевого блока. Ну да ладно, шаг №3 принят.
>Комменты: Кто ж до 2013-го считает? Считать надо до 22 декабря 2012-го, дальше смысла нет :)))
Пользователи инфостарта те ещё оптимисты :)
Хотелось просто побыстрее что-то сделать, потому что просто времени не будет позже вообще никак!
Да, это точно, оптимисты)
:)
Шаг 2. Практическое задание.
Мною найденные ошибки:
1) Удалил процедуру «ПриОткрытии» документа «ПокупкаИмущества», где было обращение к базе данных в контексте клиента исправил следующим образом. В модуле объект данного документа определил событие «ОбработкаЗаполнения» и написал код из одной строчки:
<code>
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
СтатьяРасхода = Справочники.СтатьиРасходаДенежныхСредств.ПокупкаИмущества;
КонецПроцедуры
</code>
2) В регистре накопления «ОстаткиДенежныхСредств» у измерения «МестоХранения» был задан тип «СправочникСсылка.Имущество», изменил его на СправочникСсылка.МестаХраненияДенег.
3) Поставил галочку «количественный» у предопределённого элемента «Имущество».
4) Указал, что регистр «Списание денежных средств» и «Поступление денежных средств» имеют вид «Обороты».
5) Удалил процедуру модуля формы «ПриСозданииНаСервере» документа «ПриходДенег», а в модуле объекта добавил событие «ОбработкаЗаполнения» и указал, что реквизит «СтатьяПрихода» будет заполняться константой:
<code>
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
CтатьяПрихода=Константы.СтатьяПоступленияПоУмолчанию.Получить();
КонецПроцедуры
</code>
В дальнейшем тестировании данной базы в тонком и толстом клиенте больше ошибок не выявил!
Олег, раз уж вы предложили свой вариант обработок заполнения, тогда давайте остановимся на этом подробнее :)
Скажите, в каких случаях генерируется данное событие и какую ситуацию в связи с этим вы не учли?
При вводе нового документа!
При вводе копированием не заполняется =(
Тогда можно ещё событие “При копировании” в модуле объекта подключить:
для документа “ПокупкаИмущества”:
<code>
Процедура ПриКопировании(ОбъектКопирования)
СтатьяРасхода = Справочники.СтатьиРасходаДенежныхСредств.ПокупкаИмущества;
КонецПроцедуры
</code>
Для документа “ПриходДенег”:
<code>
Процедура ПриКопировании(ОбъектКопирования)
СтатьяПрихода = Константы.СтатьяПоступленияПоУмолчанию.Получить();
КонецПроцедуры
</code>
Правильно?
Давайте сейчас забудем про копирование.
Рассмотрим вариант когда вводится новый документ в форме списка с установленным отбором и при вводе на основании.
Тогда в свойство “ЗначениеЗаполнения” реквизита необходимого
документа выбрать это необходимое значение! Или можно поставить
условие в обработке заполнения:
Если ЭтоНовый() Тогда
(Присваиваем реквизиту значение константы) ;
КонецЕсли
Или я опять не так понял вопрос?
Я возможно не совсем верно выразился.
Напишите такую обработку заполнения, чтобы при воде нового элемента в форме списка с установленным отбором, реквизиты элемента заполняются значениями отбора. А при простом интерактивном вводе нового происходило бы заполнение соответствующего реквизита значением из константы.
Поместил в общий модуль функцию ПолучитьЗначениеКонстанты(), в модуле объекта сделал следующее:
Определил переменную ДляКопир в самом верху модуля,
Переделал Обработку заполнения след. образом:
<code>
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
Если ДанныеЗаполнения <>Неопределено Тогда
Если ДанныеЗаполнения.Свойство(“СтатьяПрихода”) Тогда
СтатьяПрихода = ДанныеЗаполнения.СтатьяПрихода;
ДляКопир = Ложь;
КонецЕсли;
Иначе
СтатьяПрихода = ЗаполнениеДокументов.ПолучитьЗначениеКонстанты();
ДляКопир=Истина;
КонецЕсли;
КонецПроцедуры
</code>
И процедуру ПриКопировании:
<code>
Процедура ПриКопировании(ОбъектКопирования)
Если ДляКопир=Истина Тогда
СтатьяПрихода = ЗаполнениеДокументов.ПолучитьЗначениеКонстанты();
КонецЕсли;
КонецПроцедуры
</code>
В результате, если настроить список и указать соответствующий отбор, то заполняется
указанным значением, если убрать отбор, то заполняется из константы.
Теперь верно я понял?
Заметил ошибку (.
При копировании ОбработкаЗаполнения не генерируется!
Вообщем, убираем её, чтобы глаза не мозолила, я думаю, пользователь сам разберётся какой вид документа надо скопировать!
В итоге осталось:
<code>
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
Если ДанныеЗаполнения <>Неопределено Тогда
Если ДанныеЗаполнения.Свойство(“СтатьяПрихода”) Тогда
СтатьяПрихода = ДанныеЗаполнения.СтатьяПрихода;
КонецЕсли;
Иначе
СтатьяПрихода = ЗаполнениеДокументов.ПолучитьЗначениеКонстанты();
КонецЕсли;
КонецПроцедуры
</code>
Да, приблизительно это я и хотел увидеть.
Олег, поздравляю, вы первый финалист 10го потока базового курса по программированию!
Ура!!!!!!!!!!!!!!!!!!!
:))
Шаг 1. Обратная связь.
Что нового Вы узнали из базового курса по программированию?
Каждая тема была новой и интересной, но в основном запомнилось:
Блок 0: параметры производительности ИБ, режим сжатия ИБ, контекст выполнения программного кода, передача параметров (по ссылке и по значениею), вывод сообщений пользователю, настройка модулей и т. п.;
Блок 1: типы данных, универсальные коллекции и их методы, интерактивный вывод на форму списка значений, уникальный идентификатор, виды форм, редакторы диалогов, обработчики событий формы, программная работа с пользователями, параметры ИБ и т. п.;
Блок 2: дата документа, состояния документа, нумерация документов, оперативное проведение и его особенности, ввод на основании, настройка форм, свойства записи регистра, варианты записи в регистр накопления, обход результата запроса, виртуальные таблицы, новая технология проведения и т. п.;
Блок 3: понятие БУ, счета, баланса, корреспонденция, забалансовые счета, маска кода, и т.п., варианты записи в регистр БУ, документ «Операция», работа с регистром бухгалтерии, реализация количественного учета, запросы, сторнирование и т. п.;
Блок 4 : виды расчета, работа с планом видов расчета, составление графика, работа с документом «Начисление ЗП», работа с регистром расчета, алгоритмы расчёт зп, универсальный алгоритм и т. п.
От каких заблуждений избавились?
Избавился от мнимой трудности работы с запросами к БД и последующей их обработки, объектами бухгалтерского учета, объектами расчета з/п.
Если Вы работаете на практике с платформой «1С:Предприятие 8», то, каким образом
вам удалось применить новые навыки (какие результаты были достигнуты)?
В доработке типовых стал лучше понимать механизмы работы системы 1с предприятие, более уверенно стал работать с отладчиком и синтак-помощником, дорабатывал формы, отчеты, макеты печатных форм, производил установку, обновление конфигураций, настраивал веб-клиент.
Насколько удобен, оказался формат обучения в сравнении с очным форматом?
Не надо было отлучаться с работы. Учиться можно было в спокойной обстановке одному, за чашкой кофе и во время «особенного вдохновления» :). Было время, когда ничего в голову не лезло, а потом с трудом выполнял ДЗ, а иногда всё делалось «на лету». Поэтому этот формат намного удобнее очного, можно учиться когда тебе захочется, можно делать передышки.
Я пожалел то, что пошёл сначала на очные курсы, потому что я на них только «спал» и ничего так и не вынес :).
olches, благодарим за обратную связь по курсу!