|
КД2: Поля поиска документа 1 -> 2 | ☑ | ||
---|---|---|---|---|
0
Mikhail Volkov
19.12.21
✎
14:06
|
Выгружаю из Альфа-Авто Заказ-наряд в УПП. Организация имеет патент (раньше ЕНВД) на выполнение работ Без НДС, запчасти с НДС. Поэтому в УПП на Заказ-наряд в правилах После загрузки документа создаются две Реализации товаров и услуг: Товары с НДС (к префиксу номера добавляется "Р"), Работы Без НДС (добавляется "У"). При загрузке в УПП, если Товаров нет (например ТО), и не найден в УПП, то документ удаляется. Тут бы его GUID присвоить второму документу с Работами. Но это было сделано еще до меня, работает много лет нормально.
Проблема появилась когда стал дописывать конвертацию документов оплаты: они в Расшифровке платежа содержат Документы расчетов с контрагентом, среди них встречаются Заказ-наряды. Обычно в строке Сумма платежа ставится Сумма документа, но если она меньше, то Сумма платежа (частичная оплата). Если общая Сумма платежа больше, то добавляется строка платежа со следующим неоплаченным документом (если нет таких, то аванс). Но когда Заказ-наряд не имеет товары (1-й реализации), то в Расшифровку платежа ставится "GUID <Объект не найден>"!? Хотя сам Заказ-наряд (реализация с работами) в УПП записывается/обновляется. Пробовал в ПКО Заказ-наряда включить Продолжить поиск по полям поиска (не только по GUID), отметил поля Номер и Дата. В ПКС Номер было: Значение = "Р" + Источник.Номер; Заменил "Р" на "У", а в ПКО После загрузки объекта пописал: Объект.Номер = "Р" + Сред(Объект.Номер, 2, СтрДлина(Объект.Номер)); т.е. обратно вернул. Но не помогло. Может что не доделал? |
|||
1
серый КТУЛХУ
19.12.21
✎
14:37
|
судя по всему надо слепить новое пко для заказ-наряда - сугубо для того чтобы использовать его потом в пкс для случая когда заказ-наряд является расчетным доком в оплате...
|
|||
2
Mikhail Volkov
19.12.21
✎
16:21
|
(1) И чем это ПКО должно отличаться от ПКО, которое есть? Только полем Номер, в ПКС которого Значение = "У" + Источник.Номер;? Или еще чем-то?
|
|||
3
Mikhail Volkov
19.12.21
✎
16:46
|
Еще вопрос: при загрузки в УПП за определенный день (за другие нормально) выдало ошибку:
Обработчик = ПослеЗагрузкиОбъекта ОписаниеОшибки = Поле объекта недоступно для записи (Ссылка) ПозицияМодуля = ОбщийМодуль.мвДоработки.Модуль(1770) КодСообщения = 21 В общем модуле УПП написал: Функция ДокументПродажиОплачен(ДокументПродажи, СуммаОплаты = 0, ДокументОплаты = Неопределено) Экспорт Запрос = Новый Запрос; // Установим параметры запроса Запрос.УстановитьПараметр("ДокументСсылка", ДокументПродажи); Запрос.Текст = " |ВЫБРАТЬ РАЗРЕШЕННЫЕ | ОплатаОтПокупателяПлатежнойКартойРасшифровкаПлатежа.Ссылка, | ОплатаОтПокупателяПлатежнойКартойРасшифровкаПлатежа.СуммаПлатежа |ИЗ | Документ.ОплатаОтПокупателяПлатежнойКартой.РасшифровкаПлатежа КАК ОплатаОтПокупателяПлатежнойКартойРасшифровкаПлатежа |ГДЕ | ОплатаОтПокупателяПлатежнойКартойРасшифровкаПлатежа.ДокументРасчетовСКонтрагентом = &ДокументСсылка | | ОБЪЕДИНИТЬ ВСЕ | |////////////////////////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ПлатежноеПоручениеВходящееРасшифровкаПлатежа.Ссылка, | ПлатежноеПоручениеВходящееРасшифровкаПлатежа.СуммаПлатежа |ИЗ | Документ.ПлатежноеПоручениеВходящее.РасшифровкаПлатежа КАК ПлатежноеПоручениеВходящееРасшифровкаПлатежа |ГДЕ | ПлатежноеПоручениеВходящееРасшифровкаПлатежа.ДокументРасчетовСКонтрагентом = &ДокументСсылка | | ОБЪЕДИНИТЬ ВСЕ | |////////////////////////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ПриходныйКассовыйОрдерРасшифровкаПлатежа.Ссылка, | ПриходныйКассовыйОрдерРасшифровкаПлатежа.СуммаПлатежа |ИЗ | Документ.ПриходныйКассовыйОрдер.РасшифровкаПлатежа КАК ПриходныйКассовыйОрдерРасшифровкаПлатежа |ГДЕ | ПриходныйКассовыйОрдерРасшифровкаПлатежа.ДокументРасчетовСКонтрагентом = &ДокументСсылка |"; ВыборкаИзЗапроса = Запрос.Выполнить().Выбрать(); СуммаОплаты = 0; Пока ВыборкаИзЗапроса.Следующий() Цикл Если ВыборкаИзЗапроса.Ссылка = ДокументОплаты Тогда Продолжить; КонецЕсли; СуммаОплаты = СуммаОплаты + ВыборкаИзЗапроса.СуммаПлатежа; КонецЦикла; Если СуммаОплаты > 0 Тогда ДокументОплаты = ВыборкаИзЗапроса.Ссылка; // ??? КонецЕсли; Если СуммаОплаты >= ДокументПродажи.СуммаДокумента Тогда СуммаОплаты = 0; КонецЕсли; Возврат СуммаОплаты >= ДокументПродажи.СуммаДокумента; КонецФункции // ДокументПродажиОплачен() Позиция модуля пометил // ??? Почему ВыборкаИзЗапроса.Ссылка "Поле объекта недоступно для записи (Ссылка)"? В него ничего не пишется. |
|||
4
acht
19.12.21
✎
17:17
|
(3) > Поле объекта недоступно для записи (Ссылка)
Потому что ДокументОплаты - параметр функции, переданный по ссылке. |
|||
5
Mikhail Volkov
19.12.21
✎
17:33
|
(3)+ Закомментировал этот фрагмент (документ оплаты не используется), и все заработало. Просто интересно, почему выдавало ошибку?
(4) Но ДокументОплаты, а не Ссылка!? ДокументОплаты это текущий заполняемый документ: ?(ОбъектНайден, Объект.Ссылка, Неопределено). Надо проверить оплачен ли ДокументПродажи, другими документами. А по завершению функции в ДокументОплаты пишется документ оплаты, если он оплачен. |
|||
6
acht
19.12.21
✎
17:39
|
(5) > А по завершению функции в ДокументОплаты пишется документ оплаты, если он оплачен.
В момент вызова функции ты передаешь туда переменную (судя по всему ссылку), которую нельзя изменять. |
|||
7
acht
19.12.21
✎
17:40
|
В результате у тебя выполнятся присвоение Объект.Ссылка = Какое-то странное значение и платформа недоумевает.
|
|||
8
Mikhail Volkov
19.12.21
✎
18:38
|
(6) Нельзя менять только если Ссылка? Если число, то можно. Например, СуммаОплаты при вызове функции 0 ставлю, а при выполнении в нее СуммаОплаты пишется. Т.е. если оплата частичная, то функция возвращает Ложь, и СуммаОплаты.
А через переменную: если ссылку на текущий документ оплаты присвою какой-то переменной, эту переменную вставлю аргументом в свою функцию. А уже в самой функции в нее писать другую ссылку ДокументОплаты. Так можно? |
|||
9
acht
19.12.21
✎
20:04
|
(8) Ну 10 лет опыта, ну ёлыпалы.
Нельзя менять только если значение только для чтения. Минимально поправить вызов примерно так: ... МойДокументОплаты = ?(ОбъектНайден, Объект.Ссылка, Неопределено); МояСуммаОплаты = 0; МойФлагОплаты = ОбщийМодульУПП.ДокументПродажиОплачен(ДокументПродажи, МояСуммаОплаты, МойДокументОплаты); Если МойФлагОплаты Тогда ... Если совсем правильно, то возвращать структуру: СостояниеОплаты = ОбщийМодульУПП.СостояниеОплатыДокументаПродажи(ДокументПродажи); Если СостояниеОплаты.Оплачено Тогда Сообщить(СтрШаблон("Оплачено документом %1 на сумму %2", СостояниеОплаты.ДокументОплаты, СостояниеОплаты.СуммаОплаты)); ... |
|||
10
Mikhail Volkov
20.12.21
✎
07:09
|
(9) Ага, можно менять (если понадобится) только через переменную, учту на будущее... Через структуру не очень удобно.
Вернемся к вопросу темы (0). |
|||
11
Mikhail Volkov
20.12.21
✎
10:13
|
Итак в ПКО РеализацияТоваров_ЗаказНаряд включить Продолжить поиск по полям поиска (не только по GUID), поля Номер и Дата отмечены для поиска (в ПКС Номера ничего не менял). На вкладке Поля поиска написал:
// Если Заказ-наряд не имеет Товары, то ищем реализацию Работы Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ | РеализацияТоваровУслуг.Ссылка |ИЗ | Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг |ГДЕ | РеализацияТоваровУслуг.Дата МЕЖДУ &НачДата И &КонДата | И РеализацияТоваровУслуг.Организация = &Организация | И РеализацияТоваровУслуг.Контрагент = &Контрагент //| И РеализацияТоваровУслуг.СуммаДокумента = &СуммаДокумента |"; Запрос.УстановитьПараметр("НачДата", НачалоДня(СвойстваПоиска.Получить("Дата"))); Запрос.УстановитьПараметр("КонДата", КонецДня(СвойстваПоиска.Получить("Дата"))); Запрос.УстановитьПараметр("Организация", СвойстваПоиска.Получить("Организация")); Запрос.УстановитьПараметр("Контрагент", СвойстваПоиска.Получить("Контрагент")); //Запрос.УстановитьПараметр("СуммаДокумента", СвойстваПоиска.Получить("СуммаДокумента")); Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда СсылкаНаОбъект = Выборка.Ссылка; Сообщить("Найдена реализация Работы по Заказ-наряд: " + СокрЛП(СсылкаНаОбъект)); Иначе Сообщить("Не найдена реализация Работы по Заказ-наряд с датой: " + СвойстваПоиска.Получить("Дата") + " Контрагент: " + СвойстваПоиска.Получить("Контрагент") + " Организация: " + СвойстваПоиска.Получить("Организация"), СтатусСообщения.Внимание); СтрокаИменСвойствПоиска = "Номер, Дата"; КонецЕсли; Т.е. при загрузке в любом случае: найдена СсылкаНаОбъект или нет должно что-то писаться. А ничего не пишет!? |
|||
12
Mikhail Volkov
20.12.21
✎
14:30
|
А вставил в ПКО СтрокаВыпискиПлатежноеПоручениеВходящее (которое сейчас отлаживаю) на вкладку Поля поиска: Сообщить("Поля поиска п/п входящее", СтатусСообщения.Внимание); и каждый раз когда загружаю в УПП - вижу его. Смотрю чем отличаются в настройках Загрузка данных: ни одной галочки, кроме Автоматически генерировать номер или код, если он не задан.
Снял галочку в ПКО РеализацияТоваров_ЗаказНаряд Искать объект приемника по GUID, галочка Продолжить поиск по полям поиска снялась сама. И при загрузки Заказ-наряда появились сообщения: Поля поиска Заказ-наряд, и Найдена реализация Работы по Заказ-наряд: Реализация товаров и услуг... Но при этом: Ошибка при вызове метода контекста (Записать): Операция не может быть выполнена из-за несоответствия версии или отсутствия записи базы данных (возможно, запись была изменена или удалена)! - не стал разбираться, но сам факт, что при установки галочек: Искать объект приемника по GUID, Продолжить поиск по полям поиска Поля поиска не работают!? Или можно как-то настроить чтобы работали при включенном Искать объект приемника по GUID? |
|||
13
Mikhail Volkov
20.12.21
✎
15:08
|
Странно, в https://infostart.ru/1c/articles/978498/ приведен пример, в котором установлены галочки: Искать объект приемника по GUID, Продолжить поиск по полям поиска, и что-то прописано в Полях поиска. Наверное Поля поиска работают...
|
|||
14
Mikhail Volkov
20.12.21
✎
18:30
|
А нет, находит документы расчетов по GUID, потому и не ищет по полям поиска. Но почему тогда в Расшифровку платежа документа оплаты ставит "GUID <Объект не найден>" вместо самого документа? И это происходит именно с реализациями, полученных от заказ-нарядов без товаров.
|
|||
15
Mikhail Volkov
21.12.21
✎
12:15
|
В правилах Конвертация свойств для моего документа оплаты в РасшифровкаПлатежа в ПКС ДокументРасчетовСКонтрагентом прописано:
Если ЗначениеЗаполнено(Источник.Сделка) И Источник.Сделка.Контрагент = Источник.Контрагент Тогда Значение = Источник.Сделка; Если ТипЗнч(Источник.Сделка) = Тип("ДокументСсылка.РеализацияТоваров") Тогда ИмяПКО = "РеализацияТоваров"; ИначеЕсли ТипЗнч(Источник.Сделка) = Тип("ДокументСсылка.ЗаказНаряд") Тогда ИмяПКО = "РеализацияТоваров_ЗаказНаряд"; ИначеЕсли ТипЗнч(Источник.Сделка) = Тип("ДокументСсылка.ВозвратОтПокупателя") Тогда ИмяПКО = "ВозвратОтПокупателя"; ИначеЕсли ТипЗнч(Источник.Сделка) = Тип("ДокументСсылка.ВозвратПоставщику") Тогда ИмяПКО = "ВозвратПоставщику"; ИначеЕсли ТипЗнч(Источник.Сделка) = Тип("ДокументСсылка.АктРазногласий") Тогда ИмяПКО = "АктРазногласий"; Иначе Отказ = Истина; КонецЕсли; Иначе Отказ = Истина; КонецЕсли; В моем случае далее идет в ПКО "РеализацияТоваров_ЗаказНаряд", и обычно возвращает от туда ссылку на документ реализации с товарами. А если товаров в заказ-наряде нет, только работы, в ПКО прописано ОтказЗаписиОбъекта = Истина; Сам документ не записывается, но создается или обновляется ДокЕНВД - документ реализации с работами (услуги) без НДС. Как сделать, чтобы в этом случае ПКО возвращало ссылку этого ДокЕНВД? Может достаточно сменить его GUID: Объект.УникальныйИдентификатор() = ДокЕНВД.УникальныйИдентификатор();? |
|||
16
Mikhail Volkov
21.12.21
✎
14:35
|
Нет, Ошибка при вызове метода контекста (УстановитьСсылкуНового): Ссылку можно устанавливать только для нового объекта.
Как быть, чтобы в этом случае ПКО возвращало ссылку этого ДокЕНВД? |
|||
17
Mikhail Volkov
21.12.21
✎
17:51
|
Ладно, отложим вопрос по возвращаемой ссылки ПКО.
Еще вопрос по полям поиска: в процессе тестирования ПКО СтрокаВыпискиПлатежноеПоручениеВходящее в одной строке выписки неправильно указан Номер п/п. На вкладке ПКО написано: Если ПустаяСтрока(СвойстваПоиска["Номер"]) Тогда // СтрокаИменСвойствПоиска = "Организация, Контрагент, СуммаДокумента"; //+МВ еще бы Дата без времени Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ | ПлатежноеПоручениеВходящее.Ссылка |ИЗ | Документ.ПлатежноеПоручениеВходящее КАК ПлатежноеПоручениеВходящее |ГДЕ | ПлатежноеПоручениеВходящее.Дата МЕЖДУ &НачДата И &КонДата | И ПлатежноеПоручениеВходящее.Организация = &Организация | И ПлатежноеПоручениеВходящее.Контрагент = &Контрагент | И ПлатежноеПоручениеВходящее.СуммаДокумента = &СуммаДокумента"; Запрос.УстановитьПараметр("НачДата", НачалоДня(СвойстваПоиска.Получить("Дата"))); Запрос.УстановитьПараметр("КонДата", КонецДня(СвойстваПоиска.Получить("Дата"))); Запрос.УстановитьПараметр("Организация", СвойстваПоиска.Получить("Организация")); Запрос.УстановитьПараметр("Контрагент", СвойстваПоиска.Получить("Контрагент")); Запрос.УстановитьПараметр("СуммаДокумента", СвойстваПоиска.Получить("СуммаДокумента")); Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда СсылкаНаОбъект = Выборка.Ссылка; КонецЕсли; Иначе СтрокаИменСвойствПоиска = "Номер, Дата, Организация, Контрагент, СуммаДокумента"; КонецЕсли; Поля: Номер, Дата, Организация, Контрагент, СуммаДокумента отмечены как поля поиска. Решил поверить этот алгоритм, удалил неверный номер. К моему удивлению документ не был найден в УПП, создан новый!? Удалил из СтрокаИменСвойствПоиска Организация, Контрагент, СуммаДокумента, оставил только Номер, Дата, тогда нашел. Почему так? |
|||
18
Mikhail Volkov
21.12.21
✎
17:54
|
+ На вкладке ПКО Поля поиска
|
|||
19
Mikhail Volkov
22.12.21
✎
08:59
|
Закомментировал строку: СтрокаИменСвойствПоиска = "Номер, Дата"; вроде она не нужна, если Номер заполнен. Стали создаваться новые документы оплаты!? Почему не находит те, которые есть в УПП?
|
|||
20
Mikhail Volkov
23.12.21
✎
07:56
|
+ Выходит для документа, если нужен свой вариант полей поиска (например, Номер не заполнен), то пишешь его, но при этом обязательно должна быть строка: СтрокаИменСвойствПоиска = "Номер, Дата"; на стандартный случай (когда свой вариант не нужен)? И только "Номер, Дата", остальных отмеченных полей поиска не должно в ней быть?
|
|||
21
Йохохо
23.12.21
✎
08:37
|
(20) потому что у нумерации дока периодичность год? жжоте
|
|||
22
Mikhail Volkov
23.12.21
✎
08:58
|
(21) Т.е. Дата в СтрокаИменСвойствПоиска не конкретная Дата, а для указания периода поиска номера?
Тогда в (17) вместо запроса на поиск СсылкаНаОбъект просто указать: СтрокаИменСвойствПоиска = "Организация, Контрагент, СуммаДокумента, Дата";? |
|||
23
Mikhail Volkov
23.12.21
✎
15:42
|
Смотрю v8: Поиск в конвертации по Дате без времени и v8: Конвертация данных. Поиск объектов, задание условия. там в Полях поиска используют НомерВариантаПоиска. Где он задается/определяется?
|
|||
24
Mikhail Volkov
24.12.21
✎
08:25
|
Похоже НомерВариантаПоиска не где не задается, просто если на вкладке Поля поиска указываются различные НомерВариантаПоиска, то все эти варианты используются, пока не найдет. Ну, почему в (17) со СтрокаИменСвойствПоиска = "Номер, Дата, Организация, Контрагент, СуммаДокумента"; не работает - не знаю, но если Номер (в периоде Дата) известен, то поля: Организация, Контрагент, СуммаДокумента лишние.
А возвращаясь в вопросу (16), думаю, что никак: в ПКО ПослеЗагрузкиОбъекта даже, если документ не найден, и не имеет GUID, все равно ему присваивается GUID источника. Единственное, что сделал, это при создании нового ДокЕНВД (когда в заказ-наряде нет товара, только работы) присваиваю ему GUID источника: ДокЕНВД.УстановитьСсылкуНового(Документы.РеализацияТоваровУслуг.ПолучитьСсылку(Новый УникальныйИдентификатор(XMLСтрока(Объект.ПолучитьСсылкуНового())))); но это решает проблему только для новых документов. |
|||
25
hhhh
24.12.21
✎
10:56
|
(24) чисто физически ведь невозможно, чтобы у двух документов был один GUID, поэтому поиск по GUID надо отключить, снять галку Поиск по уникальному идентификатору в документе Реализация. Поиск только по номеру и дате.
|
|||
26
Ёпрст
24.12.21
✎
11:09
|
(24) если че, гуид в правилах можно подменять на свой, если очень нннадо. Далается это в подмене узла xml
|
|||
27
Mikhail Volkov
24.12.21
✎
16:20
|
(25) Если у заказ-наряда нет товара, только работы, то объект не записывается - 1-я реализация с товарами, а записывается только 2-я реализация ДокЕНВД с работами, при этом GUID поставляется заказ-наряда. Как-что дублирования GUID нет. Но это решает мою проблему для новых документов.
(26) Это как? Можно вернуть ссылку не с GUID источника, а с GUID ДокЕНВД (с работами)? |
|||
28
Mikhail Volkov
25.12.21
✎
12:28
|
А нет, прекрасно меняется на ссылку с GUID ДокЕНВД (с работами). Ошибку (16) пишет когда ОбъектНайден, при новом методе записи ДокЕНВД, поторопился. Ну, вроде решил проблему...
|
|||
29
zak555
25.12.21
✎
13:15
|
Не бывает у организаций патентов.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |