7.7 Одна и та же форма в разных базах работает по разному.

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем Yukimir, 18 фев 2010.

  1. TopicStarter Overlay
    Yukimir
    Offline

    Yukimir

    Регистрация:
    18 фев 2010
    Сообщения:
    14
    Симпатии:
    0
    Баллы:
    1
    У нас несколько ИП и каждый из них работает в своей базе. Во всех базах стоят одинаковые конфигурации. Писал небольшую обработку в одной базе, выбрал самую маленькую базу для того чтобы побыстрей выполнялся запрос. Вчера приспичило меня посмотреть как это будет смотреться на большем количестве данных. Обработка была внешней, и я без задней мысли открываю ее в другой базе и в ответ мне вываливается ошибка.

    Проблема в следующем:
    Одна внешняя обработка вызывает другую внешнюю обработку:
    Код:
    ОткрытьФормуМодально("Отчет",Контекст,"D:ОстаткиПоРазмерам.ert");
    
    
    В открываемой обработке в процедуре
    Код:
    ПриОткрытии()
    
    
    получаю Параметр:
    Код:
    Конт = Форма.Параметр;
    
    
    В одной базе я получаю Контекст формы со всеми общими переменными, в другой базе я получаю только Контекст формы но без переменных.

    Вопрос в следующем: Почему я запускаю одну платформу на одном компьютере, из разных баз с одинаковой конфигурацией имею разный состав доступных переменных?
  2. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    Боюсь, разбираться надо на конкретном примере. Видимо что-то просто не учли.
  3. TopicStarter Overlay
    Yukimir
    Offline

    Yukimir

    Регистрация:
    18 фев 2010
    Сообщения:
    14
    Симпатии:
    0
    Баллы:
    1
    1 компьютер, 1 виндоус, 1 платформа, и 2 файла с внешними обработками, одна обработка открывает другую обработку. В обоих конфигурация проверил dll, полностью проверил ExtForms. Что еще посмотреть пока уму не приложу. Как одна и та же команда выполняемая в одном и том же месте но в разных базах может выполняться по разному?
  4. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    попробуй из второй обработки вывести что-нибудь
    Код:
    сообщить("Это вторая обработка");
    
    
    м.б. вы все-таки вызываете не то что хотели?
  5. TopicStarter Overlay
    Yukimir
    Offline

    Yukimir

    Регистрация:
    18 фев 2010
    Сообщения:
    14
    Симпатии:
    0
    Баллы:
    1
    Обработка вызывается, вызывается именно та которая нужна, это подтверждает отладчик:

    Вложения:

  6. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Попробуй передать контекст через функцию как в ТиС
    Код:
    Функция глВзятьКонтекст(Конт)
    Возврат Конт;
    КонецФункции
    
    
    
  7. TopicStarter Overlay
    Yukimir
    Offline

    Yukimir

    Регистрация:
    18 фев 2010
    Сообщения:
    14
    Симпатии:
    0
    Баллы:
    1
    В первую обработку добавил
    Код:
    Конт = глВзятьКонтекст(Контекст);
    
    В глобальном модуле
    Код:
    Функция глВзятьКонтекст(Конт) Экспорт
    Возврат Конт;
    КонецФункции // глВзятьКонтекст()
    
    Переменная Конт получает те же самые значения что и внешняя обработка. Получается неправильно работает команда "Контекст".

    Что можно покапать, где что почитать? Если бы на разных машинах, или на разных операционках я бы еще сделал предположение что каких то библиотек не хватает, или какие настройки разные. А то все одинаковое, отличается только набором данных которые хранятся в базах, остальное все одинаковое. Уже все настройки в параметрах сверил.
  8. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Так вот в обработку 2 вы вместо контекста должны передовать Конт. Попробуйте. Трудно судить не видя кода. Контекст чего вы передаете - документа/справочника? Это новый элемент или нет?
  9. TopicStarter Overlay
    Yukimir
    Offline

    Yukimir

    Регистрация:
    18 фев 2010
    Сообщения:
    14
    Симпатии:
    0
    Баллы:
    1

    Внешняя обработка по кнопке "Сформировать" вызывает процедуру "Сформировать()". В теле обработки следующий код:
    Код:
    Перем ТаблДанных Экспорт;
    Перем ОбъектПривязка;
    Перем ТП, СписокЦветовСклада;
    Перем ТабЗначенийКолонок;
    
    Процедура Сформировать()
    Конт = глВзятьКонтекст(Контекст);
    ОткрытьФормуМодально("Отчет",Конт,"D:\1C\Тест\Временные обработки\Подсортировка\ОстаткиПоРазмерам.ert");
    КонецПроцедуры
    
    
    В обработке "ОстаткиПоРазмерам.ert":
    Код:
    Процедура ПриОткрытии()      
    
    Конт = Форма.Параметр;
    Если ПустоеЗначение(Конт) = 1 Тогда
    Форма.Закрыть();
    КонецЕсли;
    ...
    КонецПроцедуры
    
    Процедура Сформировать()
    ...
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    Возврат;
    КонецЕсли;
    
    Табл = СоздатьОбъект("ТаблицаЗначений");
    Табл.НоваяКолонка("Номенклатура");
    л = 2;
    Запрос.Группировка(1);
    Пока Запрос.Номенклатура.ЭтоГруппа() = 1 Цикл
    Запрос.Группировка("Номенклатура");
    КонецЦикла;
    Пока Запрос.Группировка("Склад") = 1 Цикл
    Табл.НоваяКолонка("Кол" + л);
    л = л + 1;
    Пока Запрос.Группировка("Размер") = 1 Цикл
    Табл.НоваяКолонка("Кол" + л);
    л = л + 1;
    КонецЦикла;
    КонецЦикла;
    
    Запрос.ВНачалоВыборки();
    Пока Запрос.Группировка("Номенклатура") = 1 Цикл
    Табл.НоваяСтрока();
    Табл.Номенклатура = Запрос.Номенклатура;
    НомерСтр = Табл.НомерСтроки;
    л = 2;
    Пока Запрос.Группировка("Склад") = 1 Цикл
    Табл.УстановитьЗначение(НомерСтр,"Кол" + л, Запрос.КоличествоКонОст);
    л = л + 1;
    Пока Запрос.Группировка("Размер") = 1 Цикл
    Табл.УстановитьЗначение(НомерСтр,"Кол" + л, Запрос.КоличествоКонОст);
    л = л + 1;
    КонецЦикла;
    КонецЦикла;
    КонецЦикла;
    Табл.Выгрузить(Конт.ТаблДанных);
    Форма.Закрыть();
    КонецПроцедуры
    
    ТаблДанных самая большая таблица, так как количество колонок у нее может превосходить 100, а количество строк иногда доходит до 1000, это при условии что пользователь сильно ограничит данные попадающие в запрос. Параллельно идет заполнение еще 2-х вспомогательных таблиц, но они значительно меньше.

    Я знаю как можно обойти эту проблему. Загнать все таблици в список значений и передать это список в качестве параметра при открытии формы, а после обработки вернуть все обратно. Точней мне это надо сделать всего в одну сторону, от второй обработке к первой, но как то не хочется заниматься копированием таблиц которые содержат такой количество данных.

    Для меня сейчас проблема не в том что я не могу сделать обработку, а в том что одна и та же программа хочет работает, а хочет не работает. А что будет когда я поставлю это все на Win2003 и раздам пользователям?
  10. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Ка понял из приведенного примера вы во второй обработке пытаететь заполнить некею ТаблицуЗначений находящуюся на форме первой.

    1) Попробуйте открывать вторую обработку модально
    2) Попробуйте все-же передавать в качестве параметра не сам контекст, а СписокЗначений
    Код:
    СписПарам=СоздатьОбъект("СписокЗначений");
    СписПарам(Контекст, "Конт");
    ОткрытьФорму("Отчет",СписПарам,"D:\1C\Тест\Временные обработки\Подсортировка\ОстаткиПоРазмерам.ert");
    
    
  11. TopicStarter Overlay
    Yukimir
    Offline

    Yukimir

    Регистрация:
    18 фев 2010
    Сообщения:
    14
    Симпатии:
    0
    Баллы:
    1
    Постом выше:
    1)
    Код:
    ОткрытьФормуМодально("Отчет",Конт,"D:\1C\Тест\Временные обработки\Подсортировка\ОстаткиПоРазмерам.ert");
    
    2)
    Меня больше интересует не как обойти эту проблему, а в чем собственно проблема?
  12. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Проблема в передаче/получении параметра формы.
  13. TopicStarter Overlay
    Yukimir
    Offline

    Yukimir

    Регистрация:
    18 фев 2010
    Сообщения:
    14
    Симпатии:
    0
    Баллы:
    1
    Проблема скорей всего в получении Контекста, в качестве параметра передается/получается все верно.

Поделиться этой страницей