7.7 Приколы из Таблицой Значений

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

  1. TopicStarter Overlay
    fantas
    Offline

    fantas Опытный в 1С

    Регистрация:
    12 июл 2006
    Сообщения:
    104
    Симпатии:
    0
    Баллы:
    26
    Табл=СоздатьОбъект("ТаблицаЗначений");
    Табл.НоваяКолонка("Документ");
    Табл.НоваяКолонка("Валюта");
    Табл.НоваяКолонка("СальдоПоч");
    Табл.НоваяКолонка("СальдоКін");
    Табл.НоваяКолонка("Збільш");
    Табл.НоваяКолонка("Зменш");
    Табл.НоваяКолонка("ЗбільшВал");
    Табл.НоваяКолонка("ЗменшВал");
    Табл.НоваяКолонка("СальдоКінВал");

    Ит = СоздатьОбъект("БухгалтерскиеИтоги");
    Ит.ИспользоватьПланСчетов(ВыбранныйПланСчетов());
    Ит.ИспользоватьСубконто(ВидыСубконто.Контрагенты, ВыбКонтрагент, 1);

    Если ВидВзаим = 1 Тогда
    Если Константа.ВыделятьАвансы = Перечисление.ДаНет.Да Тогда
    СтрРах= "681,371,36,377,63";
    Иначе
    СтрРах = "36,377,63";
    КонецЕсли;
    ИначеЕсли ВидВзаим = 2 Тогда
    Если Константа.ВыделятьАвансы = Перечисление.ДаНет.Да Тогда
    СтрРах= "681,63";
    Иначе
    СтрРах = "63";
    КонецЕсли;
    ИначеЕсли ВидВзаим = 3 Тогда
    СтрРах= "371,36,377";
    КонецЕсли;

    Ит.ВключатьСубсчета(1);
    Если Ит.ВыполнитьЗапрос(Дата1,Дата2,СтрРах, , ,3,"Проводка","СВ")=1 Тогда
    Ит.ВыбратьСчета();
    Пока Ит.ПолучитьСчет() = 1 Цикл
    Ит.ВыбратьПериоды();
    Пока Ит.ПолучитьПериод() = 1 Цикл
    Рах = Ит.Счет;
    Табл.НоваяСтрока();
    Табл.Документ = Ит.Операция.Документ;
    Если Рах.Валютный = 1 Тогда
    Ит.ВыбратьВалюты();
    Пока Ит.ПолучитьВалюту() = 1 Цикл
    Табл.ЗбільшВал = Ит.ДО(2);
    Табл.ЗменшВал = Ит.КО(2);
    Табл.СальдоКінВал = Ит.СКД(2) - Ит.СКК(2);
    Табл.Валюта = Ит.Валюта;
    КонецЦикла;
    Иначе
    Табл.СальдоПоч = Ит.СНД() - Ит.СНК();
    Табл.Збільш = Ит.ДО();
    Табл.Зменш = Ит.КО();
    Табл.СальдоКін = Ит.СКД() - Ит.СКК();
    КонецЕсли;
    сообщить(Рах);
    Табл.ВыбратьСтроку();
    КонецЦикла;
    КонецЦикла;
    КонецЕсли;


    в выборке есть счета 3771,681,6812.
    Сначала заполнилась эта таблица по счету 3771. Колонка "Документ" заполнилась значением "Операция 1..." (другие колонки заполнились итогами по счету 3771). В колонке "Документ" прописано значение "Операция 1..." 10 раз, так и должно быть.
    Тепер когда счет=681, вдруг в колонке "Документ" все значения из "Операция 1..." поменялись на "Операция 2... ", хотя в других колонках значения не изменились + добавились итоги по счету 681 и его субсчету 6812 ("6812" - фигурирует в Операции 2 - 1 проводка с ним, 3771 в операции 1 - 10 проводок с ним).
    Какая причина ??
    Если разбить все группы счетов на их субсчета:


    Если ВидВзаим = 1 Тогда
    Если Константа.ВыделятьАвансы = Перечисление.ДаНет.Да Тогда
    СтрРах= "6811,6812,3711,3712,361,362,363,3771,3772,3773,3774,3775, 631,632,633";
    Иначе
    СтрРах = "361,362,363,3771,3772,3773,3774,3775, 631,632,633";
    КонецЕсли;
    ИначеЕсли ВидВзаим = 2 Тогда
    Если Константа.ВыделятьАвансы = Перечисление.ДаНет.Да Тогда
    СтрРах= "6811,6812,631,632,633";
    Иначе
    СтрРах = "631,632,633";
    КонецЕсли;
    ИначеЕсли ВидВзаим = 3 Тогда
    СтрРах= "3711,3712,361,362,363,3771,3772,3773,3774,3775";
    КонецЕсли;



    без метода Ит.ВключатьСубсчета(1) проблема остается в силе!!!
  2. Snake-84
    Offline

    Snake-84 Опытный в 1С

    Регистрация:
    28 янв 2007
    Сообщения:
    110
    Симпатии:
    0
    Баллы:
    26
    Может не совсем понимаю проблему, но из исходника:
    1. Попробуй "Ит.ВключатьСубсчета(-1)";
    2. Если по итогам проходит несколько валют, то в ТЗ у тебя попадет только последняя в выборке;
    3. При чем здесь "Табл.ВыбратьСтроку()" или по крайней мере - в этом месте кода;
  3. TopicStarter Overlay
    fantas
    Offline

    fantas Опытный в 1С

    Регистрация:
    12 июл 2006
    Сообщения:
    104
    Симпатии:
    0
    Баллы:
    26
    Пробовал:
    Код:
    Табл=СоздатьОбъект("ТаблицаЗначений");
    Табл.НоваяКолонка("Документ");
    Табл.НоваяКолонка("Валюта");
    Табл.НоваяКолонка("СальдоПоч");
    Табл.НоваяКолонка("СальдоКін");
    Табл.НоваяКолонка("Збільш");
    Табл.НоваяКолонка("Зменш");
    Табл.НоваяКолонка("ЗбільшВал");
    Табл.НоваяКолонка("ЗменшВал");
    Табл.НоваяКолонка("СальдоКінВал");
    
    Ит = СоздатьОбъект("БухгалтерскиеИтоги");
    Ит.ИспользоватьПланСчетов(ВыбранныйПланСчетов());
    Ит.ИспользоватьСубконто(ВидыСубконто.Контрагенты, ВыбКонтрагент, 1);
    
    
    
    Если ВидВзаим = 1 Тогда
    Если Константа.ВыделятьАвансы = Перечисление.ДаНет.Да Тогда
    СтрРах= "681,371,36,377,63";
    Иначе
    СтрРах = "36,377,63";
    КонецЕсли;
    ИначеЕсли ВидВзаим = 2 Тогда
    Если Константа.ВыделятьАвансы = Перечисление.ДаНет.Да Тогда
    СтрРах= "681,63";
    Иначе
    СтрРах = "63";
    КонецЕсли;
    ИначеЕсли ВидВзаим = 3 Тогда
    СтрРах= "371,36,377";
    КонецЕсли;
    
    Ит.ВключатьСубсчета(-1);
    Если Ит.ВыполнитьЗапрос(Дата1,Дата2,СтрРах, , ,3,"Проводка","СВ")=1 Тогда
    Ит.ВыбратьСчета();
    Пока Ит.ПолучитьСчет() = 1 Цикл
    Ит.ВыбратьПериоды();
    Пока Ит.ПолучитьПериод() = 1 Цикл
    Рах = Ит.Счет;
    Если Рах.Валютный = 1 Тогда
    Ит.ВыбратьВалюты();
    Пока Ит.ПолучитьВалюту() = 1 Цикл
    Табл.НоваяСтрока();
    Табл.Документ = Ит.Операция.Документ;
    Табл.ЗбільшВал = Ит.ДО(2);
    Табл.ЗменшВал = Ит.КО(2);
    Табл.СальдоКінВал = Ит.СКД(2) - Ит.СКК(2);
    //
    Табл.СальдоПоч = 0;
    Табл.Збільш = 0;
    Табл.Зменш = 0;
    Табл.СальдоКін = 0;
    Табл.Валюта = Ит.Валюта;
    КонецЦикла;
    Иначе
    Табл.НоваяСтрока();
    Табл.Документ = Ит.Операция.Документ;
    Табл.СальдоПоч = Ит.СНД() - Ит.СНК();
    Табл.Збільш = Ит.ДО();
    Табл.Зменш = Ит.КО();
    Табл.СальдоКін = Ит.СКД() - Ит.СКК();
    //
    Табл.ЗбільшВал = 0;
    Табл.ЗменшВал = 0;
    Табл.СальдоКінВал = 0;
    Табл.Валюта = Гривня;
    КонецЕсли;				
    КонецЦикла;
    КонецЦикла;
    КонецЕсли; 
    Табл.ВыбратьСтроку();
    
    *****************************
    В колонках, где выводятся итоги по счетам, ничего не меняется, только во всех строках колонки "Документ" записывается значение последней операции.
  4. Snake-84
    Offline

    Snake-84 Опытный в 1С

    Регистрация:
    28 янв 2007
    Сообщения:
    110
    Симпатии:
    0
    Баллы:
    26
    Табл.Документ = Ит.Операция.Документ.ТекущийДокумент(); :)))))))))))))
    у тебя же только ссылка на БИ в ТЗ пишется ...
  5. TopicStarter Overlay
    fantas
    Offline

    fantas Опытный в 1С

    Регистрация:
    12 июл 2006
    Сообщения:
    104
    Симпатии:
    0
    Баллы:
    26
    Т.е. Тип "Ит.Операция.Документ" это строка?
  6. Snake-84
    Offline

    Snake-84 Опытный в 1С

    Регистрация:
    28 янв 2007
    Сообщения:
    110
    Симпатии:
    0
    Баллы:
    26
    нет, просто системная ссылка на объект в оперативной памяти, соответственно при изменении периода БИ данные в таблице тоже позиционируются на новый объект, а ".ТекущийДокумент()" получает уже ссылку на сам документ.
  7. TopicStarter Overlay
    fantas
    Offline

    fantas Опытный в 1С

    Регистрация:
    12 июл 2006
    Сообщения:
    104
    Симпатии:
    0
    Баллы:
    26
    Понятно, может и тепер вместо Ит.Валюта писать Ит.Валюта.ТекущийЭлемент()?

    А если эту ТЗ свернуть по колонкам "Документ" и "Валюта" и суммировать по итогам счетов, то ссылки на объекты теряются и эти объекты превращаются в строки?
  8. Snake-84
    Offline

    Snake-84 Опытный в 1С

    Регистрация:
    28 янв 2007
    Сообщения:
    110
    Симпатии:
    0
    Баллы:
    26
    С "Ит.Валюта.ТекущийЭлемент()" можешь поэкспериментировать...
    А что касается свертки ТЗ - то не циклись ты на этих строках!!! :))) нормально свернуть должно
  9. TopicStarter Overlay
    fantas
    Offline

    fantas Опытный в 1С

    Регистрация:
    12 июл 2006
    Сообщения:
    104
    Симпатии:
    0
    Баллы:
    26
    А потом после свертывания ТЗ, значения в колонке "Документ" будут объектами, чтоб потом вывести в печ. форму ТЗ.Документ.НомерДок и ТЗ.Документ.ДатаДок или ТЗ.Документ.ДатаОперации?
  10. TopicStarter Overlay
    fantas
    Offline

    fantas Опытный в 1С

    Регистрация:
    12 июл 2006
    Сообщения:
    104
    Симпатии:
    0
    Баллы:
    26
    Если валютный учет ведется только в Долларах США, то в выборке валют будет только эта валюта - тут не будет иметь значения Ит.Валюта или Ит.Валюта.ТекущийЭлемент(), а если еще есть и Евро..., то тут уже будет.
  11. TopicStarter Overlay
    fantas
    Offline

    fantas Опытный в 1С

    Регистрация:
    12 июл 2006
    Сообщения:
    104
    Симпатии:
    0
    Баллы:
    26
    Да действительно, после свертывания ТЗ, значения в колонке "Документ" остаются объектами.
  12. TopicStarter Overlay
    fantas
    Offline

    fantas Опытный в 1С

    Регистрация:
    12 июл 2006
    Сообщения:
    104
    Симпатии:
    0
    Баллы:
    26
    Спасибо всем. Тему можно закрыть.

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