Имя: Пароль:
1C
1С v8
Как выбрать одинаковые записи с двух регистров?
0 Miss1C
 
06.09.12
10:19
Как выбрать одинаковые записи с двух регистров, за определенную дату?
Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ
   |    Продажи.Номенклатура,
   |    Продажи.ХарактеристикаНоменклатуры,
   |    Продажи.ЗаказПокупателя,
   |    Продажи.Подразделение,
   |    Продажи.Проект,
   |    Продажи.Стоимость,
   |    СУММА(Продажи.Количество) КАК Количество
   |ИЗ
   |    РегистрНакопления.Продажи КАК Продажи
   |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПродажиСебестоимость КАК ПродажиСебестоимость
   |        ПО Продажи.Регистратор = ПродажиСебестоимость.Регистратор
   |            И Продажи.Номенклатура = ПродажиСебестоимость.Номенклатура
   |            И Продажи.ХарактеристикаНоменклатуры = ПродажиСебестоимость.ХарактеристикаНоменклатуры
   |            И Продажи.ЗаказПокупателя = ПродажиСебестоимость.ЗаказПокупателя
   |            И Продажи.Подразделение = ПродажиСебестоимость.Подразделение
   |            И Продажи.Проект = ПродажиСебестоимость.Проект
   |ГДЕ
   |    Продажи.Период МЕЖДУ &ДатаНач И &ДатаКон
   |
   |СГРУППИРОВАТЬ ПО
   |    Продажи.Проект,
   |    Продажи.Подразделение,
   |    Продажи.ЗаказПокупателя,
   |    Продажи.ХарактеристикаНоменклатуры,
   |    Продажи.Номенклатура,
   |    Продажи.Стоимость";

Подскажите где ошибки.
1 Fragster
 
гуру
06.09.12
10:22
оно не выбирает "одинаковые записи"
2 Miss1C
 
06.09.12
10:23
(1)А как выбрать?
3 DrShad
 
06.09.12
10:23
ты смотри-ка, фотку выложила
(0) везде ошибки
4 ssh2006
 
06.09.12
10:23
Отчет по валовой делаешь? Используй виртуальные таблицы оборотов и период задавай в параметрах
5 Maxus43
 
06.09.12
10:24
что надо конкретно то? зачем выбирать одинаковые записи?
6 DrShad
 
06.09.12
10:24
(2) все зависит от того что ты с ними потом делать будешь
7 Miss1C
 
06.09.12
10:24
Создавать менеджер записи, выгружать в ТЗ и методом найти строки сравнивать?
8 mehmat
 
06.09.12
10:24
как с такими ногтями код писать?
9 DrShad
 
06.09.12
10:25
(7) стоп а менеджер записи для чего!?
10 k1us181b
 
06.09.12
10:27
ногти шикарны!
11 Miss1C
 
06.09.12
10:27
Нужно выбрать старые записи с базы по регистру накопления "Продажи" и "ПродажиСебестоимость" сравнить их, если будут одинаковые, тогда в регистр "Продажи" в ресурс себестоимость записать себестоимость с регистра "ПродажиСебестоимость".
12 Miss1C
 
06.09.12
10:27
(10)Спасибо
13 DrShad
 
06.09.12
10:28
(11) а может не стоит? а
14 Miss1C
 
06.09.12
10:28
Вот как я вчера делала, только со старыми записями
15 Miss1C
 
06.09.12
10:29
(13)Почему?
16 Kashemir
 
06.09.12
10:33
(0) Данный запрос покажет все записи регистра продаж с задвоением/троением и т.д в случае наличие подобных записей в регистре себестоимости. Для отбора повторений стоит использовать внутренее соединение, и неясно какую роль играет агрегация по количеству
17 orange777
 
06.09.12
10:34
(11)интересно, если они уже одинаковые, зачем их перезаписывать?)
18 Kashemir
 
06.09.12
10:35
+(16) Ну и физика тут действительно даром не нужна. Виртуальных таблиц хватит.
19 Miss1C
 
06.09.12
10:36
(17)В регистр Продажи добавила ресурс "Себестоимость", по старым записям я должна перенести эту себестоимость с регистра "ПродажиСебестоимость"
20 orange777
 
06.09.12
10:38
(19)я не буду спрашивать зачем)
21 DrShad
 
06.09.12
10:39
(19) не надо!!!!
22 Miss1C
 
06.09.12
10:39
Процедура ОбработкаПроведенияДокументовРеализацииОбработкаПроведения(Источник, Отказ, РежимПроведения) Экспорт
   
   мДок = Источник.Метаданные();
   Если Не мДок.Движения.Содержит(Метаданные.РегистрыНакопления.Продажи) Тогда
       Возврат;
   КонецЕсли;
   Если Не мДок.Движения.Содержит(Метаданные.РегистрыНакопления.ПродажиСебестоимость) Тогда
       Возврат;
   КонецЕсли;
   
   ТЗ = Новый ТаблицаЗначений;
   
   Ссылка = Источник.Ссылка;
   НаборЗаписей = РегистрыНакопления.ПродажиСебестоимость.СоздатьНаборЗаписей();
   НаборЗаписей.Отбор.Регистратор.Установить(Ссылка,Истина);
   НаборЗаписей.Прочитать();
   НЗП = РегистрыНакопления.Продажи.СоздатьНаборЗаписей();
   НЗП.Отбор.Регистратор.Установить(Ссылка,Истина);
   НЗП.Прочитать();
   Количество = НаборЗаписей.Количество();
   ТЗ = НаборЗаписей.Выгрузить();    
   ТЗ.Свернуть("Номенклатура, ХарактеристикаНоменклатуры, ЗаказПокупателя, Подразделение, Проект", "Стоимость, Количество");
   
   Для Каждого Стр Из НЗП Цикл
       
       Отбор = Новый Структура();
       Отбор.Вставить("Номенклатура",Стр.Номенклатура);
       Отбор.Вставить("ХарактеристикаНоменклатуры",Стр.ХарактеристикаНоменклатуры);
       Отбор.Вставить("ЗаказПокупателя",Стр.ЗаказПокупателя);
       Отбор.Вставить("Подразделение",Стр.Подразделение);
       Отбор.Вставить("Проект",Стр.Проект);
       Строки = ТЗ.НайтиСтроки(Отбор);
       Стоимость = 0;
       Количество = 0;
       Для Каждого Строка Из Строки Цикл
           Стоимость = Стоимость+Строка.Стоимость;
           Количество = Количество + Строка.Количество;
       КонецЦикла;
       Если Стр.Количество = Количество Тогда
           Стр.Себестоимость = Стоимость;
       КонецЕсли;
       
   КонецЦикла;
   
   НЗП.Записать();

КонецПроцедуры

Эта процедура выполнялась когда я новый документ записывала, теперь задание пройтись по старым записям и проставить себестоимость
23 Miss1C
 
06.09.12
10:41
(20)Для отчета, данных в базе очень много, если отчет с объединением двоих регистров делать, производительность на порядок меньше будит, нежели сразу выбирать себестоимость с регистра на прямую
24 PuhUfa
 
06.09.12
10:43
(19) Не спрашивая "зачем", спрошу: в "ресурс "Себестоимость"" новые документы как данные пишут?
25 Miss1C
 
06.09.12
10:44
(24)Создала ПодпискуНаСобытие с Событием "ОбработкаПроведения" код см.(22)
26 Ненавижу 1С
 
гуру
06.09.12
10:47
на фото тема слегка приоткрыта
27 PuhUfa
 
06.09.12
10:47
(25) ну и что будет с твоим ресурсом если просто перепровести старый документ? -)
28 orange777
 
06.09.12
10:48
(27)там и продажисебестоимость могут полететь
29 Miss1C
 
06.09.12
10:48
(27)Должен записаться
30 Miss1C
 
06.09.12
10:49
(28)Почему?
31 PuhUfa
 
06.09.12
10:52
(29) Должен или запишется? -) И если ты уверенна в том что запишется, то почему просто взять и не перепровести документы и не городить всего этого в (0)? -)
32 Miss1C
 
06.09.12
10:54
(31)Запишется, проверяла
33 Miss1C
 
06.09.12
10:58
(31)Не все документы можно перепровести, "Не указаны параметры учетной политики управленческого учета на 1 января 2009 г".
34 Miss1C
 
06.09.12
11:00
(31)Управленческий учет. Документ Реализация товаров и услуг ЧК-00087328 от 27.09.2010 15:40:27, табличная часть "Товары"
Не списано по партиям 6 шт. товара Жигулівське   1 л пет, х-ка: , серия: , со склада: НЛ-1
Управленческий учет. Документ Реализация товаров и услуг ЧК-00087328 от 27.09.2010 15:40:27, табличная часть "Товары"
Не списано по партиям 10 шт. товара Пляшка 0,5 темна, со склада: НЛ-1
Проведение по партиям остановлено
35 Ненавижу 1С
 
гуру
06.09.12
11:00
+(26) надо бы тему сильнее раскрыть
36 Miss1C
 
06.09.12
11:01
(35)Вы о чем?
37 Ненавижу 1С
 
гуру
06.09.12
11:01
(36) о Них
38 DrShad
 
06.09.12
11:02
(35) +100500 особенно в свете (34)
39 palpetrovich
 
06.09.12
11:03
(19) "в регистр Продажи добавила ресурс "Себестоимость" - это кто-то подсказал так делать или самостоятельное решение?
40 Miss1C
 
06.09.12
11:09
(39) Подсказали
41 DrShad
 
06.09.12
11:10
(34) вот после этого посмотри что у тебя в этих двух регистрах? т.е. по продажам прошло все, а вот по себестоимости нет :)))
42 Miss1C
 
06.09.12
11:12
(41)Нормально все
43 DrShad
 
06.09.12
11:14
(42) уверена? если у тебе по партиям не списано, а себестоимость как раз по этому регистру рассчитывается
44 palpetrovich
 
06.09.12
11:20
(40) наверное те-же кто и (23) подсказал :) ...откуда интересно такие наблюдения "производительность на порядок меньше будит"?
45 DrShad
 
06.09.12
11:22
(44) +100500
учитывая что Себестоимость не ресурс, а реквизит и придется дергать физическую таблицу - скорость будет огромная
46 Miss1C
 
06.09.12
11:25
(45)Ресурс
47 Miss1C
 
06.09.12
11:25
Сейчас доделаю, проверю и выложу результат
48 palpetrovich
 
06.09.12
11:28
(47) надеюсь все это не на боевой базе :)
49 Miss1C
 
06.09.12
11:30
(48) Конечно нет)
50 Конфигуратор1с
 
06.09.12
11:31
(49)ни в коем случае не добавляй ресурс и не трогай регистр. Скорости это не добавит а вот проблем очень много
51 neckto
 
06.09.12
11:40
(0) Какая конфа?
52 palpetrovich
 
06.09.12
11:42
(51) УТ да Украины по-ходу.  или УТП
53 neckto
 
06.09.12
11:44
(52) А может УПП?
54 Miss1C
 
06.09.12
11:45
УПП
55 Miss1C
 
06.09.12
11:45
8.1
56 DrShad
 
06.09.12
11:46
(55) О_О как страшно жить!
57 neckto
 
06.09.12
11:46
Расчет себестоимости пишет в регистр ПродажиСебестоимость?
58 Ненавижу 1С
 
гуру
06.09.12
11:59
(55) все, после этого ты обязана раскрыть тему полностью!
59 Coldboy
 
06.09.12
12:01
а я уже ставлю 1С 8.1, чтобы такой помочь)
60 Coldboy
 
06.09.12
12:02
конфу тока скажите ...
61 Coldboy
 
06.09.12
12:02
а все вижу спс)
62 Miss1C
 
06.09.12
12:05
(58)Тему только мой парень может раскрыть
63 DrShad
 
06.09.12
12:08
(62) спорное утверждение
64 neckto
 
06.09.12
12:10
На (57) ответишь?
65 Miss1C
 
06.09.12
12:11
(57)Да
66 neckto
 
06.09.12
12:13
А теперь будет массовая запись в два регистра Продажи и Продажи себестоимость. У тебя пользователи будут вешаться. Два регистра сделано не просто так.
67 Miss1C
 
06.09.12
12:16
(66)При записи документа, производительность упала на 0.40, это не существенно
68 DrShad
 
06.09.12
12:20
(67) а при проведении?
69 neckto
 
06.09.12
12:20
Если не влияет на время расчета с/с и пользователи не замечают блокировки, значит объем данных не большой. Тогда нафига (0)?
70 DrShad
 
06.09.12
12:21
(69) ибо ОБС (одна бабка сказала)
71 Miss1C
 
06.09.12
12:22
(69)За день количество документов может быть больше 1000
72 neckto
 
06.09.12
12:23
И что, это много?
73 DrShad
 
06.09.12
12:23
(71) РСВ сколько проводится? и что пишет и куда?
74 Miss1C
 
06.09.12
12:26
(72)Не очень, но когда начальник захочет сформировать отчет  за месяц, как вы думаете быстрее будит отрабатывать запрос с одной виртуальной таблицей или с двумя?
75 DrShad
 
06.09.12
12:27
(74) однокуйственно, т.е. он не заметит разницы
76 Darky
 
06.09.12
12:28
(0) вообще не понял зачем там соединение, если данные таблицы ПродажиСебестоимость нигде не используются в запросе
(22) пройтись по старым записям можно с помощью НабораЗаписей и отбора по Регистратору

Создавать доп.ресурс в регистре не нужно было

Если начальство не устраивает скорость построения отчетов - пусть раскошелятся на новый сервер
77 palpetrovich
 
06.09.12
12:29
(74) дла начальника делать отчет быстро - это зло. Пока формируется отчет, он должен проникаться насколько все это сложно ;)
78 Miss1C
 
06.09.12
12:32
Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ
   |    Продажи.Номенклатура,
   |    Продажи.ХарактеристикаНоменклатуры,
   |    Продажи.ЗаказПокупателя,
   |    Продажи.Подразделение,
   |    Продажи.Проект,
   |    СУММА(Продажи.Себестоимость) КАК Себестоимость,
   |    СУММА(Продажи.Количество) КАК Количество,
   |    СУММА(ПродажиСебестоимость.Стоимость) КАК Стоимость,
   |    СУММА(ПродажиСебестоимость.Количество) КАК Количество1,
   |    Продажи.Регистратор КАК Регистратор
   |ИЗ
   |    РегистрНакопления.Продажи КАК Продажи
   |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ПродажиСебестоимость КАК ПродажиСебестоимость
   |        ПО Продажи.Регистратор = ПродажиСебестоимость.Регистратор
   |            И Продажи.Номенклатура = ПродажиСебестоимость.Номенклатура
   |            И Продажи.ХарактеристикаНоменклатуры = ПродажиСебестоимость.ХарактеристикаНоменклатуры
   |            И Продажи.ЗаказПокупателя = ПродажиСебестоимость.ЗаказПокупателя
   |            И Продажи.Подразделение = ПродажиСебестоимость.Подразделение
   |            И Продажи.Проект = ПродажиСебестоимость.Проект
   |ГДЕ
   |    Продажи.Период МЕЖДУ &ДатаНач И &ДатаКон
   |
   |СГРУППИРОВАТЬ ПО
   |    Продажи.Проект,
   |    Продажи.Подразделение,
   |    Продажи.ЗаказПокупателя,
   |    Продажи.ХарактеристикаНоменклатуры,
   |    Продажи.Номенклатура,
   |    Продажи.Регистратор
   |ИТОГИ ПО
   |    Регистратор";
   
   Запрос.УстановитьПараметр("ДатаНач",НачалоДня(ДатаНач));
   Запрос.УстановитьПараметр("ДатаКон",КонецДня(ДатаКон));
   Результат = Запрос.Выполнить();
   ТабличноеПоле1.Строки.Очистить();
   ТабличноеПоле1 = Результат.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);
   ЭлементыФормы.ТабличноеПоле1.СоздатьКолонки();
   
   НаборЗаписей = РегистрыНакопления.Продажи.СоздатьНаборЗаписей();
   Для Каждого Стр Из ТабличноеПоле1.Строки Цикл
       
       Для Каждого Стр1 Из Стр.Строки Цикл
           
           Объект = Стр1.ЗаказПокупателя.ПолучитьОбъект();
           
           НаборЗаписей.Отбор.Регистратор.Установить(Объект,Истина);
           НаборЗаписей.Прочитать();
           
           Для Каждого Строка Из НаборЗаписей Цикл    
               
               Отбор = Новый Структура();
               Отбор.Вставить("Номенклатура",Строка.Номенклатура);
               Отбор.Вставить("ХарактеристикаНоменклатуры",Строка.ХарактеристикаНоменклатуры);
               Отбор.Вставить("ЗаказПокупателя",Строка.ЗаказПокупателя);
               Отбор.Вставить("Подразделение",Строка.Подразделение);
               Отбор.Вставить("Проект",Строка.Проект);
               Строки = ТабличноеПоле1.НайтиСтроки(Отбор);
               Стоимость = 0;
               Количество = 0;
               Для Каждого Строк Из Строки Цикл
                   Стоимость = Стоимость+Строк.Стоимость;
                   Количество = Количество + Строк.Количество;
               КонецЦикла;
               Если Стр1.Количество = Количество Тогда
                   Стр1.Себестоимость = Стоимость;
               КонецЕсли;
               
           КонецЦикла;
           
       КонецЦикла;
       
   КонецЦикла;

Пытаюсь записать себестоимость в дерево значений, но НаборЗаписей пустой, что не так делаю?
79 Darky
 
06.09.12
12:36
не нужно объект получать
нужна ссылка
80 DrShad
 
06.09.12
12:36
(78) какой адский ужас
81 DrShad
 
06.09.12
12:37
+(80) никому больше ЭТО не показывай
82 Miss1C
 
06.09.12
12:47
(79)Ссылку поставила, все равно тоже самое
83 Kashemir
 
06.09.12
12:49
(82) Значит твои заказы покупателей не имеют движения по регистру накопления продажи
ПыСы  - код действительно страшен
84 ssh2006
 
06.09.12
12:49
(78) Мисс, конкретная адресная помощь проблематична. Как-бы это не звучало, но нужно поизучать основы и поразбирать более простые примеры. Если будешь ломать живую базу, то это может иметь неприятные последствия.
85 DrShad
 
06.09.12
12:51
(84) она копию ломает
86 Miss1C
 
06.09.12
12:51
Мое творение еще будет тестироваться и проверятся программистом, который дал это задание
87 Kashemir
 
06.09.12
12:51
+(83) На 2 уровне дерева по идее и нет заказов покупателя - ибо это третья группировка
88 Cashtane
 
06.09.12
12:51
(78) "Для Каждого Строка Из НаборЗаписей Цикл". Строка -> ТекСтрока. "Строка" нельзя использовать, ибо служебное слово.
89 Miss1C
 
06.09.12
12:52
(87)Есть
90 Kashemir
 
06.09.12
12:53
(89) Тогда возьми любой пример заказа в цикле и посмотри в базе - есть ли у него движения по продажам.
91 Darky
 
06.09.12
12:54
(82) смотрите, код Вы пишете, пусть немного и нестандартный, но видно, что понятия есть. Единственное, что Вам нужно, так это немного практики и понимания структуры Вашей учетной программы.
В конкретном случае, заказы никак не могут быть регистраторами для регистра Продажи себестоимость (если Вы там чего-то не подкрутили)
Посмотрите в конфигураторе, какие регистраторы могут быть у данного регистра накоплений
92 DrShad
 
06.09.12
12:55
(88) наглая ложь! всегда использую и никаких проблем
93 Cashtane
 
06.09.12
12:58
(92) *Ушел учить мат.часть.
94 Miss1C
 
06.09.12
12:58
(91)Спасибо, поправила
Объект = Стр1.Регистратор.ПолучитьОбъект();
           
           НаборЗаписей.Отбор.Регистратор.Установить(Объект,Истина);
95 Miss1C
 
06.09.12
12:59
Но все равно возвращает пустой набор
96 Miss1C
 
06.09.12
13:00
(93)Меня учили проверять по Ctrl + Пробел, так что там все правильно
97 ssh2006
 
06.09.12
13:00
(94) попробуй мотивировать программиста, давшего задание на совместное его выполнение - и научишься и результат будет.
98 Miss1C
 
06.09.12
13:01
(97)Когда делаю сама быстрее научусь
99 Kashemir
 
06.09.12
13:06
(94) Вот так надо
//Объект = Стр1.Регистратор.ПолучитьОбъект();
НаборЗаписей.Отбор.Регистратор.Установить(Стр1.Регистратор,Истина);


Во-вторых, что мешает воспользоваться отладчиком и (90) и опять же проверить наличие движения по регистру продаж у Стр1.Регистратор ?
100 ssh2006
 
06.09.12
13:07
(98) Тоже верно, но методом тыка тут не очень хорошо учиться. Нужно понимание. Желательно чтение мануалов/лит-ры/итс, поиск. Занудно. Уровень задач будет возрастать.

Вот например твой код: Объект = Стр1.Регистратор.ПолучитьОбъект();
НаборЗаписей.Отбор.Регистратор.Установить(Объект,Истина);

Посмотри что такое объект, что такое ссылка.
101 МишКа
 
06.09.12
13:10
А может набор записей и должен быть пустым?
102 Miss1C
 
06.09.12
13:11
(99)Получилось, спасибки
Программист всегда исправляет последнюю ошибку.