Алексей Тишков | Заместитель начальника отдела ИТ | ПАО "Амурский судостроительный завод"

«Цифровая трансформация процессов судостроительного предприятия на платформе 1С»

В докладе будет рассмотрен пример построения единого информационного пространства на платформе 1С с использованием комплекса конфигураций: - Управление производственным предприятием; - Документооборот КОРП; - Бухгалтерия предприятия с надстройкой "БИТ:Финанс"; Комплекс конфигураций является фундаментом для внедрения процессного подхода к управлению, системы на платформе 1С используются не только в качестве "учетных", а в качестве среды выполнения формализованных процессов. Таким образом, уровень зрелости и функциональности комплекса перешел от "учетного" к "среде жизненного цикла процессов". Реализованы, в том числе, сквозные процессы между конфигурациями и интегрированными внешними системами (концепция "большие процессы", или "большая единая 1С"), сквозной сбор данных стратегического BI-уровня (контрольные отчеты директора). Используемые технологии: - неквалифицированная цифровая подпись согласно 63-ФЗ (используется для согласования договоров, служебок, исходящих писем, приказов, распоряжений и многих других внутренних документов); - интеграция с внешними системами посредством web-сервисов (интеграция с системой СКУД и управление блокировкой прохода на предприятие из кадровой системы); - интеграция между конфигурациями 1С посредством COM-объектов и web-сервисов; - внешние компоненты; - объекты метаданных Бизнес-процессы и Задачи; На сквозном примере будет рассмотрен общий принцип цифровой трансформации отдельного процесса, выполнение следующего комплекса преобразований: 1. Определение возможного уровня цифровизации, возможности реализации в какой-либо информационной системе весь жизненный цикл процесса (все ли участники процесса присутствуют в информационной системе, могут присутствовать потенциально); 2. Описание и формализация, моделирование текущего состояния процесса, выявление проблемных зон и функций, связанных с вещественной формой передачи информации (на примере модели в нотации EPC); 3. Моделирование трансформированного состояния процесса, определение среды жизненного цикла цифровой формы процесса (подсистемы), измененных форм первичных документов; 4. Закрепление трансформированной формы процесса в системе менеджмента качества (актуализация или создание нормативной базы); 5. Изменение соответствующей информационной подсистемы (архитектура прикладных объектов, кодирование, тестирование); 6. Внедрение и обучение пользователей (участников процесса), постановка на эксплуатацию. Доклад будет интересен практикам внедрения на крупных промышленных предприятиях.

Деление на 0 в отчете Ведомость товаров по складам

1. _Vanda_ 11.01.17 15:48 Сейчас в теме
В отчете Ведомость товаров по складам возникает ошибка: деление на ноль 0.
Сам отчет проверила, там где есть деление есть проверка на 0:
ВЫБОР
	КОГДА &ЕдиницыКоличества = 0
		ТОГДА ТоварыНаСкладахОстаткиИОбороты.ВНаличииНачальныйОстаток
	КОГДА &ЕдиницыКоличества = 1
		ТОГДА ВЫБОР
				КОГДА ТоварыНаСкладахОстаткиИОбороты.Номенклатура.КоэффициентЕдиницыДляОтчетов <> 0
					ТОГДА ТоварыНаСкладахОстаткиИОбороты.ВНаличииНачальныйОстаток / ТоварыНаСкладахОстаткиИОбороты.Номенклатура.КоэффициентЕдиницыДляОтчетов
				ИНАЧЕ 0
			КОНЕЦ
КОНЕЦ
Показать

Больше деления нигде нет, отчет в консоли выполняется без ошибок.
данная ошибка выходит при любых настройках, при любом периоде. Кэш чистили. В отладчике по ошибке не останавливается.
С чем это может быть связано? Или как найти источник проблемы?
Найденные решения
14. _Vanda_ 12.01.17 08:02 Сейчас в теме
Вопрос решился. Сохранила отчет как внешний и запустил в отладке. Поругался на справочник единиц измерения,нужно было заполнить кратность для килограммов: 1кг=1кг.
alex_bitti; Ганс; +2 Ответить
Остальные ответы
Сортировка: Древо
6. starik-2005 1386 11.01.17 17:04 Сейчас в теме
(1)
КОГДА ТоварыНаСкладахОстаткиИОбороты.Номенклатура.КоэффициентЕдиницыДляОтчетов <> 0


КОГДА ЕСТЬNULL(ТоварыНаСкладахОстаткиИОбороты.Номенклатура.КоэффициентЕдиницыДляОтчетов, 0) <> 0
15. ice-net 10 12.01.17 09:06 Сейчас в теме
(6)
КОГДА ЕСТЬNULL(ТоварыНаСкладахОстаткиИОбороты.Номенклатура.КоэффициентЕдиницыДляОтчетов, 0) <> 0


В данном случае, проверка на NULL - абсолютно лишняя операция, т.к. соединений быть не должно (99%), а Номенклатура (99%) не может быть NULL,
но если уж (вдруг есть соединение) и добавлять, то вот так (при условии, что реквизит КоэффициентЕдиницыДляОтчетов у ном-ры тип число:
ВЫБОР
      КОГДА ТоварыНаСкладахОстаткиИОбороты.Номенклатура Есть NULL 
             Тогда 0
      Иначе
             ЕстьNULL(ТоварыНаСкладахОстаткиИОбороты.ВНаличииНачальныйОстаток,0) / ТоварыНаСкладахОстаткиИОбороты.Номенклатура.КоэффициентЕдиницыДляОтчетов
КОНЕЦ


ПС: И в Запросе NULL+5 = NULL
(12) ПС2.
реквизит числового типа = null
Априори, такого не может быть! Реквизит числового типа = числу, но никак не NULL! NULL- Это отдельный тип!
16. spacecraft 12.01.17 09:11 Сейчас в теме
(15)
Априори, такого не может быть! Реквизит числового типа = числу, но никак не NULL! NULL- Это отдельный тип!

Реквизиту числового типа можно присвоить Null. Другое дело, что Null в данном случае приведется к 0.
18. ice-net 10 12.01.17 09:28 Сейчас в теме
(16)
Вы хоть сами понимаете, что пишите? Реквизиту числового типа можно присвоить только значение числового типа!

Другое дело, что в коде, если вы говорите о коде, платформа автоматически преобразует патыется преобразовать пустые значения(типа NULL, неоперделено и любые другие не подходящие типы типа ссылки на справочник или документ) к Значению(в случае удачи, например Булево = 54515; //Истина), Пустому значению(Число = Справочники.Номенклатура.ПустаяСсылка(); // 0).

Т.е.
Реквизит = NULL абсолютно то же самое, что и Реквизит = неопределено, аналогично и Реквизит = ПустоеЗначениеТакогоЖеТипа.

Возвращаясь к вашей фразе, повторюсь, Реквизиту числового типа можно НЕ ВОЗМОЖНО присвоить Null, его можно только "обнулить"(привести к пустому значению данного типа) этой операцией
Прикрепленные файлы:
19. spacecraft 12.01.17 09:43 Сейчас в теме
(18)
Реквизиту числового типа можно НЕ ВОЗМОЖНО присвоить Null, его можно только "обнулить"(привести к пустому значению данного типа) этой операцией

как бы это не называлось...
Хорошо, если Вы так дотошны до буквы, тогда при присваивании Null, он автоматически приведется к 0.
Или будите спорить, что операция Реквизит = Null это не факт присваивания?
Реквизит = NULL абсолютно то же самое, что и Реквизит = неопределено, аналогично и Реквизит = ПустоеЗначениеТакогоЖеТипа.

А вот с этим я никогда и не спорил. Домыслы?
20. ice-net 10 12.01.17 09:49 Сейчас в теме
(19)
А вот с этим я никогда и не спорил. Домыслы?

пример)
Хорошо, если Вы так дотошны до буквы

Просто это принципиально разные вещи.

Согласитесь, если Вам скажут "Я реквизиту присвоил NULL, обработай в запросе только строки с NULL отдельно.."
Звучит очень не однозначно..
22. spacecraft 12.01.17 10:08 Сейчас в теме
(20)
Согласитесь, если Вам скажут "Я реквизиту присвоил NULL, обработай в запросе только строки с NULL отдельно.."
Звучит очень не однозначно..

Вот мое сообщение, которое было воспринято неоднозначно:
"Априори, такого не может быть! Реквизит числового типа = числу, но никак не NULL! NULL- Это отдельный тип!"

Реквизиту числового типа можно присвоить Null. Другое дело, что Null в данном случае приведется к 0.

Присвоить Null это операция Реквизит = Null. И он сразу же приводится к 0. Ничего более. Это совсем не означает, что там будет храниться Null.
23. spacecraft 12.01.17 10:23 Сейчас в теме
(20) я даже больше скажу.
В С++ допустима такая операция:
int a = NULL;

Она так же сделает приведение. И переменная а будет равна 0.
24. starik-2005 1386 12.01.17 15:23 Сейчас в теме
(23) там NULL - это определенная константа. Но, обычно, было не NULL, а nil - системная константа, равная нулю.

https://habrahabr.ru/post/165021/
На самом деле, в контексте указателей применим как NULL, так и 0, ввиду того что первый — не более чем макрос-обёртка для второго:
#define NULL ((void *)0)

Однако не следует использовать NULL в качестве замены 0 в тех местах, где ноль — алгебраическое значение:
int c = b*a;
if (c != NULL) {
printf("Neither b nor a is equal to 0\n");
}
2. borodatii 1 11.01.17 16:01 Сейчас в теме
СКД? А в вычисляемых полях деление есть? А в ресурсах в поле "Выражение"?
4. ice-net 10 11.01.17 16:08 Сейчас в теме
Сдается мне, ошибка не в этом фрагменте (146%), а в каком-нибудь поле форматирования или в доп. полях или еще где.. раз уж в консоли все гуд.
5. Ганс 11.01.17 16:37 Сейчас в теме
Свой отчёт посмотрите в консоле отчётов и там же увидите какой отчёт выполняется и поймёте где идёт ошибка!
7. starik-2005 1386 11.01.17 17:04 Сейчас в теме
(5)
в консоле отчётов
в консоли
8. Ганс 11.01.17 17:33 Сейчас в теме
(7) Спасибо!)


(6) А дано ли деление на null даёт ошибку деления на "0"? )
9. spacecraft 11.01.17 17:37 Сейчас в теме
(8)
А дано ли деление на null даёт ошибку деления на "0"? )

Если тип числовой, то Null приводится к 0. Это было всегда.
10. Ганс 11.01.17 17:45 Сейчас в теме
(9) Где приводится? В запросе? В СКД?
11. spacecraft 11.01.17 17:47 Сейчас в теме
(10) конкретно тут - в математических операциях.
12. Ганс 11.01.17 18:26 Сейчас в теме
(11) вы серьёзно хотите сказать что null + 5 даст вам 5 на выходе?!?!?
13. spacecraft 11.01.17 18:44 Сейчас в теме
(12) не null + 5, а реквизит числового типа = null.
Есть реквизит числового типа Ревизит1.
То такой код даст 5:
Реквизит1 = Null;
Сообщить(Реквизит1 + 5);


Правда не уверен, что это работает в запросе. Там другая механика.
С запросом скорее всего не сработает. Тут согласен.
17. Ганс 12.01.17 09:25 Сейчас в теме
(13) С таким же успехом можно написать:
Реквизит1 = "Какая-нибудь чушь"
Сообщить(Реквизит1 + 5);

При условии что Реквизит1 имеет тип число, увидим на экране 5))
21. spacecraft 12.01.17 10:03 Сейчас в теме
(17) Вот пример:
Реквизит1 = "3" 
Сообщить(Реквизит1 + 5); 

Увидим на экране: 8
Все же происходит приведение?
Вот и с Null тоже самое.
14. _Vanda_ 12.01.17 08:02 Сейчас в теме
Вопрос решился. Сохранила отчет как внешний и запустил в отладке. Поругался на справочник единиц измерения,нужно было заполнить кратность для килограммов: 1кг=1кг.
alex_bitti; Ганс; +2 Ответить
Оставьте свое сообщение
Все разделы

Вакансии


Программист 1С
Москва
зарплата от 100 000 руб. до 200 000 руб.
Полный день

Преподаватель 1С
Санкт-Петербург
Полный день

Удаленный ИТ-журналист
Санкт-Петербург
По совместительству

Программист 1С
Санкт-Петербург
зарплата от 80 000 руб. до 150 000 руб.
Полный день