Имя: Пароль:
1C
1С v8
Переход на платформу 8.2.
0 Ivanych
 
10.01.12
10:52
Здравствуйте. Я новичок в восьмерке. Возникла проблема с переходом 1С. Раньше база велась в версии 8.1. После успешно конвертации в 8.2. Не проводятся некоторые не типовые документы. Я хотел узнать в чем может быть проблема. т.е. это язык программирования или что-то другое? Кто встречал аналогичную проблему, подскажите откуда копать и куда. Спасибо
1 YF
 
10.01.12
10:52
(0) Телепаты еще не вышли с каникул
2 Cube
 
10.01.12
10:53
Ща прибегут телепаты и помогут...
3 Wobland
 
10.01.12
10:53
(1) вышли, но не все ;)
(0) смотри в ОбработкуПроведения() - заходит, не? ну и что там дальше
4 Azverin
 
10.01.12
10:54
(0) это язык программирования
5 DrShad
 
10.01.12
10:55
(0) просто не проводятся? и ничего не говорят?
6 Cube
 
10.01.12
10:55
(4) Мухахаха))))
7 Ivanych
 
10.01.12
10:55
(5) Например

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
   Для Каждого СтрокаТЧ из ТЧ Цикл
       Отказ = ПроверитьПраваПодтверждение(СтрокаТЧ.Заказ);
   КонецЦикла;
   
   Если НЕ Отказ Тогда
       Для Каждого ТекСтрокаТЧ Из ТЧ Цикл
           Если ПолучитьСостояниеЗаказа(Дата - 1, ТекСтрокаТЧ.Заказ) <> Перечисления.СостояниеЗаказа.ПредварительныйРасчет Тогда
               Отказ = Истина;
               Сообщить("Дата подтверждения заказа " + Строка(ТекСтрокаТЧ.Заказ) + " в производство более даты выпуска продукции.");
               Возврат;    
           КонецЕсли;
           
           // регистр СостояниеЗаказа
           Движение = Движения.СостояниеЗаказа.Добавить();
           Движение.Период = Дата;
           Движение.Заказ = ТекСтрокаТЧ.Заказ;
           Движение.Состояние = Перечисления.СостояниеЗаказа.ВПроизводстве;
           
           Для Каждого СтрокаТЧРабота Из ТекСтрокаТЧ.Заказ.Работы Цикл
               Если НЕ обЗначениеНеЗаполнено(СтрокаТЧРабота.Работа) И НЕ обЗначениеНеЗаполнено(СтрокаТЧРабота.Количество) Тогда
                   Движение = Движения.ПланРабот.Добавить();
                   Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
                   Движение.Период = Дата;
                   Движение.Заказ = ТекСтрокаТЧ.Заказ;
                   Движение.Работа = СтрокаТЧРабота.Работа;
                   Движение.Количество = СтрокаТЧРабота.Количество;
                   Движение.Сумма = СтрокаТЧРабота.Сумма;
                   Движение.Сотрудник = СтрокаТЧРабота.Работа.Профессия;
               КонецЕсли;
           КонецЦикла;
           
           Набор = РегистрыСведений.СоответствиеРаботМатериаловВЗаказе.СоздатьНаборЗаписей();
           Набор.Отбор.Заказ.Значение = ТекСтрокаТЧ.Заказ;
           Набор.Отбор.Заказ.Использование = Истина;
           Набор.Прочитать();
           
           Для Каждого СтрокаНабора Из Набор Цикл
               // регистр ИспользуемыеМатериалы Приход
               Если НЕ обЗначениеНеЗаполнено(СтрокаНабора.Материал) И НЕ обЗначениеНеЗаполнено(СтрокаНабора.Количество) Тогда
                   Движение                = Движения.ИспользуемыеМатериалы.Добавить();
                   Движение.ВидДвижения    = ВидДвиженияНакопления.Приход;
                   Движение.Период            = Дата;
                   Движение.Заказ            = СтрокаНабора.Заказ;
                   Движение.Сырье            = СтрокаНабора.Материал;
                   Движение.ВидРабот        = СтрокаНабора.Работа;
                   Движение.Количество        = СтрокаНабора.Количество;
                   //Движение.Сумма            = СтрокаНабора.Сумма;
               КонецЕсли;
           КонецЦикла;
       КонецЦикла;
   Иначе
       Сообщить("У Вас нет прав на подтверждение.");
   КонецЕсли;
КонецПроцедуры
8 Explorer1c
 
10.01.12
10:56
(0)Какая ошибка выходит то? И в какой момент? 8.2 у тебя в режиме совместимости?
9 vmv
 
10.01.12
10:56
(0) откройте о программе и скопипастите сюда все, что там пишут: разработчик, платформа, версия - все
10 Ivanych
 
10.01.12
10:56
(8) Ага
11 andrewks
 
10.01.12
10:57
набежали, тролли.
(0) надо вызывать специалиста. ну, или, если ты и есть специалист, то записывайся на курсы
12 Explorer1c
 
10.01.12
10:57
(10)Спасибо,оч содержательно)
13 Ivanych
 
10.01.12
10:57
(9) У Вас нет прав на подтверждение. А если убераю условие просто пишет что документ не проведен
14 Ivanych
 
10.01.12
10:58
(8) 1С:Предприятие 8.2 (8.2.15.289)
Бухгалтерия для Казахстана, редакция 1.5, разработка для Казахстана: «1С-Рейтинг», при методической поддержке «1С-Сапа», 2005 (1.5.19.5)
15 Wobland
 
10.01.12
10:58
если молчит, значит, судя по (7) ТЧ пустая
16 Zapal
 
10.01.12
10:59
1986
17 Explorer1c
 
10.01.12
10:59
(14)Из какого города? я с Алматы!
18 Ivanych
 
10.01.12
11:00
(17)Алматы
19 Explorer1c
 
10.01.12
11:00
(18)Пойдем бухать седня ну ее эту ску!
20 Cube
 
10.01.12
11:01
(16) А, ну тогда всё понятно!...
21 Ivanych
 
10.01.12
11:01
(15) Аналогичная конфигурация на платформе 8.1 без проблем
22 Ivanych
 
10.01.12
11:03
(19) :)
23 Ivanych
 
10.01.12
11:04
(15) Нет непустая.
24 Explorer1c
 
10.01.12
11:04
(22)Заякни мне вечерком побухаем-а по поводу проблемы- проверь
ПроверитьПраваПодтверждение(СтрокаТЧ.Заказ) что выдает в отладчике
25 Griffin
 
10.01.12
11:05
(23) Проверьте функцию ПроверитьПраваПодтверждение(), почему она переменной Отказ присваивает Истина
26 Zapal
 
10.01.12
11:05
одному мне кажется что код

   Для Каждого СтрокаТЧ из ТЧ Цикл
       Отказ = ПроверитьПраваПодтверждение(СтрокаТЧ.Заказ);
   КонецЦикла;
   
   Если НЕ Отказ Тогда

отдает дибилизмом?
или правда анализировать на Отказ нужно только последнюю строку, я перебор всей тч просто так, для прикола?

(21) телепатирую, по-разному отрабатывает функция ПроверитьПраваПодтверждение()
скорей всего у пользователя 8.2 не такие же права как были в 8.1
27 DrShad
 
10.01.12
11:08
(26) +100500
28 Fish
 
10.01.12
11:08
(26) А дальше там есть еще один перебор ТЧ :)))
  Если НЕ Отказ Тогда
       Для Каждого ТекСтрокаТЧ Из ТЧ Цикл
29 Ivanych
 
10.01.12
11:09
(26) Всё ровно такие же права

А вот функция

Функция ПроверитьПраваПодтверждение(Заказ) Экспорт
   Отказ = Неопределено;
   
   Запрос = Новый Запрос();
   Запрос.Текст = "ВЫБРАТЬ
                  |    ПраваПодтвержденияЗаявок.Сотрудник,
                  |    ПраваПодтвержденияЗаявок.Правило,
                  |    ПраваПодтвержденияЗаявок.ЗначениеПравила,
                  |    ПраваПодтвержденияЗаявок.Правило.РеквизитДокументаЗаказ,
                  |    ПраваПодтвержденияЗаявок.Правило.ТипЗначенияРеквизита
                  |ИЗ
                  |    РегистрСведений.ПраваПодтвержденияЗаявок КАК ПраваПодтвержденияЗаявок
                  |ГДЕ
                  |    ПраваПодтвержденияЗаявок.Сотрудник = &Сотрудник";
   Запрос.УстановитьПараметр("Сотрудник", ПараметрыСеанса.ТекущийПользователь);
   РезультатЗапроса = Запрос.Выполнить();
   
   Выборка = РезультатЗапроса.Выбрать();
   
   Пока Выборка.Следующий() Цикл
       ТипРеквизита = Метаданные.Документы["ЗаказНаИзготовлениеПродукции"].Реквизиты[Выборка.Правило.РеквизитДокументаЗаказ].Тип;
       Если Найти(Строка(ТипРеквизита), "Число") > 0 Тогда
           Если Заказ[Выборка.ПравилоРеквизитДокументаЗаказ] >= Выборка.ЗначениеПравила Тогда
               Отказ = Истина;
           Иначе
               Если Отказ = Неопределено Тогда
                   Отказ = Ложь;
               КонецЕсли;
           КонецЕсли;
       ИначеЕсли Найти(Строка(ТипРеквизита), "Справочник") > 0 Тогда
           Если Заказ[Выборка.ПравилоРеквизитДокументаЗаказ] <> Выборка.ЗначениеПравила Тогда
               Отказ = Истина;
           Иначе
               Если Отказ = Неопределено Тогда
                   Отказ = Ложь;
               КонецЕсли;
           КонецЕсли;
       ИначеЕсли Найти(Строка(ТипРеквизита), "Булево") > 0 Тогда
           Если Заказ[Выборка.ПравилоРеквизитДокументаЗаказ] <> Выборка.ЗначениеПравила Тогда
               Отказ = Истина;
           Иначе
               Если Отказ = Неопределено Тогда
                   Отказ = Ложь;
               КонецЕсли;
           КонецЕсли;
       КонецЕсли;

   КонецЦикла;
   
   Если Отказ = Неопределено Тогда
       Отказ = Истина;
   КонецЕсли;
   
   Возврат Отказ;
КонецФункции
30 Cube
 
10.01.12
11:10
(29) Запрос в цикле... Расстрелять!
31 Ivanych
 
10.01.12
11:12
(30) :). Я этого не писал, пока только учусь. Так как здесь быть?
32 Fish
 
10.01.12
11:13
(31) Переписать всё нах :)))
33 Ivanych
 
10.01.12
11:13
(28) 7
34 Cube
 
10.01.12
11:15
(32) +1)
35 Ivanych
 
10.01.12
11:17
(26) Там может быть несколько документов. Все строки проверять необходимо
36 DrShad
 
10.01.12
11:17
(32) +1
37 Fish
 
10.01.12
11:19
(35) Суть в том, что код в (7) проверяет не ВСЕ строки, а только последнюю :)))
38 Ivanych
 
10.01.12
11:19
(32) Это понятно, а временно можно что нибудь сделать в версии 8.1 ведь работает.
39 Cube
 
10.01.12
11:21
(37) А до этого стотыщмилёнов запросов прогоняет впустую... Не, ну однозначно расстрелять... Что же это твориться, товарищи! Срамота-то какая.... =))
40 Fish
 
10.01.12
11:22
(38) Тут проблема не в версии 1С, а в мозгах того, кто это писал. Переписывать надо в любом случае, даже для 8.1 :)))
41 GROOVY
 
10.01.12
11:24
(38) После конвертации на 8.2 (при работе в режиме совместимости с 8.1) поведение конфигурации не меняется.
42 Fish
 
10.01.12
11:25
(39) "разработка для Казахстана: «1С-Рейтинг», при методической поддержке «1С-Сапа»" - вот они казахские франчи. Непредсказуемые и беспощадные :)))
43 vmv
 
10.01.12
11:26
2005 (1.5.19.5)

писалось видимо пионером платформы, тогда все были пионерами, соббсвенно осуждать грешно. Обновить функционал сначало нужно было, а уже потом думать о 8.2.

возможно пионер уже стал корифеем)
44 Griffin
 
10.01.12
11:27
проверьте строку ТипРеквизита = Метаданные.Документы["ЗаказНаИзготовлениеПродукции"].Реквизиты[Выборка.Правило.РеквизитДокументаЗаказ].Тип;

Если Выборка.Правило.РеквизитДокументаЗаказ является справочником, то  Найти(Строка(ТипРеквизита), "Справочник") > 0 не будет выполняться и Отказ будет истина
45 vmv
 
10.01.12
11:29
(44) там весь код эээ тихий ужас, выше правы - дешевле написать новый, чем проверять
46 Griffin
 
10.01.12
11:31
(45) Это понятно, но новичок вряд ли напишет лучше. Пока важнее сделать конфигу работоспособной, переписывать потом.
47 Ivanych
 
10.01.12
11:32
(45) Но тем не менее, не понятно почему тогда в 8.1 проводился нормально хоть и конф тихий ужас.
48 Griffin
 
10.01.12
11:36
(47) по разному работает Метаданные.Документы["ПоступлениеДопРасходов"].Реквизиты.ДоговорКонтрагента.Тип

Справочник ссылка: Договоры контрагентов   - в 8.1

Договоры контрагентов - в 8.2
49 Ivanych
 
10.01.12
11:37
(44)  ТипРеквизита = Метаданные.Документы["ЗаказНаИзготовлениеПродукции"].Реквизиты[Выборка.Правило.РеквизитДокументаЗаказ].Тип
Выдает нормально, но найти:    
ИначеЕсли Найти(Строка(ТипРеквизита), "Справочник") > 0 Тогда
           Если Заказ[Выборка.ПравилоРеквизитДокументаЗаказ] <> Выборка.ЗначениеПравила Тогда
               Отказ = Истина;
           Иначе
               Если Отказ = Неопределено Тогда
                   Отказ = Ложь;
               КонецЕсли;
           КонецЕсли;
Не может
50 Ivanych
 
10.01.12
11:39
(44) Это справочник организации заданный в РегистрСведений.ПраваПодтвержденияЗаявок
51 Griffin
 
10.01.12
11:40
(50) см. (48)
52 Ivanych
 
10.01.12
11:44
(51) На примере можно. Не догоняю Справочник ссылка:
53 Ivanych
 
10.01.12
11:45
(51) Метаданные.Документы["ПоступлениеДопРасходов"].ДоговорКонтрагента.Тип ?
54 Griffin
 
10.01.12
11:47
(52) смотрим Найти(Строка(ТипРеквизита), "Справочник") > 0. Так как в 8.2 Строка(ТипРеквизита) больше не содержит строку "Справочник ссылка", эта функция Найти никогда не найдет "Справочник".
55 BigWetTits
 
10.01.12
11:47
Может на данной 8.1. совершенно случайно так сложилось, что цикл проходит и в итоге у отказа нужное значение.

ТС, исправь те косяки, что тут тебе сказали, это довольно простой код, может заработает?
56 Ivanych
 
10.01.12
11:49
(54) Спасибо всем.
57 Griffin
 
10.01.12
11:50
(54) Для экстренного случая можно тупо  Найти(Строка(ТипРеквизита), "Справочник") > 0 изменить на Найти(Строка(ТипРеквизита), "Организация") > 0 , "Организация" или как там в вашей конфиге называется справочник, но не проверять на содержание в строке "Справочник"
58 Мимохожий Однако
 
10.01.12
11:54
(7)Например,
..
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
   Для Каждого СтрокаТЧ из ТЧ Цикл
       Отказ = ПроверитьПраваПодтверждение(СтрокаТЧ.Заказ);
Если ОТКАЗ = Истина Тогда
Прервать; //дальше проверять не обязательно.
КонецЕсли;
   КонецЦикла;
59 Я не курил
 
10.01.12
11:57
(58) "= Истина" лишнее
60 BigWetTits
 
10.01.12
11:58
А движения Записать() не надо?
61 Мимохожий Однако
 
10.01.12
12:15
(59) согласен ))
Ошибка? Это не ошибка, это системная функция.