Артюхин Дмитрий

36
Рейтинг

adamx
Дмитрий Артюхин



  •   Регистрация: 04.05.2008 (15 лет назад)

  •   Был(а) на сайте: вчера в 09:03

Друзья
  • Илья Глызин
  • Илья Лобанов
  • Дмитрий Малышев
  • Евгений Комиссаров
  • Гордей Голиков
  • Сергей
  • Андрей Волин
Подписчики 7

Группы

Премиум-аккаунт 2017 (Автоматизатор) (до 19.02.2025 17:08:26)

IE2022 Online

Рейтинг 36

Работа с файлами MS WORD из 1C

Отчеты и формы Программист Платформа 1С v7.7 Конфигурации 1cv7 Windows Абонемент ($m) Архив с данными Инструментарий разработчика

Встала недавно задача для одной организации, которая все еще на 1С 7.7 немного автоматизировать работу отдела продаж. А именно уйти от ручного заполнения договоров, сделанных юристами в MS Word. Договора от разных фирм и разного назначения отличались. Переводить их в таблицы 1С очень не хотелось и нашел способ прямо в файлах Word сделать небольшие дополнения, чтобы можно было печатать, используя именно эти заготовки юристов.

1 стартмани

14.07.2013    27350    56    adamx    11       

13

Комментарии

HighLoadРаспространенные ошибки разработчиков, приводящие к проблемам производительности#32 02.08.21 17:55
В 15 примере

Запрос.УстановитьПараметр("СтрокаПоиска", "%" + СокрЛП(Параметры.СтрокаПоиска) + "%");

Не видно использования функции ОбщегоНазначения.

Код
Функция СформироватьСтрокуДляПоискаВЗапросе(Знач СтрокаПоиска) Экспорт
   
   ИтоговаяСтрокаДляПоиска = СтрокаПоиска;
   ИтоговаяСтрокаДляПоиска = СтрЗаменить(ИтоговаяСтрокаДляПоиска, "~", "~~");
   ИтоговаяСтрокаДляПоиска = СтрЗаменить(ИтоговаяСтрокаДляПоиска, "%", "~%");
   ИтоговаяСтрокаДляПоиска = СтрЗаменить(ИтоговаяСтрокаДляПоиска, "_", "~_");
   ИтоговаяСтрокаДляПоиска = СтрЗаменить(ИтоговаяСтрокаДляПоиска, "[", "~[");
   ИтоговаяСтрокаДляПоиска = СтрЗаменить(ИтоговаяСтрокаДляПоиска, "-", "~-");
   
   Возврат ИтоговаяСтрокаДляПоиска;
   
КонецФункции

Она экранирует спецсимволы. Ее желательно ведь использовать? Иначе например серию Р[5.7] не получится найти...
HighLoadРаспространенные ошибки разработчиков, приводящие к проблемам производительности#30 02.08.21 17:25
(20)Индекс строится в виде бинарного дерева. На поиск элемента при наличии индекса уходит в 2^N раз меньше времени, чем при сканировании. Строится индекс за время A * N * О(log N) вроде. Поэтому все будет зависеть от количества записей в левой таблице и метода соединения их. (A - коэффициент сложности построения)
То есть например на 1000 записей в правой таблице надо А * 1000 * 10 = А* 10 000 операций на построение дерева + 10 операций на поиск нужного элемента.
И если в левой таблице 5 записей - то проще сканом перебрать и получится всего 5 000 операций (это максимум, если неуникальные записи). А если например 200 записей - то уже получится скорее всего выигрыш.
HighLoadРаспространенные ошибки разработчиков, приводящие к проблемам производительности#29 02.08.21 17:01
(25)
Код
"ВЫБРАТЬ
|   Т.Регистратор КАК Регистратор,
|   РД.ДатаДокументаИБ КАК ДатаДок,
|   РД.НомерДокументаИБ КАК НомерДок,
|   РД.Комментарий КАК КомментарийДок,
|   Т.ЗаказКлиента КАК ЗаказКлиента,
|   Т.СуммаОборот КАК СуммаОборот
|ИЗ
|   РегистрНакопления.РасчетыСКлиентами.Обороты(, , Регистратор, ) КАК Т
|      ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РеестрДокументов КАК РД
|      ПО Т.Регистратор = РД.Ссылка
|         И (РД.ДополнительнаяЗапись = ЛОЖЬ)"


В этом запросе внутреннее соединение. Его нужно оставить.
Я имею ввиду конструкцию (РегистрНакопления.РасчетыСКлиентами.Обороты(, , Регистратор,
//****
Регистратор В (Выбрать Таб.Регистратор ИЗ РегистрСведений.РеестрДокументов КАК Таб ГДЕ (Таб .ДополнительнаяЗапись = ЛОЖЬ))
//*****
) )

Внизу условие И (РД.ДополнительнаяЗапись = ЛОЖЬ)" - надо убрать.
Тогда левая таблица будет с меньшим количеством строк (к ней уже применено это условие), а правая будет соединяться по хорошо проиндексированному полю с большой селективностью.

Это в теории ( :-). Как я понимаю рекомендации 1с.). На практике может оптимизатор запутаться именно в виртуальной таблице и зависнуть... :-)))
HighLoadРаспространенные ошибки разработчиков, приводящие к проблемам производительности#24 02.08.21 15:46
10-й пункт нарушает седьмой. надо в условие оборотного регистра по регистратору добавлять условие.
И самое интересное - отборы не равнозначны? Это точно приемлемое решение в 10-м пункте?
DevКак передать значение из одной формы в другую?#9 31.05.21 9:53
В новой форме создать реквизит с типом <Объект...> из основной формы. А затем после открытия формы выполнить ЗначениеВРеквизитФормы, где указать в первом параметре имя созданного реквизита.
Управление проектамиТакие разные франчайзи, или как мы делаем большие проекты на 1С. Часть первая: ты помнишь, как всё начиналось#99 17.04.17 9:25
(5)Это как раз дальновидность. Ибо характер и качество работы не меняется. На больших контрактах задействовано больше людей. Кроме этих трех программистов. Халявный проект - заслуга не программистов, а руководства.
БУВнешний отчет МХ-1#3 16.03.16 14:51
Не печатает из реализации. Пишет ошибку
"Не удалось сформировать внешнюю печатную форму!
Значение не является значением объектного типа (Метаданные)"

Зачем то модуль обработки зашифровал, если уж писать и шифровать - надо писать без ошибок.
БУПоступление из переработки, внешняя печатная форма М-4#1 14.07.15 17:46
халтура, а не внешняя печатная форма. Не вынесена процедура печати в модуль обработки.
DevКак оптимально сравнить две таблицы значений?#49 21.10.14 12:19
(47) Тсрпё, Какая таблица получится у тебя на выходе в предыдущем примере?
DevКак оптимально сравнить две таблицы значений?#46 21.10.14 12:01
(44) Тсрпё, НЕТ! Я привел пример. Надо именно что объединять по всем колонкам кроме последней.
Например таблицу Иваново 30, Иваново 20, Саранск 5
сравнить с Иваново 40, Иваново 10, Саранск 5.
Если все просуммируешь - будешь думать что все прекрасно. Все вывелось в ноль. А это не так.
Правильный ответ будет

Иваново 30 1 (строка есть в первой таблице но нет во второй)
Иваново 20 1
Иваново 40 -1(строка есть во второй таблице но нет в первой)
Иваново 10 -1
Саранск 5 0 (эта строка повторяется в обеих таблицах.)