211 / 204 / 15
Регистрация: 29.05.2014
Сообщений: 1,056
1

Эксель по русски или даешь расчет в табличном документе

21.10.2014, 21:54. Показов 7496. Ответов 52
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Постановка задачи возможно кривая, буду рад уточняющим вопросам.

Итак, есть набор формул (штук 700) которые описывают работу предприятия. Это все в экселе. Работает.
Необходимо повторить то же самое в 1С. Учитывая что формулы меняются со скоростью звука, прописывать каждую в коде - не комильфо. Поэтому сделал парсер и интерпретатор формул экселя. Но наткнулся на 2 замечательных камня - циклические ссылки и связность строк (когда строка 3 зависит от значения в строке 2, 5,10). Циклические победил кое-как, не такая уж и проблема, а вот со связностью не знаю как бороться. Буду рад любой идее. Даже идиотской.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.10.2014, 21:54
Ответы с готовыми решениями:

Очистка строк в табличном документе
Событие Команды &НаКлиенте Процедура Команда1(Команда) НаСервере(); КонецПроцедуры ...

Проблемы с кодировкой в табличном документе 1С
Здравствуйте Уважаемые формучане На основании макета формируется табличный документ,куда выводятся...

Не печатает нули в табличном документе
В обработке куча строк, но интересующий фрагмент кода ВыводОтчета = Ложь; Если...

Присоединить область в табличном документе
Пытаюсь вывести колонками в ТД через присоединение областей и при выводе выводит после каждой...

52
Модератор
Эксперт 1С
3721 / 2916 / 574
Регистрация: 10.03.2011
Сообщений: 11,485
Записей в блоге: 1
22.10.2014, 04:04 2
wwall, по сути нужен стек до уровня когда не попадется ячейка которая уже расчитана

Добавлено через 37 минут
т.е. некий рекурсивный расчет

Например :
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
stack = DataProcessorManager.stack.Create();
ТаблицаРезультатов = Новый ТаблицаЗначений;
ТаблицаРезультатов.Колонки.Добавить("АдресЯчейки");
 
Цикл по Таблице Ячеек
 
ИщемЯчейкуВТаблицеРезультатов(АдресЯчейки) //Вдруг уже была рассчитана, то пропускаем
 
РекурсивныйРасчетЯчейки(АдресЯчейки)
 
Если Ячейка расчитывается по формуле
   stack.Положить(АдресЯчейки);
   Цикл по ячейкам формулы расчета текущей ячейки
       РекурсивныйРасчетЯчейки(АдресЯчейкиФормулы) и т.д.
По сути в стек соберутся все ячейки которые необходимо рассчитать последовательно


Рассчитали ячейку или ячейка константа, пишем ее в таблицу результатов и снимаем со стека
0
211 / 204 / 15
Регистрация: 29.05.2014
Сообщений: 1,056
22.10.2014, 09:08  [ТС] 3
В файле 900 строк. часть формул зависят, как уже говорил, от значений в нижележащих строках
например А1 = с3+о4+р5 и каждая из этих ячеек с3,о4,р5 зависит еще от полусотни ячеек определенных в других колонках. При предложенном тобой варианте расчета получается что в результате на стеке окажется весь массив данных, за исключением ячеек явно выведенных в 0 (те что ниже последней строки с данными)
Короче, этот путь - самый последний вариант. Он реализован практически, но скорость его работы - никакая.
0
Заблокирован
22.10.2014, 10:54 4
насичет идиотских идеев - это ко мне.
тока ты пишешь как то не по русски- я мало что понимаю.

Добавлено через 2 минуты
з.ы. вопрос:
значение в колонке строки 45 может ли зависеть от значения в строке 67.
или только от значений строк которые имеют номер меньше либо равный 45?

Добавлено через 1 минуту
сдается мине запихать фсее в многомерный массиф и делать через выполнить()
(тыже сама мене учил про многомерные массивы ,Волли, и про выполнить чета писал )))
0
Модератор
Эксперт 1С
3721 / 2916 / 574
Регистрация: 10.03.2011
Сообщений: 11,485
Записей в блоге: 1
22.10.2014, 13:00 5
Gokusa, так оно щас так и работает ))

Добавлено через 3 минуты
wwall, как это делает ексель?
0
Заблокирован
22.10.2014, 13:23 6
как цитату вставить не знаю
то ДетМонт
я ниче не понял из кода Волли, просто предложил опщий вариант.
а в чем тогда проблема(это если строка 45 использует значения тока строк менее 45)?
///
если строка 45 может использовать значения строк более 45.
тогда сначала м.б.
заполнить начальные элементы массива.
которые ни на что не ссылаются.
а потом от них плясать.

Добавлено через 8 минут
ДетМонт: рекурсивно доставать для каждого эл-та - мне каж все переебется ужасно.
луче наверн как нить примотать к каждой ячейке список других ячеек.
примотать так:
сложив списки входящих в нее ячеек.
0
211 / 204 / 15
Регистрация: 29.05.2014
Сообщений: 1,056
22.10.2014, 15:34  [ТС] 7
Dethmontt, у экселя представление таблицы - не матрица, точнее не совсем матрица, а достаточно хитрая структура которая позволяет адресацию в любом виде. сделать такое в 1С - просто не реально. Точнее в теории то реально, но на деле - не намного лучше чем рекурсивный обсчет который ты предлагаешь (плюс только в том что глубина рекурсии падает, но минус - отожранная память) Модель экселя не перенести в 1С один в один. Тут проблема в том что расчет формулы сведены к к строке. То есть за один проход у меня вычисляются колонки по одной строке (что бы контекст строки не дергать при пересчете)

Gokusa,
Цитата Сообщение от Gokusa Посмотреть сообщение
значение в колонке строки 45 может ли зависеть от значения в строке 67.
Да может. и именно в этом проблема.
0
Шизофреник
360 / 362 / 83
Регистрация: 25.06.2013
Сообщений: 1,141
22.10.2014, 15:48 8
wwall, мож я не так понял "Необходимо повторить то же самое в 1С"... повторить что, меняющиеся формулы? Аналог конструктора формул зуп'овский - не вариант?
Или надо парсить значения? Вроде как то можно доставать сразу результат ячейки, а не формулу... не оно?
0
2954 / 1766 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
22.10.2014, 16:27 9
Цитата Сообщение от wwall Посмотреть сообщение
Это все в экселе. Работает.
В ёкселе и рассчитать его же вб-скриптом. Потом закачать в 1с.
А если надо воплотить алгоритм, то... б... и на хрена я на этот троллинг ведусь...
0
211 / 204 / 15
Регистрация: 29.05.2014
Сообщений: 1,056
22.10.2014, 16:48  [ТС] 10
Цитата Сообщение от duk337 Посмотреть сообщение
и на хрена я на этот троллинг ведусь...
ок. у тебя файл экселя - 5 листов. В сумме на все листы - около 4000 показателей. Они не формализованы. Т.е. пользователи хотят менять их логику. Моя задача - сделать это в 1С. Если ты знаешь путь более простой чем распарсить формулы - поделись. Внемлю мудрости и смирю гордыню.
Хотел бы потроллить - спросил бы про комобъекты под линуксом.
wladimir_ui, надо вычислять по формулам. Сейчас фактически так и сделано - все через это выполнить и интепретацию формул. Задача - пересчитать значение формулы в строке если изменилось влияющее значение. Сделать это за приемлемое время. Ну для понимания - 5 минут - это уже - фу... в экселе лучше....
0
2954 / 1766 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
22.10.2014, 17:15 11
wwall, извини, родной, у меня гокушин пост был перед глазами.
Цитата Сообщение от wwall Посмотреть сообщение
Они не формализованы. Т.е. пользователи хотят менять их логику.
Всё алгоритмизируется. Даже расчет зарплаты по формулам. Что хоть за задача? Обучение ёкселю методом десятипальцевого ввода с клавиатуры?
0
4203 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
22.10.2014, 17:16 12
Цитата Сообщение от wwall Посмотреть сообщение
Необходимо повторить то же самое в 1С. Учитывая что формулы меняются со скоростью звука, прописывать каждую в коде - не комильфо. Поэтому сделал парсер и интерпретатор формул экселя.
А в экзеле то же самое прописывать - нормально?
0
2954 / 1766 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
22.10.2014, 17:20 13
Цитата Сообщение от taras atavin Посмотреть сообщение
А в экзеле то же самое прописывать - нормально?
Погоди... С замиранием сердца жду озвучки задачи. Человек зря ворошить энтропию вселенной не будет.
0
Модератор
Эксперт 1С
3721 / 2916 / 574
Регистрация: 10.03.2011
Сообщений: 11,485
Записей в блоге: 1
22.10.2014, 17:27 14
Цитата Сообщение от taras atavin Посмотреть сообщение
А в экзеле то же самое прописывать - нормально?
Это уже работает в экселе! тот кто это сделал, вряд ли сможет повторить это еще раз! =)))

Добавлено через 1 минуту
Цитата Сообщение от duk337 Посмотреть сообщение
С замиранием сердца жду озвучки задачи.
Перевести Эксель в 1С без потери функционала + связь с производственными документами (объектами 1С)
0
2954 / 1766 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
22.10.2014, 17:28 15
Цитата Сообщение от Dethmontt Посмотреть сообщение
вряд ли сможет повторить
а, главное, объяснить, как это вышло
1
4203 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
22.10.2014, 17:28 16
Цитата Сообщение от duk337 Посмотреть сообщение
Погоди... С замиранием сердца жду озвучки задачи. Человек зря ворошить энтропию вселенной не будет.
А ничего, что именно это - излюбленное занятие большинства тех самых человеков?
0
Модератор
Эксперт 1С
3721 / 2916 / 574
Регистрация: 10.03.2011
Сообщений: 11,485
Записей в блоге: 1
22.10.2014, 17:29 17
Т.е. формулы содержат не только адреса табдока (это все сейчас реализовано на табдоке), но и значения связанных регистров и документов
0
2954 / 1766 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
22.10.2014, 17:29 18
Цитата Сообщение от Dethmontt Посмотреть сообщение
Перевести Эксель в 1С без потери функционала
это понятно. Алгоритм для экселя воплотить нормальными гуманными средствами: регистрами и табличками с кнопками на форме.
0
Модератор
Эксперт 1С
3721 / 2916 / 574
Регистрация: 10.03.2011
Сообщений: 11,485
Записей в блоге: 1
22.10.2014, 17:30 19
Цитата Сообщение от duk337 Посмотреть сообщение
а, главное, объяснить, как это вышло
Ну объяснять он пытался, я его три дня слушал... Муть - муторная
0
4203 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
22.10.2014, 17:30 20
Цитата Сообщение от Dethmontt Посмотреть сообщение
Это уже работает в экселе! тот кто это сделал, вряд ли сможет повторить это еще раз! =)))
Скопирожать готовое и исправить адресацию операндов - много ума не надо, справится и учёная обезьяна, или тот самый парсер. И Вы уж определитесь: или регулярно появляются новые формулы, или они написаны один раз.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.10.2014, 17:30
Помогаю со студенческими работами здесь

Сворачивание записей в табличном документе
Всем доброго времени суток. :) Совсем недавно начала изучать Предприятие 1с 7.7, столкнулась с...

В табличном документе таблица не умещается по ширине
Добрый день, делаю внешнюю печатную форму, как мне сделать, если таблица не помещается в ширину,...

Удалить область в табличном документе программно
Ребята, подскажите кто знает, делаю условие на вывод строк только с отрицательным итогом. Вот...

1с 8.3 Программное определение координат области в табличном документе
Всем привет! Возможно ли программно определить координаты левого верхнего угла области,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru