Имя: Пароль:
1C
1С v8
Помогите с обработкой
0 it-ilfat
 
27.02.15
10:43
Опишу ситуацию. Необходимо во всех документах приходного ордера сменить Подразделение на значение "Основное подразделение". Понимаю задача легкая, но прошу Вашей помощи. Почему он не присваивает значение, не пойму. Заранее спасибо.
Код:
Процедура ОсновныеДействияФормыВыпольнить(Кнопка)
        Докум = Документы.ПриходныйКассовыйОрдер.Выбрать();
        Пока Докум.Следующий() Цикл
док = Докум.ПолучитьОбъект();
   Если док.ПодразделениеОрганизации <> "Основое подразделение" Тогда
        док.ПодразделениеОрганизации="ОсновноеПодразделение";
        док.Записать(РежимЗаписиДокумента.Проведение);
   КонецЕсли;
КонецЦикла;
КонецПроцедуры
1 Godofsin
 
27.02.15
10:44
Потому что подразделениеОрганизации это не строка
2 Ненавижу 1С
 
гуру
27.02.15
10:45
Если док.ПодразделениеОрганизации <> "Основое подразделение" Тогда

подсказываю док.ПодразделениеОрганизации - не строка, так что же ты его со строкой сравниваешь?
3 mikecool
 
27.02.15
10:45
(0) используй обработку справочников и документов
есть в типовых(некоторых) или на итс
4 MSOliver
 
27.02.15
10:46
(3) апаздал
5 it-ilfat
 
27.02.15
10:46
А как лучше данный код подправить?
6 Godofsin
 
27.02.15
10:46
(3) а в каких типовых ее нет?
7 Ненавижу 1С
 
гуру
27.02.15
10:47
(5) данный код лучше выкинуть
8 it-ilfat
 
27.02.15
10:47
Наименование сравнить не могу, так как это тоже не строка. А по отладке и значению у него значение равно данному выражению
9 1976vas
 
27.02.15
10:48
(5) Ты не сможешь присвоить строку док.ПодразделениеОрганизации
10 MSOliver
 
27.02.15
10:48
(6) в УТ11 она не много другая, групповое измение
11 Ненавижу 1С
 
гуру
27.02.15
10:48
"Наименование сравнить не могу, так как это тоже не строка"

а что это?
12 Godofsin
 
27.02.15
10:48
(5) Лучше воспользоваться вариантом (3)
13 MSOliver
 
27.02.15
10:49
(12) это опасно
14 Godofsin
 
27.02.15
10:49
(13) Его программирование не менее опасно =)
15 mikecool
 
27.02.15
10:50
(6) в УТ 11 не нашел с ходу
16 1976vas
 
27.02.15
10:50
(12) Он никак не сможет "сменить Подразделение на значение "Основное подразделение"" и  ничем
17 mikecool
 
27.02.15
10:50
(10) о как )
18 it-ilfat
 
27.02.15
10:50
типовой обработчик групповой обработки объектов вообще не запускается даже. Как лучше быть? Конфигурация БП 3.0
19 Ненавижу 1С
 
гуру
27.02.15
10:51
(18) уходить оттуда
20 Godofsin
 
27.02.15
10:51
(16) ... и ничем ему не помочь? )))
21 MSOliver
 
27.02.15
10:52
(15) выдели несколько строк в форме списка и контекстное меню. Вот оно теперь как)
22 Andrewww123
 
27.02.15
10:52
(0) Перед циклом сделай
"ОсновноеПодразделение = Справочники.Подразделения.НайтиПоНаименованию("Основное подразделение");" и в цикле сравнивай с этой переменной и её же присваивай реквизиту документа.
23 MSOliver
 
27.02.15
10:53
Все элементы справочника Подразделения переименовать в "Основное подразделение"
24 Godofsin
 
27.02.15
10:53
(22) А не ПодразделенияОрганизаций?
25 Andrewww123
 
27.02.15
10:54
(24) Ну это уже на месте разберется..
26 mikecool
 
27.02.15
10:54
(21) и чего там? у меня никакого группового изменения нет (
27 MSOliver
 
27.02.15
10:55
Внимательно читайте сабж:Необходимо во всех документах приходного ордера сменить Подразделение на значение "Основное подразделение". Ответ в (23)
28 1976vas
 
27.02.15
10:56
(20) Можно, если в справочнике Подразделение есть подразделение Основное подразделение. :)
29 Andrewww123
 
27.02.15
10:57
Пятничное трололо? :)
30 MSOliver
 
27.02.15
10:57
(24) Даже СтруктураПредприятия может быть, а в реквизите Подразделение :)
31 1976vas
 
27.02.15
11:00
(27) А потом как будет аналитика по Основному подразделению собираться?
32 Godofsin
 
27.02.15
11:01
Кто вручит бомбу юному подавану?
33 MSOliver
 
27.02.15
11:02
Хм... так это БП 3.0... Выборка на клиенте, стало быть вы БП 3.0 в обычном приложении открываете?
34 Любопытная
 
27.02.15
11:02
(0) потому что ты в ссылку запихиваешь строку
35 MSOliver
 
27.02.15
11:02
(31) мух отдельно от котлет!)
36 it-ilfat
 
27.02.15
11:03
да, в обычном открываем для запуска обработчика.
37 MSOliver
 
27.02.15
11:05
Процедура ОсновныеДействияФормыВыпольнить(Кнопка)
    
    ОсновноеПодразделение = Справочники.ПодразделенияОрганизаций.НайтиПоНаименованию("Основое подразделение");
    
    Докум = Документы.ПриходныйКассовыйОрдер.Выбрать();
    Пока Докум.Следующий() Цикл
        док = Докум.ПолучитьОбъект();
        Если док.ПодразделениеОрганизации <> ОсновноеПодразделение Тогда
            док.ПодразделениеОрганизации=ОсновноеПодразделение;
            док.Записать(РежимЗаписиДокумента.Проведение);
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры
38 it-ilfat
 
27.02.15
11:06
(37) Большое спасибо. Так и понял.
39 Godofsin
 
27.02.15
11:07
(37) Ставлю 50 руб на то, что после этого у него будут пустые ссылки в подразделении ))))
40 Godofsin
 
27.02.15
11:07
Если бездумно копировать будет )))
41 vhl
 
27.02.15
11:10
Гонокод, костыль, но самое простое и быстрое решение:
Если СокрЛП(док.ПодразделениеОрганизации) <> "Основое подразделение"
42 MSOliver
 
27.02.15
11:12
(41) изменять то на чё?
43 MSOliver
 
27.02.15
11:13
(39) ну я название из (0) брал
44 vhl
 
27.02.15
11:13
(42) чорт (
45 MSOliver
 
27.02.15
11:15
(44) да не переживай, он не проведённые документы без пометки удаления проведёт, или на ошибку нарвется...
46 it-ilfat
 
27.02.15
11:36
(45) а если непроведенных и помещенных на удаление доков не будет?))
47 D_E_S_131
 
27.02.15
11:37
(46) Тогда считай, что повезло.
48 Andrewww123
 
27.02.15
11:38
+ (37) Нужно "ПолучитьОбъект()" делать после проверки подразделения.
49 it-ilfat
 
27.02.15
11:41
(48) для чего?
50 Andrewww123
 
27.02.15
11:42
(49) Чтобы не считывать весь объект, если не нужна его обработка. До конца не уверен, скорее всего он и так полностью в кэш будет считан при обращении к "док.ПодразделениеОрганизации", но интуиция подсказывает что будет правильнее.
51 D_E_S_131
 
27.02.15
11:52
(50) Да и ссылки, в которых нужно заменить подразделение лучше сразу запросом получить все, а не гонять выборку.
52 Godofsin
 
27.02.15
12:01
ОсновноеПодразделение = Справочники.ПодразделенияОрганизаций.НайтиПоНаименованию("Основное подразделение")

Запрос = Новый Запрос;
Запрос.Текст =  "ВЫБРАТЬ
                       |    ПриходныйКассовыйОрдер.Ссылка
                       |ИЗ
                       |    Документ.ПриходныйКассовыйОрдер КАК ПриходныйКассовыйОрдер
                       |ГДЕ
                       |    ПриходныйКассовыйОрдер.Проведен
                       |    И ПриходныйКассовыйОрдер.Подразделение <> &ОсновноеПодразделение";

Запрос.УстановитьПараметр("ОсновноеПодразделение", ОсновноеПодразделение);

Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
    Сообщить("Документы с не правильным подразделением не нашлись");
    Возврат;
КонецЕсли;

Выборка = Результат.Выбрать();
Пока Выборка.Следующий() цикл

   ДокОбъект = Выборка.ПолучитьОбъект();
   ДокОбъект.ПодразделениеОрганизации = ОсновноеПодразделение;
   Попытка
      ДокОбъект.Записать(РежимЗаписиДокумента.Проведение);
   Исключение
      Сообщить(ОписаниеОшибки());
   КонецПопытки;
КонецЦикла;
53 Godofsin
 
27.02.15
12:02
Вот что с человеком делает скука...
54 vhl
 
27.02.15
12:05
(52) не будет работать
55 1976vas
 
27.02.15
12:05
(53) Лучше НайтиПоНаименованию заменить на НайтиПоКоду, наверное, может подразделение быть Основное подразделение2
56 Godofsin
 
27.02.15
12:10
(54) Да да
ДокОбъект = Выборка.Ссылка.ПолучитьОбъект();
57 Godofsin
 
27.02.15
12:10
(55) Исходил из условий в (0)
58 1976vas
 
27.02.15
12:12
(57) В справочнике помимо "Основное подразделение" может быть "Основное подразделение такое-то", он и его подхватит.
59 Godofsin
 
27.02.15
12:13
(58) =)
ОсновноеПодразделение = Справочники.ПодразделенияОрганизаций.НайтиПоНаименованию("Основное подразделение", Истина);
60 Godofsin
 
27.02.15
12:15
(58) Не сразу понял на что ты в (55) намекал
61 1976vas
 
27.02.15
12:19
(60) Истина - будет полностью совпадать с наименованием (за исключением "хвостовых" пробелов в наименовании). :)
62 Godofsin
 
27.02.15
12:21
(61) Ну все, сдаюсь ))) Пусть тогда по коду ищет))) а еще лучше интерактивно выбирает.
63 1976vas
 
27.02.15
12:23
(62) :)
64 vhl
 
27.02.15
12:36
(62) еще можно сделать предопределенным :)))