обработка:заполнение реквизита документа реквизитом другого документа |
Я |
14.02.19 — 11:50
делаю обработку.На основании заказа поставщика сделан документ поступление товаров. Если в поступлении не заполнен реквизит проект, то его нужно заполнить из заказа поставщику.
как исправить ошибку? :Поле объекта не обнаружено (Следующий)
Пока ДокументыПоступления.Следующий Цикл
Процедура ЗаполнитьНаСервере()
ДокументыПоступления = Документы.ПоступлениеТоваровУслуг.Выбрать();
Запрос = Новый Запрос;
Запрос.Текст = «ВЫБРАТЬ
| ЗаказПоставщику.Проект
|ИЗ
| Документ.ЗаказПоставщику КАК ЗаказПоставщику»;
ТЗ = Запрос.Выполнить().Выгрузить();
Пока ДокументыПоступления.Следующий Цикл
ЗаказПоставщику = ТЗ;
Если Не ЗначениеЗаполнено(ДокументыПоступления.Проект) И ЗначениеЗаполнено(ЗаказПоставщику.Проект) Тогда
ДокументОбъект = ДокументыПоступления.ПолучитьОбъект();
ДокументОбъект.Проект = ЗаказПоставщику.Проект;
ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
1 — 14.02.19 — 11:52
(0) Ужас
2 — 14.02.19 — 12:00
(0) Не вдаваясь в детали (как сделал коллега из (1)) вот это вот : «Пока ДокументыПоступления.Следующий Цикл» должно быть записано вот так : «Пока ДокументыПоступления.Следующий() Цикл». Обратить особое внимание на скобки после слова «Следующий». Ибо оно — имя метода. И к нему нужно соответствующим образом обращаться.
3 — 14.02.19 — 12:03
(2) мне стыдно.
4 — 14.02.19 — 12:21
(3) Крепитесь. Дальше будет хуже. Когда дойдете до «ДокументОбъект = ДокументыПоступления.ПолучитьОбъект();» — тогда осознаете весь трагизм ситуации. )))
5 — 14.02.19 — 12:25
(4) Раньше, свалиться уже на этом:
Если Не ЗначениеЗаполнено(ДокументыПоступления.Проект) И ЗначениеЗаполнено(ЗаказПоставщику.Проект) Тогда
6 — 14.02.19 — 12:43
(5) да, так и случилось
7 — 14.02.19 — 12:44
(6) Вот теперь можно начинать стыдиться.
8 — 14.02.19 — 12:47
(6) вам для начала надо осмыслить откуда, что и куда вы хотите заполнить. В настоящий момент выбираете все поступления и все заказы. Но где связь между ними? Если бы даже такая обработка сработала, то вы бы во все поступления проставили какой-то проект совсем не связанный с этим поступлением.
9 — 14.02.19 — 13:10
Свяжутся ли теперь проекты Проекты ?=Документы.ПоступлениеТоваровУслуг.НайтиПоРеквизиту(«Проект», Проект);
Запрос = Новый Запрос;
Запрос.УстановитьПараметр(«Ссылка»,Проект);
Запрос.Текст = «ВЫБРАТЬ
| ЗаказПоставщику.Проект
|ИЗ
| Документ.ЗаказПоставщику КАК ЗаказПоставщику
|ГДЕ
| ЗаказПоставщику.Проект = &Ссылка»;
10 — 14.02.19 — 13:10
Проект =Документы.ПоступлениеТоваровУслуг.НайтиПоРеквизиту(«Проект», Проект);
Запрос = Новый Запрос;
Запрос.УстановитьПараметр(«Ссылка»,Проект);
Запрос.Текст = «ВЫБРАТЬ
| ЗаказПоставщику.Проект
|ИЗ
| Документ.ЗаказПоставщику КАК ЗаказПоставщику
|ГДЕ
| ЗаказПоставщику.Проект = &Ссылка»;
11 — 14.02.19 — 13:14
рекв.Проект Поступления заполняется из рекв. Проект ЗаказаПоставщику
12 — 14.02.19 — 13:32
(9) Не свяжутся. Просто пройдись по реквизитам «Поступления» (визуально) и посмотри есть ли там что-то типа «ЗаказПоставщику».
Не зная конфигурации, сложно сказать как у вас там связаны документы поступления с заказами.
13 — 14.02.19 — 13:45
(12) Да, такой реквизит имеется в Табличной части
14 — 14.02.19 — 13:53
(13) если в табличной части, значит но одно поступление может быть несколько заказов. А если реквизит «Проект» всего один, то с какого заказа его заполнять?
15 — 14.02.19 — 14:51
В документе ПТУ в ТЧ товары есть Заказы, но в ТЧ товары нету Проекта, поэтому на основании одного заказа создается документ один документ ПТУ, нужно из документа заказа достать значение реквизита Проект и поместить в документ ПТУ (в реквизит Проект).
16 — 14.02.19 — 15:10
(15) Что-то типа такого
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| ПоступлениеТоваровУслугТовары.Ссылка КАК Ссылка,
| ПоступлениеТоваровУслугТовары.ЗаказПоставщику.Проект КАК Проект
|ИЗ
| Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
|ГДЕ
| ПоступлениеТоваровУслугТовары.Ссылка.Проект.Ссылка ЕСТЬ NULL»;
ТЗ = Запрос.Выполнить().Выгрузить();
Для Каждого Строка Из ТЗ Цикл
Док = Строка.Ссылка.ПолучитьОбъект();
Док.Проект = Строка.Проект;
Док.Записать();
КонецЦикла;
17 — 14.02.19 — 15:28
(16) хотел с отладчиком посмотреть ваш код, а сразу ругается :
Ошибка инициализации модуля: ОбщийМодуль.РаботаСОбщимиПеременными.Модуль
по причине:
{ОбщийМодуль.РаботаСОбщимиПеременными.Модуль(29,8)}: Переменная не определена (глОбщиеЗначения)
Кэш = <<?>>глОбщиеЗначения;
{ОбщийМодуль.РаботаСОбщимиПеременными.Модуль(178,9)}: Переменная не определена (глОбщиеЗначения)
Если <<?>>глОбщиеЗначения = Неопределено Тогда
{ОбщийМодуль.РаботаСОбщимиПеременными.Модуль(204,8)}: Переменная не определена (глОбщиеЗначения)
Если <<?>>глОбщиеЗначения = Неопределено Тогда
18 — 14.02.19 — 15:31
проверил на двух компах
19 — 14.02.19 — 15:33
в любом случае , Спасибо за науку
20 — 14.02.19 — 15:44
(19) ты куда это прописала? То что я дал.
Вроде разговор про обработку был
21 — 14.02.19 — 15:46
(20) Прописал во внешнюю обработку
22 — 14.02.19 — 15:48
а где она в общий модуль лезет?
23 — 14.02.19 — 15:54
(22) не знаю. в режиме управл.приложении ошибка в общем модуле, а в обычном приложении ошибки не выходит, но зависло
24 — 14.02.19 — 16:03
(23) оно не зависло, оно выполняется.
А в УП надо смотреть как процедуры названы. Там директивы должны быть &НаКлиенте, &НаСервере
25 — 14.02.19 — 17:28
(24) Такие директивы имеются
dezomorf1c
26 — 14.02.19 — 17:30
у меня база тяжелая 40ГБ. Оставлю на выполнение
0 / 0 / 1 Регистрация: 12.03.2012 Сообщений: 166 |
|
1 |
|
1C 8.x (тонкий) Заполнение на форме данными из другого документа12.05.2016, 13:48. Показов 22239. Ответов 12
Здравствуйте! Перейду собственно к проблеме — имеется два документа (Допустим Док1 и Док2), в одном документе есть совпадающие реквизиты (допустим ФИО и Адрес), которые необходимо автоматически заполнять из другого документа по кнопке на форме, чтобы не вводить их заново (но иногда некоторые реквизиты не заполняются в документе откуда требуется брать данные для заполнения). Подскажите, пожалуйста, возможную реализацию кода. Таблиц нет, есть только реквизиты, которые требуется скопировать. Смотрел ОбработкаЗаполнения(), но получалось только когда создавал один документ на основании другого, но это другое — мне надо чтобы по кнопке на форме заполнялись эти данные.
0 |
3051 / 1998 / 524 Регистрация: 25.06.2009 Сообщений: 6,964 |
|
12.05.2016, 14:12 |
2 |
zersturen, а эти два документа как-то связаны? Может в одном документе есть поле-ссылка на другой?
0 |
0 / 0 / 1 Регистрация: 12.03.2012 Сообщений: 166 |
|
12.05.2016, 14:21 [ТС] |
3 |
Нет, не связаны никак Добавлено через 6 минут
0 |
3051 / 1998 / 524 Регистрация: 25.06.2009 Сообщений: 6,964 |
|
12.05.2016, 16:11 |
4 |
zersturen, ну тогда как вариант: создать какой-нибудь регистр сведений, куда бы документы делали движения с нужными значениями. И при создании документов подтягивать из этого регистра значения нужных реквизитов.
0 |
zersturen 0 / 0 / 1 Регистрация: 12.03.2012 Сообщений: 166 |
||||
13.05.2016, 07:13 [ТС] |
5 |
|||
Ну регистры есть, но как по кнопке подтягивать из регистра данные, чтобы они заполняли необходимые реквизиты? Запросом? Что-то типа того:
Добавлено через 10 минут
0 |
GreenkA 3051 / 1998 / 524 Регистрация: 25.06.2009 Сообщений: 6,964 |
||||
13.05.2016, 08:23 |
6 |
|||
zersturen, что-то по вашим комментариям в коде, я думаю, надо просто добавить в Док2 реквизит «Док1» типа ДокументСсылка.Док1. Вынести на форму и на событие изменения этого поля прописать:
Не по теме:
GreenkA, и спасибо что так активно помогаете нам, начинающим))) :curtsy:
1 |
0 / 0 / 1 Регистрация: 12.03.2012 Сообщений: 166 |
|
13.05.2016, 09:27 [ТС] |
7 |
Я рассматривал этот вариант, но хотел не выводить этот реквизит (типа ДокументСсылка.Док1), чтобы лишнего на форме не было. А можно как-то это программно обойти по кнопке? То есть, допустим по нажатию на кнопку выводился либо список документов, либо форма списка документов, потом после выбора нужного документа проводилась процедура ЗаполнитьПоДокументуНаСервере()?
0 |
GreenkA 3051 / 1998 / 524 Регистрация: 25.06.2009 Сообщений: 6,964 |
||||
13.05.2016, 09:55 |
8 |
|||
Сообщение было отмечено zersturen как решение Решениеzersturen, можно на кнопку прописать:
Можно использовать вместо ВыбратьИзСписка() — ВыбратьИзМеню().
1 |
zersturen 0 / 0 / 1 Регистрация: 12.03.2012 Сообщений: 166 |
||||
13.05.2016, 11:25 [ТС] |
9 |
|||
Ругается на модальность, я так понял надо через ПоказатьВыборИзСписка(), но чет там все замудрено Добавлено через 6 минут
Единственное список почему-то появляется на одном из реквизитов Добавлено через 1 минуту
0 |
GreenkA 3051 / 1998 / 524 Регистрация: 25.06.2009 Сообщений: 6,964 |
||||||||
13.05.2016, 13:02 |
10 |
|||||||
Ругается на модальность в свойствах конфигурации выставите «Режим использования модальности — использовать».
А мне бы желательно, чтобы открывалась форма списка документа… пропишите тогда так:
если не включите модальность, то надо использовать — ПоказатьВыборЭлемента(). См. синтакс-помощник.
А, и еще как избежать заполнения таких данных как Номер и Дата
1 |
zersturen 0 / 0 / 1 Регистрация: 12.03.2012 Сообщений: 166 |
||||
13.05.2016, 14:32 [ТС] |
11 |
|||
Спасибо большое!)) Все работает как надо Добавлено через 23 минуты
В итоге он все равно подставляет Номер к Номер, Дата к Дата, а надо чтобы Номер к СчетЗаказНомер, Дата к СчетЗаказДата. Как подставить?
0 |
GreenkA 3051 / 1998 / 524 Регистрация: 25.06.2009 Сообщений: 6,964 |
||||
13.05.2016, 14:38 |
12 |
|||
zersturen, я же писала вам:
1 |
0 / 0 / 1 Регистрация: 12.03.2012 Сообщений: 166 |
|
13.05.2016, 14:45 [ТС] |
13 |
GreenkA, оказывается все просто))) Еще раз спасибо)
0 |
Заполнение реквизитов документа при проведении другого
Автор Dirijabl, 21 мар 2016, 23:56
0 Пользователей и 1 гость просматривают эту тему.
Доброго времени суток. Комплексная автоматизация 1.1, в документе Заявка на расходование средств на форму добавлен реквизит ОтметкаОплаты, необходимо при создании на основании и последующем проведении Платежного поручения исходящего устанавливать значение этого реквизита — Истина и поменять значения реквизита Состояние на Закрыт. В модуле Платежного поручения исходящего пишу:
Процедура ОбработкаПроведения(Отказ, Режим)
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| ДенежныеСредстваКСписаниюОстаткиИОбороты.ДокументСписания.Ссылка КАК Ссылка
|ИЗ
| РегистрНакопления.ДенежныеСредстваКСписанию.ОстаткиИОбороты КАК ДенежныеСредстваКСписаниюОстаткиИОбороты
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПлатежноеПоручениеИсходящее.РасшифровкаПлатежа КАК ПлатежноеПоручениеИсходящееРасшифровкаПлатежа
| ПО ДенежныеСредстваКСписаниюОстаткиИОбороты.ДокументСписания.Ссылка = ПлатежноеПоручениеИсходящееРасшифровкаПлатежа.Ссылка
|ГДЕ
| ДенежныеСредстваКСписаниюОстаткиИОбороты.ДокументСписания.Ссылка ССЫЛКА Документ.ПлатежноеПоручениеИсходящее
| И ДенежныеСредстваКСписаниюОстаткиИОбороты.ДокументСписания.ДокументОснование.Ссылка ССЫЛКА Документ.ЗаявкаНаРасходованиеСредств
| И ДенежныеСредстваКСписаниюОстаткиИОбороты.ДокументСписания.Ссылка = &Документ»;
Запрос.УстановитьПараметр(«Документ»,ЭтотОбъект.Ссылка);
Выборка = Запрос.Выполнить().Выбрать();
Выборка.Следующий();
Выборка.Заявка.ОтметкаОплаты=Истина;
Выборка.Заявка.Состояние=Перечисления.СостоянияОбъектов.Закрыт;
КонецПроцедуры
Получаю ошибку: Ошибка при выполнении обработчика — ‘ОбработкаПроведения’
по причине:
{Документ.ПлатежноеПоручениеИсходящее.МодульОбъекта(2392)}: Значение не является значением объектного типа (ОтметкаОплаты)
Подскажите, пожалуйста, как правильно.
1. В запросе выбирается единственное поле «ссылка» ДенежныеСредстваКСписаниюОстаткиИОбороты.ДокументСписания.Ссылка КАК Ссылка,
откуда в выборке появляется поле «Заявка».
2. Для изменения докумета в 1С нужно работать типом ДокументОбъект, тогда как в запросе получен тип ДокументСсылка.
т.е. от полученной ссылки получаешь объект и уже далее с ним работаешь:
Заявка = Выборка.Ссылка.ПолучитьОбъект();
Заявка.ОтметкаОплаты = Истина;
Заявка.Состояние= Перечисления.СостоянияОбъектов.Закрыт;
Заявка.Записать();
Цитата: Dirijabl от 21 мар 2016, 23:56устанавливать значение этого реквизита
Вот с этого и начинаются проблемы. Это грубейшая ошибка и логики и методологии. НЕЛЬЗЯ в модуле проведения документа менять реквизиты самого документа-объекта.
Создавайте РС и пишите в него все ваши статусы, а на форму документа выводите значение из этого РС.
Надеюсь, правильно вас понимаю. Создаю РС Вспомогательный, непериодический, подчинен регистратору. В нем ресурсы — отметкавыплаты и состояние. Движения в регистр пишет документ Заявка на расходование средств. В модуле проведения Платежного поручения пишу:
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| Вспомогательный.Состояние,
| Вспомогательный.ОтметкаОплаты,
| Вспомогательный.Регистратор КАК Ссылка,
| ДенежныеСредстваКСписаниюОстаткиИОбороты.ДокументСписания.Ссылка
|ИЗ
| РегистрСведений.Вспомогательный КАК Вспомогательный
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ДенежныеСредстваКСписанию.ОстаткиИОбороты КАК ДенежныеСредстваКСписаниюОстаткиИОбороты
| ПО Вспомогательный.Регистратор.Ссылка = ДенежныеСредстваКСписаниюОстаткиИОбороты.ДокументСписания.ДокументОснование.Ссылка
|ГДЕ
| ДенежныеСредстваКСписаниюОстаткиИОбороты.ДокументСписания.Ссылка ССЫЛКА Документ.ПлатежноеПоручениеИсходящее
| И ДенежныеСредстваКСписаниюОстаткиИОбороты.ДокументСписания.Ссылка = &Документ»;
Запрос.УстановитьПараметр(«Документ»,ЭтотОбъект.Ссылка);
Выборка = Запрос.Выполнить().Выбрать();
НаборЗаписей = РегистрыСведений.Вспомогательный.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(Выборка.Ссылка);
НаборЗаписей.Прочитать();
Для Каждого Запись Из НаборЗаписей Цикл
Запись.ОтметкаОплаты=Истина;
Запись.Состояние=Перечисления.СостоянияОбъектов.Закрыт;
КонецЦикла;
Ничего не происходит. Совсем не то?
Общую идею уловили правильно, а запрос безобразный. и соединения неправильные и параметры в запросе устанавливаются не те.
Подскажите пожалуйста, как исправить!
Или мне кажется или на основании заявки делается ПП, а у вас судя по коду все с точностью до наоборот.
Это в запросе? Вроде все правильно выводит…
ОК. где метод Записать() набора РС?
Это видимо после цикал НаборЗаписей.Записать(Истина);
Появляется ошибка {Документ.ПлатежноеПоручениеИсходящее.МодульОбъекта(2396)}: Ошибка при вызове метода контекста (Записать)
по причине:
Ошибка записи! Не установлен отбор по регистратору (Регистр сведений: Вспомогательный)
Теги:
- Форум 1С
-
►
Форум 1С — ПРЕДПРИЯТИЕ 8.0 8.1 8.2 8.3 8.4 -
►
Конфигурирование, программирование в 1С Предприятие 8 -
►
Заполнение реквизитов документа при проведении другого
Похожие темы (5)
Поиск
Заполнить документ данными из другого документа
При создании любой документ можно заполнить данными из другого документа, для этого в форме редактирования документа нажмите Заполнить.
Откроется таблица, содержащая перечень всех документов, выделите один или несколько документов, а также отметьте данные, которые необходимо заполнить:
- Продавец и покупатель — будут заполнены все реквизиты покупателя и продавца;
- Товары и услуги — будут заполнены товары и услуги;
- Связь с документом — будет установлена связь с документами.
Затем нажмите кнопку Заполнить. Из документов будут взяты данные и вставлены в новый документ.
Вы уже научили выводить реквизит иного справочника и документа в форме документа. И даже редактировать.
Тут:
http://novichok1c.ru/comment/1451#comment-1451
Отлично работает, за что еще раз ОГРОМНОЕ Спасибо!
Так же Вы научили редактировать «дистанционно» реквизит другого справочника или документа.
Однако у данного метода есть существенный недостаток:
Чтобы произошли измененния, необходимо, чтобы документ, в который выводится реквизит был открыт и перезаписан.
В связи с чем 2 вопроса:
Вопрос 1.
1С возможно объединить реквизит?
Т.е. создать один реквизит для нескольких документов?
К которому документы обращаются, при открытии форм, который можно редактировать из любого документа связанного с этим реквизитом.
Вопрос 2.
Как вывести данные реквизита документа(справочника) из формы списка другого документа?
(когда документы находятся в подчинении друг друга или связаны, как ЗаказПокупателя и РеализацияТоваровУслуг, Контрагенты и ЗаказПокупателя и т.д.)
Платформа 8.2.13.219 Комплексная Автоматизация 1.1.12.1 Стоит задача при проведении входящего платежного поручения проставлять в поле ДатаОплаты заказа покупателя (поставщику) дату платежного поручения. При отмене проведения дата должна удаляться. Собственно как это реализовать? Прописать в процедуре ПриЗаписи платежного поручения необходимые манипуляции или делать с помощью движений регистров? Если первый вариант, то в какую процедуру запихивать очистку реквизита при отмене проведения?
Почему? это же просто реквизит планируемой даты оплаты — по-крайней мере так написано в Справке, хотя по этому реквизиту у нас все менеджеры смотрят — пришла оплата или нет) Сейчас ставим его ручками при загрузке платежки.
Нет гарантии целостности. Т.е. нет гарантии что при проведении одного документа 100% изменяться реквизиты другого. Например кто-то в нем сидеть может в данный момент, или еще какая транзакция
очень плохая идея… Лучше регистр завести.
то же полагаю это не лучший способ контролировать оплату… но если «все пацаны»… — сделай подписку на событие. про регистры вообще не понял. хотя, если это мысль в сторону отслеживать оплату заказов через запрос к регистру (например в УТ есть «расчеты с покупателями») — направление мысли целиком поддерживаю!
А если, например, оплата тремя платежами? ну и
+100 хотя, если бизнес-процессы у товарисча «отлиты в граните» и «у нас такого не бывает» (и не будет никогда?? точно???) — почему бы и нет. Вот еще, отчеты какието открыватть настраивать! а так раз — журнал заказов — колонка дата оплаты — всем счастие…
в КА этот регистр накопления называется «Расчет с контрагентами». Вопрос теперь как его лучше задействовать?
По моему, он сам работает, без посторонней помощи. Анализ заказа открывать пробовали?
пробовали, но это все лишние щелчки мыши
В случае использования подписки на события не может ли возникнуть ситуация как в ? т.е. если кто-нибудь сидит в заказе, то дата проставится или нет?
Сделал через подписки на событие
Наделал себе под писку — так не позорился бы на людях. Стыдоба. Сказали же, как правильно.
И куда этот регистра пихать? Отдельной колонкой? В журнале заказов? Вариантов того, что кто-то будет в это время что-нибудь менять в заказе — очень мала. Заказ составлен, любые изменения с помощью Корректировки заказа.
Именно так. Это не сложно. А по нужно делать проверки: РежимПроведения — бывает разным. Источник.РасшифровкаПлатежа.ВыгрузитьКолонку(«Сделка»)[0] — расшифровка платежа может быть пустой. Может быть из двух, трех записей. Сделка.ДатаОплаты = Дата — дата может быть пустой, а дата оплаты может быть заполнена.
+ Дата может равняться дате оплаты. Это тоже необходимо учесть.
РежимПроведения — бывает разным — вроде все работает, как при оперативном, так и при неоперативном. расшифровка платежа может быть пустой. — потому и стоит ЗначениеЗаполнено Если пустой, тогда Сообщение. Может быть из двух, трех записей. — Может, но у нас одна платежка — один счет. Хотя проверку на всякий случай сделать надо. дата может быть пустой, а дата оплаты может быть заполнена. — и кто ее заполнил? только если кто-то вручную проставил, ничего страшного если проставится датаоплаты по платежке.
А если частично заказ оплачен?
а это на что может повлиять? немного не понял… а за конструктивную критику спасибо)
отгрузка только после 100 предоплаты — галочка в договоре стоит.
или имеется ввиду, что дата будет проставляться даже если заказ частично оплачен? тогда понял…
откопал в типовой КА запрос на выбор суммыоплаты и суммызаказа, только понять не могу все что после ИЗ стоит. Конструктор запросов ругается на ошибку
С запросом разобрался, только если его вставить в подписку на событие ПриПроведении, то значение СуммаОплаты в отладчике без учета проводимой платежки. Т.е. получается на момент выполнения подписки, движения по регистрам еще не были сделаны. Я думал подписки на события всегда после этих самых событий выполняются. Как быть в этом случае?
Как вариант дописывать сумму платежки к существующим оборотам, но по-моему это немного кривовато.
сам спросил, сам ответил) нет не ПриЗаписи.
Не делай такую доработку, ты как программист системы должен предложить иное решение для контроля оплаты. Не разрушай конфигурацию.
Сдается мне, если бы его работодатель знал, что он оплатил несколько дней работы программиста, которые стоят юзеру одного койка мышкой, он бы этого программиста в ж о п у в ы е б а л.
вы все про Анализ Заказа покупателя намекаете
Совершенно непонятна конечная цель этих телодвижений. ЗАЧЕМ ВСЕ ЭТО ??? В конфигурациях все предусмотрено. Если нужен специальный анализ — напиши свой отчет. И не лезь в конфу. ТС может объяснить — что будет дальше с датой оплаты в заказе?
Цель автоматически заполнять реквизит ДатаОплаты в Заказе покупателя при формировании платежного поручения, чтобы журнале заказов уже была видна эта дата оплаты, без нажатия всяких отчетов и анализов.
Реквизит «ДатаОплаты» заказа покупателя имеет другое назначение — он используется для планирования платежей. Использовать его не желательно. Использование списка документов для анализа оплаты ?… Представляю как бухгалтера смотрят на список документов и объясняют кому то — что то. просто необходимо заставить себя и окружающих пользоваться отчетами. Иначе так и будете считать на счетах.
бухгалтера знают куда смотреть, а вот менеджеры… а так смотрят журнал заказов и сразу клиенту говорят — пришла оплата по этому счету или нет, и если да, то когда, не нажимая при этом анализ и не ища заветную графу.
Пойми, ты работаешь, например, не с чистым листом в экселе, куда лепишь формулы, где захочется, а с готовой системой, которая предполагает определенную логику работы и грамотную модификацию. Твоя задача как специалиста решить вопрос грамотно, не ломая дров.
я для этого рисовал в журнале внизу два окна: слева — отгрузки, справа — платежи ну и при получении данных обновляешь инфу в окошках
Уважаемые, подскажите, у нас дата оплаты проставляется автоматически при оформлении заказа, как это отключить??
А еще можно при отображении строки списка заказов обратиться к платежкам и получить есть или нет оплата. Соответственно вывести в строке списка флаг «Оплачено». Изменений минимум и блокировок не будет. Правда отображение списка заказов поднагрузится
дак тогда можно и строки красить. Помню занимался таким ужасом… свят-свят И ведь не докажешь начальству, что это глупо и нелепо…
Подскажите пож-та подробнее как это сделать, я ещё только учусь)))
)))) Да, понимаю, ужас, а что делать, если у нас программист знает не больше меня
А программист, он же и консультант, он же и админ, он же погоняло для манагеров и груша для бития бушками?
ну знает то он может и побольше, только ему обычно некогда такими мелочами заниматься. При том он еще и не в штате, а со стороны, приходит так иногда.
Обратись к автору , может что и подскажет, я УТ новую не зрел, но припоминаю, что там это поле дейстивтельно закрывалось какой-то обработиной по регламенту.
КА у меня нет, расскажу как в УПП. Заказ покупателя, по логике конфигурации, оформляется с предположением, что товар будет оплачен. Поэтому дата оплаты всегда равна дате документа плюс число дней резерва без оплаты из договора (подразумевается, что товар по заказу резервируется, а иначе зачем оформлять заказ — оформляйте счет — он ни к чему не обязывает). Если же в организации подразумевается обязательное оформление заказа, то, наверное, менеджер сам должен проконтролировать дату оплаты, т.е когда покупатель собирается платить. Без изменения кода не заполнять дату оплаты нельзя. Я для менеджеров по продажам пишу специальные обработки, в которых в зависимости от различных условий контролирую правильность оформления заказа.
Тэги: 1С 8
Комментарии доступны только авторизированным пользователям
Частая задача — сделать так, чтобы форма нового объекта открывалась не «пустая», а уже заполненная некоторыми начальными данными. Для самых простых случаев можно использовать свойство ЗначениеЗаполнения
, которое есть у реквизитов объектов конфигурации. В более сложных случаях можно использовать свойство ЗаполнятьИзДанныхЗаполнения
. Если ни тот, ни другой способы не подходят, на встроенном языке можно описать собственный алгоритм начального заполнения данных нового объекта.
Свойство ЗначениеЗаполнения
Например, есть документ Накладная
с реквизитом Склад
. В подавляющем большинстве случаев товары приходуются на главный склад, и лишь в отдельных редких случаях они могут приходоваться на другие склады. Чтобы облегчить работу оператора и не заставлять его каждый раз выбирать один и тот же склад в новых накладных, можно поступить следующим образом.
У реквизитов объектов конфигурации существует свойство ЗначениеЗаполнения
. Реквизит Склад
имеет тип ссылки на справочник Склады
, а в справочнике Склады
существует предопределенный элемент ГлавныйСклад
. Тогда прямо в конфигураторе можно указать, что в новых документах реквизит Склад
будет сразу же заполнен ссылкой на ГлавныйСклад
:
Cвойство ЗаполнятьИзДанныхЗаполнения
Пусть у пользователя список накладных отобран по поставщику и по складу. Необходимо сделать так, чтобы при вводе новой накладной эти значения (поставщик и склад) сразу же подставлялись в нужные поля накладной. Для решения этой задачи достаточно открыть накладную в конфигураторе и для ее реквизитов Поставщик
и Склад
установить свойство ЗаполнятьИзДанныхЗаполнения
:
Теперь будет происходить следующее. В режиме 1С:Предприятие пользователь отобрал список накладных по некоторому поставщику и некоторому складу. При вводе новой накладной с помощью команды «Создать» списка, поля Поставщик
и Склад
будут заполнены именно теми значениями, по которым отобран список накладных:
Собственный алгоритм заполнения реквизитов
Для этого предназначено событие объекта ОбработкаЗаполнения
. Первым параметром процедуре ОбработкаЗаполнения()
передаются ДанныеЗаполнения
. Проанализировав их тип, можно определить, каким именно образом вводится новый объект, и выполнить соответствующий этому варианту алгоритм. Например:
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) Если ДанныеЗаполнения = Неопределено Тогда // «Простой» ввод нового объекта ИначеЕсли ТипЗнч(ДанныеЗаполнения) = Тип("СправочникСсылка.Поставщики") Тогда // Новый объект вводится на основании другого объекта. // В этом случае в данные заполнения передается ссылка на объект, являющийся основанием. // В данном случае обрабатывается ввод на основании элемента справочника Поставщики. ИначеЕсли ТипЗнч(ДанныеЗаполнения) = Тип("Структура") Тогда // Новый объект вводится командой из отобранного списка. // В данных заполнения будет структура, содержащая значения отбора: // «Поставщик» — СсылкаНаПоставщика // «Склад» — СсылкаНаСклад КонецЕсли; КонецПроцедуры
Параметр СтандартнаяОбработка
позволяет управлять дальнейшим развитием событий. Если ему присвоить значение Ложь
, то никаких других действий по заполнению реквизитов формы платформа предпринимать не будет, а сразу создаст форму и вызовет ее серверное событие ПриСозданииНаСервере
.
Если же не менять стандартное значение этого параметра, то после выхода из этого обработчика платформа попытается самостоятельно заполнить реквизиты объекта, подлежащие заполнению. Незаполненными она будет считать те реквизиты, которые имеют стандартное значение своего типа. Например, для типа Число
это значение 0, для типа Строка
— пустая строка, а для типа Ссылка
— пустая ссылка.
Для простоты предположим, что у объекта всего один реквизит, подлежащий заполнению. Тогда платформа будет действовать по следующему алгоритму:
- Реквизит заполнен — сразу будет вызван обработчик события
ПриСозданииНаСервере
. - Реквизит не заполнен — платформа попытается заполнить его из
ДанныеЗаполнения
. После этого снова проверит, заполнен реквизит или нет:- Реквизит заполнен — сразу будет вызван обработчик события
ПриСозданииНаСервере
. - Реквизит не заполнен — платформа попытается заполнить его из
ЗначениеЗаполнения
. После этого будет вызван обработчик событияПриСозданииНаСервере
.
- Реквизит заполнен — сразу будет вызван обработчик события
Поиск:
1С:Предприятие • Документ • Заполнять из данных заполнения • Значение заполнения • Обработка заполнения