• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Объединение выборок

  • Автор темы shchof
  • Дата начала
Статус
Закрыто для дальнейших ответов.
S

shchof

Нужно создать отчет - Книга учета товаров. (Если учесть, что в 1С я - "нулевой", то задачка сложная).
Содержащий в строке:
Поставщик товара, документ, его номер и дата
Наименование, вид (сорт, артикул) товара
Остаток нереализованного товара
поступило (изготовлено)
оплачено
отгружено
реализовано
остаток нереализо-ванного товара

Поступило берем из проводки Д. 41.1 -- К. 60.1
Оплачено берем из проводки Д. 60.1 -- К. 51
Отгружено и Реализовано - из проводки Д. 90.2 -- К. 41.2

Решил сделать выборки (для "рыбы" использовал конструктор):
для прихода
Ит41 = СоздатьОбъект("БухгалтерскиеИтоги");
Ит41.ИспользоватьСубконто(ВидыСубконто.Номенклатура,, 1);
Ит41.ИспользоватьКорСубконто(ВидыСубконто.Договоры,, 1);
Ит41.ВыполнитьЗапрос(ВыбНачПериода, ВыбКонПериода, "41.1", "60.1",, 3,, "СК");
Таб.ВывестиСекцию("Заголовок");
Сформировать_Колонки(Ит41, Таб, "Шапка");
Таб.Опции(0,0,Таб.ВысотаТаблицы(),0);
Ит41.ВыбратьКорСубконто(ВидыСубконто.Договоры);
Пока Ит41.ПолучитьКорСубконто(ВидыСубконто.Договоры) = 1 Цикл
Сформировать_Колонки(Ит41, Таб, "КорСубконто1");
Ит41.ВыбратьСубконто(ВидыСубконто.Номенклатура);
Пока Ит41.ПолучитьСубконто(ВидыСубконто.Номенклатура) = 1 Цикл
Сформировать_Колонки(Ит41, Таб, "Субконто1");
КонецЦикла;
КонецЦикла;

для оплачено
Ит60 = СоздатьОбъект("БухгалтерскиеИтоги");
Ит60.ИспользоватьСубконто(ВидыСубконто.Договоры,, 1);
Ит60.ВыполнитьЗапрос(ВыбНачПериода, ВыбКонПериода, "60.1", "51",, 3,, "СК");
Таб.ВывестиСекцию("Заголовок");
Сформировать_Колонки(Ит60, Таб, "Шапка");
Таб.Опции(0,0,Таб.ВысотаТаблицы(),0);
Ит60.ВыбратьСубконто(ВидыСубконто.Договоры);
Пока Ит60.ПолучитьСубконто(ВидыСубконто.Договоры) = 1 Цикл
Сформировать_Колонки(Ит60, Таб, "Субконто1");
КонецЦикла;
Аналогично для отгружено.

Вопрос: как это объединить правильно? Как еще вытащить контагента?

Помогите. Буду рад любому дельному совету.
 
S

shchof

Да-ааа.
Такое чувство, что на этом форуме собираются не специалисты-программисты, а бухгалтера или кто-то другой.
Это женские коллективы славятся тем, что на поставленый вопрос они сделают вид, что его не слышали. И будут заниматься дальше своим делом (красить ногти, смотреться в зеркало и т.п.).

Но чтобы программисты отказали в помощи "зеленому" коллеге ? Упс...

Ну да ладно.
Ведь мы идем к "КАПИТАЛИЗМУ", и за все надо платить.
Это раньше, в годы развитого социализма, человек человеку был другом и братом.
Еще хорошо, что не получил следующий совет: "Пригласи, мол, специалиста, заплати ему, и он тебе все сделает (в зависимости от суммы)".

На другом форуме по данному вопросу получил совет заливать все в таблицы.
Но я еще не разобрался с логикой заливки данных с разных выборок в одну строку таблицы.
 
Z

Zab

<!--QuoteBegin-shchof+21:12:2007, 11:24 -->
<span class="vbquote">(shchof @ 21:12:2007, 11:24 )</span><!--QuoteEBegin-->Вопрос: как это объединить правильно?
[snapback]90850" rel="nofollow" target="_blank[/snapback]​
[/quote]
Это вопрос по постановке задачи или по технической реализации? Если второе, то я вижу 2 пути:
1. открыть выборку выводимых объектов, и, проверяя, есть ли по ним данные в твоих запросах, формировать строки.
2. заполнить одну большую ТЗ со структурой твоего отчета данными трех выборок, свернуть ее (смотри методы ТЗ), и вывести.

<!--QuoteBegin-shchof+21:12:2007, 11:24 -->
<span class="vbquote">(shchof @ 21:12:2007, 11:24 )</span><!--QuoteEBegin-->Как еще вытащить контагента?
[snapback]90850" rel="nofollow" target="_blank[/snapback]​
[/quote]
Например так:
Ит41.ИспользоватьКорСубконто(ВидыСубконто.Контрагенты,, 1);
 
Z

Zab

<!--QuoteBegin-shchof+22:12:2007, 09:50 -->
<span class="vbquote">(shchof @ 22:12:2007, 09:50 )</span><!--QuoteEBegin-->На другом форуме по данному вопросу получил совет заливать все в таблицы.
Но я еще не разобрался с логикой заливки данных с разных выборок в одну строку таблицы.
[snapback]90970" rel="nofollow" target="_blank[/snapback]​
[/quote]
Все просто, создаешь таблицу, в которой в столбцах есть все нужные данные, в не зависимости от их присутствия в таблице. Потом перебираешь свои запросы, и добавляешь в таблицу только те данные, которые есть в запросе. Остальные заполняешь нулями.
После свертки ТЗ.Свернуть("Контра, Товар, Док", "ОстатокН, Поступило, Оплачено, Отгружено, Реализовано, ОстатокК");
Получишь табличку в которой по совпадающим трем полям просуммированы все числовые.
 
S

shchof

Все просто, создаешь таблицу, в которой в столбцах есть все нужные данные, в не зависимости от их присутствия в таблице. Потом перебираешь свои запросы, и добавляешь в таблицу только те данные, которые есть в запросе. Остальные заполняешь нулями.
После свертки ТЗ.Свернуть("Контра, Товар, Док", "ОстатокН, Поступило, Оплачено, Отгружено, Реализовано, ОстатокК");
Получишь табличку в которой по совпадающим трем полям просуммированы все числовые.

Спасибо тебе, добрый человек.
Есть еще Люди в наших селениях.
Из всего сказаного, понял пока 30%, но впереди 3 выходных дня.
Думаю смогу разобраться.

Народ, если у кого-то будет еще свободное время, можете тоже Ваши идеи высказать.
Чем больше будет информации, тем легче (быстее) будет сделать этот отчет.
 
S

shchof

В процессе работы возникло пару вопросов:
1. Не знаю как из моей выборки вытащить: ДатаДоговора, Номер платежки и др.
Они в проводках присутствуют, а как их вытащить не знаю.

2. Данные с выборок загоняю в таблицу
Код:
	ТЗ.НоваяКолонка("Контрагент");
ТЗ.НоваяКолонка("Договоры");
ТЗ.НоваяКолонка("ДатаДоговора"); 

ТЗ.НоваяКолонка("Товар");

ТЗ.НоваяКолонка("НачОстатокС");
ТЗ.НоваяКолонка("НачОстатокК");
ТЗ.НоваяКолонка("ЦенаП");
ТЗ.НоваяКолонка("КоличествоП");
ТЗ.НоваяКолонка("СуммаП");

ТЗ.НоваяКолонка("Платежка");
ТЗ.НоваяКолонка("ДатаПл");
ТЗ.НоваяКолонка("СуммаПл");
Несколько строк в таблице идет с одним и тем же ДОГОВОРОМ, но разным товаром.
Мне нужно "объединить", только первую строку с данным договором со строкой, где фигурирует данный договор и есть Сумма платежки (СуммаПл).
Как это делать?

3. Еще маленький, но сложный вопрос.
У меня в карточке товара есть ФЛАГ - "облагается/не облагается" данный товар подоходным налогом.
Как при осуществлении выборки, использовать только товар который "облагается" налогом?

Код у меня такой:
Код:
	Ит41 = СоздатьОбъект("БухгалтерскиеИтоги");
Ит41.ИспользоватьСубконто(ВидыСубконто.Номенклатура,, 1);
Ит41.ИспользоватьКорСубконто(ВидыСубконто.Договоры,, 1);
Ит41.ИспользоватьКорСубконто(ВидыСубконто.Контрагенты,, 1);
Ит41.ВыполнитьЗапрос(ВыбНачПериода, ВыбКонПериода, "41.1", "60.1",, 3,, "СК");
Ит41.ВыбратьКорСубконто(ВидыСубконто.Договоры);
Пока Ит41.ПолучитьКорСубконто(ВидыСубконто.Договоры) = 1 Цикл		
Ит41.ВыбратьСубконто(ВидыСубконто.Номенклатура);
Пока Ит41.ПолучитьСубконто(ВидыСубконто.Номенклатура) = 1 Цикл
ии=ТЗ.КоличествоСтрок()+1;
ТЗ.НоваяСтрока(ии);
ТЗ.УстановитьЗначение(ии,"Товар",Ит41.Субконто(1));
ТЗ.УстановитьЗначение(ии,"Договоры",Ит41.КорСубконто(1));
ТЗ.УстановитьЗначение(ии,"ДатаДоговора",Ит41.Операция.ДатаОперации);
ТЗ.УстановитьЗначение(ии,"Контрагент",Ит41.КорСубконто(ВидыСубконто.Контрагенты));
ТЗ.УстановитьЗначение(ии,"СуммаП",Ит41.КорДО());
ТЗ.УстановитьЗначение(ии,"КоличествоП",Ит41.КорДО(3));
ТЗ.УстановитьЗначение(ии,"ЦенаП",Ит41.КорДО()/Ит41.КорДО(3));

ТЗ.УстановитьЗначение(ии,"Платежка",0);
ТЗ.УстановитьЗначение(ии,"СуммаПл",0);

ТЗ.УстановитьЗначение(ии,"КоличествоР",0);
ТЗ.УстановитьЗначение(ии,"СуммаР",0);
ТЗ.УстановитьЗначение(ии,"СуммаЗатр",0);
КонецЦикла;
КонецЦикла;
 
Z

Zab

<!--QuoteBegin-shchof+26:12:2007, 10:36 -->
<span class="vbquote">(shchof @ 26:12:2007, 10:36 )</span><!--QuoteEBegin-->Не знаю как из моей выборки вытащить: ДатаДоговора, Номер платежки и др.
Они в проводках присутствуют, а как их вытащить не знаю.
[snapback]91383" rel="nofollow" target="_blank[/snapback]​
[/quote]
Код:
ДатаДоговора = Ит41.КорСубконто(1).ДатаДоговора;
с платежкой сложнее, т.к. она реквизит табличной части документа "выписка", если еще указана. А в проводке по 51 счету, ее по идее нет...(вопреки твоим заявлениям) Придется или менять проведение, или раскручивать ИТ60.Операция.Документ на предмет поиска в его табличной части соответствующих значений...
<!--QuoteBegin-shchof+26:12:2007, 10:36 -->
<span class="vbquote">(shchof @ 26:12:2007, 10:36 )</span><!--QuoteEBegin-->Несколько строк в таблице идет с одним и тем же ДОГОВОРОМ, но разным товаром.
Мне нужно "объединить", только первую строку с данным договором со строкой, где фигурирует данный договор и есть Сумма платежки (СуммаПл).
[snapback]91383" rel="nofollow" target="_blank[/snapback]​
[/quote]
ИМХО, колонка "Товар" в данном контексте не имеет смысла. Или опиши, что в ней должно быть.
<!--QuoteBegin-shchof+26:12:2007, 10:36 -->
<span class="vbquote">(shchof @ 26:12:2007, 10:36 )</span><!--QuoteEBegin-->У меня в карточке товара есть ФЛАГ - "облагается/не облагается" данный товар подоходным налогом.
Как при осуществлении выборки, использовать только товар который "облагается" налогом?

[snapback]91383" rel="nofollow" target="_blank[/snapback]​
[/quote]
Код:
		Ит41.ВыбратьСубконто(ВидыСубконто.Номенклатура);
Пока Ит41.ПолучитьСубконто(ВидыСубконто.Номенклатура) = 1 Цикл
Если Ит41.Субконто(1).ФЛАГ = 0 Тогда // не облагается
Продолжить; // берем след. товар
КонецЕсли;
ии=ТЗ.КоличествоСтрок()+1;
ТЗ.НоваяСтрока(ии);
так?
 
S

shchof

1. Дату во всех выборках повытаскивал, правда через "...". В выборке я сделал группировку по периоду - "день", Этот день и есть моя дата.

с платежкой сложнее, т.к. она реквизит табличной части документа "выписка", если еще указана. А в проводке по 51 счету, ее по идее нет...(вопреки твоим заявлениям) Придется или менять проведение, или раскручивать ИТ60.Операция.Документ на предмет поиска в его табличной части соответствующих значений...

А как это менять проведение, или раскручивать ИТ60?

2. Со слиянием таблиц разобрался. Две ночи не спал. Но, УРА... На выходе то, что ожидал.

3.
Код:
		Ит41.ВыбратьСубконто(ВидыСубконто.Номенклатура);
Пока Ит41.ПолучитьСубконто(ВидыСубконто.Номенклатура) = 1 Цикл
Если Ит41.Субконто(1).ФЛАГ = 0 Тогда // не облагается
Продолжить; // берем след. товар
КонецЕсли;
ии=ТЗ.КоличествоСтрок()+1;
ТЗ.НоваяСтрока(ии);
так?

Попытаюсь. Может и получится.
Спасибо.
 
Z

Zab

<!--QuoteBegin-shchof+27:12:2007, 15:28 -->
<span class="vbquote">(shchof @ 27:12:2007, 15:28 )</span><!--QuoteEBegin-->А как это менять проведение, или раскручивать ИТ60?
[snapback]91617" rel="nofollow" target="_blank[/snapback]​
[/quote]
Обычно, в бухгалтерии, проводки по движению денег делает документ "выписка", в котором указывается п/п, для удобства работы. Причем, это не обязательное поле. Например, можно руками указать номери дату документа, либо не указывать ничего. В проводке 60 - 51 есть субконто 60-Контрагенты и договоры, 51 - расчётный счет и движения денежных средств. Ни в одном из них данных о платёжке нет. В проводке есть реквизит "Первичный документ" (справедливо для мисофта) но, это текстовое поле... В общем вывод: в проводке данных о платёжке - только номер и дата, и то, если пользователь ее указал, и если указал платёжку, а не что-нить другое.
Следовательно, надо учитывать то, что в отчете может быть бред: не указана платёжка в выписке, а указан какой-то другой документ, либо вообще операция введена не выпиской, а ручной операцией.
Кстати, не исключаю, что в твоей конфигурации, платёжка на самом деле явно присутствует в проводке. Но, тогда, думаю, небыло бы твоего вопроса.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!