|
Программно добавить строку в ТЧ документа | ☑ | ||
---|---|---|---|---|
0
amadeus2010
01.09.12
✎
08:27
|
Доброе утро,вот и осень наступила,но вопросы остаются.У меня к уважаемым знатокам вопрос.Есть документ с реквизитом Агент и ТЧ в которую заполняются торговые точки Выбранного агента.Список точек хранится в справочнике.Теперь надо сделать так чтобы при заполнении торг точек была проверка, что если торг точка принадлежит агенту но ее нет в документе тогда добавить ее из справочника.Вот старый код заполнения ТЧ торговые точки
///////////////////////////////////////////////////////////////// Выборка = Справочники.кпкТорговыеТочки.Выбрать(, , Новый Структура("Агент", Агент)); КонецЕсли; Пока Выборка.Следующий() Цикл Если Выборка.ПометкаУдаления Тогда Продолжить КонецЕсли; Стр = Дни.Добавить(); Стр.ТорговаяТочка = Выборка.Ссылка; Стр.Контрагент = Выборка.Ссылка.Владелец; КонецЦикла; // удаление торговых точек не принадлежащих Агенту i=0; Пока i<=Дни.Количество()-1 Цикл Если Дни[i].ТорговаяТочка.Агент<>Агент Тогда Дни.Удалить(i); Иначе i=i+1; КонецЕсли; КонецЦикла; ////////////////////////////////////////////////////////// |
|||
1
Мимохожий Однако
01.09.12
✎
08:33
|
А теперь вопрос...
|
|||
2
Megas
01.09.12
✎
08:33
|
3 способа.
1) Выгрузить Тч в Тз , поместить тз в запрос для отбора. 2) Метод "Найти". 3) Метод "Свернуть". |
|||
3
Megas
01.09.12
✎
08:35
|
(0) и ещё жутко не люблю такие выборки.
"Выборка = Справочники.кпкТорговыеТочки.Выбрать(, , Новый Структура("Агент", Агент));" Я так и не понял для чeго их сделали если всё можно сделать через "Запрос" |
|||
4
amadeus2010
01.09.12
✎
08:52
|
документ был создан до меня я его только переделываю,согласен запросом удобнее,например таким
///////////////////////////////////// ВЫБРАТЬ кпкТорговыеТочки.Ссылка как TT ИЗ Справочник.кпкТорговыеТочки КАК кпкТорговыеТочки ГДЕ кпкТорговыеТочки.Агент = &Агент ///////////////////////////////////////// только как потом сделать проверку что есть или нет такой точки и если нет то добавить |
|||
5
amadeus2010
01.09.12
✎
09:10
|
написал вот так
////////////////////////// Запрос= Новый Запрос Запрос.Текст= "ВЫБРАТЬ |кпкТорговыеТочки.Ссылка как TT |ИЗ |Справочник.кпкТорговыеТочки КАК кпкТорговыеТочки |ГДЕ |кпкТорговыеТочки.Агент = &Агент"; Запрос.УстановитьПараметр("Агент", Агент); Выборка=Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Строка=Дни.Добавить(); Строка.ТорговаяТочка=Выборка.ТТ; КонецЦикла; /////////////////////////////////////////////////////////// этот код и удаление точек из (0) висит на одной кнопке Обновить. Как сделать так чтобы 2 кода не затерли друг друга |
|||
6
Мимохожий Однако
01.09.12
✎
09:24
|
Если заполнить тем, что надо, то не придется удалять потом ))
|
|||
7
amadeus2010
01.09.12
✎
09:32
|
трассировка выдала ошибку
Поле объекта не обнаружено (ТТ) Строка.ТорговаяТочка=Выборка.ТТ; |
|||
8
Живой Ископаемый
01.09.12
✎
09:37
|
нашел чем хвастаться
|
|||
9
amadeus2010
01.09.12
✎
09:38
|
я не хвастаюсь, прошу помощи
|
|||
10
Живой Ископаемый
01.09.12
✎
09:39
|
а чем помочь?
|
|||
11
amadeus2010
01.09.12
✎
09:48
|
не понятна ошибка (7), нет я понял что это не обнаружено, но вот как сделать чтобы не выходила эта ошибка? Привожу полный код процедуры
///////////////////////////////////////////////////////////// //Дима+ удаление торговых точек не принадлежащих Агенту i=0; Пока i<=Дни.Количество()-1 Цикл Если Дни[i].ТорговаяТочка.Агент<>Агент Тогда Дни.Удалить(i); Иначе i=i+1; КонецЕсли; КонецЦикла; //Дима- Запрос= Новый Запрос; Запрос.Текст= "ВЫБРАТЬ |кпкТорговыеТочки.Ссылка как TT |ИЗ |Справочник.кпкТорговыеТочки КАК кпкТорговыеТочки |ГДЕ |кпкТорговыеТочки.Агент = &Агент"; Запрос.УстановитьПараметр("Агент", Агент); Выборка=Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Строка=Дни.Добавить(); Строка.ТорговаяТочка=Выборка.ТТ; КонецЦикла; //////////////////////////////////////////////////////////////////// |
|||
12
Живой Ископаемый
01.09.12
✎
09:49
|
всем плевать
выполни свой запрос в консоли. И покажи скриншот что результат ненулевой. |
|||
13
Rie
01.09.12
✎
09:52
|
(7) Нескромный вопрос - а буквы у тебя "Т" или "T"?
|
|||
14
Живой Ископаемый
01.09.12
✎
09:55
|
вообще точно, сорри. :) (13) прав.
|
|||
15
Wobland
01.09.12
✎
09:57
|
ещё никто не сказал, что удалять с конца надо?
|
|||
16
Wobland
01.09.12
✎
10:01
|
+(13) замени ТТ на ЧЧ
|
|||
17
amadeus2010
01.09.12
✎
10:04
|
(13) ТТ были написаны латиницей в тексте запроса, а в параметрах кирилицей.Теперь торговые точки находятся и записываются,но при этом к уже существующим.Как здесь можно использовать метод ТЧ.Очистить()?
|
|||
18
Капитан О
01.09.12
✎
10:08
|
(17) ТЧ.Очистить()
|
|||
19
Mikeware
01.09.12
✎
10:10
|
План посещений лепишь? :-)
|
|||
20
amadeus2010
01.09.12
✎
10:18
|
(19) да, их леплю.Вот сделал так,насколько это правильно?
///////////////////////////////// //Дима+ удаление торговых точек не принадлежащих Агенту i=0; Пока i<=Дни.Количество()-1 Цикл Если Дни[i].ТорговаяТочка.Агент<>Агент Тогда Дни.Удалить(i); Иначе i=i+1; КонецЕсли; КонецЦикла; //Дима- //Дима+ добавление новых торговых точек Агента Запрос= Новый Запрос; Запрос.Текст= "ВЫБРАТЬ |кпкТорговыеТочки.Ссылка как ТТ |ИЗ |Справочник.кпкТорговыеТочки КАК кпкТорговыеТочки |ГДЕ |кпкТорговыеТочки.Агент = &Агент"; Запрос.УстановитьПараметр("Агент", Агент); Выборка=Запрос.Выполнить().Выбрать(); Дни.Очистить(); Пока Выборка.Следующий()>0 Цикл Строка=Дни.Добавить(); Строка.ТорговаяТочка=Выборка.ТТ; КонецЦикла; //Дима- //////////////////////////////////// |
|||
21
Капитан О
01.09.12
✎
10:19
|
(20) найти строки с чужим агентом и удали их в цикле
|
|||
22
amadeus2010
01.09.12
✎
10:26
|
(20) первая часть кода это и делает.
(19) Проверил, выводит только торговые точки выбранного агента,но при этом обнуляет дни псещений,т.е если в документе указаны были дни посещений,то после выполнения моей процедуры они обнуляться и их придется отмечать заново.Как можно это сделать без обнуления? |
|||
23
Капитан О
01.09.12
✎
10:26
|
а вообще, при повторном отрабатывании кода добавятся лишние строки. я не понял задачу
|
|||
24
Капитан О
01.09.12
✎
10:26
|
(21) имелось в виду
М=НайтиСтроки() Для Каждого Из М ТЧ.Удалить |
|||
25
Капитан О
01.09.12
✎
10:27
|
(24) отбой, НайтиСтроки по неравенству не работает
|
|||
26
Капитан О
01.09.12
✎
10:27
|
один хрен с конца удалять в цикле нужно
|
|||
27
amadeus2010
01.09.12
✎
10:44
|
лишние строки не добавляются,только обнуляется реквизит ТЧ.дни,каким методом можно не добавляю лишних строк в документ записать все новые торговые точки агента,при этом не добавляя чужих точек? Т.е мне нужно добавить новые точки если такие есть в документ,но при этом оставить не тронутыми старые записи
|
|||
28
Капитан О
01.09.12
✎
10:56
|
(27) слева: справочник, справа: твоя ТЧ, соединение по точке, фильтр по твоему агенту и нуллу. получишь все точки агента, которых нет в ТЧ
|
|||
29
amadeus2010
01.09.12
✎
11:05
|
(28)не совсем понял, можно пример привести как это реализовать
|
|||
30
Wobland
01.09.12
✎
11:08
|
(29) выбрать что-то из справочник левое тч по справочник.точка=тч.точка где справочник.агент=&агент и тч.точка есть NULL и тч.ссылка=&ссылка
|
|||
31
amadeus2010
01.09.12
✎
12:23
|
решил вопрос таким образом
////////////////////////////////////////// Запрос= Новый Запрос; Запрос.Текст= "ВЫБРАТЬ |кпкТорговыеТочки.Ссылка как ТТ |ИЗ |Справочник.кпкТорговыеТочки КАК кпкТорговыеТочки |ГДЕ |кпкТорговыеТочки.Агент = &Агент"; Запрос.УстановитьПараметр("Агент", Агент); Выборка=Запрос.Выполнить().Выбрать(); //Дни.Очистить(); Пока Выборка.Следующий() Цикл Запрос=Новый Запрос; Запрос.Текст= "ВЫБРАТЬ |кпкПланПосещений.Дни.ТорговаяТочка.Ссылка КАК ТТ |ИЗ |Документ.кпкПланПосещений КАК кпкПланПосещений |ГДЕ |кпкПланПосещений.Дни.ТорговаяТочка.Ссылка = &ТТ"; Запрос.УстановитьПараметр("ТТ",Выборка.ТТ); Выборка2=Запрос.Выполнить(); Если Выборка2.Пустой() Тогда Строка=Дни.Добавить(); Строка.ТорговаяТочка=Выборка.ТТ; Строка.Контрагент=Выборка.ТТ.Владелец; КонецЕсли; КонецЦикла; ///////////////////////////////////////////////////// |
|||
32
Wobland
01.09.12
✎
12:35
|
(31) а что не прислушался?
|
|||
33
Wobland
01.09.12
✎
12:38
|
за запрос в цикле полагается эцих с гвоздями
|
|||
34
Wobland
01.09.12
✎
12:45
|
а почему во втором запросе выборка по всем документам?
короче, удаляй эти нечистоты и делай снова |
|||
35
amadeus2010
01.09.12
✎
13:59
|
переделал так
//////////////////////////// Запрос= Новый Запрос; Запрос.Текст= "ВЫБРАТЬ |кпкТорговыеТочки.Ссылка как ТТ |ИЗ |Справочник.кпкТорговыеТочки КАК кпкТорговыеТочки |ГДЕ |кпкТорговыеТочки.Агент = &Агент"; Запрос.УстановитьПараметр("Агент", Агент); Выборка=Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл ПараметрыОтбора = Новый Структура; ПараметрыОтбора.Вставить("ТорговаяТочка", Выборка.ТТ); ТТНайдено=Дни.НайтиСтроки(ПараметрыОтбора); Если ТТНайдено.Количество()=0 Тогда Строка=Дни.Добавить(); Строка.ТорговаяТочка=Выборка.ТТ; Строка.Контрагент=Выборка.ТТ.Владелец; КонецЕсли; КонецЦикла; //////////////////////////////////// |
|||
36
Wobland
01.09.12
✎
14:39
|
выбрать
точка, владелец, сумма(количество) из (выбрать ТЧ.Точка, ТЧ.Владелец, ТЧ.Количество ИЗ ТЧ объединить спр.Ссылка, спр.Владелец, 0 из справочник где агент=&агент) сгруппировать по точка, владелец ... ТЧ.Загрузить(Запрос.Выполнить.Выгрузить) |
|||
37
Wobland
01.09.12
✎
14:39
|
(36) неа, в таком случае теряется порядок строк в ТЧ
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |