|   |   | 
| 
 | Создание новой ТЗ или удаление строк из существующей | ☑ | ||
|---|---|---|---|---|
| 0
    
        LivingStar 20.01.15✎ 11:05 | 
        Есть одна таблица значений. Формирую другую. Потом перебором первой произвожу поиск во второй. Если строка не найдена, то её нужно перенести в новую тз, или если найдена удалить из первой. Что бы на выходе получить ТЗ где только записи которых нет во второй. Поиск во второй произвожу по одноименному полю что есть в первой. Подскажите как правильнее в этом случае все сделать? Понял что в ТЗ нет функции добавления каждой строки, нужно прописывать добавление каждого поля.
 | Функция ИсключитьОплаченныеСчета(Тз) ИсклОплСчТз = Новый ТаблицаЗначений; Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ | ПоступлениеНаРасчетныйСчетРасшифровкаПлатежа.СчетНаОплату КАК СчетНаОплату, | ПоступлениеНаРасчетныйСчетРасшифровкаПлатежа.Ссылка КАК Ссылка |ИЗ | Документ.ПоступлениеНаРасчетныйСчет.РасшифровкаПлатежа КАК ПоступлениеНаРасчетныйСчетРасшифровкаПлатежа |ГДЕ | НЕ ПоступлениеНаРасчетныйСчетРасшифровкаПлатежа.СчетНаОплату = ЗНАЧЕНИЕ(Документ.СчетНаОплатуПокупателю.ПустаяСсылка) | |УПОРЯДОЧИТЬ ПО | Ссылка"; ТзОплСч = Запрос.Выполнить().Выгрузить(); Для Каждого СтрТз Из Тз Цикл ОплСч = ТзОплСч.Найти(СтрТз.СчетСсылка, "СчетНаОплату"); Если ОплСч = Неопределено Тогда ИсклОплСчТз.Добавить(); КонецЕсли; КонецЦикла; Возврат ИсклОплСчТз; КонецФункции | | |||
| 1
    
        Ненавижу 1С гуру 20.01.15✎ 11:07 | 
        есть ЗаполнитьЗначенияСвойств     | |||
| 2
    
        DCKiller 20.01.15✎ 11:07 | 
        Запросом внутреннее соединение сделать - не?     | |||
| 3
    
        Peltzer 20.01.15✎ 11:08 | 
        (2) Только не внутреннее, а полное.     | |||
| 4
    
        DCKiller 20.01.15✎ 11:12 | 
        (3) нет, лучше левое с условием ГДЕ... ЕСТЬ NULL     | |||
| 5
    
        LivingStar 20.01.15✎ 11:12 | 
        (2)(3) Как запросом. подскажете? То есть есть одна тз передается в функцию, делаю запрос и выгружаю в ещё одну Тз. Из за неудобной структуры данных, запросом понял что не получится. Второй запрос что получает вторую ТЗ никак не связан с первым. Там отбор по одному документу в котором может не быть Счета. А в первом запросе отбор другого документа где должен быть счет. То есть по счету никак не связать эти 2 запроса.     | |||
| 6
    
        LivingStar 20.01.15✎ 11:13 | 
        (4) Ну и как первый запрос будет связан со вторым???? Так как он может быть только и связан по этому полю которое вы предлагаете задать в NULL.     | |||
| 7
    
        XLife 20.01.15✎ 11:14 | 
        (5) понос...     | |||
| 8
    
        palpetrovich 20.01.15✎ 11:17 | 
        (6) тебе там предложили загрузить твои ТЗ в ВТ и уже их соединять в запросе
 но, судя по (5) есть подозрение что, скорее всего, надо делать все запросом изначально | |||
| 9
    
        LivingStar 20.01.15✎ 11:18 | 
        не сделать запросом на сколько я понял вообще
 эти запросы не связанны!!! Не правильная структура | |||
| 10
    
        yukon 20.01.15✎ 11:20 | 
        Функция ИсключитьОплаченныеСчета(Тз)
 Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЗНАЧЕНИЕ(Документ.СчетНаОплатуПокупателю.ПустаяСсылка) КАК СчетСсылка |ПОМЕСТИТЬ Тз | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | Тз.СчетСсылка |ИЗ | &Тз КАК Тз |; | |ВЫБРАТЬ | ПоступлениеНаРасчетныйСчетРасшифровкаПлатежа.СчетНаОплату КАК СчетНаОплату, | ПоступлениеНаРасчетныйСчетРасшифровкаПлатежа.Ссылка КАК Ссылка |ИЗ | Документ.ПоступлениеНаРасчетныйСчет.РасшифровкаПлатежа КАК ПоступлениеНаРасчетныйСчетРасшифровкаПлатежа |ГДЕ | НЕ ПоступлениеНаРасчетныйСчетРасшифровкаПлатежа.СчетНаОплату В (ВЫБРАТЬ РАЗЛИЧНЫЕ СчетСсылка из Тз)"; Запрос.УстановитьПараметр("Тз",Тз); Возврат Запрос.Выполнить().Выгрузить(); КонецФункции | |||
| 11
    
        yukon 20.01.15✎ 11:23 | 
        + (10) Надо пересматривать твой подход к названиям переменных, черт ногу сломит в ОплСч, ТзОплСч, СтрТз. Ресурс клавиатуры бережешь?     | |||
| 12
    
        palpetrovich 20.01.15✎ 11:25 | 
        (10) хрень какая-то :)     | |||
| 13
    
        LivingStar 20.01.15✎ 11:32 | 
        (1) Как работают эти заполнить значения свойств? Я попробовал но в таблицу ничего не занеслось, нужно обязательно типизировать колонки?
 | Функция ИсключитьОплаченныеСчета(Тз) ИсклОплСчТз = Новый ТаблицаЗначений; ИсклОплСчТз.Колонки.Добавить("ЗаказСсылка"); ИсклОплСчТз.Колонки.Добавить("ЗаказОрганизация"); ИсклОплСчТз.Колонки.Добавить("ЗаказНомер"); ИсклОплСчТз.Колонки.Добавить("СчетСсылка"); ИсклОплСчТз.Колонки.Добавить("СчетДата"); ИсклОплСчТз.Колонки.Добавить("СчетНомер"); ИсклОплСчТз.Колонки.Добавить("ЗаказИсполнитель"); ИсклОплСчТз.Колонки.Добавить("ЗаказИсполнительИНН"); ИсклОплСчТз.Колонки.Добавить("ЗаказДатаВремяПодачиТранспорта"); ИсклОплСчТз.Колонки.Добавить("НомерВидаРасхода"); ИсклОплСчТз.Колонки.Добавить("ОстатокКОплате"); ИсклОплСчТз.Колонки.Добавить("ОдобреноРанее"); ИсклОплСчТз.Колонки.Добавить("ОдобрениеВТекущемФП"); ИсклОплСчТз.Колонки.Добавить("Примечание"); ИсклОплСчТз.Колонки.Добавить("Просрочен"); ИсклОплСчТз.Колонки.Добавить("ЮрЛицо"); ИсклОплСчТз.Колонки.Добавить("ЮрЛицоИНН"); ИсклОплСчТз.Колонки.Добавить("ЗаказСуммаИсполнитель"); Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ | ПоступлениеНаРасчетныйСчетРасшифровкаПлатежа.СчетНаОплату КАК СчетНаОплату, | ПоступлениеНаРасчетныйСчетРасшифровкаПлатежа.Ссылка КАК Ссылка |ИЗ | Документ.ПоступлениеНаРасчетныйСчет.РасшифровкаПлатежа КАК ПоступлениеНаРасчетныйСчетРасшифровкаПлатежа |ГДЕ | НЕ ПоступлениеНаРасчетныйСчетРасшифровкаПлатежа.СчетНаОплату = ЗНАЧЕНИЕ(Документ.СчетНаОплатуПокупателю.ПустаяСсылка) | |УПОРЯДОЧИТЬ ПО | Ссылка"; ТзОплСч = Запрос.Выполнить().Выгрузить(); Для Каждого СтрТз Из Тз Цикл ОплСч = ТзОплСч.Найти(СтрТз.СчетСсылка, "СчетНаОплату"); Если ОплСч = Неопределено Тогда ЗаполнитьЗначенияСвойств(ИсклОплСчТз,СтрТз); КонецЕсли; КонецЦикла; Возврат ИсклОплСчТз; КонецФункции | |||
| 14
    
        LivingStar 20.01.15✎ 11:33 | 
        (10) что то ухитренное, возможно и сработающее, но нужно доделывать, пока не понимаю как     | |||
| 15
    
        Fish гуру 20.01.15✎ 11:34 | 
        (13) Это надо СП читать:
 "Глобальный контекст (Global context) ЗаполнитьЗначенияСвойств (FillPropertyValues) Синтаксис: ЗаполнитьЗначенияСвойств(<Приемник>, <Источник>, <СписокСвойств>, <ИсключаяСвойства>) Параметры: <Приемник> (обязательный) Тип: Произвольный. Значение, чьи свойства будут заполнены значениями соответствующих свойств <Источника>. <Источник> (обязательный) Тип: Произвольный. Значения свойств данного объекта будут установлены в соответствующие свойства <Приемника>. <СписокСвойств> (необязательный) Тип: Строка. Список имен свойств, разделенный запятыми, которые необходимо заполнить. Если свойства не указаны, то копируются только те, которые представлены и в <Источнике> и в <Приемнике>. Если свойства указаны, то они обязательно должны присутствовать в обоих объектах. Если в <Источнике> или <Приемнике> заданное свойство отсутствует, то будет вызвано исключение. <ИсключаяСвойства> (необязательный) Тип: Строка. Список имен свойств, разделенный запятыми, которые необходимо исключить из заполнения. Описание: Копирует значения свойств <Источника> в свойства <Приемника>. Сопоставление производится по именам свойств. Если указаны копируемые свойства, то в заполнении участвуют только они, параметр <ИсключаяСвойства> игнорируется. В противном случае, если указан параметр <ИсключаяСвойства>, то свойства перечисленные в нем, исключаются из обработки. Доступность: Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение. " | |||
| 16
    
        LivingStar 20.01.15✎ 11:36 | 
        (10) дело в том что из второго запроса нужно выбрать строки по идее которых там нет! Идет выборка по платежным поручениям, которых нет у счета. Говорю запросом не выйдет. Во тором запросе счета по которым нет платежных поручений, соответственно и запросы быть не может, так как нет связи. Не правильная структура данных. Приходится обходить её, не совсем верными методами.     | |||
| 17
    
        LivingStar 20.01.15✎ 11:38 | 
        (15) я просто делаю копирование в новую таблицу строку, хочу так в цикле собрать строки, но не копирует, нужно тип задавать колонок обязательно?     | |||
| 18
    
        Fish гуру 20.01.15✎ 11:42 | 
        (17) Емнип, необязательно. Только зачем ты во второй таблице колонки руками создаёшь? Для этого же есть метод СкопироватьКолонки()     | |||
| 19
    
        vicof 20.01.15✎ 11:43 | 
        (17) Клювом не щелкай, 
 "Если ОплСч = Неопределено Тогда ЗаполнитьЗначенияСвойств(ИсклОплСчТз,СтрТз); КонецЕсли;" ИсклОплСчТз - это у тебя таблица значений, а не строка таблицы. | |||
| 20
    
        Drac0 20.01.15✎ 11:43 | 
        "Идет выборка по платежным поручениям, которых нет у счета." 
 В чем проблема такой выборки запроса? "Во тором запросе счета по которым нет платежных поручений, соответственно и запросы быть не может, так как нет связи." В чем проблема такой выборки запроса? Ты про NULL слышал? | |||
| 21
    
        LivingStar 20.01.15✎ 12:01 | 
        (20) во втором запросе выборка NULL у которого есть счет? Такого не пойму     | |||
| 22
    
        LivingStar 20.01.15✎ 12:02 | 
        (20) null можно выбирать у чего то, а не NULL с чем то     | |||
| 23
    
        LivingStar 20.01.15✎ 12:04 | 
        (19) и как в этом случае???? добавить строку у ИсклОплСчТз а ей переносить значения строк?     | |||
| 24
    
        vicof 20.01.15✎ 12:04 | 
        (22) надо запомнить)))     | |||
| 25
    
        vicof 20.01.15✎ 12:04 | 
        (23) Ты гений)))     | |||
| 26
    
        yukon 20.01.15✎ 12:07 | 
        (16) И в чем проблема-то?
 Ты вот лучше посмотри, что у тебя в запросе из (0) делается - выбираются ВСЕ документы из базы с заполненным реквизитом СчетНаОплату. Такая реализация гарантированно ведет к деградации производительности. Подумай какие условия дополнительно (из Тз к примеру) ты можешь добавить в запрос. Возможно это поможет решить твою задачу оптимальным образом. | |||
| 27
    
        LivingStar 20.01.15✎ 12:10 | 
        (25) спасибо!
 ТзОплСч = Запрос.Выполнить().Выгрузить(); Для Каждого СтрТз Из Тз Цикл ОплСч = ТзОплСч.Найти(СтрТз.СчетСсылка, "СчетНаОплату"); Если ОплСч = Неопределено Тогда НоваяСтр = ИсклОплСчТз.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтр,СтрТз); КонецЕсли; КонецЦикла; Возврат ИсклОплСчТз; КонецФункции | |||
| 28
    
        LivingStar 20.01.15✎ 12:12 | 
        (26) согласен стоит подумать     | |||
| 29
    
        Ненавижу 1С гуру 20.01.15✎ 12:12 | 
        (22) считаю гениально     | |||
| 30
    
        Drac0 20.01.15✎ 12:35 | 
        (29) Я над этой фразой уже 10 минут медитирую. Думаю, скоро постигну дзен.     | |||
| 31
    
        vicof 20.01.15✎ 12:39 | 
        (29) Кличко-стайл     | |||
| 32
    
        DrZombi гуру 20.01.15✎ 12:43 | 
        (13) А кто будет Строку в ТЗ дописывать?     | |||
| 33
    
        LivingStar 20.01.15✎ 12:45 | 
        (32) в (27)     | |||
| 34
    
        Бертыш 20.01.15✎ 12:49 | 
        (22) Это у Вас что то с чем то получилось     | |||
| 35
    
        LivingStar 20.01.15✎ 12:51 | 
        (34) это как я понимаю структуру данный, завороченная она     | |||
| 36
    
        Бертыш 20.01.15✎ 12:53 | 
        (35) А я тупой одинэсник. Я ничего не понимаю. Просто тупо пишу работающий код.     | |||
| 37
    
        Drac0 20.01.15✎ 13:00 | 
        (36) Ты, похоже, не имеешь представления о том, кто такой топикстартер? :) Знаменитый кадр на мисте )))     | |||
| 38
    
        LivingStar 20.01.15✎ 13:11 | 
        (36) Надо было быстро сделать то что просили. Подстроиться построиться под имеющуюся структуру. А так нужно день посвятить её анализу, начертить блок схему. Что имеется, и как это должно было бы было правильно. На следующие дни править, писать обработки для перенося данных. И ещё возможно много чего. Пока вот так на данный момент.     | |||
| 39
    
        Drac0 20.01.15✎ 13:12 | 
        (38) Надо было просто за 10 минут написать корректный запрос. Просто ты этого не умеешь.     | |||
| 40
    
        LivingStar 20.01.15✎ 13:15 | 
        (39) возможно, но я буду учиться     | |||
| 41
    
        Drac0 20.01.15✎ 13:18 | 
        (40) Не, не будешь. 10 лет на форуме, а вопросы как у новичка. Причем повторяются порой :)     | |||
| 42
    
        LivingStar 20.01.15✎ 20:20 | 
        (41) Буду!
 В задаче в (0) есть Док1, у него есть ссылка на Док2 Док2 является ссылкой в Док3, но Док3 никак не связан с Док1 Нужно выбрать Док1 соответственно и Док2, где Док2 отсутствует в Док3 я думал это не возможно, но если можно хочу узнать как, пока не понял вижу что | |||
| 43
    
        LivingStar 20.01.15✎ 20:30 | 
        (42+) и сам Док2 никак не связан с Док3, он просто является ссылкой в Док3     | |||
| 45
    
        XLife 20.01.15✎ 20:46 | 
        (42) есть Док1, у него есть ссылка на Док2. Док2 является ссылкой в Док3, но Док3 никак не связан с Док1
 закусывай... | |||
| 46
    
        LivingStar 21.01.15✎ 07:36 | 
        (45) ну по Док2 связан да, все равно не доходит, надо подумать ещё     | |||
| 47
    
        LivingStar 21.01.15✎ 07:37 | 
        (45) ну намекните что за выборка в таком случае? пока голова загружена другими задачами     | |||
| 48
    
        Бертыш 21.01.15✎ 14:52 | 
        (38) 80 процентов моей работы на работе это анализ, процентов 5 кодирование, 15 процентов административные вопросы
 (40) Вот зачем Вам учиться? Выучитесь и будете решать задачи быстрее недоученных, зарабатывая меньше чем они. Оплата то у нас почасовая. | |||
| 49
    
        Drac0 21.01.15✎ 15:18 | 
        (47) Я тебе уже про NULL намекал.     | |||
| 50
    
        palpetrovich 21.01.15✎ 18:14 | 
        Если я правильно понял и есть Док1.Док2 и Док3.Док2, то можно примерно так:
 ВЫБРАТЬ Док1.Ссылка, Док1.Док2 ИЗ Документ.Док1 КАК Док1 ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.Док3 КАК Док3 ПО (НЕ Док1.Док2 В (ВЫБРАТЬ Док3.Док2 ИЗ Документ.Док3 КАК Док3 ГДЕ НЕ Док3.Док2 = ЗНАЧЕНИЕ(Документ.Док2.ПустаяСсылка))) СГРУППИРОВАТЬ ПО Док1.Ссылка, Док1.Док2 зы: на оптимальность не претендую, но работать будет :) | |||
| 51
    
        LivingStar 22.01.15✎ 11:51 | 
        (50) Спасибо! Нужно будет попробовать!!! Что то сильно закручено!!!
 Пока не совсем понял конечно. (48) Почасовая на словах. На деле же по факту. И я в таких местах давно не работаю. Только Фиксированный оклад! | |||
| 52
    
        LivingStar 22.01.15✎ 11:52 | 
        (51+) Почасовая если, то оцениваться она может в 3 часа, а выполняться день.     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |